diff --git a/.claude/rules/common-utilities.md b/.claude/rules/common-utilities.md new file mode 100644 index 0000000000..3fb81f0744 --- /dev/null +++ b/.claude/rules/common-utilities.md @@ -0,0 +1,48 @@ +# Common Utilities — Use These, Don't Reinvent Them + +All utilities are in `libs/web-components/src/common/`. Always check here before writing your own. + +## utils.ts + +| Function | Purpose | +|----------|---------| +| `typeValidator(msg, values, opts)` | Creates runtime validator + TypeScript type from same array | +| `toBoolean(value)` | String to boolean (`"false"` -> false, `""` -> true) | +| `fromBoolean(value)` | Boolean to string (`true` -> `"true"`) | +| `dispatch(el, name, detail, opts)` | External consumer events (underscore-prefixed names) | +| `relay(el, name, data, opts)` | Internal parent-child messaging (form components) | +| `receive(el, handler)` | Listen for internal relay messages | +| `getSlottedChildren(rootEl)` | Get elements assigned to a slot | +| `announceToScreenReader(text)` | Temporary aria-live announcement | +| `performOnce(timeoutId, action, delay)` | Debounce | +| `validateRequired(name, props)` | Check required props have values | +| `findFirstFocusableNode(nodes)` | Find first focusable element (supports shadow DOM) | +| `generateRandomId()` | 7-char random alphanumeric | +| `clamp(value, min, max)` | Numeric clamping | +| `watch(fn, deps)` | Explicit dependency tracking for `$:` blocks | +| `styles(...css)` | Conditional style string builder | + +## styling.ts + +| Function | Purpose | +|----------|---------| +| `calculateMargin(mt, mr, mb, ml)` | Converts Spacing values to inline margin styles | +| `Spacing` type | `"none" \| "3xs" \| "2xs" \| "xs" \| "s" \| "m" \| "l" \| "xl" \| "2xl" \| "3xl" \| "4xl" \| null` | + +## Other files + +| File | Purpose | +|------|---------| +| `context-store.ts` | Cross-shadow-DOM context API (replaces Svelte's native context) | +| `calendar-date.ts` | Timezone-safe date class for DatePicker/Calendar | +| `no-scroll.ts` | Body scroll lock action for Modal/Drawer | +| `breakpoints.ts` | `MOBILE_BP` (624px), `TABLET_BP` (1024px) | +| `validators.ts` | `isValidDimension()` for CSS dimension strings | +| `urls.ts` | URL matching for navigation active state | + +## relay() vs dispatch() — The Boundary Rule + +- `relay()` / `receive()`: Internal, between DS components only. Uses single `"msg"` event with action discriminator. For form parent-child coordination. +- `dispatch()`: External, for consumer applications. Named events with underscore prefix (`_click`, `_change`). + +If the message is between two DS components, use relay. If it's for the consuming app, use dispatch. diff --git a/.claude/rules/component-authoring.md b/.claude/rules/component-authoring.md new file mode 100644 index 0000000000..3d55753e25 --- /dev/null +++ b/.claude/rules/component-authoring.md @@ -0,0 +1,74 @@ +# Component Authoring Standards + +## Script Section Order + +Every Svelte component script follows this order: + +1. Imports +2. Validators (`typeValidator` declarations) +3. Type declarations +4. Exported props (ordered: required > content > state > visual > a11y > version > margins) +5. Private state (underscore prefix: `_rootEl`, `_isOpen`) +6. Reactive declarations (`$:`) +7. Lifecycle (`onMount`, `onDestroy`) +8. Event handlers / functions + +## Universal Props + +Every component must include: + +- `testid: string = ""` with `data-testid={testid}` on root element +- `mt, mr, mb, ml: Spacing = null` with `style={calculateMargin(mt, mr, mb, ml)}` +- `version: "1" | "2" = "1"` with `class:v2={version === "2"}` + +## Boolean Props + +Web component attributes are always strings. Boolean props: `export let disabled: string = "false"` with `$: isDisabled = toBoolean(disabled)`. + +Note: `toBoolean("")` returns `true` (HTML attribute semantics). + +## Enum Props + +Always use `typeValidator` for enum/union props. Use the object form `{ required: true }` over the boolean shorthand. + +```typescript +const [Types, validateType] = typeValidator("Button type", ["primary", "secondary"], { required: true }); +type ButtonType = (typeof Types)[number]; +export let type: ButtonType = "primary"; +onMount(() => { validateType(type); }); +``` + +## Events + +- External (for consumers): `dispatch(_rootEl, "_change", { name, value }, { bubbles: true })` +- Internal (between DS components): `relay()` / `receive()` -- never use `dispatch()` for parent-child coordination +- Event details must be objects (for future extensibility), not bare values +- Use separate events for separate operations + +## Lifecycle + +- Validate all typeValidators in `onMount` +- rootEl event listeners auto-clean on removal. Do NOT add removeEventListener for rootEl in onDestroy. +- document/window listeners DO need cleanup in onDestroy. + +## Slots + +Slot names are lowercase. Check existence before rendering with `$$slots`. Use **props** for simple text, **slots** for rich content, both when either should work: + +```svelte +{#if $$slots.heading} + +{:else if heading} + {heading} +{/if} +``` + +Use `getSlottedChildren()` from `common/utils.ts` to access child elements in slots. + +## Naming + +- Prop names: always lowercase (`leadingicon` not `leadingIcon`) +- Private state: underscore prefix (`_isOpen`) +- Functions: must have verbs (`handleClick`, `getMenuLinks`) +- Size values: use `"default"` not `"regular"` +- Locale: `en-CA` always diff --git a/.claude/rules/framework-wrappers.md b/.claude/rules/framework-wrappers.md new file mode 100644 index 0000000000..5a4e53f675 --- /dev/null +++ b/.claude/rules/framework-wrappers.md @@ -0,0 +1,98 @@ +# Framework Wrapper Standards + +## Cross-Framework Rule + +Every Svelte change requires corresponding React and Angular updates. Props must match across all three frameworks (required/optional, naming, types, data formats). This is the #1 source of review rounds. + +## React Wrapper Template + +Two interfaces: WCProps (private, lowercase, strings) and GoabXxxProps (exported, camelCase, real types). + +```typescript +interface WCProps extends Margins { + name: string; + disabled?: string; + testid?: string; +} + +export interface GoabXxxProps extends Margins, DataAttributes { + name: string; + disabled?: boolean; + onChange?: (detail: GoabXxxOnChangeDetail) => void; + testId?: string; + children?: ReactNode; +} + +export function GoabXxx({ disabled, onChange, children, ...rest }: GoabXxxProps): JSX.Element { + const el = useRef(null); + const _props = transformProps(rest, lowercase); + + useEffect(() => { + if (!el.current) return; + const current = el.current; + const listener = (e: Event) => { + const detail = (e as CustomEvent).detail; + onChange?.({ ...detail, event: e }); + }; + current.addEventListener("_change", listener); + return () => current.removeEventListener("_change", listener); + }, [el, onChange]); + + return ( + + {children} + + ); +} +``` + +Key: Boolean props pass `"true"` or `undefined`, never `"true"` or `"false"`. Event callbacks always spread detail and add `event: e`. Types from `@abgov/ui-components-common`. + +## Angular Wrapper Template + +Non-form components extend `GoabBaseComponent`. Form controls extend `GoabControlValueAccessor`. + +```typescript +@Component({ + standalone: true, + selector: "goab-xxx", + template: ` + @if (isReady) { + + + + } + `, + schemas: [CUSTOM_ELEMENTS_SCHEMA], +}) +export class GoabXxx extends GoabBaseComponent implements OnInit { + @Input() type?: GoabXxxType; + @Input({ transform: booleanAttribute }) disabled?: boolean; + @Output() onClick = new EventEmitter(); + + isReady = false; + constructor(private cdr: ChangeDetectorRef) { super(); } + + ngOnInit(): void { + setTimeout(() => { + this.isReady = true; + this.cdr.detectChanges(); + }, 0); + } + + _onClick(e: Event) { + this.onClick.emit({ + ...(e as CustomEvent).detail, + event: e, + }); + } +} +``` + +Key: `isReady` + `setTimeout(0)` is non-negotiable (every component). Use `[attr.xxx]` for web component attributes. Use `booleanAttribute` transform for boolean inputs. Form controls add `#goaComponentRef`, `NG_VALUE_ACCESSOR`, `markAsTouched()`. diff --git a/.claude/rules/styling.md b/.claude/rules/styling.md new file mode 100644 index 0000000000..1fdc8b2cd4 --- /dev/null +++ b/.claude/rules/styling.md @@ -0,0 +1,44 @@ +# Styling Standards + +## Design Tokens + +All styling uses CSS custom properties. No exceptions. No hardcoded colors, font sizes, border-radius, or spacing. + +Token naming: `--goa-[component]-[variant]-[state]-[property]` + +Use `rem` over `px` even when there is no token value (`20px` = `1.25rem`). + +## :host + +Every component starts with: + +```css +:host { + box-sizing: border-box; + font-family: var(--goa-font-family-sans); +} +``` + +## V2 Token Fallbacks (Mandatory) + +Every V2 CSS variable must fall back to V1. This is the most repeated review feedback on V2 PRs. + +```css +color: var(--goa-component-v2-token, var(--goa-v1-fallback)); +``` + +## Class Binding + +Variant classes use string interpolation. State classes use `class:` directive. + +```svelte +
+``` + +## Responsive + +Use PostCSS aliases: `@media (--mobile) { ... }`. Breakpoints: mobile = 624px, tablet = 1024px. + +## CSS Simplification + +Prefer `gap` over margins between items. Remove redundant CSS properties. No consumer CSS customization by design (no `::part()`, no exposed custom properties). diff --git a/.claude/rules/testing.md b/.claude/rules/testing.md new file mode 100644 index 0000000000..7608ab5fbf --- /dev/null +++ b/.claude/rules/testing.md @@ -0,0 +1,58 @@ +# Testing Standards + +## Testing Tiers + +| Tier | Framework | When to Use | +|------|-----------|-------------| +| WC Unit | Vitest + @testing-library/svelte | Prop rendering, basic state, margins | +| React Unit | Vitest + @testing-library/react | Wrapper prop transformation | +| React Browser | Vitest + Playwright (Chromium + Firefox) | Event behavior, interactions, shadow DOM | +| Angular | Jest + TestBed | Wrapper attribute binding, form integration | + +**Browser tests for events, unit tests for props.** + +## Enforced Patterns + +**Locators are always truthy. Don't assert on them.** +`getBy*` always returns an object. `expect(el).toBeTruthy()` is meaningless. Assert on actual state instead. + +**Declare locators outside `waitFor`.** +Putting locators inside `waitFor` defeats its purpose. + +```typescript +// Bad +await vi.waitFor(() => { + const el = result.getByTestId("button"); + expect(el).toHaveTextContent("Submit"); +}); + +// Good +const el = result.getByTestId("button"); +await vi.waitFor(() => { + expect(el).toHaveTextContent("Submit"); +}); +``` + +**No timeout hacks.** Browser tests already retry. Default `waitFor` timeout is 1000ms. + +**Use `click()`, not `dispatchEvent`** in browser tests. + +**Use `data-testid` for selectors**, but prefer `getByText` when it makes the test more accessible. + +**Tests must test what they claim.** If named "should show error state", assert on error state, not just element existence. + +**Use `it()` not `test()`.** + +## What to Test + +Every component: basic rendering, all prop variants, event dispatch, margins, disabled state, `data-*` passthrough, ARIA where applicable. + +V2 components need their own browser tests. + +## Angular Testing + +Use a test host component (test as a consumer would). `fakeAsync` + `tick()` for the `setTimeout(0)` pattern. Double `detectChanges()` (before and after `tick()`). Query via `By.css("goa-xxx")`. + +## PR Playground Files + +`feat{N}` not `feat-{N}` (no hyphen). Bug pages in `apps/prs/react/src/routes/bugs/`, features in `features/`. diff --git a/.github/workflows/docs-next-release.yml b/.github/workflows/docs-next-release.yml deleted file mode 100644 index 1e49a89ba6..0000000000 --- a/.github/workflows/docs-next-release.yml +++ /dev/null @@ -1,35 +0,0 @@ -name: Docs Next Release - -on: - push: - branches: - - next - -jobs: - build: - runs-on: ubuntu-latest - - permissions: - contents: write - - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - uses: actions/setup-node@v4 - with: - node-version: "24" - - - name: Install deps - run: npm ci - - - name: Build - run: npm run build:docs - - - name: Release - uses: JamesIves/github-pages-deploy-action@v4 - with: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - BRANCH: next - FOLDER: dist/docs diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index 1761eb93b7..2033aa8090 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -1,4 +1,7 @@ name: Pull Request Check +permissions: + contents: read + pull-requests: write on: pull_request: @@ -12,17 +15,19 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v5 with: fetch-depth: 0 - - uses: actions/setup-node@v4 + + - uses: actions/setup-node@v6 with: node-version: "24" + - name: Install npm 11 run: npm install -g npm@11 + - run: npm ci - # Run with the target branch as the base. - name: Lint run: npm run lint diff --git a/.github/workflows/release-ci.yml b/.github/workflows/release-ci.yml index 50815d5013..30f857992b 100644 --- a/.github/workflows/release-ci.yml +++ b/.github/workflows/release-ci.yml @@ -19,12 +19,13 @@ jobs: runs-on: ubuntu-latest permissions: contents: write + id-token: write steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v5 with: fetch-depth: 0 - - uses: actions/setup-node@v4 + - uses: actions/setup-node@v6 with: node-version: "24" @@ -39,24 +40,66 @@ jobs: with: main-branch-name: ${{ github.ref_name }} - - name: Lint - run: npm run lint - - name: Build run: npm run build:prod - - name: Test - run: | - if [ -d "./dist" ]; then - npx playwright install --with-deps - npm run test:pr - fi - - - name: Update Web components documentation + - name: Fix web-component lib README run: cp libs/web-components/README.md dist/libs/web-components - - name: Release + - name: Release libs env: GITHUB_TOKEN: ${{ secrets.RELEASE_TOKEN }} NPM_TOKEN: ${{ secrets.NPM_TOKEN }} run: npx nx affected --target release --parallel=false --base=${{ steps.last_successful_commit.outputs.base }} + + release-docs: + runs-on: ubuntu-latest + needs: build + + # this will get changed to main in the future + if: github.ref == 'refs/heads/dev' + + steps: + - uses: actions/checkout@v5 + with: + fetch-depth: 0 + + - uses: actions/setup-node@v6 + with: + node-version: "24" + + - name: Install npm 11 + run: npm install -g npm@11 + + - run: npm ci + + - name: Build + run: npm run build:prod + + - name: Install oc CLI + uses: redhat-actions/openshift-tools-installer@v1 + with: + oc: latest + + - name: Oc login + uses: redhat-actions/oc-login@v1 + with: + openshift_server_url: ${{ secrets.ARO_SERVER }} + openshift_token: ${{ secrets.ARO_TOKEN }} + namespace: ui-components-build + + - name: Start Build + run: | + oc start-build design-system-docs --from-dir dist/docs --follow --wait + + - name: Create ImageStream + run: | + oc get imagestream design-system-docs || oc create imagestream design-system-docs + + - name: Tag Prod + run: oc tag design-system-docs:latest design-system-docs:prod + + - name: Publish docs + run: | + oc project ui-components-prod + oc rollout latest dc/design-system-docs diff --git a/.templates/angular/src/app/playground.ts b/.templates/angular/src/app/playground.ts index cab524670c..be670d52b0 100644 --- a/.templates/angular/src/app/playground.ts +++ b/.templates/angular/src/app/playground.ts @@ -1,5 +1,4 @@ import { CUSTOM_ELEMENTS_SCHEMA, Component } from "@angular/core"; -import { CommonModule } from "@angular/common"; import { GoabInput, /* Import components here */ @@ -16,7 +15,6 @@ import { schemas: [CUSTOM_ELEMENTS_SCHEMA], imports: [ - CommonModule, GoabInput, // add test components here ], diff --git a/CLAUDE.md b/CLAUDE.md index a4af2fc762..69befbe99d 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -51,14 +51,37 @@ Understanding this pattern is essential for working in this codebase. ## Development Standards -### Always Follow These Rules +### Core Principles 1. **Svelte is the source of truth** - Fix bugs in Svelte first, then update wrappers -2. **Design tokens first** - Use design tokens whenever possible; avoid hardcoding colors, spacing, or typography +2. **Design tokens over hardcoded values** - No raw hex colors, px values, or font sizes. Use `rem` when no token exists. 3. **WCAG 2.2 AA** - Accessibility is mandatory, not optional -4. **All three frameworks** - Every component change needs React + Angular wrapper updates -5. **Tests required** - No component changes without corresponding test updates -6. **Backward compatibility** - Don't break existing implementations +4. **All three frameworks** - Every component change needs React + Angular wrapper updates with matching props +5. **Tests required** - Browser tests for events/interactions, unit tests for props/rendering +6. **Backward compatibility** - Flag anything that could break existing consumers +7. **Scope discipline** - Every changed line justified by the ticket. Bugs found during dev get separate issues. + +### Top Review Standards + +These are the most frequently enforced rules during PR review. Violating these will result in review comments. + +| # | Standard | Enforcer(s) | +|---|----------|-------------| +| 1 | Design tokens over hardcoded values | Vanessa, Benji, all | +| 2 | Scope discipline -- every changed line justified by ticket | Chris | +| 3 | Cross-framework consistency -- React/Angular match Svelte | Vanessa, Dustin | +| 4 | Browser tests for event/interaction behavior | Chris | +| 5 | Locator patterns -- declare outside `waitFor`, no truthy assertions | Chris | +| 6 | Prop naming describes behavior, not implementation | Chris | +| 7 | Use `rem` over `px` even without a token | Chris | +| 8 | No duplicate or redundant state variables | Chris | +| 9 | Use existing utilities (`performOnce`, `toBoolean`, etc.) | Chris | +| 10 | V2 CSS must include V1 token fallbacks | Benji | +| 11 | Tests must test what they claim -- meaningful assertions | Chris, Dustin | +| 12 | No `console.log` or commented-out code | All | +| 13 | Event details wrapped in objects for extensibility | Chris | +| 14 | JSDoc consistency -- `testid` format, no `version` docs, include defaults | Vanessa | +| 15 | Breaking change awareness | Dustin, Chris | ### Props Conventions @@ -68,6 +91,25 @@ Understanding this pattern is essential for working in this codebase. | React | camelCase | `disabled={true}` | `onClick` prop | | Angular | camelCase input | `[disabled]="true"` | `(onClick)` output | +### Pre-PR Checklist + +Scan before opening a PR: + +- [ ] Every changed line justified by the ticket +- [ ] No `console.log` or commented-out code +- [ ] All values from design tokens (zero hardcoded colors, sizes, spacing) +- [ ] `rem` used instead of `px` even without a token +- [ ] React and Angular wrappers updated to match Svelte changes +- [ ] Props match across all three frameworks (required/optional, naming, types) +- [ ] Unit tests for prop rendering and margins +- [ ] Browser tests for event/interaction behavior +- [ ] Tests test what they claim (meaningful assertions matching test name) +- [ ] Locators declared outside `waitFor`, no truthy assertions on locators +- [ ] V2 styles include V1 token fallbacks: `var(--goa-v2-token, var(--goa-v1-fallback))` +- [ ] JSDoc starts with "Sets the...", includes defaults, no `version` docs +- [ ] No breaking changes (or explicitly flagged if intentional) +- [ ] Commit message includes ticket number + --- ## Common Development Workflows @@ -234,61 +276,17 @@ See `apps/prs/react/src/routes/README.md` for detailed instructions. --- -## Naming Conventions - -### Components - -| Context | Convention | Example | -| ----------------- | --------------- | --------------- | -| Web Component tag | `goa-{name}` | `` | -| React component | `Goab{Name}` | `GoabButton` | -| Angular selector | `goab-{name}` | `` | -| File (React) | `{name}.tsx` | `button.tsx` | -| File (Angular) | `{name}.ts` | `button.ts` | -| File (Svelte) | `{Name}.svelte` | `Button.svelte` | - -### Props/Attributes - -| Type | Web Component | React | Angular | -| ---------- | ---------------- | ------------- | ------------- | -| Regular | `leadingicon` | `leadingIcon` | `leadingIcon` | -| Multi-word | `action-args` | `actionArgs` | `actionArgs` | -| Boolean | `"true"/"false"` | `true/false` | `true/false` | - -### Spacing Values - -Used for `mt`, `mr`, `mb`, `ml` props: - -``` -Numeric: "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" -T-shirt: "none", "3xs", "2xs", "xs", "s", "m", "l", "xl", "2xl", "3xl", "4xl" -``` - ---- - -## Design Tokens - -All styling uses CSS custom properties from `@abgov/design-tokens`. +## Naming, Styling, and Detailed Standards -**Location:** `libs/web-components/src/assets/css/` +Detailed standards for component authoring, styling, framework wrappers, testing, and common utilities are in `.claude/rules/`. These auto-load into Claude Code sessions. -- `variables.css` - Custom property definitions -- `components.css` - Component-specific styles -- `fonts.css` - Typography -- `reset.css` - CSS reset - -**Usage in Svelte:** - -```svelte - -``` - -**Design tokens first.** If a token doesn't exist for what you need, discuss with the team about adding one. +| Rules File | Covers | +|------------|--------| +| `component-authoring.md` | Script ordering, props, events, lifecycle, naming | +| `styling.md` | Tokens, V2 fallbacks, responsive, CSS patterns | +| `framework-wrappers.md` | React and Angular wrapper templates | +| `testing.md` | Test tiers, enforced patterns, Angular testing | +| `common-utilities.md` | Utility inventory, relay vs dispatch boundary | --- @@ -349,27 +347,14 @@ playground/ # Development playgrounds ### "Boolean prop not working" -Web components receive all attributes as strings: - -```tsx -// React: Convert boolean to string -disabled={disabled ? "true" : undefined} -``` +Web components receive all attributes as strings. See `.claude/rules/component-authoring.md` for the boolean pattern. In React wrappers: `disabled={disabled ? "true" : undefined}`. ### "Event not firing" -- Web component events use underscore prefix: `_click`, `_change` -- React/Angular wrappers expose as `onClick`, `onChange` -- Check the web component is dispatching with `dispatch()` utility - -### "Styles not applying" - -1. Check you're using CSS custom properties, not hardcoded values -2. Verify the component imports the correct CSS files -3. Check if the style is scoped correctly in Svelte +Web component events use underscore prefix (`_click`, `_change`). Wrappers expose as `onClick`, `onChange`. Check the component is using `dispatch()` from `common/utils.ts`. See `.claude/rules/common-utilities.md` for the relay vs dispatch boundary. ### "Tests failing after component update" -1. Run `npm run build` first - wrappers may need rebuilt +1. Run `npm run build` first -- wrappers may need rebuilt 2. Check all three frameworks have updated tests 3. Verify types in `libs/common/` match the new props diff --git a/apps/prs/angular/project.json b/apps/prs/angular/project.json index 4ace99a7fc..553bbc54ba 100644 --- a/apps/prs/angular/project.json +++ b/apps/prs/angular/project.json @@ -17,7 +17,12 @@ "tsConfig": "apps/prs/angular/tsconfig.app.json", "assets": [ "apps/prs/angular/src/favicon.ico", - "apps/prs/angular/src/assets" + "apps/prs/angular/src/assets", + { + "glob": "**/*", + "input": "node_modules/@abgov/design-tokens-v2/dist", + "output": "/v2-tokens" + } ], "styles": ["apps/prs/angular/src/styles.css"], "scripts": [] diff --git a/apps/prs/angular/src/app/abgov-app.ts b/apps/prs/angular/src/app/abgov-app.ts index 3ab16c2e39..67d75f4bd0 100644 --- a/apps/prs/angular/src/app/abgov-app.ts +++ b/apps/prs/angular/src/app/abgov-app.ts @@ -1,5 +1,4 @@ import { CUSTOM_ELEMENTS_SCHEMA, Component } from "@angular/core"; -import { CommonModule } from "@angular/common"; import {} from "@abgov/angular-components"; @Component({ @@ -12,6 +11,5 @@ import {} from "@abgov/angular-components"; `, schemas: [CUSTOM_ELEMENTS_SCHEMA], - imports: [CommonModule], }) export class AbgovAppComponent {} diff --git a/apps/prs/angular/src/app/app.component.html b/apps/prs/angular/src/app/app.component.html index 439cfcce6a..ea9e9da446 100644 --- a/apps/prs/angular/src/app/app.component.html +++ b/apps/prs/angular/src/app/app.component.html @@ -1,92 +1,401 @@ -
-
+
+
Home - 2878 - Regional Insights - Occupational Insights + bug2720 + Dropdown expanding + ...inside Container + + Interactive super long menu item to test overflow handling lorem ipsum dolor sit + amet + + + Noninteractive super long menu item to test overflow handling lorem ipsum dolor + sit amet + + + Bug 3450 + Bug 3450 + + Super long menu item to test overflow handling lorem ipsum dolor sit amet + + + + Manage account + Request new staff account for a long + System admin + Sign out + Super long menu item to test overflow handling lorem ipsum dolor sit amet + +
-
- - All Components - - 2152 - 2331 - 2393 - 2404 - 2408 - 2459 - 2473 - 2502 - 2529 - 2547 - 2655 - 2720 - 2721 - 2750 - 2768 - 2782 - 2789 - 2821 - 2837 - 2839 - 2849 - 2852 - 2873 - 2878 - 2892 - 2922 - 2943 - 2948 - 2977 - 2991 - 3072 - 3118 - 3156 - 3201 - 3215 - 3248 - 3275 Can't unset month - 3281 - 3337 - Autocomplete styling - 3279 - 3384 Table v2 sample - - - 1328 - 1383 - 1547 - 1813 - 1908 - 2054 - 2267 - 2328 - 2440 - 2469 - 2361 - 2492 - 2609 - 2611 - 2611-tabs-disabled - 2682 - 2722 - 2730 - 2829 - 3102 - 3137 - 3241 - 3306 - 3370 - v2 header icons - - -
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
@@ -95,3 +404,5 @@
+ + diff --git a/apps/prs/angular/src/app/app.component.ts b/apps/prs/angular/src/app/app.component.ts index 4f9c653c7d..5c526b7881 100644 --- a/apps/prs/angular/src/app/app.component.ts +++ b/apps/prs/angular/src/app/app.component.ts @@ -1,4 +1,6 @@ import { Component } from "@angular/core"; +import { Router, NavigationEnd } from "@angular/router"; +import { filter } from "rxjs/operators"; @Component({ selector: "abgov-root", @@ -6,4 +8,22 @@ import { Component } from "@angular/core"; styles: ``, standalone: false, }) -export class AppComponent {} +export class AppComponent { + isFullPage = false; + + private fullPageRoutes = ["/features/2885"]; + + constructor(private router: Router) { + this.router.events + .pipe(filter((event) => event instanceof NavigationEnd)) + .subscribe((event) => { + this.isFullPage = this.fullPageRoutes.includes( + (event as NavigationEnd).urlAfterRedirects, + ); + }); + } + + handleNavigate(path: string): void { + this.router.navigateByUrl(path); + } +} diff --git a/apps/prs/angular/src/app/app.module.ts b/apps/prs/angular/src/app/app.module.ts index bfa44a8458..36e8c438b3 100644 --- a/apps/prs/angular/src/app/app.module.ts +++ b/apps/prs/angular/src/app/app.module.ts @@ -14,8 +14,9 @@ import { GoabAppFooter, GoabMicrositeHeader, GoabAppHeaderMenu, - GoabSideMenu, - GoabSideMenuGroup, + GoabWorkSideMenu, + GoabWorkSideMenuItem, + GoabWorkSideMenuGroup, } from "@abgov/angular-components"; @NgModule({ @@ -25,8 +26,9 @@ import { GoabAppFooter, GoabMicrositeHeader, GoabAppHeaderMenu, - GoabSideMenu, - GoabSideMenuGroup, + GoabWorkSideMenu, + GoabWorkSideMenuItem, + GoabWorkSideMenuGroup, BrowserModule, RouterModule.forRoot(appRoutes), AngularComponentsModule, diff --git a/apps/prs/angular/src/app/app.routes.ts b/apps/prs/angular/src/app/app.routes.ts index 232df2d2fa..f2c494c191 100644 --- a/apps/prs/angular/src/app/app.routes.ts +++ b/apps/prs/angular/src/app/app.routes.ts @@ -38,11 +38,20 @@ import { Bug3156Component } from "../routes/bugs/3156/bug3156.component"; import { Bug3201Component } from "../routes/bugs/3201/bug3201.component"; import { Bug3215Component } from "../routes/bugs/3215/bug3215.component"; import { Bug3248Component } from "../routes/bugs/3248/bug3248.component"; +import { Bug3273Component } from "../routes/bugs/3273/bug3273.component"; +import { Bug32732Component } from "../routes/bugs/3273/bug3273-2.component"; import { Bug3275Component } from "../routes/bugs/3275/bug3275.component"; import { Bug3281Component } from "../routes/bugs/3281/bug3281.component"; import { Bug3337Component } from "../routes/bugs/3337/bug3337.component"; import { Bug3279Component } from "../routes/bugs/3279/bug3279.component"; import { Bug3384Component } from "../routes/bugs/3384/bug3384.component"; +import { Bug3450Component } from "../routes/bugs/3450/bug3450.component"; +import { Bug3497Component } from "../routes/bugs/3497/bug3497.component"; +import { Bug3498Component } from "../routes/bugs/3498/bug3498.component"; +import { Bug3607Component } from "../routes/bugs/3607/bug3607.component"; +import { Bug3505Component } from "../routes/bugs/3505/bug3505.component"; +import { Bug3614Component } from "../routes/bugs/3614/bug3614.component"; +import { Bug3685Component } from "../routes/bugs/3685/bug3685.component"; import { Feat1328Component } from "../routes/features/feat1328/feat1328.component"; import { Feat1383Component } from "../routes/features/feat1383/feat1383.component"; @@ -54,6 +63,7 @@ import { Feat2267Component } from "../routes/features/feat2267/feat2267.componen import { Feat2328Component } from "../routes/features/feat2328/feat2328.component"; import { Feat2361Component } from "../routes/features/feat2361/feat2361.component"; import { Feat2440Component } from "../routes/features/feat2440/feat2440.component"; +import { Feat2469Component } from "../routes/features/feat2469/feat2469.component"; import { Feat2492Component } from "../routes/features/feat2492/feat2492.component"; import { Feat2609Component } from "../routes/features/feat2609/feat2609.component"; import { Feat2611Component } from "../routes/features/feat2611/feat2611.component"; @@ -63,16 +73,28 @@ import { Feat2722Component } from "../routes/features/feat2722/feat2722.componen import { Feat2730Component } from "../routes/features/feat2730/feat2730.component"; import { Feat2829Component } from "../routes/features/feat2829/feat2829.component"; import { Feat3102Component } from "../routes/features/feat3102/feat3102.component"; +import { Feat3344Component } from "../routes/features/feat3344/feat3344.component"; import { Feat3137Component } from "../routes/features/feat3137/feat3137.component"; +import { Feat3211Component } from "../routes/features/feat3211/feat3211.component"; import { Feat3241Component } from "../routes/features/feat3241/feat3241.component"; +import { Feat3229Component } from "../routes/features/feat3229/feat3229.component"; import { Feat3306Component } from "../routes/features/feat3306/feat3306.component"; -import { Feat2469Component } from "../routes/features/feat2469/feat2469.component"; import { Feat3370Component } from "../routes/features/feat3370/feat3370.component"; +import { Feat3407SkipOnFocusTabComponent } from "../routes/features/feat3407SkipOnFocusTab/feat3407-skip-on-focus-tab.component"; +import { Feat3407StackOnMobileComponent } from "../routes/features/feat3407StackOnMobile/feat3407-stack-on-mobile.component"; +import { Feat3398Component } from "../routes/features/feat3398/feat3398.component"; import { FeatV2IconsComponent } from "../routes/features/featV2Icons/feat-v2-icons.component"; +import { Feat3396Component } from "../routes/features/feat3396/feat3396.component"; +import { FeatV2CheckboxComponent } from "../routes/features/featV2Checkbox/featV2Checkbox.component"; +import { Feat3478Component } from "../routes/features/feat3478/feat3478.component"; +import { Feat2885Component } from "../routes/features/feat2885/feat2885.component"; +import { Feat2885NavigationTabsComponent } from "../routes/features/feat2885-navigation-tabs/feat2885-navigation-tabs.component"; +import { Feat3529Component } from "../routes/features/feat3529/feat3529.component"; +import { Feat3544Component } from "../routes/features/feat3544/feat3544.component"; export const appRoutes: Route[] = [ { path: "everything", component: EverythingComponent }, - + // Bug routes { path: "bugs/2152", component: Bug2152Component }, { path: "bugs/2331", component: Bug2331Component }, { path: "bugs/2393", component: Bug2393Component }, @@ -109,12 +131,22 @@ export const appRoutes: Route[] = [ { path: "bugs/3201", component: Bug3201Component }, { path: "bugs/3215", component: Bug3215Component }, { path: "bugs/3248", component: Bug3248Component }, + { path: "bugs/3273", component: Bug3273Component }, + { path: "bugs/3273-2", component: Bug32732Component }, { path: "bugs/3275", component: Bug3275Component }, { path: "bugs/3281", component: Bug3281Component }, { path: "bugs/3337", component: Bug3337Component }, { path: "bugs/3279", component: Bug3279Component }, { path: "bugs/3384", component: Bug3384Component }, + { path: "bugs/3450", component: Bug3450Component }, + { path: "bugs/3497", component: Bug3497Component }, + { path: "bugs/3498", component: Bug3498Component }, + { path: "bugs/3607", component: Bug3607Component }, + { path: "bugs/3614", component: Bug3614Component }, + { path: "bugs/3505", component: Bug3505Component }, + { path: "bugs/3685", component: Bug3685Component }, + // Feature routes { path: "features/1328", component: Feat1328Component }, { path: "features/1383", component: Feat1383Component }, { path: "features/1547", component: Feat1547Component }, @@ -134,11 +166,24 @@ export const appRoutes: Route[] = [ { path: "features/2722", component: Feat2722Component }, { path: "features/2730", component: Feat2730Component }, { path: "features/2829", component: Feat2829Component }, + { path: "features/2885", component: Feat2885Component }, + { path: "features/2885-navigation-tabs", component: Feat2885NavigationTabsComponent }, { path: "features/3102", component: Feat3102Component }, { path: "features/3137", component: Feat3137Component }, + { path: "features/3211", component: Feat3211Component }, { path: "features/3241", component: Feat3241Component }, { path: "features/v2-icons", component: FeatV2IconsComponent }, + { path: "features/3344", component: Feat3344Component }, { path: "features/3137", component: Feat3137Component }, + { path: "features/3229", component: Feat3229Component }, { path: "features/3306", component: Feat3306Component }, { path: "features/3370", component: Feat3370Component }, + { path: "features/3396", component: Feat3396Component }, + { path: "features/3407-skip-on-focus-tab", component: Feat3407SkipOnFocusTabComponent }, + { path: "features/3407-stack-on-mobile", component: Feat3407StackOnMobileComponent }, + { path: "features/v2-checkbox", component: FeatV2CheckboxComponent }, + { path: "features/3398", component: Feat3398Component }, + { path: "features/3478", component: Feat3478Component }, + { path: "features/3529", component: Feat3529Component }, + { path: "features/3544", component: Feat3544Component }, ]; diff --git a/apps/prs/angular/src/app/everything.component.html b/apps/prs/angular/src/app/everything.component.html index 7b65e84202..3599b718d7 100644 --- a/apps/prs/angular/src/app/everything.component.html +++ b/apps/prs/angular/src/app/everything.component.html @@ -10,25 +10,28 @@ Recent events - Interact with the components to populate the log. - - - - {{ entry.timestamp }} - ??" {{ entry.name }} - -
+        @if (eventLog().length === 0) {
+          Interact with the components to populate the log.
+        }
+        @for (entry of eventLog(); track $index) {
+          
+            
+              
+                {{ entry.timestamp }}
+                ??" {{ entry.name }}
+              
+              
               {{ entry.detail | json }}
             
-
-
+ + + } @@ -38,26 +41,28 @@ Text sizes - - {{ size }} - + @for (size of textSizes; track $index) { + + {{ size }} + + } Text colors - - {{ colour | titlecase }} text - + @for (colour of textColors; track $index) { + + {{ colour | titlecase }} text + + } @@ -77,18 +82,19 @@ Containers - - - Type: {{ type }}
- Accent: {{ containerAccents[idx % containerAccents.length] || "none" }} -
-
+ @for (type of containerTypes; track $index; let idx = $index) { + + + Type: {{ type }}
+ Accent: {{ containerAccents[idx % containerAccents.length] || "none" }} +
+
+ }
@@ -169,37 +175,40 @@ Buttons by type - - {{ type | titlecase }} button - + @for (type of buttonTypes; track $index) { + + {{ type | titlecase }} button + + } Variants & sizes - - - {{ variant | titlecase }} - - - {{ size }} / {{ variant }} - - + + {{ variant | titlecase }} + + @for (size of buttonSizes; track $index) { + + {{ size }} / {{ variant }} + + } + + } @@ -217,33 +226,37 @@ > - - {{ linkType | titlecase }} link (action logged) - + @for (linkType of linkButtonTypes; track $index) { + + {{ linkType | titlecase }} link (action logged) + + } Icon buttons & icons - + @for (variant of iconButtonVariants; track $index; let idx = $index) { + + } Click counts: {{ iconButtonClickCount | json }} - + @for (icon of iconTypes; track $index; let idx = $index) { + + } @@ -256,8 +269,11 @@ Latest menu action: - {{ menuAction }} - pending + @if (menuAction) { + {{ menuAction }} + } @else { + pending + } @@ -267,11 +283,12 @@ Badge palette - + @for (badgeType of badgeTypes; track $index) { + + } @@ -299,12 +316,13 @@ Filter chips - + @for (theme of filterChipThemes; track $index) { + + } Filter chip clicks: {{ filterChipClicks }} - - - + @for (size of formItemLabelSizes; track $index) { + + + + } Trailing icon clicks: {{ inputTrailingClicks }} @@ -478,12 +497,13 @@ placeholder="Select mounts" (onChange)="onDropdownChange($event)" > - + @for (mount of dropdownMountTypes; track $index; let idx = $index) { + + } Selected: {{ dropdownMultiSelection || "None" }} @@ -501,11 +521,12 @@ [value]="linkedDropdownCategory" (onChange)="onLinkedDropdownCategoryChange($event)" > - + @for (option of linkedDropdownCategories; track option.value) { + + } Selected: {{ linkedDropdownCategory | titlecase }} @@ -521,11 +542,12 @@ [value]="linkedDropdownItem" (onChange)="onLinkedDropdownItemChange($event)" > - + @for (option of dependentDropdownItems; track option.value) { + + } Selected: @@ -569,11 +591,12 @@ [value]="reactiveDemoForm.get('radio')?.value || undefined" formControlName="radio" > - + @for (option of reactiveRadioOptions; track option.value) { + + } - + @for (option of reactiveDropdownOptions; track option.value) { + + } - + @for (option of reactiveCheckboxListOptions; track option.value) { + + } - + @for (status of formStepStatuses; track $index; let idx = $index) { + + } Active step: {{ formStepperState.step }} @@ -789,18 +815,19 @@ Callouts - - - This is a {{ type }} callout using the - {{ calloutIconThemes[idx % calloutIconThemes.length] }} - icon theme. - - + @for (type of calloutTypes; track $index; let idx = $index) { + + + This is a {{ type }} callout using the + {{ calloutIconThemes[idx % calloutIconThemes.length] }} + icon theme. + + + } @@ -884,11 +911,12 @@ Circular progress - + @for (variant of circularProgressVariants; track $index; let idx = $index) { + + } Linear progress @@ -911,12 +939,13 @@ Skeletons - + @for (skeleton of skeletonTypes; track $index; let idx = $index) { + + } @@ -952,20 +981,21 @@ Accordion & Tabs - - - Accordion content for {{ headingSize }} heading. Toggle to emit change - events. - - + @for (headingSize of accordionHeadingSizes; track $index; let idx = $index) { + + + Accordion content for {{ headingSize }} heading. Toggle to emit change + events. + + + } Last toggle: {{ accordionLastToggle?.heading || "None" }} → @@ -1045,7 +1075,8 @@ Data Grid (Keyboard Navigation) - The data grid wraps a table to enable keyboard navigation. Use arrow keys to move between cells. + The data grid wraps a table to enable keyboard navigation. Use arrow keys to + move between cells. @@ -1064,7 +1095,10 @@ {{ row.name }} {{ row.created }} - + {{ row.progress }}% diff --git a/apps/prs/angular/src/app/everything.component.ts b/apps/prs/angular/src/app/everything.component.ts index 84de89219c..beae13149f 100644 --- a/apps/prs/angular/src/app/everything.component.ts +++ b/apps/prs/angular/src/app/everything.component.ts @@ -1,5 +1,5 @@ -import { CommonModule } from "@angular/common"; import { Component, signal } from "@angular/core"; +import { DecimalPipe, JsonPipe, TitleCasePipe } from "@angular/common"; import { FormBuilder, FormGroup, ReactiveFormsModule } from "@angular/forms"; import { GoabAccordion, @@ -165,7 +165,6 @@ interface DemoFormValue { templateUrl: "./everything.component.html", styleUrls: ["./everything.component.css"], imports: [ - CommonModule, ReactiveFormsModule, GoabAccordion, GoabAppFooter, @@ -230,6 +229,9 @@ interface DemoFormValue { GoabText, GoabTextArea, GoabTooltip, + DecimalPipe, + JsonPipe, + TitleCasePipe, ], }) export class EverythingComponent { @@ -240,29 +242,14 @@ export class EverythingComponent { "success", "important", "emergency", - "dark", - "midtone", - "light", "archived", - "aqua", - "black", - "blue", - "green", - "orange", - "pink", - "red", - "violet", - "white", - "yellow", - "aqua-light", - "black-light", - "blue-light", - "green-light", - "orange-light", - "pink-light", - "red-light", - "violet-light", - "yellow-light", + "sky", + "prairie", + "lilac", + "pasture", + "sunset", + "dawn", + "default", ]; readonly buttonTypes: GoabButtonType[] = [ "primary", diff --git a/apps/prs/angular/src/routes/bugs/2331/bug2331.component.ts b/apps/prs/angular/src/routes/bugs/2331/bug2331.component.ts index de59da2671..04896a345c 100644 --- a/apps/prs/angular/src/routes/bugs/2331/bug2331.component.ts +++ b/apps/prs/angular/src/routes/bugs/2331/bug2331.component.ts @@ -1,5 +1,4 @@ import { Component } from "@angular/core"; -import { CommonModule } from "@angular/common"; import { GoabBlock, GoabButton, @@ -13,7 +12,7 @@ import { GoabTabsOnChangeDetail } from "@abgov/ui-components-common"; standalone: true, selector: "abgov-bug2331", templateUrl: "./bug2331.component.html", - imports: [CommonModule, GoabBlock, GoabButton, GoabTabs, GoabTab, GoabText], + imports: [ GoabBlock, GoabButton, GoabTabs, GoabTab, GoabText], }) export class Bug2331Component { blockContent: string | null = null; diff --git a/apps/prs/angular/src/routes/bugs/2393/bug2393.component.html b/apps/prs/angular/src/routes/bugs/2393/bug2393.component.html index b41a99d947..ecaf509e63 100644 --- a/apps/prs/angular/src/routes/bugs/2393/bug2393.component.html +++ b/apps/prs/angular/src/routes/bugs/2393/bug2393.component.html @@ -36,7 +36,7 @@ MI CASA MONTESSORI LTD. July 2025 - + diff --git a/apps/prs/angular/src/routes/bugs/2408/bug2408.component.ts b/apps/prs/angular/src/routes/bugs/2408/bug2408.component.ts index f8ba2b4964..5af653f993 100644 --- a/apps/prs/angular/src/routes/bugs/2408/bug2408.component.ts +++ b/apps/prs/angular/src/routes/bugs/2408/bug2408.component.ts @@ -1,5 +1,5 @@ import { Component } from "@angular/core"; -import { CommonModule } from "@angular/common"; + import { GoabFormStepper, GoabFormStep, @@ -13,7 +13,7 @@ import { standalone: true, selector: "abgov-bug2408", templateUrl: "./bug2408.component.html", - imports: [CommonModule, GoabFormStepper, GoabFormStep, GoabBlock, GoabText, GoabButton], + imports: [GoabFormStepper, GoabFormStep, GoabBlock, GoabText, GoabButton], }) export class Bug2408Component { currentStep = 1; diff --git a/apps/prs/angular/src/routes/bugs/2459/bug2459.component.html b/apps/prs/angular/src/routes/bugs/2459/bug2459.component.html index 4da275e613..5703df64de 100644 --- a/apps/prs/angular/src/routes/bugs/2459/bug2459.component.html +++ b/apps/prs/angular/src/routes/bugs/2459/bug2459.component.html @@ -4,8 +4,8 @@ (onSelectFile)="uploadFile($event)" maxFileSize="100MB" /> + @for (upload of uploads; track upload.file.name; let i = $index) { + } diff --git a/apps/prs/angular/src/routes/bugs/2459/bug2459.component.ts b/apps/prs/angular/src/routes/bugs/2459/bug2459.component.ts index 612b676059..b0c9e39c5b 100644 --- a/apps/prs/angular/src/routes/bugs/2459/bug2459.component.ts +++ b/apps/prs/angular/src/routes/bugs/2459/bug2459.component.ts @@ -5,7 +5,6 @@ import { GoabFileUploadInput, GoabFileUploadInputOnSelectFileDetail, } from "@abgov/angular-components"; -import { NgFor } from "@angular/common"; interface Uploader { upload: (url: string | ArrayBuffer) => void; @@ -42,7 +41,7 @@ class MockUploader implements Uploader { selector: "abgov-accordion", standalone: true, templateUrl: "./bug2459.component.html", - imports: [GoabFormItem, GoabFileUploadCard, GoabFileUploadInput, NgFor], + imports: [GoabFormItem, GoabFileUploadCard, GoabFileUploadInput], }) export class Bug2459Component { uploads: Upload[] = []; diff --git a/apps/prs/angular/src/routes/bugs/2655/bug2655.component.ts b/apps/prs/angular/src/routes/bugs/2655/bug2655.component.ts index 184fe78c12..b4352ea805 100644 --- a/apps/prs/angular/src/routes/bugs/2655/bug2655.component.ts +++ b/apps/prs/angular/src/routes/bugs/2655/bug2655.component.ts @@ -1,5 +1,5 @@ import { Component } from "@angular/core"; -import { CommonModule } from "@angular/common"; + import { GoabButton, GoabModal, @@ -13,7 +13,6 @@ import { selector: "abgov-bug2655", standalone: true, imports: [ - CommonModule, GoabButton, GoabModal, GoabDatePicker, @@ -31,10 +30,11 @@ import { -
+
+

At the top these open downwards

-

- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas vitae - ultricies leo. Cras sodales lacinia sagittis. Aliquam viverra, risus quis - imperdiet euismod, libero lacus blandit tortor, vel tristique est sapien sed - urna. Phasellus convallis auctor leo sed volutpat. Sed vel arcu suscipit, - porta augue et, vehicula felis. Pellentesque at pulvinar velit. Phasellus - lacus metus, dictum vel ultricies eu, rutrum eu nibh. Curabitur at dapibus - ligula. Nam nulla massa, egestas vitae urna a, maximus aliquam leo. - Suspendisse condimentum condimentum nunc, eu pulvinar tellus convallis sed. - Praesent non mauris quis diam feugiat gravida nec porta ipsum. Proin elementum - nibh eu tellus porta, sed rhoncus felis dictum. Nullam mattis purus at urna - convallis vulputate. Sed aliquet maximus varius. Sed aliquet mi eget arcu - ullamcorper tempor. Etiam condimentum fermentum lacus, sed ultricies velit - scelerisque id. -

-
+ +
+ + + + + + + +
+ +
+

At the bottom these open upwards

-

- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas vitae - ultricies leo. Cras sodales lacinia sagittis. Aliquam viverra, risus quis - imperdiet euismod, libero lacus blandit tortor, vel tristique est sapien sed - urna. Phasellus convallis auctor leo sed volutpat. Sed vel arcu suscipit, - porta augue et, vehicula felis. Pellentesque at pulvinar velit. Phasellus - lacus metus, dictum vel ultricies eu, rutrum eu nibh. Curabitur at dapibus - ligula. Nam nulla massa, egestas vitae urna a, maximus aliquam leo. - Suspendisse condimentum condimentum nunc, eu pulvinar tellus convallis sed. - Praesent non mauris quis diam feugiat gravida nec porta ipsum. Proin elementum - nibh eu tellus porta, sed rhoncus felis dictum. Nullam mattis purus at urna - convallis vulputate. Sed aliquet maximus varius. Sed aliquet mi eget arcu - ullamcorper tempor. Etiam condimentum fermentum lacus, sed ultricies velit - scelerisque id. -

+
- +
+
+ + + Open Small Modal -
+ +
+

+ It should expand downwards within a space too small for the popover content +

+
- - - - - +
+
+

+ A good testing cheat to test if the dropdown opens above or below the target is + to anchor the developer tools window to the bottom and slide it up and down to + reduce window size. +

+ + + + + + + +
`, styles: [], }) export class Bug2655Component { isModalOpen = false; + isSmallModalOpen = false; openModal() { this.isModalOpen = true; @@ -117,6 +132,14 @@ export class Bug2655Component { this.isModalOpen = false; } + openSmallModal() { + this.isSmallModalOpen = true; + } + + closeSmallModal() { + this.isSmallModalOpen = false; + } + onDate1Change(event: any) { console.log("Date 1 changed:", event); } @@ -125,6 +148,10 @@ export class Bug2655Component { console.log("Date 2 changed:", event); } + onDate3Change(event: any) { + console.log("Date 3 changed:", event); + } + onDropdown1Change(event: any) { console.log("Dropdown 1 changed:", event); } @@ -132,4 +159,8 @@ export class Bug2655Component { onDropdown2Change(event: any) { console.log("Dropdown 2 changed:", event); } + + onDropdown3Change(event: any) { + console.log("Dropdown 3 changed:", event); + } } diff --git a/apps/prs/angular/src/routes/bugs/2720/bug2720.component.html b/apps/prs/angular/src/routes/bugs/2720/bug2720.component.html index cacc342c53..680078d51a 100644 --- a/apps/prs/angular/src/routes/bugs/2720/bug2720.component.html +++ b/apps/prs/angular/src/routes/bugs/2720/bug2720.component.html @@ -121,31 +121,29 @@
Tab Change Event Log -
+ @if (tabChangeLog.length > 0) {
- {{ log }} + @for (log of tabChangeLog; track $index) { +
+ {{ log }} +
+ }
-
- - + } @else {
No tab change events yet. Try changing tabs or using the test controls above.
-
+ }
diff --git a/apps/prs/angular/src/routes/bugs/2720/bug2720.component.ts b/apps/prs/angular/src/routes/bugs/2720/bug2720.component.ts index 77edd949a0..cc5effae7c 100644 --- a/apps/prs/angular/src/routes/bugs/2720/bug2720.component.ts +++ b/apps/prs/angular/src/routes/bugs/2720/bug2720.component.ts @@ -1,5 +1,5 @@ import { Component } from "@angular/core"; -import { CommonModule } from "@angular/common"; + import { GoabTabs, GoabTab, @@ -16,16 +16,7 @@ import { GoabTabsOnChangeDetail } from "@abgov/ui-components-common"; selector: "abgov-bug2720", templateUrl: "./bug2720.component.html", styleUrls: ["./bug2720.component.css"], - imports: [ - CommonModule, - GoabTabs, - GoabTab, - GoabBlock, - GoabText, - GoabButton, - GoabLink, - GoabBadge, - ], + imports: [GoabTabs, GoabTab, GoabBlock, GoabText, GoabButton, GoabLink, GoabBadge], }) export class Bug2720Component { currentTab = 0; diff --git a/apps/prs/angular/src/routes/bugs/2721/bug2721.component.ts b/apps/prs/angular/src/routes/bugs/2721/bug2721.component.ts index a01e27f175..d12e1aaf32 100644 --- a/apps/prs/angular/src/routes/bugs/2721/bug2721.component.ts +++ b/apps/prs/angular/src/routes/bugs/2721/bug2721.component.ts @@ -1,5 +1,5 @@ import { Component, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; -import { CommonModule } from "@angular/common"; + import { GoabText, GoabBlock } from "@abgov/angular-components"; @Component({ @@ -7,7 +7,7 @@ import { GoabText, GoabBlock } from "@abgov/angular-components"; selector: "abgov-bug2721", templateUrl: "./bug2721.component.html", styleUrls: ["./bug2721.component.css"], - imports: [CommonModule, GoabText, GoabBlock], + imports: [GoabText, GoabBlock], schemas: [CUSTOM_ELEMENTS_SCHEMA], }) export class Bug2721Component {} diff --git a/apps/prs/angular/src/routes/bugs/2768/bug2768.component.ts b/apps/prs/angular/src/routes/bugs/2768/bug2768.component.ts index bb2bece191..faa7b7f3a5 100644 --- a/apps/prs/angular/src/routes/bugs/2768/bug2768.component.ts +++ b/apps/prs/angular/src/routes/bugs/2768/bug2768.component.ts @@ -1,5 +1,5 @@ import { Component } from "@angular/core"; -import { CommonModule } from "@angular/common"; + import { GoabButton, GoabCheckbox, @@ -18,7 +18,6 @@ import { selector: "abgov-bug2768", templateUrl: "./bug2768.component.html", imports: [ - CommonModule, GoabButton, GoabCheckbox, GoabDatePicker, diff --git a/apps/prs/angular/src/routes/bugs/2782/bug2782.component.ts b/apps/prs/angular/src/routes/bugs/2782/bug2782.component.ts index ad7df40c84..dddf172a38 100644 --- a/apps/prs/angular/src/routes/bugs/2782/bug2782.component.ts +++ b/apps/prs/angular/src/routes/bugs/2782/bug2782.component.ts @@ -1,12 +1,12 @@ import { Component, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; -import { CommonModule } from "@angular/common"; + import { GoabInput, GoabBlock, GoabFormItem } from "@abgov/angular-components"; @Component({ standalone: true, selector: "abgov-bug2782", templateUrl: "./bug2782.component.html", - imports: [CommonModule, GoabInput, GoabBlock, GoabFormItem], + imports: [GoabInput, GoabBlock, GoabFormItem], schemas: [CUSTOM_ELEMENTS_SCHEMA], }) export class Bug2782Component { diff --git a/apps/prs/angular/src/routes/bugs/2821/bug2821.component.html b/apps/prs/angular/src/routes/bugs/2821/bug2821.component.html index de6fa8b9cd..20844ba644 100644 --- a/apps/prs/angular/src/routes/bugs/2821/bug2821.component.html +++ b/apps/prs/angular/src/routes/bugs/2821/bug2821.component.html @@ -41,12 +41,14 @@ - - {{ row.id }} - {{ row.name }} - {{ row.age }} - {{ row.department }} - + @for (row of sampleData; track row.id) { + + {{ row.id }} + {{ row.name }} + {{ row.age }} + {{ row.department }} + + }
@@ -60,31 +62,29 @@ Click Count: {{ clickCount }} -
+ @if (sortLog.length > 0) {
- {{ log }} + @for (log of sortLog; track $index) { +
+ {{ log }} +
+ }
-
- - + } @else {
No sort events yet. Click on a column header to start testing.
-
+ }
diff --git a/apps/prs/angular/src/routes/bugs/2821/bug2821.component.ts b/apps/prs/angular/src/routes/bugs/2821/bug2821.component.ts index 59c5299a0e..1237067193 100644 --- a/apps/prs/angular/src/routes/bugs/2821/bug2821.component.ts +++ b/apps/prs/angular/src/routes/bugs/2821/bug2821.component.ts @@ -1,5 +1,5 @@ import { Component } from "@angular/core"; -import { CommonModule } from "@angular/common"; + import { GoabTable, GoabTableSortHeader, @@ -20,14 +20,7 @@ interface TableRow { standalone: true, selector: "abgov-bug2821", templateUrl: "./bug2821.component.html", - imports: [ - CommonModule, - GoabTable, - GoabTableSortHeader, - GoabBlock, - GoabText, - GoabButton, - ], + imports: [GoabTable, GoabTableSortHeader, GoabBlock, GoabText, GoabButton], }) export class Bug2821Component { sortLog: string[] = []; diff --git a/apps/prs/angular/src/routes/bugs/2837/bug2837.component.ts b/apps/prs/angular/src/routes/bugs/2837/bug2837.component.ts index e2744fda9d..7a25b029f3 100644 --- a/apps/prs/angular/src/routes/bugs/2837/bug2837.component.ts +++ b/apps/prs/angular/src/routes/bugs/2837/bug2837.component.ts @@ -1,5 +1,5 @@ import { Component } from "@angular/core"; -import { CommonModule } from "@angular/common"; + import { GoabBlock, GoabText, @@ -12,7 +12,7 @@ import { GoabInputOnChangeDetail } from "@abgov/ui-components-common"; standalone: true, selector: "abgov-bug2837", templateUrl: "./bug2837.component.html", - imports: [CommonModule, GoabBlock, GoabText, GoabInput, GoabInputNumber], + imports: [GoabBlock, GoabText, GoabInput, GoabInputNumber], }) export class Bug2837Component { handleInputChange(detail: GoabInputOnChangeDetail) { diff --git a/apps/prs/angular/src/routes/bugs/2839/bug2839.component.ts b/apps/prs/angular/src/routes/bugs/2839/bug2839.component.ts index 9bcc78e2a5..d4d18f27f8 100644 --- a/apps/prs/angular/src/routes/bugs/2839/bug2839.component.ts +++ b/apps/prs/angular/src/routes/bugs/2839/bug2839.component.ts @@ -1,5 +1,5 @@ import { Component, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; -import { CommonModule } from "@angular/common"; + import { GoabButton, GoabIconButton, @@ -11,7 +11,7 @@ import { standalone: true, selector: "abgov-bug2839", templateUrl: "./bug2839.component.html", - imports: [CommonModule, GoabButton, GoabIconButton, GoabButtonGroup, GoabBlock], + imports: [GoabButton, GoabIconButton, GoabButtonGroup, GoabBlock], schemas: [CUSTOM_ELEMENTS_SCHEMA], }) export class Bug2839Component { diff --git a/apps/prs/angular/src/routes/bugs/2849/bug2849.component.ts b/apps/prs/angular/src/routes/bugs/2849/bug2849.component.ts index 2345bde5e9..bd952c52e8 100644 --- a/apps/prs/angular/src/routes/bugs/2849/bug2849.component.ts +++ b/apps/prs/angular/src/routes/bugs/2849/bug2849.component.ts @@ -1,5 +1,5 @@ import { Component, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; -import { CommonModule } from "@angular/common"; + import { GoabDropdown, GoabDropdownItem, GoabBlock } from "@abgov/angular-components"; @Component({ @@ -7,7 +7,7 @@ import { GoabDropdown, GoabDropdownItem, GoabBlock } from "@abgov/angular-compon selector: "abgov-bug2849", templateUrl: "./bug2849.component.html", styleUrls: ["./bug2849.component.css"], - imports: [CommonModule, GoabDropdown, GoabDropdownItem, GoabBlock], + imports: [GoabDropdown, GoabDropdownItem, GoabBlock], schemas: [CUSTOM_ELEMENTS_SCHEMA], }) export class Bug2849Component { diff --git a/apps/prs/angular/src/routes/bugs/2852/bug2852.component.html b/apps/prs/angular/src/routes/bugs/2852/bug2852.component.html index b14218dd4e..5a1b4a8526 100644 --- a/apps/prs/angular/src/routes/bugs/2852/bug2852.component.html +++ b/apps/prs/angular/src/routes/bugs/2852/bug2852.component.html @@ -9,11 +9,12 @@

Bug #2852: FormItem with Filterable Dropdown Test

[filterable]="true" placeholder="Search for a state capital..." > - + @for (capital of usCapitals; track capital.value) { + + } @@ -30,11 +31,12 @@

Bug #2852: FormItem with Filterable Dropdown Test

[filterable]="false" placeholder="Search for a state capital..." > - + @for (capital of usCapitals; track capital.value) { + + } diff --git a/apps/prs/angular/src/routes/bugs/2852/bug2852.component.ts b/apps/prs/angular/src/routes/bugs/2852/bug2852.component.ts index b1d600508c..a351adee30 100644 --- a/apps/prs/angular/src/routes/bugs/2852/bug2852.component.ts +++ b/apps/prs/angular/src/routes/bugs/2852/bug2852.component.ts @@ -7,7 +7,6 @@ import { GoabInput, } from "@abgov/angular-components"; import { GoabDropdownOnChangeDetail } from "@abgov/ui-components-common"; -import { NgFor } from "@angular/common"; // US State Capitals const US_CAPITALS = [ @@ -67,7 +66,7 @@ const US_CAPITALS = [ selector: "abgov-bug2852", templateUrl: "./bug2852.component.html", standalone: true, - imports: [GoabBlock, GoabDropdown, GoabFormItem, GoabDropdownItem, GoabInput, NgFor], + imports: [GoabBlock, GoabDropdown, GoabFormItem, GoabDropdownItem, GoabInput], }) export class Bug2852Component { selectedCapital: string | number = ""; diff --git a/apps/prs/angular/src/routes/bugs/2873/bug2873.component.ts b/apps/prs/angular/src/routes/bugs/2873/bug2873.component.ts index 0c52b2157d..7de6f17363 100644 --- a/apps/prs/angular/src/routes/bugs/2873/bug2873.component.ts +++ b/apps/prs/angular/src/routes/bugs/2873/bug2873.component.ts @@ -1,5 +1,5 @@ -import { CommonModule } from "@angular/common"; import { Component } from "@angular/core"; +import { NgTemplateOutlet } from "@angular/common"; import { GoabAccordion, GoabBlock, @@ -17,7 +17,6 @@ import { selector: "abgov-bug2873", templateUrl: "./bug2873.component.html", imports: [ - CommonModule, GoabAccordion, GoabBlock, GoabButton, @@ -27,6 +26,7 @@ import { GoabInput, GoabText, GoabTextArea, + NgTemplateOutlet, ], }) export class Bug2873Component { diff --git a/apps/prs/angular/src/routes/bugs/2892/bug2892.component.ts b/apps/prs/angular/src/routes/bugs/2892/bug2892.component.ts index e4cb5d3c8e..54fc7955f4 100644 --- a/apps/prs/angular/src/routes/bugs/2892/bug2892.component.ts +++ b/apps/prs/angular/src/routes/bugs/2892/bug2892.component.ts @@ -1,5 +1,5 @@ import { Component } from "@angular/core"; -import { CommonModule } from "@angular/common"; + import { GoabBlock, GoabText, GoabInput, GoabFormItem } from "@abgov/angular-components"; import { GoabInputOnChangeDetail } from "@abgov/ui-components-common"; @@ -7,7 +7,7 @@ import { GoabInputOnChangeDetail } from "@abgov/ui-components-common"; standalone: true, selector: "abgov-bug2892", templateUrl: "./bug2892.component.html", - imports: [CommonModule, GoabBlock, GoabText, GoabInput, GoabFormItem], + imports: [GoabBlock, GoabText, GoabInput, GoabFormItem], }) export class Bug2892Component { handleInputChange(detail: GoabInputOnChangeDetail) { diff --git a/apps/prs/angular/src/routes/bugs/2922/bug2922.component.ts b/apps/prs/angular/src/routes/bugs/2922/bug2922.component.ts index b174c08305..d8f65de601 100644 --- a/apps/prs/angular/src/routes/bugs/2922/bug2922.component.ts +++ b/apps/prs/angular/src/routes/bugs/2922/bug2922.component.ts @@ -1,5 +1,5 @@ import { Component } from "@angular/core"; -import { CommonModule } from "@angular/common"; + import { GoabFormStepper, GoabFormStep } from "@abgov/angular-components"; import { GoabFormStepperOnChangeDetail } from "@abgov/ui-components-common"; @@ -7,7 +7,7 @@ import { GoabFormStepperOnChangeDetail } from "@abgov/ui-components-common"; standalone: true, selector: "abgov-bug2922", templateUrl: "./bug2922.component.html", - imports: [CommonModule, GoabFormStepper, GoabFormStep], + imports: [GoabFormStepper, GoabFormStep], }) export class Bug2922Component { currentStep = 1; diff --git a/apps/prs/angular/src/routes/bugs/2943/bug2943.component.ts b/apps/prs/angular/src/routes/bugs/2943/bug2943.component.ts index f433a975c6..b70cfa7de4 100644 --- a/apps/prs/angular/src/routes/bugs/2943/bug2943.component.ts +++ b/apps/prs/angular/src/routes/bugs/2943/bug2943.component.ts @@ -1,5 +1,5 @@ import { Component, signal } from "@angular/core"; -import { CommonModule } from "@angular/common"; + import { GoabBlock, GoabButton, @@ -16,7 +16,6 @@ import { templateUrl: "./bug2943.component.html", styleUrls: ["./bug2943.component.css"], imports: [ - CommonModule, GoabBlock, GoabButton, GoabDrawer, diff --git a/apps/prs/angular/src/routes/bugs/2948/bug2948.component.ts b/apps/prs/angular/src/routes/bugs/2948/bug2948.component.ts index 1efb17e290..6f96ab3bad 100644 --- a/apps/prs/angular/src/routes/bugs/2948/bug2948.component.ts +++ b/apps/prs/angular/src/routes/bugs/2948/bug2948.component.ts @@ -1,5 +1,5 @@ import { Component } from "@angular/core"; -import { CommonModule } from "@angular/common"; + import { GoabModal, GoabButton, @@ -11,7 +11,7 @@ import { standalone: true, selector: "abgov-bug2948", templateUrl: "./bug2948.component.html", - imports: [CommonModule, GoabModal, GoabButton, GoabButtonGroup, GoabBlock], + imports: [GoabModal, GoabButton, GoabButtonGroup, GoabBlock], }) export class Bug2948Component { // Modal 1: String heading diff --git a/apps/prs/angular/src/routes/bugs/2991/bug2991.component.ts b/apps/prs/angular/src/routes/bugs/2991/bug2991.component.ts index 3e74a2b5e9..10d5cff60e 100644 --- a/apps/prs/angular/src/routes/bugs/2991/bug2991.component.ts +++ b/apps/prs/angular/src/routes/bugs/2991/bug2991.component.ts @@ -1,5 +1,5 @@ import { Component } from "@angular/core"; -import { CommonModule } from "@angular/common"; + import { GoabFormItem, GoabInput } from "@abgov/angular-components"; import { GoabInputOnChangeDetail } from "@abgov/ui-components-common"; @@ -8,7 +8,7 @@ import { GoabInputOnChangeDetail } from "@abgov/ui-components-common"; selector: "abgov-bug2991", templateUrl: "./bug2991.component.html", styleUrls: ["./bug2991.component.css"], - imports: [CommonModule, GoabFormItem, GoabInput], + imports: [GoabFormItem, GoabInput], }) export class Bug2991Component { validationError?: string; diff --git a/apps/prs/angular/src/routes/bugs/3072/bug3072.component.html b/apps/prs/angular/src/routes/bugs/3072/bug3072.component.html index 5e249ed8e0..561c8b8e23 100644 --- a/apps/prs/angular/src/routes/bugs/3072/bug3072.component.html +++ b/apps/prs/angular/src/routes/bugs/3072/bug3072.component.html @@ -43,11 +43,12 @@ placeholder="Select a gender" formControlName="genderId" > + @for (gender of genders; track gender.value) { + } @@ -69,11 +70,12 @@ + @for (interest of interests; track interest.value) { + } diff --git a/apps/prs/angular/src/routes/bugs/3072/bug3072.component.ts b/apps/prs/angular/src/routes/bugs/3072/bug3072.component.ts index 73f6421b8e..396b43e8e7 100644 --- a/apps/prs/angular/src/routes/bugs/3072/bug3072.component.ts +++ b/apps/prs/angular/src/routes/bugs/3072/bug3072.component.ts @@ -1,4 +1,4 @@ -import { AsyncPipe, CommonModule } from "@angular/common"; +import { AsyncPipe, JsonPipe } from "@angular/common"; import { Component, inject } from "@angular/core"; import { FormBuilder, FormGroup, ReactiveFormsModule } from "@angular/forms"; import { @@ -23,7 +23,6 @@ import { templateUrl: "./bug3072.component.html", styleUrls: ["./bug3072.component.css"], imports: [ - CommonModule, AsyncPipe, ReactiveFormsModule, GoabBlock, @@ -39,6 +38,7 @@ import { GoabInputNumber, GoabText, GoabTextArea, + JsonPipe, ], }) export class Bug3072Component { diff --git a/apps/prs/angular/src/routes/bugs/3118/bug3118.component.ts b/apps/prs/angular/src/routes/bugs/3118/bug3118.component.ts index f8d3ff24d1..c6f4aac7ab 100644 --- a/apps/prs/angular/src/routes/bugs/3118/bug3118.component.ts +++ b/apps/prs/angular/src/routes/bugs/3118/bug3118.component.ts @@ -1,4 +1,3 @@ -import { CommonModule } from "@angular/common"; import { Component } from "@angular/core"; import { GoabBlock, @@ -14,15 +13,7 @@ import { GoabMenuButtonOnActionDetail } from "@abgov/ui-components-common"; standalone: true, selector: "abgov-bug3118", templateUrl: "./bug3118.component.html", - imports: [ - CommonModule, - GoabBlock, - GoabDivider, - GoabMenuAction, - GoabMenuButton, - GoabText, - GoabGrid, - ], + imports: [GoabBlock, GoabDivider, GoabMenuAction, GoabMenuButton, GoabText, GoabGrid], }) export class Bug3118Component { protected onAction(detail: GoabMenuButtonOnActionDetail): void { diff --git a/apps/prs/angular/src/routes/bugs/3156/bug3156.component.html b/apps/prs/angular/src/routes/bugs/3156/bug3156.component.html index 8732e0eb6f..1336bd7e19 100644 --- a/apps/prs/angular/src/routes/bugs/3156/bug3156.component.html +++ b/apps/prs/angular/src/routes/bugs/3156/bug3156.component.html @@ -1,5 +1,7 @@ - Bug 3156 — January disappears in Angular dropdowns + Bug 3156 — January disappears in Angular dropdowns The Calendar hotfix relies on every goa-dropdown-item emitting its @@ -11,9 +13,13 @@
Reproduction checklist
    -
  1. Open the dropdown below — with the regression the first entry renders blank.
  2. +
  3. + Open the dropdown below — with the regression the first entry renders blank. +
  4. Attempt to pick January — there is nothing to select.
  5. -
  6. Inspect the diagnostics table — the first mount event carries empty data.
  7. +
  8. + Inspect the diagnostics table — the first mount event carries empty data. +
@@ -23,12 +29,10 @@ >
- - + @for (month of months; track month.value) { + + + }
@@ -46,7 +50,7 @@
Captured dropdown-item:mounted events -

- Open the dropdown above to log the mount events. -

+ @if (mountedItems.length === 0) { +

Open the dropdown above to log the mount events.

+ } - - - - - - - - - - - - - - - - - -
#LabelValueMount type
{{ index + 1 }}{{ item.label }}{{ item.value }}{{ item.mountType }}
+ @if (mountedItems.length > 0) { + + + + + + + + + + + @for (item of mountedItems; track item.value; let index = $index) { + + + + + + + } + +
#LabelValueMount type
{{ index + 1 }}{{ item.label }}{{ item.value }}{{ item.mountType }}
+ } - Expected: January appears as row 1 with value "0". Regression: the row reads "(empty)", - so the dropdown never registers January and the Calendar regression remains. + Expected: January appears as row 1 with value "0". Regression: the row reads + "(empty)", so the dropdown never registers January and the Calendar regression + remains.
diff --git a/apps/prs/angular/src/routes/bugs/3156/bug3156.component.ts b/apps/prs/angular/src/routes/bugs/3156/bug3156.component.ts index ecfa352c97..4750aefcfb 100644 --- a/apps/prs/angular/src/routes/bugs/3156/bug3156.component.ts +++ b/apps/prs/angular/src/routes/bugs/3156/bug3156.component.ts @@ -5,7 +5,7 @@ import { OnDestroy, ViewChild, } from "@angular/core"; -import { CommonModule } from "@angular/common"; + import { GoabBlock, GoabDatePicker, @@ -29,7 +29,6 @@ type DropdownItemLog = { templateUrl: "./bug3156.component.html", styleUrls: ["./bug3156.component.css"], imports: [ - CommonModule, GoabBlock, GoabDatePicker, GoabDropdown, diff --git a/apps/prs/angular/src/routes/bugs/3215/bug3215.component.ts b/apps/prs/angular/src/routes/bugs/3215/bug3215.component.ts index d11c756104..0a99b23063 100644 --- a/apps/prs/angular/src/routes/bugs/3215/bug3215.component.ts +++ b/apps/prs/angular/src/routes/bugs/3215/bug3215.component.ts @@ -1,5 +1,5 @@ -import { CommonModule } from "@angular/common"; import { Component } from "@angular/core"; +import { NgTemplateOutlet } from "@angular/common"; import { GoabButton, GoabButtonGroup, @@ -11,7 +11,7 @@ import { standalone: true, selector: "abgov-bug3215", templateUrl: "./bug3215.component.html", - imports: [CommonModule, GoabButton, GoabButtonGroup, GoabDrawer, GoabText], + imports: [GoabButton, GoabButtonGroup, GoabDrawer, GoabText, NgTemplateOutlet], }) export class Bug3215Component { rightDrawerOpen = false; diff --git a/apps/prs/angular/src/routes/bugs/3248/bug3248.component.ts b/apps/prs/angular/src/routes/bugs/3248/bug3248.component.ts index 230f85d583..b1b64a29e4 100644 --- a/apps/prs/angular/src/routes/bugs/3248/bug3248.component.ts +++ b/apps/prs/angular/src/routes/bugs/3248/bug3248.component.ts @@ -1,5 +1,5 @@ import { Component } from "@angular/core"; -import { CommonModule } from "@angular/common"; + import { GoabButton, GoabDropdown, @@ -12,7 +12,7 @@ import { standalone: true, selector: "abgov-bug3248", templateUrl: "./bug3248.component.html", - imports: [CommonModule, GoabButton, GoabDropdown, GoabDropdownItem, GoabText], + imports: [GoabButton, GoabDropdown, GoabDropdownItem, GoabText], }) export class Bug3248Component { colors = ["red", "blue", "green", "yellow", "purple"]; diff --git a/apps/prs/angular/src/routes/bugs/3273/bug3273-2.component.html b/apps/prs/angular/src/routes/bugs/3273/bug3273-2.component.html new file mode 100644 index 0000000000..97ee8a9528 --- /dev/null +++ b/apps/prs/angular/src/routes/bugs/3273/bug3273-2.component.html @@ -0,0 +1,25 @@ +
+

Bug 3273: Keep side menu group open

+

This page tests a nested side menu group.

+ +

Scenario two

+

+ When you select the Parent Item, +
+ Then the Child Group will be closed, +
+ And the Parent Group will be open. +

+ +
+ + + Parent Item + + + Child Item + + + +
+
diff --git a/apps/prs/angular/src/routes/bugs/3273/bug3273-2.component.ts b/apps/prs/angular/src/routes/bugs/3273/bug3273-2.component.ts new file mode 100644 index 0000000000..c224d01903 --- /dev/null +++ b/apps/prs/angular/src/routes/bugs/3273/bug3273-2.component.ts @@ -0,0 +1,11 @@ +import { Component } from "@angular/core"; +import { CommonModule } from "@angular/common"; +import { GoabSideMenu, GoabSideMenuGroup } from "@abgov/angular-components"; + +@Component({ + standalone: true, + selector: "abgov-bug3273-2", + templateUrl: "./bug3273-2.component.html", + imports: [CommonModule, GoabSideMenu, GoabSideMenuGroup], +}) +export class Bug32732Component {} diff --git a/apps/prs/angular/src/routes/bugs/3273/bug3273.component.html b/apps/prs/angular/src/routes/bugs/3273/bug3273.component.html new file mode 100644 index 0000000000..ec8d15d996 --- /dev/null +++ b/apps/prs/angular/src/routes/bugs/3273/bug3273.component.html @@ -0,0 +1,27 @@ +
+

Bug 3273: Keep side menu group open

+

This page tests a nested side menu group.

+ +

Scenario one

+

+ When you open the Child Group, +
+ And you select the Child Item, +
+ Then the Child Group will be open, +
+ And the Parent Group will be open. +

+ +
+ + + Parent Item + + + Child Item + + + +
+
diff --git a/apps/prs/angular/src/routes/bugs/3273/bug3273.component.ts b/apps/prs/angular/src/routes/bugs/3273/bug3273.component.ts new file mode 100644 index 0000000000..0b587f9dd3 --- /dev/null +++ b/apps/prs/angular/src/routes/bugs/3273/bug3273.component.ts @@ -0,0 +1,11 @@ +import { Component } from "@angular/core"; +import { CommonModule } from "@angular/common"; +import { GoabSideMenu, GoabSideMenuGroup } from "@abgov/angular-components"; + +@Component({ + standalone: true, + selector: "abgov-bug3273", + templateUrl: "./bug3273.component.html", + imports: [CommonModule, GoabSideMenu, GoabSideMenuGroup], +}) +export class Bug3273Component {} diff --git a/apps/prs/angular/src/routes/bugs/3275/bug3275.component.ts b/apps/prs/angular/src/routes/bugs/3275/bug3275.component.ts index 99f948ace4..9ef0f2358b 100644 --- a/apps/prs/angular/src/routes/bugs/3275/bug3275.component.ts +++ b/apps/prs/angular/src/routes/bugs/3275/bug3275.component.ts @@ -1,5 +1,5 @@ import { Component } from "@angular/core"; -import { CommonModule } from "@angular/common"; + import { GoabButton, GoabButtonGroup, @@ -12,7 +12,7 @@ import { standalone: true, selector: "abgov-bug3275", templateUrl: "./bug3275.component.html", - imports: [CommonModule, GoabButton, GoabButtonGroup, GoabDatePicker, GoabFormItem], + imports: [GoabButton, GoabButtonGroup, GoabDatePicker, GoabFormItem], }) export class Bug3275Component { inputValue = ""; diff --git a/apps/prs/angular/src/routes/bugs/3279/bug3279.component.html b/apps/prs/angular/src/routes/bugs/3279/bug3279.component.html index d0a351ed09..57a0bf1654 100644 --- a/apps/prs/angular/src/routes/bugs/3279/bug3279.component.html +++ b/apps/prs/angular/src/routes/bugs/3279/bug3279.component.html @@ -4,21 +4,21 @@ This shows that keyboard navigation works correctly with various elements in the Work Side Menu component. - - + - - + + - - - - + + + + - +
@@ -34,12 +34,12 @@ - - + + - - + +
\ No newline at end of file diff --git a/apps/prs/angular/src/routes/bugs/3279/bug3279.component.ts b/apps/prs/angular/src/routes/bugs/3279/bug3279.component.ts index 409fdfbb2d..1f72d78416 100644 --- a/apps/prs/angular/src/routes/bugs/3279/bug3279.component.ts +++ b/apps/prs/angular/src/routes/bugs/3279/bug3279.component.ts @@ -1,4 +1,3 @@ -import { CommonModule } from "@angular/common"; import { Component } from "@angular/core"; import { GoabButton, @@ -6,9 +5,9 @@ import { GoabDetails, GoabLink, GoabText, - GoabxWorkSideMenu, - GoabxWorkSideMenuGroup, - GoabxWorkSideMenuItem, + GoabWorkSideMenu, + GoabWorkSideMenuGroup, + GoabWorkSideMenuItem, } from "@abgov/angular-components"; @Component({ @@ -16,15 +15,14 @@ import { selector: "abgov-bug3279", templateUrl: "./bug3279.component.html", imports: [ - CommonModule, GoabButton, GoabContainer, GoabDetails, GoabLink, GoabText, - GoabxWorkSideMenu, - GoabxWorkSideMenuGroup, - GoabxWorkSideMenuItem, + GoabWorkSideMenu, + GoabWorkSideMenuGroup, + GoabWorkSideMenuItem, ], }) export class Bug3279Component { diff --git a/apps/prs/angular/src/routes/bugs/3281/bug3281.component.ts b/apps/prs/angular/src/routes/bugs/3281/bug3281.component.ts index 8e621c447a..5867ef3bd2 100644 --- a/apps/prs/angular/src/routes/bugs/3281/bug3281.component.ts +++ b/apps/prs/angular/src/routes/bugs/3281/bug3281.component.ts @@ -1,5 +1,5 @@ import { Component, OnInit } from "@angular/core"; -import { CommonModule } from "@angular/common"; + import { GoabBlock, GoabContainer, GoabTable, GoabText } from "@abgov/angular-components"; @Component({ @@ -7,7 +7,7 @@ import { GoabBlock, GoabContainer, GoabTable, GoabText } from "@abgov/angular-co selector: "abgov-bug3281", templateUrl: "./bug3281.component.html", styleUrls: ["./bug3281.component.css"], - imports: [CommonModule, GoabBlock, GoabContainer, GoabTable, GoabText], + imports: [GoabBlock, GoabContainer, GoabTable, GoabText], }) export class Bug3281Component implements OnInit { ngOnInit() { diff --git a/apps/prs/angular/src/routes/bugs/3337/bug3337.component.html b/apps/prs/angular/src/routes/bugs/3337/bug3337.component.html index cb740268df..2e2db04c1b 100644 --- a/apps/prs/angular/src/routes/bugs/3337/bug3337.component.html +++ b/apps/prs/angular/src/routes/bugs/3337/bug3337.component.html @@ -13,8 +13,8 @@ autoComplete="name" /> - - + - Bug 3384 - Goabx Table Border + Bug 3384 - GoabTable Border The below table should have a border and border radius. - + Service @@ -13,12 +13,14 @@ - + @for (row of rows; track $index) { + {{ row.service }} {{ row.status }} {{ row.requests }} {{ row.updated }} + } - + diff --git a/apps/prs/angular/src/routes/bugs/3384/bug3384.component.ts b/apps/prs/angular/src/routes/bugs/3384/bug3384.component.ts index 48ff62ddd1..3b8a11e563 100644 --- a/apps/prs/angular/src/routes/bugs/3384/bug3384.component.ts +++ b/apps/prs/angular/src/routes/bugs/3384/bug3384.component.ts @@ -1,6 +1,6 @@ import { Component } from "@angular/core"; -import { CommonModule } from "@angular/common"; -import { GoabBlock, GoabText, GoabxTable } from "@abgov/angular-components"; + +import { GoabBlock, GoabText, GoabTable } from "@abgov/angular-components"; type Row = { service: string; @@ -13,7 +13,7 @@ type Row = { standalone: true, selector: "abgov-bug3384", templateUrl: "./bug3384.component.html", - imports: [CommonModule, GoabBlock, GoabText, GoabxTable], + imports: [GoabBlock, GoabText, GoabTable], }) export class Bug3384Component { readonly rows: Row[] = [ diff --git a/apps/prs/angular/src/routes/bugs/3450/bug3450.component.html b/apps/prs/angular/src/routes/bugs/3450/bug3450.component.html new file mode 100644 index 0000000000..d2b420dba3 --- /dev/null +++ b/apps/prs/angular/src/routes/bugs/3450/bug3450.component.html @@ -0,0 +1,49 @@ +
+

Bug 3450 - Dropdown expanding inside Container

+ + + +

The GoabDropdown below should expand outside of the container.

+ + + + + + + + +
+ +

The GoabDatePicker below should expand outside of the container.

+ + + + +
+ +

Menu Button should open properly also.

+ + + + + + +
+
+ +

Testing Directions

+

This is a test of GoabPopover not GoabDropdown or GoabDatePicker.

+
    +
  • + Open the GoabDropdown and GoabDatePicker and verify that they expand outside of the + container. +
  • +
  • + Verify that the GoabDropdown and GoabDatePicker are not cut off by the container. +
  • +
  • + Shrink and expand the window to cause the GoabDropdown and GoabDatePicker to expand + upwards instead. +
  • +
+
diff --git a/apps/prs/angular/src/routes/bugs/3450/bug3450.component.ts b/apps/prs/angular/src/routes/bugs/3450/bug3450.component.ts new file mode 100644 index 0000000000..96a357a3d2 --- /dev/null +++ b/apps/prs/angular/src/routes/bugs/3450/bug3450.component.ts @@ -0,0 +1,35 @@ +import { Component } from "@angular/core"; +import { CommonModule } from "@angular/common"; +import { + GoabBlock, + GoabContainer, + GoabDatePicker, + GoabDropdown, + GoabDropdownItem, + GoabFormItem, + GoabMenuAction, + GoabMenuButton, + GoabMenuButtonOnActionDetail, +} from "@abgov/angular-components"; + +@Component({ + standalone: true, + selector: "abgov-bug3450", + templateUrl: "./bug3450.component.html", + imports: [ + CommonModule, + GoabBlock, + GoabContainer, + GoabDatePicker, + GoabDropdown, + GoabDropdownItem, + GoabFormItem, + GoabMenuAction, + GoabMenuButton, + ], +}) +export class Bug3450Component { + onMenuAction(detail: GoabMenuButtonOnActionDetail) { + console.log("Menu action:", detail.action); + } +} diff --git a/apps/prs/angular/src/routes/bugs/3497/bug3497.component.html b/apps/prs/angular/src/routes/bugs/3497/bug3497.component.html new file mode 100644 index 0000000000..cb2d328953 --- /dev/null +++ b/apps/prs/angular/src/routes/bugs/3497/bug3497.component.html @@ -0,0 +1,108 @@ +

Bug 3497 Calendar Years Empty

+

+ When [min] or [max] is set to today then the year dropdown is empty and doesn't show + anything. +

+ +
+

Original Calendar Tests

+ +

min = today (Date object)

+ + +

max = today (Date object)

+ + +

value = today (Date object)

+ + +
+

DatePicker — Event-based (min/max = today, Date object)

+ + + + +
+

DatePicker — Reactive Form (min/max = today, Date object)

+
+ + + +
+
+
+
min
+
{{ today | date: "yyyy-MM-dd" }} (Date)
+
max
+
{{ today | date: "yyyy-MM-dd" }} (Date)
+
+
+ +
+

DatePicker — Template-driven (min/max = today, Date object)

+ + + +
+
+
min
+
{{ today | date: "yyyy-MM-dd" }} (Date)
+
max
+
{{ today | date: "yyyy-MM-dd" }} (Date)
+
+
+ +
+

DatePicker — min/max NOT today (Date object)

+ + + +
+
+
min
+
{{ notToday | date: "yyyy-MM-dd" }} (Date)
+
max
+
{{ notTodayMax | date: "yyyy-MM-dd" }} (Date)
+
+
+ +
+

DatePicker — min/max = string (not Date object)

+ + + +
+
+
min
+
"2026-01-01" (string)
+
max
+
"2026-12-31" (string)
+
+
diff --git a/apps/prs/angular/src/routes/bugs/3497/bug3497.component.ts b/apps/prs/angular/src/routes/bugs/3497/bug3497.component.ts new file mode 100644 index 0000000000..10c0afcbf8 --- /dev/null +++ b/apps/prs/angular/src/routes/bugs/3497/bug3497.component.ts @@ -0,0 +1,45 @@ +import { Component, OnInit } from "@angular/core"; +import { CommonModule } from "@angular/common"; +import { FormsModule, ReactiveFormsModule, FormGroup, FormControl } from "@angular/forms"; +import { GoabCalendar, GoabDatePicker, GoabFormItem } from "@abgov/angular-components"; +import { CalendarDate, GoabDatePickerOnChangeDetail } from "@abgov/ui-components-common"; + +@Component({ + standalone: true, + selector: "abgov-bug3497", + templateUrl: "./bug3497.component.html", + imports: [ + CommonModule, + FormsModule, + ReactiveFormsModule, + GoabCalendar, + GoabDatePicker, + GoabFormItem, + ], +}) +export class Bug3497Component implements OnInit { + today = new Date(); + notToday = new Date(2025, 0, 15); // Jan 15, 2025 + notTodayMax = new Date(2027, 11, 31); // Dec 31, 2027 + + // For template-driven form + item: Date | string = new Date(); + + // For reactive form + form = new FormGroup({ + item: new FormControl(new Date()), + }); + + ngOnInit() { + console.log("today (Date object)", this.today); + } + + dateOnChange(event: GoabDatePickerOnChangeDetail) { + console.log( + "dateOnChange:", + event, + "today?", + event.valueStr === new CalendarDate(this.today).toString(), + ); + } +} diff --git a/apps/prs/angular/src/routes/bugs/3498/bug3498.component.html b/apps/prs/angular/src/routes/bugs/3498/bug3498.component.html new file mode 100644 index 0000000000..c6082ef5ac --- /dev/null +++ b/apps/prs/angular/src/routes/bugs/3498/bug3498.component.html @@ -0,0 +1,82 @@ +
+

3498 - Radio group alignment and border adjustment

+

Version 1

+ + + + + + + + + + + + + + + + + + + + + + + + + +

Version 2 (Experimental)

+

Regular size

+ + + + + + + + + + + + + + + + + + + + + + + + + +

Compact size

+ + + + + + + + + + + + + + + + + + + + + + + + + +
\ No newline at end of file diff --git a/apps/prs/angular/src/routes/bugs/3498/bug3498.component.ts b/apps/prs/angular/src/routes/bugs/3498/bug3498.component.ts new file mode 100644 index 0000000000..7c60ce393a --- /dev/null +++ b/apps/prs/angular/src/routes/bugs/3498/bug3498.component.ts @@ -0,0 +1,17 @@ +import { Component } from "@angular/core"; +import { CommonModule } from "@angular/common"; +import { + GoabFormItem, + GoabInput, + GoabRadioGroup, + GoabRadioItem, +} from "@abgov/angular-components"; + + +@Component({ + standalone: true, + selector: "abgov-bug3498", + templateUrl: "./bug3498.component.html", + imports: [CommonModule, GoabFormItem, GoabInput, GoabRadioGroup, GoabRadioItem], +}) +export class Bug3498Component {} diff --git a/apps/prs/angular/src/routes/bugs/3505/bug3505.component.html b/apps/prs/angular/src/routes/bugs/3505/bug3505.component.html new file mode 100644 index 0000000000..afa988869d --- /dev/null +++ b/apps/prs/angular/src/routes/bugs/3505/bug3505.component.html @@ -0,0 +1,17 @@ + + Bug 3505 - Link icon click behavior + + + Click the leading icon, trailing icon, or link text. All should open the same target. + + + + Press Tab to move focus to the link. The link should show a single outer focus + outline on the component, and the internal anchor text should not show its own + separate focus outline. + + + + Alberta.ca (icon click test) + + \ No newline at end of file diff --git a/apps/prs/angular/src/routes/bugs/3505/bug3505.component.ts b/apps/prs/angular/src/routes/bugs/3505/bug3505.component.ts new file mode 100644 index 0000000000..d273e7be62 --- /dev/null +++ b/apps/prs/angular/src/routes/bugs/3505/bug3505.component.ts @@ -0,0 +1,10 @@ +import { Component } from "@angular/core"; +import { GoabBlock, GoabLink, GoabText } from "@abgov/angular-components"; + +@Component({ + standalone: true, + selector: "abgov-bug3505", + templateUrl: "./bug3505.component.html", + imports: [GoabBlock, GoabLink, GoabText], +}) +export class Bug3505Component {} \ No newline at end of file diff --git a/apps/prs/angular/src/routes/bugs/3607/bug3607.component.html b/apps/prs/angular/src/routes/bugs/3607/bug3607.component.html new file mode 100644 index 0000000000..d77f9752d7 --- /dev/null +++ b/apps/prs/angular/src/routes/bugs/3607/bug3607.component.html @@ -0,0 +1,108 @@ +
+

3607 Radio and Checkbox Interaction Area

+

Version 1

+ + + + + + + + + + + + + + + + + + + Help text with a link. + + + + + + + + + + + + + + +

Version 2 (Experimental)

+

Regular size

+ + + + + + + + + + + + + + + + + + + Help text with a link. + + + + + + + + + + + + + + +

Compact size

+ + + + + + + + + + + + + + + + + + + Help text with a link. + + + + + + + + + + + + + +
\ No newline at end of file diff --git a/apps/prs/angular/src/routes/bugs/3607/bug3607.component.ts b/apps/prs/angular/src/routes/bugs/3607/bug3607.component.ts new file mode 100644 index 0000000000..cb422e4e98 --- /dev/null +++ b/apps/prs/angular/src/routes/bugs/3607/bug3607.component.ts @@ -0,0 +1,27 @@ +import { Component } from "@angular/core"; +import { CommonModule } from "@angular/common"; +import { + GoabCheckbox, + GoabCheckboxList, + GoabFormItem, + GoabInput, + GoabRadioGroup, + GoabRadioItem, +} from "@abgov/angular-components"; + + +@Component({ + standalone: true, + selector: "abgov-bug3607", + templateUrl: "./bug3607.component.html", + imports: [ + CommonModule, + GoabCheckbox, + GoabCheckboxList, + GoabFormItem, + GoabInput, + GoabRadioGroup, + GoabRadioItem, + ], +}) +export class Bug3607Component {} diff --git a/apps/prs/angular/src/routes/bugs/3614/bug3614.component.html b/apps/prs/angular/src/routes/bugs/3614/bug3614.component.html new file mode 100644 index 0000000000..1362916ceb --- /dev/null +++ b/apps/prs/angular/src/routes/bugs/3614/bug3614.component.html @@ -0,0 +1,136 @@ +Bug #3614: IconButton Hitboxes + + + + + + View on GitHub + + + + Icon buttons at 2xsmall and xsmall sizes do not render as + square buttons - they show as weird rounded rectangles. The clickable area has a + non-square aspect ratio, which is inconsistent with the larger sizes + (small, medium, large, xlarge) + that all render as squares. + + + + + + +Test Cases + +Test 1: Named sizes (2xsmall to xlarge) + + All sizes should render as square buttons with consistent aspect ratios. + + + + + + + + + + +Test 2: Numeric sizes (1 to 6) +All numeric sizes should also render as square buttons. + + + + + + + + + +Test 3: Other Components that use IconButton + + Testing various components that use IconButton internally. Verify that the icon buttons + within these components render with correct square hitboxes. + + +Dropdown + + The dropdown toggle button should have a properly sized square hitbox. + + + + + + + + + +Filter Chips + + The v2 FilterChip uses IconButton. The close/remove icon button on each chip should look + normal. + + + @for (chip of chips; track chip) { + + } + + +Menu Button + + The dropdown arrow icon button should have a square hitbox. + + + + + + + + + +Modal + + The close icon button in the modal header should be a square hitbox. + + + Open Modal + + + Check that the close (X) icon button in the top-right corner has a square hitbox. + + + + Close + + + +Input with Trailing Icon +The trailing icon button should have a square hitbox. + + + diff --git a/apps/prs/angular/src/routes/bugs/3614/bug3614.component.ts b/apps/prs/angular/src/routes/bugs/3614/bug3614.component.ts new file mode 100644 index 0000000000..a5c3da7f7f --- /dev/null +++ b/apps/prs/angular/src/routes/bugs/3614/bug3614.component.ts @@ -0,0 +1,51 @@ +import { Component } from "@angular/core"; +import { CommonModule } from "@angular/common"; +import { + GoabBlock, + GoabButton, + GoabDetails, + GoabDivider, + GoabDropdown, + GoabDropdownItem, + GoabIconButton, + GoabInput, + GoabLink, + GoabMenuAction, + GoabMenuButton, + GoabModal, + GoabText, + GoabFilterChip, +} from "@abgov/angular-components"; + +@Component({ + standalone: true, + selector: "abgov-bug3614", + templateUrl: "./bug3614.component.html", + imports: [ + CommonModule, + GoabBlock, + GoabButton, + GoabDetails, + GoabDivider, + GoabDropdown, + GoabDropdownItem, + GoabIconButton, + GoabInput, + GoabLink, + GoabMenuAction, + GoabMenuButton, + GoabModal, + GoabText, + GoabFilterChip, + ], +}) +export class Bug3614Component { + dropdownValue = ""; + inputValue = ""; + modalOpen = false; + chips = ["Alpha", "Beta", "Gamma"]; + + removeChip(chip: string) { + this.chips = this.chips.filter((c) => c !== chip); + } +} diff --git a/apps/prs/angular/src/routes/bugs/3685/bug3685.component.html b/apps/prs/angular/src/routes/bugs/3685/bug3685.component.html new file mode 100644 index 0000000000..431307ddeb --- /dev/null +++ b/apps/prs/angular/src/routes/bugs/3685/bug3685.component.html @@ -0,0 +1,230 @@ +
+

3685 - Checkbox & Radio: Reveal width not aligned with item

+

Version 1

+ Add another item + +

Fill in the information to create a new item

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Cancel + Save new item + + +
+ + + + + + + + + + + + + + + + + + + Help text with a link. + + + + + + + + + + + + + + +

Version 2 (Experimental)

+ Add another item + +

Fill in the information to create a new item

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Cancel + Save new item + + +
+

Regular size

+ + + + + + + + + + + + + + + + + + + Help text with a link. + + + + + + + + + + + + + + +

Compact size

+ + + + + + + + + + + + + + + + + + + Help text with a link. + + + + + + + + + + + + + +
\ No newline at end of file diff --git a/apps/prs/angular/src/routes/bugs/3685/bug3685.component.ts b/apps/prs/angular/src/routes/bugs/3685/bug3685.component.ts new file mode 100644 index 0000000000..3d84dd7f61 --- /dev/null +++ b/apps/prs/angular/src/routes/bugs/3685/bug3685.component.ts @@ -0,0 +1,65 @@ +import { Component } from "@angular/core"; +import { CommonModule } from "@angular/common"; +import { + GoabButton, + GoabDropdown, + GoabDropdownItem, + GoabModal, + GoabTextArea, + GoabButtonGroup, + GoabCheckbox, + GoabCheckboxList, + GoabFormItem, + GoabInput, + GoabRadioGroup, + GoabRadioItem, +} from "@abgov/angular-components"; + + +@Component({ + standalone: true, + selector: "abgov-bug3685", + templateUrl: "./bug3685.component.html", + imports: [CommonModule, + GoabButton, + GoabDropdown, + GoabDropdownItem, + GoabModal, + GoabTextArea, + GoabButtonGroup, + GoabCheckbox, + GoabCheckboxList, + GoabFormItem, + GoabInput, + GoabRadioGroup, + GoabRadioItem, +], +}) +export class Bug3685Component { + open = false; + openTwo = false; + type: string | undefined = ""; + name = ""; + description = ""; + + toggleModal() { + this.open = !this.open; + } + + toggleModalTwo() { + this.openTwo = !this.openTwo; + } + + updateType(event: any) { + this.type = event.value; + } + + updateName(event: any) { + this.name = event.value; + } + + updateDescription(event: any) { + this.description = event.value; + } + +} diff --git a/apps/prs/angular/src/routes/features/feat1328/feat1328.component.ts b/apps/prs/angular/src/routes/features/feat1328/feat1328.component.ts index acec86592f..34566091f2 100644 --- a/apps/prs/angular/src/routes/features/feat1328/feat1328.component.ts +++ b/apps/prs/angular/src/routes/features/feat1328/feat1328.component.ts @@ -1,5 +1,5 @@ import { Component } from "@angular/core"; -import { CommonModule } from "@angular/common"; + import { GoabButton, GoabDropdown, @@ -25,7 +25,6 @@ import { selector: "abgov-feat1328", templateUrl: "./feat1328.component.html", imports: [ - CommonModule, GoabInput, GoabDropdown, GoabDropdownItem, diff --git a/apps/prs/angular/src/routes/features/feat1383/feat1383.component.ts b/apps/prs/angular/src/routes/features/feat1383/feat1383.component.ts index 0b26ff3668..b3d1e86f10 100644 --- a/apps/prs/angular/src/routes/features/feat1383/feat1383.component.ts +++ b/apps/prs/angular/src/routes/features/feat1383/feat1383.component.ts @@ -1,4 +1,3 @@ -import { CommonModule } from "@angular/common"; import { Component } from "@angular/core"; import { GoabBadge, @@ -113,7 +112,6 @@ const scenarios: { selector: "abgov-feat1383", templateUrl: "./feat1383.component.html", imports: [ - CommonModule, GoabText, GoabGrid, GoabBlock, diff --git a/apps/prs/angular/src/routes/features/feat1547/feat1547.component.ts b/apps/prs/angular/src/routes/features/feat1547/feat1547.component.ts index 162c662d48..c7e58ff61b 100644 --- a/apps/prs/angular/src/routes/features/feat1547/feat1547.component.ts +++ b/apps/prs/angular/src/routes/features/feat1547/feat1547.component.ts @@ -1,11 +1,11 @@ import { Component } from "@angular/core"; -import { CommonModule } from "@angular/common"; + import { GoabTooltip, GoabIcon, GoabBlock } from "@abgov/angular-components"; @Component({ standalone: true, selector: "abgov-feat1547", templateUrl: "./feat1547.component.html", - imports: [CommonModule, GoabTooltip, GoabIcon, GoabBlock], + imports: [GoabTooltip, GoabIcon, GoabBlock], }) export class Feat1547Component {} diff --git a/apps/prs/angular/src/routes/features/feat1813/feat1813.component.html b/apps/prs/angular/src/routes/features/feat1813/feat1813.component.html index 77f989db9b..e5d2cb8a45 100644 --- a/apps/prs/angular/src/routes/features/feat1813/feat1813.component.html +++ b/apps/prs/angular/src/routes/features/feat1813/feat1813.component.html @@ -6,8 +6,8 @@ + @for (scenario of scenarios; track scenario.id) {
+ }
diff --git a/apps/prs/angular/src/routes/features/feat1813/feat1813.component.ts b/apps/prs/angular/src/routes/features/feat1813/feat1813.component.ts index 7c42ddb182..f073e06163 100644 --- a/apps/prs/angular/src/routes/features/feat1813/feat1813.component.ts +++ b/apps/prs/angular/src/routes/features/feat1813/feat1813.component.ts @@ -5,7 +5,7 @@ import { OnDestroy, OnInit, } from "@angular/core"; -import { CommonModule } from "@angular/common"; +import { NgStyle } from "@angular/common"; import { GoabDatePicker, GoabDatePickerOnChangeDetail, @@ -41,7 +41,6 @@ interface ScenarioMeasurement { templateUrl: "./feat1813.component.html", styleUrls: ["./feat1813.component.css"], imports: [ - CommonModule, GoabDatePicker, GoabPopover, GoabButton, @@ -52,6 +51,7 @@ interface ScenarioMeasurement { ReactiveFormsModule, FormsModule, GoabBlock, + NgStyle, ], }) export class Feat1813Component implements OnInit, AfterViewInit, OnDestroy { diff --git a/apps/prs/angular/src/routes/features/feat2054/feat2054.component.html b/apps/prs/angular/src/routes/features/feat2054/feat2054.component.html index 296546bde5..40daa4330b 100644 --- a/apps/prs/angular/src/routes/features/feat2054/feat2054.component.html +++ b/apps/prs/angular/src/routes/features/feat2054/feat2054.component.html @@ -15,8 +15,8 @@ Dropdown examples + @for (example of examples; track $index) { + @for (item of dropdownItems; track item.value) { + } + } Textarea examples + @for (example of examples; track $index) { + } Tooltip examples -
+ @for (example of examples; track $index) { +
{{ example.label }} Tooltip content mirrors the textarea copy so the surface width shifts solely from @@ -81,4 +85,5 @@
+ } diff --git a/apps/prs/angular/src/routes/features/feat2054/feat2054.component.ts b/apps/prs/angular/src/routes/features/feat2054/feat2054.component.ts index 75e96f08d6..5fb917e552 100644 --- a/apps/prs/angular/src/routes/features/feat2054/feat2054.component.ts +++ b/apps/prs/angular/src/routes/features/feat2054/feat2054.component.ts @@ -1,5 +1,5 @@ import { Component } from "@angular/core"; -import { CommonModule } from "@angular/common"; + import { GoabBlock, GoabDropdown, @@ -20,7 +20,6 @@ interface MaxWidthExample { templateUrl: "./feat2054.component.html", styleUrls: ["./feat2054.component.css"], imports: [ - CommonModule, GoabBlock, GoabDropdown, GoabDropdownItem, diff --git a/apps/prs/angular/src/routes/features/feat2361/feat2361.component.html b/apps/prs/angular/src/routes/features/feat2361/feat2361.component.html index b2b3e6600f..c07cfd214e 100644 --- a/apps/prs/angular/src/routes/features/feat2361/feat2361.component.html +++ b/apps/prs/angular/src/routes/features/feat2361/feat2361.component.html @@ -30,14 +30,15 @@ [disabled]="disabledActive" [error]="errorActive" > + @for (option of horizontalOptions; track option.value) { + } @@ -52,14 +53,15 @@ [disabled]="disabledActive" [error]="errorActive" > + @for (option of verticalOptions; track option.value) { + } @@ -73,14 +75,15 @@ [disabled]="disabledActive" [error]="errorActive" > + @for (option of checkboxListOptions; track option.value) { + } @@ -90,14 +93,15 @@ requirement="optional" >
+ @for (option of checkboxOptions; track option.value) { + }
diff --git a/apps/prs/angular/src/routes/features/feat2361/feat2361.component.ts b/apps/prs/angular/src/routes/features/feat2361/feat2361.component.ts index 1ee9c818a2..5634113693 100644 --- a/apps/prs/angular/src/routes/features/feat2361/feat2361.component.ts +++ b/apps/prs/angular/src/routes/features/feat2361/feat2361.component.ts @@ -1,4 +1,3 @@ -import { CommonModule, NgFor } from "@angular/common"; import { Component } from "@angular/core"; import { GoabBlock, @@ -20,8 +19,6 @@ type SelectionOption = { value: string; label: string }; templateUrl: "./feat2361.component.html", styleUrls: ["./feat2361.component.css"], imports: [ - CommonModule, - NgFor, GoabBlock, GoabButton, GoabCheckbox, diff --git a/apps/prs/angular/src/routes/features/feat2469/feat2469.component.html b/apps/prs/angular/src/routes/features/feat2469/feat2469.component.html index ec386cab7c..f13fca1610 100644 --- a/apps/prs/angular/src/routes/features/feat2469/feat2469.component.html +++ b/apps/prs/angular/src/routes/features/feat2469/feat2469.component.html @@ -29,11 +29,13 @@

Pushed In Content

- + @for (row of tableData; track $index) { + {{ row.firstName }} {{ row.lastName }} {{ row.numberCol }} + }
diff --git a/apps/prs/angular/src/routes/features/feat2469/feat2469.component.ts b/apps/prs/angular/src/routes/features/feat2469/feat2469.component.ts index 65639c348f..c8be1598ee 100644 --- a/apps/prs/angular/src/routes/features/feat2469/feat2469.component.ts +++ b/apps/prs/angular/src/routes/features/feat2469/feat2469.component.ts @@ -1,5 +1,5 @@ import { Component } from "@angular/core"; -import { CommonModule } from "@angular/common"; + import { FormsModule } from "@angular/forms"; import { GoabButton, @@ -34,15 +34,7 @@ function generateFakeData(numRows: number): DataTableFields[] { selector: "abgov-feat2469", templateUrl: "./feat2469.component.html", styleUrls: ["./feat2469.component.css"], - imports: [ - CommonModule, - FormsModule, - GoabButton, - GoabInput, - GoabPageBlock, - GoabPushDrawer, - GoabTable, - ], + imports: [FormsModule, GoabButton, GoabInput, GoabPageBlock, GoabPushDrawer, GoabTable], }) export class Feat2469Component { pushDrawerOpen = false; diff --git a/apps/prs/angular/src/routes/features/feat2492/feat2492.component.html b/apps/prs/angular/src/routes/features/feat2492/feat2492.component.html index 64481a56bd..6e503713ac 100644 --- a/apps/prs/angular/src/routes/features/feat2492/feat2492.component.html +++ b/apps/prs/angular/src/routes/features/feat2492/feat2492.component.html @@ -2,14 +2,18 @@ Feature 2492 - textarea blur preview - Enter text, move focus away, and confirm the onBlur event emits the textarea value for display below. + Enter text, move focus away, and confirm the onBlur event emits the textarea value + for display below. Interactive example - + Captured blur details - - Blur count: {{ blurCount }} - Last value: {{ lastBlurValue || '(empty text)' }} - - - Blur the textarea to capture and render its value. - + @if (blurCount > 0) { + + Blur count: {{ blurCount }} + Last value: {{ lastBlurValue || "(empty text)" }} + + } @else { + Blur the textarea to capture and render its value. + } Event log Change events - - - Change {{ index + 1 }}: {{ entry.value || '(empty text)' }} - - - + @if (changeLog.length) { + + @for (entry of changeLog; track $index; let index = $index) { + + Change {{ index + 1 }}: {{ entry.value || "(empty text)" }} + + } + + } @else { No onChange events captured yet. - + } Key press events - - - Key {{ index + 1 }}: {{ entry.key }} value: {{ entry.value || '(empty text)' }} - - - + @if (keyPressLog.length) { + + @for (entry of keyPressLog; track $index; let index = $index) { + + Key {{ index + 1 }}: {{ entry.key }} � value: + {{ entry.value || "(empty text)" }} + + } + + } @else { No onKeyPress events captured yet. - + }
diff --git a/apps/prs/angular/src/routes/features/feat2492/feat2492.component.ts b/apps/prs/angular/src/routes/features/feat2492/feat2492.component.ts index ef11696a66..2a7e51cf24 100644 --- a/apps/prs/angular/src/routes/features/feat2492/feat2492.component.ts +++ b/apps/prs/angular/src/routes/features/feat2492/feat2492.component.ts @@ -1,5 +1,5 @@ import { Component } from "@angular/core"; -import { CommonModule } from "@angular/common"; + import { GoabBlock, GoabFormItem, @@ -8,22 +8,18 @@ import { GoabText, GoabTextArea, } from "@abgov/angular-components"; -import { GoabTextAreaOnBlurDetail, GoabTextAreaOnChangeDetail, GoabTextAreaOnKeyPressDetail } from "@abgov/ui-components-common"; +import { + GoabTextAreaOnBlurDetail, + GoabTextAreaOnChangeDetail, + GoabTextAreaOnKeyPressDetail, +} from "@abgov/ui-components-common"; @Component({ standalone: true, selector: "abgov-feat2492", templateUrl: "./feat2492.component.html", styleUrls: ["./feat2492.component.css"], - imports: [ - CommonModule, - GoabBlock, - GoabFormItem, - GoabGrid, - GoabInput, - GoabText, - GoabTextArea, - ], + imports: [GoabBlock, GoabFormItem, GoabGrid, GoabInput, GoabText, GoabTextArea], }) export class Feat2492Component { lastBlurValue = ""; diff --git a/apps/prs/angular/src/routes/features/feat2611-tabs-disabled/feat2611-tabs-disabled.component.ts b/apps/prs/angular/src/routes/features/feat2611-tabs-disabled/feat2611-tabs-disabled.component.ts index bfca090f60..f6d57dd5f0 100644 --- a/apps/prs/angular/src/routes/features/feat2611-tabs-disabled/feat2611-tabs-disabled.component.ts +++ b/apps/prs/angular/src/routes/features/feat2611-tabs-disabled/feat2611-tabs-disabled.component.ts @@ -1,5 +1,4 @@ import { Component } from "@angular/core"; -import { CommonModule } from "@angular/common"; import { GoabTabs, GoabTab, @@ -11,7 +10,7 @@ import { standalone: true, selector: "abgov-feat2611-tabs-disabled", templateUrl: "./feat2611-tabs-disabled.component.html", - imports: [CommonModule, GoabTabs, GoabTab, GoabButtonGroup, GoabButton], + imports: [GoabTabs, GoabTab, GoabButtonGroup, GoabButton], }) export class Feat2611TabsDisabledComponent { setHash(hash: string): void { diff --git a/apps/prs/angular/src/routes/features/feat2611/feat2611.component.ts b/apps/prs/angular/src/routes/features/feat2611/feat2611.component.ts index 21898a982f..baad93befe 100644 --- a/apps/prs/angular/src/routes/features/feat2611/feat2611.component.ts +++ b/apps/prs/angular/src/routes/features/feat2611/feat2611.component.ts @@ -1,5 +1,5 @@ import { Component } from "@angular/core"; -import { CommonModule } from "@angular/common"; + import { GoabTabs, GoabTab, @@ -16,7 +16,6 @@ import { selector: "abgov-feat2611", templateUrl: "./feat2611.component.html", imports: [ - CommonModule, GoabTabs, GoabTab, GoabBlock, diff --git a/apps/prs/angular/src/routes/features/feat2682/feat2682.component.ts b/apps/prs/angular/src/routes/features/feat2682/feat2682.component.ts index 40ef7fb06f..5feb54f356 100644 --- a/apps/prs/angular/src/routes/features/feat2682/feat2682.component.ts +++ b/apps/prs/angular/src/routes/features/feat2682/feat2682.component.ts @@ -1,5 +1,5 @@ import { Component } from "@angular/core"; -import { CommonModule } from "@angular/common"; + import { GoabFormItem, GoabDatePicker, @@ -12,7 +12,7 @@ import { GoabDatePickerOnChangeDetail } from "@abgov/ui-components-common"; standalone: true, selector: "abgov-feat2682", templateUrl: "./feat2682.component.html", - imports: [CommonModule, GoabFormItem, GoabDatePicker, GoabBlock, GoabText], + imports: [GoabFormItem, GoabDatePicker, GoabBlock, GoabText], }) export class Feat2682Component { // Calculate min and max dates (one month before and after today) diff --git a/apps/prs/angular/src/routes/features/feat2722/feat2722.component.ts b/apps/prs/angular/src/routes/features/feat2722/feat2722.component.ts index 3dde13669b..369f757b61 100644 --- a/apps/prs/angular/src/routes/features/feat2722/feat2722.component.ts +++ b/apps/prs/angular/src/routes/features/feat2722/feat2722.component.ts @@ -1,5 +1,5 @@ import { Component } from "@angular/core"; -import { CommonModule } from "@angular/common"; + import { GoabInput, GoabInputNumber, @@ -13,7 +13,7 @@ import { standalone: true, selector: "abgov-feat2722", templateUrl: "./feat2722.component.html", - imports: [CommonModule, GoabInput, GoabInputNumber, GoabBlock, GoabText, GoabFormItem], + imports: [GoabInput, GoabInputNumber, GoabBlock, GoabText, GoabFormItem], }) export class Feat2722Component { textValue = "Sample text input"; diff --git a/apps/prs/angular/src/routes/features/feat2730/feat2730.component.html b/apps/prs/angular/src/routes/features/feat2730/feat2730.component.html index a1c09616fc..9d295e1ff5 100644 --- a/apps/prs/angular/src/routes/features/feat2730/feat2730.component.html +++ b/apps/prs/angular/src/routes/features/feat2730/feat2730.component.html @@ -190,7 +190,8 @@

Test Results

Notification History (Last 10)

-
+ @for (notification of notificationHistory; track notification.uuid) { +
{{ notification.timestamp.toLocaleTimeString() }} - {{ notification.type }}Notification History (Last 10) UUID: {{ notification.uuid }}
+ } No notifications yet. Try clicking some buttons above! diff --git a/apps/prs/angular/src/routes/features/feat2730/feat2730.component.ts b/apps/prs/angular/src/routes/features/feat2730/feat2730.component.ts index 4e2e4298c5..7308f95c44 100644 --- a/apps/prs/angular/src/routes/features/feat2730/feat2730.component.ts +++ b/apps/prs/angular/src/routes/features/feat2730/feat2730.component.ts @@ -1,5 +1,5 @@ import { Component, OnInit } from "@angular/core"; -import { CommonModule } from "@angular/common"; + import { GoabButton, GoabBlock, @@ -22,7 +22,6 @@ import { templateUrl: "./feat2730.component.html", styleUrls: ["./feat2730.component.css"], imports: [ - CommonModule, GoabButton, GoabBlock, GoabText, diff --git a/apps/prs/angular/src/routes/features/feat2829/feat2829.component.ts b/apps/prs/angular/src/routes/features/feat2829/feat2829.component.ts index 06c9be21d0..74c5155f2e 100644 --- a/apps/prs/angular/src/routes/features/feat2829/feat2829.component.ts +++ b/apps/prs/angular/src/routes/features/feat2829/feat2829.component.ts @@ -1,5 +1,5 @@ import { Component } from "@angular/core"; -import { CommonModule } from "@angular/common"; + import { GoabButton, GoabModal, @@ -13,15 +13,7 @@ import { standalone: true, selector: "abgov-feat2829", templateUrl: "./feat2829.component.html", - imports: [ - CommonModule, - GoabButton, - GoabModal, - GoabText, - GoabInput, - GoabFormItem, - GoabBlock, - ], + imports: [GoabButton, GoabModal, GoabText, GoabInput, GoabFormItem, GoabBlock], }) export class Feat2829Component { isModalOpen = false; diff --git a/apps/prs/angular/src/routes/features/feat2885-navigation-tabs/feat2885-navigation-tabs.component.html b/apps/prs/angular/src/routes/features/feat2885-navigation-tabs/feat2885-navigation-tabs.component.html new file mode 100644 index 0000000000..c49467b50c --- /dev/null +++ b/apps/prs/angular/src/routes/features/feat2885-navigation-tabs/feat2885-navigation-tabs.component.html @@ -0,0 +1,69 @@ +

Feature #2885: Tabs navigation prop

+

+ Showcases the new navigation prop on goab-tabs. + When set to "none", tabs act as a UI switcher without updating the browser URL hash. +

+ +
+ +

Test 1: Segmented + navigation="none"

+

Tabs switch content without changing the URL hash. Used inside notification panels.

+ + +

Unread notifications content

+
+ +

Urgent notifications content

+
+ +

All notifications content

+
+
+ +
+ +

Test 2: Segmented + navigation="url" (default)

+

Default behavior: tabs update the browser URL hash when switched.

+ + +

Tab A content with URL navigation

+
+ +

Tab B content with URL navigation

+
+ +

Tab C content with URL navigation

+
+
+ +
+ +

Test 3: Default (non-segmented) + navigation="none"

+

Standard tab style with URL navigation disabled.

+ + +

Overview content

+
+ +

Details content

+
+ +

History content

+
+
+ +
+ +

Test 4: Default (non-segmented) + navigation="url" (default)

+

Standard tab style with default URL navigation.

+ + +

Section 1 content with URL navigation

+
+ +

Section 2 content with URL navigation

+
+ +

Section 3 content with URL navigation

+
+
diff --git a/apps/prs/angular/src/routes/features/feat2885-navigation-tabs/feat2885-navigation-tabs.component.ts b/apps/prs/angular/src/routes/features/feat2885-navigation-tabs/feat2885-navigation-tabs.component.ts new file mode 100644 index 0000000000..dc4c98b129 --- /dev/null +++ b/apps/prs/angular/src/routes/features/feat2885-navigation-tabs/feat2885-navigation-tabs.component.ts @@ -0,0 +1,16 @@ +import { Component, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; +import { GoabTab, GoabTabs } from "@abgov/angular-components"; + +@Component({ + standalone: true, + selector: "abgov-feat2885-navigation-tabs", + templateUrl: "./feat2885-navigation-tabs.component.html", + imports: [GoabTab, GoabTabs], + schemas: [CUSTOM_ELEMENTS_SCHEMA], +}) +export class Feat2885NavigationTabsComponent { + onTabChange(event: Event) { + const detail = (event as CustomEvent).detail; + console.log("Tab changed:", detail); + } +} diff --git a/apps/prs/angular/src/routes/features/feat2885/feat2885.component.html b/apps/prs/angular/src/routes/features/feat2885/feat2885.component.html new file mode 100644 index 0000000000..0ddad76206 --- /dev/null +++ b/apps/prs/angular/src/routes/features/feat2885/feat2885.component.html @@ -0,0 +1,179 @@ +
+ + + + + + + + + + + +
+

+ Custom Popover Content +

+

+ This demonstrates that popoverContent accepts any Angular + template, not just + GoabWorkSideNotificationPanel. +

+
    +
  • Custom alerts
  • +
  • Quick actions
  • +
  • Mini dashboards
  • +
  • Any custom UI
  • +
+
+ + Close + +
+
+
+ + + + + + + + + + + + + + + + + +
+
+ +
+ +

Feature #2885: Work Side Menu with Notification Popover

+

+ This demonstrates the GoabWorkSideMenu with the new + notification popover feature. +

+ +

New Features

+
    +
  • + Notification Popover - Click the "Notifications" menu + item to see the popover panel +
  • +
  • + Custom Popover Content - Click the "Alerts" menu item + to see a custom div, demonstrating that popoverContent + accepts any Angular template +
  • +
  • + GoabWorkSideNotificationPanel - Panel with tabs + (Unread, Urgent, All) +
  • +
  • + GoabWorkSideNotificationItem - Individual notification + cards with: +
      +
    • Title and description
    • +
    • Smart timestamp formatting (e.g., "5 min ago", "2 h ago")
    • +
    • Type badges (info, success, warning, critical)
    • +
    • Read/unread status indicator (green dot)
    • +
    • Urgent priority styling
    • +
    +
  • +
  • + Footer actions - "View all" and "Mark all as read" + buttons +
  • +
+ +

Console Output

+

+ Open the browser console to see events when clicking notifications or + footer actions. +

+
+
diff --git a/apps/prs/angular/src/routes/features/feat2885/feat2885.component.ts b/apps/prs/angular/src/routes/features/feat2885/feat2885.component.ts new file mode 100644 index 0000000000..58d06d1b1a --- /dev/null +++ b/apps/prs/angular/src/routes/features/feat2885/feat2885.component.ts @@ -0,0 +1,203 @@ +import { Component, CUSTOM_ELEMENTS_SCHEMA, OnInit, OnDestroy } from "@angular/core"; +import { CommonModule } from "@angular/common"; +import { + GoabIconButton, + GoabWorkSideMenu, + GoabWorkSideMenuItem, + GoabWorkSideNotificationPanel, + GoabWorkSideNotificationItem, +} from "@abgov/angular-components"; + +type Notification = { + id: string; + title: string; + description: string; + timestamp: string; + type: "info" | "success" | "warning" | "critical"; + readStatus: "read" | "unread"; + priority: "normal" | "urgent"; +}; + +@Component({ + standalone: true, + selector: "abgov-feat2885", + templateUrl: "./feat2885.component.html", + styles: [ + ` + .mobile-menu-toggle { + display: none; + position: fixed; + top: 1rem; + left: 1rem; + z-index: 100; + } + @media (max-width: 624px) { + .mobile-menu-toggle { + display: block; + } + } + `, + ], + imports: [ + CommonModule, + GoabWorkSideMenu, + GoabWorkSideMenuItem, + GoabWorkSideNotificationPanel, + GoabWorkSideNotificationItem, + GoabIconButton, + ], + schemas: [CUSTOM_ELEMENTS_SCHEMA], +}) +export class Feat2885Component implements OnInit, OnDestroy { + menuOpen = true; + private v2TokensLink: HTMLLinkElement | null = null; + + ngOnInit() { + // Dynamically load v2 design tokens only while this page is mounted, + // so they don't leak into other routes in the SPA. + this.v2TokensLink = document.createElement("link"); + this.v2TokensLink.rel = "stylesheet"; + this.v2TokensLink.href = "/v2-tokens/tokens.css"; + document.head.appendChild(this.v2TokensLink); + } + + ngOnDestroy() { + if (this.v2TokensLink) { + document.head.removeChild(this.v2TokensLink); + this.v2TokensLink = null; + } + } + + notifications: Notification[] = [ + { + id: "1", + title: "New case assigned", + description: "Case #12345 has been assigned to you for review.", + timestamp: new Date(Date.now() - 5 * 60 * 1000).toISOString(), + type: "info", + readStatus: "unread", + priority: "normal", + }, + { + id: "2", + title: "Document uploaded", + description: "A new document was uploaded to Case #12340.", + timestamp: new Date(Date.now() - 30 * 60 * 1000).toISOString(), + type: "success", + readStatus: "unread", + priority: "normal", + }, + { + id: "3", + title: "System maintenance", + description: "Scheduled maintenance tonight at 11 PM MST.", + timestamp: new Date(Date.now() - 1 * 60 * 60 * 1000).toISOString(), + type: "critical", + readStatus: "unread", + priority: "urgent", + }, + { + id: "4", + title: "Action required", + description: "Please review the pending approval request.", + timestamp: this.daysAgo(1, 2), + type: "warning", + readStatus: "unread", + priority: "normal", + }, + { + id: "5", + title: "Deadline approaching", + description: "Case #12300 deadline is in 24 hours.", + timestamp: this.daysAgo(1, 5), + type: "warning", + readStatus: "unread", + priority: "urgent", + }, + { + id: "6", + title: "Comment added", + description: "John Smith commented on Case #12342.", + timestamp: this.daysAgo(1, 8), + type: "info", + readStatus: "unread", + priority: "normal", + }, + { + id: "7", + title: "Case status updated", + description: "Case #12339 status changed to 'In Review'.", + timestamp: this.daysAgo(3, 2), + type: "success", + readStatus: "read", + priority: "normal", + }, + { + id: "8", + title: "New attachment", + description: "PDF document attached to Case #12338.", + timestamp: this.daysAgo(3, 6), + type: "info", + readStatus: "read", + priority: "normal", + }, + { + id: "9", + title: "Weekly report generated", + description: "Your weekly summary report is ready.", + timestamp: this.daysAgo(7, 0), + type: "info", + readStatus: "read", + priority: "normal", + }, + { + id: "10", + title: "Password reminder", + description: "Your password will expire in 30 days.", + timestamp: this.daysAgo(14, 0), + type: "warning", + readStatus: "read", + priority: "normal", + }, + ]; + + daysAgo(days: number, hours = 0): string { + const date = new Date(); + date.setDate(date.getDate() - days); + date.setHours(date.getHours() - hours); + return date.toISOString(); + } + + toggleMenu() { + this.menuOpen = !this.menuOpen; + } + + openMenu() { + this.menuOpen = true; + } + + handleNotificationClick(id: string) { + console.log("Notification clicked:", id); + this.notifications = this.notifications.map((notif) => + notif.id === id && notif.readStatus === "unread" + ? { ...notif, readStatus: "read" as const } + : notif, + ); + } + + handleMarkAllRead() { + console.log("Mark all as read clicked"); + this.notifications = this.notifications.map((notif) => ({ + ...notif, + readStatus: "read" as const, + })); + } + + handleViewAll() { + console.log("View all clicked"); + } + // This is very important in Angular, to make the mounted and updated the read status on GoabWorkSideNotificationItem correctly + trackById(_index: number, notif: Notification): string { + return notif.id; + } +} diff --git a/apps/prs/angular/src/routes/features/feat3102/feat3102.component.ts b/apps/prs/angular/src/routes/features/feat3102/feat3102.component.ts index 8e300689ce..820a7002b1 100644 --- a/apps/prs/angular/src/routes/features/feat3102/feat3102.component.ts +++ b/apps/prs/angular/src/routes/features/feat3102/feat3102.component.ts @@ -1,4 +1,3 @@ -import { CommonModule } from "@angular/common"; import { Component } from "@angular/core"; import { GoabBlock, @@ -12,14 +11,7 @@ import { standalone: true, selector: "abgov-feat3102", templateUrl: "./feat3102.component.html", - imports: [ - CommonModule, - GoabBlock, - GoabMenuAction, - GoabMenuButton, - GoabText, - GoabDivider, - ], + imports: [GoabBlock, GoabMenuAction, GoabMenuButton, GoabText, GoabDivider], }) export class Feat3102Component { onAction(e: unknown) { diff --git a/apps/prs/angular/src/routes/features/feat3137/feat3137.component.html b/apps/prs/angular/src/routes/features/feat3137/feat3137.component.html index 40bff7053b..b523a499e7 100644 --- a/apps/prs/angular/src/routes/features/feat3137/feat3137.component.html +++ b/apps/prs/angular/src/routes/features/feat3137/feat3137.component.html @@ -4,12 +4,12 @@

Feature 3137: Work Side Menu Group

This demonstrates a working Work Side Menu Group component with some child items. You should be able to toggle the menu.

- - + + - - - - - + + + + + diff --git a/apps/prs/angular/src/routes/features/feat3137/feat3137.component.ts b/apps/prs/angular/src/routes/features/feat3137/feat3137.component.ts index 8cbd10b313..5d736c923a 100644 --- a/apps/prs/angular/src/routes/features/feat3137/feat3137.component.ts +++ b/apps/prs/angular/src/routes/features/feat3137/feat3137.component.ts @@ -1,17 +1,15 @@ -import { CommonModule } from "@angular/common"; import { Component } from "@angular/core"; -import { GoabxWorkSideMenu, GoabxWorkSideMenuItem, GoabxWorkSideMenuGroup } from "@abgov/angular-components"; +import { + GoabWorkSideMenu, + GoabWorkSideMenuItem, + GoabWorkSideMenuGroup, +} from "@abgov/angular-components"; @Component({ standalone: true, selector: "abgov-feat3137", templateUrl: "./feat3137.component.html", styleUrls: ["./feat3137.component.css"], - imports: [ - CommonModule, - GoabxWorkSideMenu, - GoabxWorkSideMenuGroup, - GoabxWorkSideMenuItem - ], + imports: [GoabWorkSideMenu, GoabWorkSideMenuGroup, GoabWorkSideMenuItem], }) -export class Feat3137Component { } +export class Feat3137Component {} diff --git a/apps/prs/angular/src/routes/features/feat3211/feat3211.component.html b/apps/prs/angular/src/routes/features/feat3211/feat3211.component.html new file mode 100644 index 0000000000..665136cae2 --- /dev/null +++ b/apps/prs/angular/src/routes/features/feat3211/feat3211.component.html @@ -0,0 +1,59 @@ +
+

Feature 3211 – Angular v21 Upgrade Tests

+ +
+

Stepper

+ + + + + + + +
Page 1 content
+
Page 2 content
+
Page 3 content
+
Page 4 content
+
+ + Previous + Next + +
+ +

Input Testing

+ + + + + + + + + + + + $$ + + + +
diff --git a/apps/prs/angular/src/routes/features/feat3211/feat3211.component.ts b/apps/prs/angular/src/routes/features/feat3211/feat3211.component.ts new file mode 100644 index 0000000000..ac3eeae3ae --- /dev/null +++ b/apps/prs/angular/src/routes/features/feat3211/feat3211.component.ts @@ -0,0 +1,45 @@ +import { + GoabBlock, + GoabButton, + GoabButtonGroup, + GoabFormItem, + GoabFormStep, + GoabFormStepper, + GoabFormStepperOnChangeDetail, + GoabFormStepStatus, + GoabInput, + GoabPages, +} from "@abgov/angular-components"; + +import { Component } from "@angular/core"; + +@Component({ + standalone: true, + selector: "abgov-feat3211", + templateUrl: "./feat3211.component.html", + imports: [ + GoabBlock, + GoabButton, + GoabButtonGroup, + GoabFormItem, + GoabFormStep, + GoabFormStepper, + GoabInput, + GoabPages, + ], +}) +export class Feat3211Component { + step = -1; + status: GoabFormStepStatus[] = ["complete", "complete", "incomplete", "not-started"]; + + onChange(detail: GoabFormStepperOnChangeDetail) { + console.log("Changed"); + this.step = detail.step; + } + + setPage(page: number) { + console.log("Page button clicked"); + if (page < 1 || page > 4) return; + this.step = page; + } +} diff --git a/apps/prs/angular/src/routes/features/feat3229/feat3229.component.html b/apps/prs/angular/src/routes/features/feat3229/feat3229.component.html new file mode 100644 index 0000000000..921592843b --- /dev/null +++ b/apps/prs/angular/src/routes/features/feat3229/feat3229.component.html @@ -0,0 +1,544 @@ +
+ Feature #3229: MenuButton + + + + + + + + + 1. Icon-only (no text) — edge cases + + When no text is provided, renders as a borderless icon button. + + + + + No text, no icon, no size — defaults to ellipsis-horizontal, normal size, ariaLabel="Open menu" + + + + + + + + + + No text, no icon, no ariaLabel, size="compact" + + + + + + + + + + No text, custom ariaLabel="Actions for John Smith" + + + + + + + + + + No text, custom ariaLabel, size="compact" + + + + + + + + + + + + + 2. Size on icon-only + + + + icon + normal (default) + + + + + + + + + + icon + compact + + + + + + + + + + + + + 3. Size on text-only + + + + text + normal (default) + + + + + + + + + + text + compact + + + + + + + + + + + + + 4. Size on text + leadingIcon + + + + text + icon + normal + + + + + + + + + + text + icon + compact + + + + + + + + + + + + + 5. Menu action items — with icon vs text-only + + Verify that menu action items render correctly for both normal and compact sizes, + with and without icons. + + + + + normal — actions with icon + text + + + + + + + + + + compact — actions with icon + text + + + + + + + + + + normal — actions text-only + + + + + + + + + + compact — actions text-only + + + + + + + + + + + + + 6. Button types (normal vs compact) + + + + primary + + + + + + + + + + + + + + + + secondary + + + + + + + + + + + + + + + + tertiary + + + + + + + + + + + + + + + + + + + 7. Button variants + + The variant prop controls the color scheme: normal or destructive. + + + + + normal (default) + + + + + + + + + + + + + + destructive + + + + + + + + + + + + + + icon-only destructive + + + + + + + + + + + + + + destructive + secondary + + + + + + + + + + + + + + destructive + tertiary + + + + + + + + + + + + + + + + + 8. Icon theme (filled vs outline) + + Use icon-name:filled or icon-name:outline suffix to + control icon theme. + + + + + ellipsis-horizontal + + + + + + + + + + + + + + + + ellipsis-vertical + + + + + + + + + + + + + + + + menu + + + + + + + + + + + + + + + + settings + + + + + + + + + + + + + + +
diff --git a/apps/prs/angular/src/routes/features/feat3229/feat3229.component.ts b/apps/prs/angular/src/routes/features/feat3229/feat3229.component.ts new file mode 100644 index 0000000000..7886af2d9d --- /dev/null +++ b/apps/prs/angular/src/routes/features/feat3229/feat3229.component.ts @@ -0,0 +1,47 @@ +import { Component, OnInit, OnDestroy } from "@angular/core"; +import { + GoabBlock, + GoabDivider, + GoabText, + GoabMenuAction, + GoabMenuButton, + GoabBadge, +} from "@abgov/angular-components"; +import { GoabMenuButtonOnActionDetail } from "@abgov/ui-components-common"; + +@Component({ + standalone: true, + selector: "abgov-feat3229", + templateUrl: "./feat3229.component.html", + imports: [ + GoabBlock, + GoabDivider, + GoabMenuAction, + GoabMenuButton, + GoabBadge, + GoabText, + ], +}) +export class Feat3229Component implements OnInit, OnDestroy { + private v2TokensLink: HTMLLinkElement | null = null; + lastAction = ""; + + ngOnInit() { + this.v2TokensLink = document.createElement("link"); + this.v2TokensLink.rel = "stylesheet"; + this.v2TokensLink.href = "/v2-tokens/tokens.css"; + document.head.appendChild(this.v2TokensLink); + } + + ngOnDestroy() { + if (this.v2TokensLink) { + document.head.removeChild(this.v2TokensLink); + this.v2TokensLink = null; + } + } + + handleAction(detail: GoabMenuButtonOnActionDetail, label?: string) { + const source = label ? ` (${label})` : ""; + this.lastAction = `Action "${detail.action}"${source}`; + } +} diff --git a/apps/prs/angular/src/routes/features/feat3241/feat3241.component.html b/apps/prs/angular/src/routes/features/feat3241/feat3241.component.html index 3770f65349..14ca7d82a0 100644 --- a/apps/prs/angular/src/routes/features/feat3241/feat3241.component.html +++ b/apps/prs/angular/src/routes/features/feat3241/feat3241.component.html @@ -1,23 +1,23 @@ Feat 3241 - Experimental wrapper checks - Side-by-side comparisons of Goabx wrappers and the matching Goab components. + V2 component comparisons — all components now promoted from experimental to the main package. - Also implements all new properties created for Goabx components + Implements all new V2 properties App Footer
- GoabxAppFooter - - + GoabAppFooter + + Arts and culture - - + + Privacy - - + +
GoabAppFooter @@ -35,28 +35,28 @@ Badge
- GoabxBadge - + GoabBadge + Size = large - + Emphasis = subtle - + New type property value - +
GoabBadge Type property value that no longer exists - +
Button
- GoabxButton - Goabx action + GoabButton + Goabx action
GoabButton @@ -67,8 +67,8 @@ Calendar
- GoabxCalendar - + GoabCalendar +
GoabCalendar @@ -79,14 +79,14 @@ Callout
- GoabxCallout - + GoabCallout + Experimental callout content. - + Emphasis = high - + Experimental callout content - +
GoabCallout @@ -99,8 +99,8 @@ Datepicker
- GoabxDatepicker - + GoabDatepicker +
GoabDatepicker @@ -111,31 +111,31 @@ Form Item and Input
- GoabxFormItem + GoabxInput - - - + GoabFormItem + GoabInput + + + Form Item - Input type = text-input - - - + Input - Size = compact - - + - +
GoabFormItem + GoabInput @@ -148,10 +148,10 @@ Checkbox
- GoabxCheckbox - + GoabCheckbox + Size = compact - +
GoabCheckbox @@ -162,27 +162,27 @@ Dropdown and Items
- GoabxDropdown - - - - - - - + GoabDropdown + + + + + + + Size = compact - - + - - - - - + + + + +
GoabDropdown @@ -199,19 +199,19 @@ Textarea
- GoabxTextArea - - - + GoabTextArea + + + Text Area - Size = compact - - + - +
GoabTextArea @@ -224,31 +224,31 @@ Radio Group and Items
- GoabxRadioGroup - - - - - - + GoabRadioGroup + + + + + + Radio Group - Size = compact Radio Item - Compact = true - - - + + - - - + +
GoabRadioGroup @@ -264,14 +264,14 @@ Filter Chip
- GoabxFilterChip w/ Secondary Text - GoabFilterChip w/ Secondary Text + Leading Icon - Link
- GoabxLink - + GoabLink + Goabx link - + Color = dark - + Goabx link - + Size = large - + Goabx link - +
GoabLink @@ -318,26 +318,26 @@ Notification
- GoabxNotification - + GoabNotification + Goabx notification content. - + Emphasis = low - Goabx notification content. - + Compact = true - Goabx notification content. - + Status: {{ goabxNotificationStatus }}
@@ -352,8 +352,8 @@ Pagination
- GoabxPagination - GoabPagination + Tabs
- GoabxTabs - + GoabTabs + Goabx tab one content. @@ -387,7 +387,7 @@ Goabx tab three content. - + Selected tab: {{ goabxTab }}
@@ -410,19 +410,19 @@ Table
- GoabxTable - + GoabTable + - First name + First name - Last name + Last name - AgeAge @@ -436,9 +436,9 @@ } - - GoabxTable - Striped = true - + + GoabTable - Striped = true + First name @@ -455,7 +455,7 @@ } - +
GoabTable @@ -491,10 +491,10 @@ File Upload Input
- GoabxFileUploadInput - - - + GoabFileUploadInput + + +
GoabFileUploadInput @@ -507,8 +507,8 @@ File Upload Card
- GoabxFileUploadCard - + GoabFileUploadCard +
GoabFileUploadCard @@ -519,14 +519,14 @@ Drawer
- GoabxDrawer + GoabDrawer - Close + Close - Open Goabx drawerOpen Goabx drawer - Goabx drawer content. - +
GoabDrawer @@ -559,17 +559,17 @@ Modal
- GoabxModal + GoabModal - Cancel - Confirm + Cancel + Confirm - Open Goabx modalOpen Goabx modal - Goabx modal content. - +
GoabModal @@ -605,19 +605,19 @@ Side Menu
- GoabxSideMenu + GoabSideMenu - + - - + + Goabx navigation - - + + Goabx home Goabx settings - - + +
GoabSideMenu diff --git a/apps/prs/angular/src/routes/features/feat3241/feat3241.component.ts b/apps/prs/angular/src/routes/features/feat3241/feat3241.component.ts index 3555f99677..3f71b8085d 100644 --- a/apps/prs/angular/src/routes/features/feat3241/feat3241.component.ts +++ b/apps/prs/angular/src/routes/features/feat3241/feat3241.component.ts @@ -1,4 +1,3 @@ -import { CommonModule } from "@angular/common"; import { Component } from "@angular/core"; import { GoabAppFooter, @@ -9,7 +8,9 @@ import { GoabButton, GoabButtonGroup, GoabCallout, + GoabCalendar, GoabCheckbox, + GoabDatePicker, GoabDrawer, GoabDropdown, GoabDropdownItem, @@ -33,38 +34,6 @@ import { GoabTabs, GoabText, GoabTextArea, - GoabxAppFooter, - GoabxAppFooterMetaSection, - GoabxAppFooterNavSection, - GoabxBadge, - GoabxButton, - GoabxCallout, - GoabxCheckbox, - GoabxDrawer, - GoabxDropdown, - GoabxDropdownItem, - GoabxFileUploadCard, - GoabxFileUploadInput, - GoabxFilterChip, - GoabxFormItem, - GoabxInput, - GoabxLink, - GoabxModal, - GoabxNotification, - GoabxPagination, - GoabxRadioGroup, - GoabxRadioItem, - GoabxSideMenu, - GoabxSideMenuGroup, - GoabxSideMenuHeading, - GoabxTable, - GoabxTableSortHeader, - GoabxTabs, - GoabxTextArea, - GoabDatePicker, - GoabCalendar, - GoabxCalendar, - GoabxDatePicker, } from "@abgov/angular-components"; import { GoabPaginationOnChangeDetail, @@ -83,7 +52,6 @@ interface User { selector: "abgov-feat3241", templateUrl: "./feat3241.component.html", imports: [ - CommonModule, GoabAppFooter, GoabAppFooterMetaSection, GoabAppFooterNavSection, @@ -118,36 +86,6 @@ interface User { GoabTabs, GoabText, GoabTextArea, - GoabxAppFooter, - GoabxAppFooterMetaSection, - GoabxAppFooterNavSection, - GoabxBadge, - GoabxButton, - GoabxCalendar, - GoabxCallout, - GoabxCheckbox, - GoabxDatePicker, - GoabxDrawer, - GoabxDropdown, - GoabxDropdownItem, - GoabxFileUploadCard, - GoabxFileUploadInput, - GoabxFilterChip, - GoabxFormItem, - GoabxInput, - GoabxLink, - GoabxModal, - GoabxNotification, - GoabxPagination, - GoabxRadioGroup, - GoabxRadioItem, - GoabxSideMenu, - GoabxSideMenuGroup, - GoabxSideMenuHeading, - GoabxTable, - GoabxTableSortHeader, - GoabxTabs, - GoabxTextArea, ], }) export class Feat3241Component { diff --git a/apps/prs/angular/src/routes/features/feat3306/feat3306.component.html b/apps/prs/angular/src/routes/features/feat3306/feat3306.component.html index 74ebd0d62f..e89c8f69c4 100644 --- a/apps/prs/angular/src/routes/features/feat3306/feat3306.component.html +++ b/apps/prs/angular/src/routes/features/feat3306/feat3306.component.html @@ -7,9 +7,7 @@ - Feature 3306 - Add ability to set the `slug` for a Tab component. This slug value will work for - tabs that use a string `heading` value as well as when a `heading` slot is - defined. + The "OnChange" event should only fire once per click on the stepper items @@ -28,26 +26,30 @@ - - - - - Lorem Ipsum - 1234567890 - - Action - - - - - - - Lorem Ipsum - 1234567890 - - Action - - + @for (i of review; track $index) { + + + + + Lorem Ipsum + 1234567890 + + Action + + + } + @for (i of complete; track $index) { + + + + + Lorem Ipsum + 1234567890 + + Action + + + } @@ -66,16 +68,18 @@ - - - - - Lorem Ipsum - 1234567890 - - Action - - + @for (i of review; track $index) { + + + + + Lorem Ipsum + 1234567890 + + Action + + + } @@ -93,19 +97,20 @@ - - - - - Lorem Ipsum - 1234567890 - - Action - - + @for (i of complete; track $index) { + + + + + Lorem Ipsum + 1234567890 + + Action + + + } - diff --git a/apps/prs/angular/src/routes/features/feat3306/feat3306.component.ts b/apps/prs/angular/src/routes/features/feat3306/feat3306.component.ts index 612b09518f..63c8edf37e 100644 --- a/apps/prs/angular/src/routes/features/feat3306/feat3306.component.ts +++ b/apps/prs/angular/src/routes/features/feat3306/feat3306.component.ts @@ -1,4 +1,3 @@ -import { CommonModule } from "@angular/common"; import { Component } from "@angular/core"; import { GoabBlock, @@ -16,7 +15,6 @@ import { selector: "abgov-feat3306", templateUrl: "./feat3306.component.html", imports: [ - CommonModule, GoabBlock, GoabText, GoabDivider, diff --git a/apps/prs/angular/src/routes/features/feat3344/feat3344.component.html b/apps/prs/angular/src/routes/features/feat3344/feat3344.component.html new file mode 100644 index 0000000000..d8be64ea3a --- /dev/null +++ b/apps/prs/angular/src/routes/features/feat3344/feat3344.component.html @@ -0,0 +1,111 @@ +

PR 4: Table & TableSortHeader V2

+ + + +

+ TableSortHeader:
+ - Always-visible sort icon (chevron-expand when unsorted)
+ - Arrow-up/arrow-down for sorted states
+ - sortOrder prop shows "1", "2" for multi-column sort
+
+ Table:
+ - sortMode="single" (default) or "multi" (up to 2 columns)
+ - Initial sort declared on headers via direction + sortOrder
+ - onSort callback with sortBy, sortDir, and sorts array +

+
+
+ + + +

Test 1: Single-Column Sort (Default)

+

Click column headers to sort. Only one column sorts at a time (default behavior).

+

Current sort: {{ formatSorts(currentSorts) }}

+ + + + + + Name + + + Department + + + Salary + + + + + @for (row of singleSorted; track row.id) { + + {{ row.name }} + {{ row.department }} + {{ formatCurrency(row.salary) }} + + } + + + + + +

Test 2: Multi-Column Sort

+

With sortMode="multi", click columns to add them to sort order (up to 2).

+

Current sort: {{ formatSorts(multiSorts) }}

+ + + + + + Name + + + Department + + + Salary + + + + + @for (row of multiSorted; track row.id) { + + {{ row.name }} + {{ row.department }} + {{ formatCurrency(row.salary) }} + + } + + + + + +

Test 3: Multi Initial Sort (declarative)

+

Two initial sorts declared on headers: Department ascending (primary), Salary descending (secondary). +Use direction + sortOrder on each header to set priority.

+

Current sort: {{ formatSorts(test3Sorts) }}

+ + + + + + Name + + + Department + + + Salary + + + + + @for (row of test3Sorted; track row.id) { + + {{ row.name }} + {{ row.department }} + {{ formatCurrency(row.salary) }} + + } + + diff --git a/apps/prs/angular/src/routes/features/feat3344/feat3344.component.ts b/apps/prs/angular/src/routes/features/feat3344/feat3344.component.ts new file mode 100644 index 0000000000..a9c12eb34d --- /dev/null +++ b/apps/prs/angular/src/routes/features/feat3344/feat3344.component.ts @@ -0,0 +1,100 @@ +import { Component, OnInit, OnDestroy } from "@angular/core"; +import { + GoabBlock, + GoabDivider, + GoabDetails, + GoabTable, + GoabTableSortHeader, +} from "@abgov/angular-components"; +import { GoabTableOnSortDetail, GoabTableOnMultiSortDetail, GoabTableSortEntry } from "@abgov/ui-components-common"; + +@Component({ + standalone: true, + selector: "abgov-feat3344", + templateUrl: "./feat3344.component.html", + imports: [ + GoabBlock, + GoabDivider, + GoabDetails, + GoabTable, + GoabTableSortHeader, + ], +}) +export class Feat3344Component implements OnInit, OnDestroy { + private v2TokensLink: HTMLLinkElement | null = null; + + currentSorts: GoabTableSortEntry[] = []; + multiSorts: GoabTableSortEntry[] = []; + test3Sorts: GoabTableSortEntry[] = []; + + data = [ + { id: 1, name: "Alice Johnson", department: "Engineering", salary: 95000 }, + { id: 2, name: "Bob Smith", department: "Marketing", salary: 72000 }, + { id: 3, name: "Carol Williams", department: "Engineering", salary: 105000 }, + { id: 4, name: "David Brown", department: "Sales", salary: 68000 }, + { id: 5, name: "Eve Davis", department: "Marketing", salary: 78000 }, + ]; + + singleSorted = [...this.data]; + multiSorted = [...this.data]; + test3Sorted = [...this.data]; + + ngOnInit() { + this.v2TokensLink = document.createElement("link"); + this.v2TokensLink.rel = "stylesheet"; + this.v2TokensLink.href = "/v2-tokens/tokens.css"; + document.head.appendChild(this.v2TokensLink); + } + + ngOnDestroy() { + if (this.v2TokensLink) { + document.head.removeChild(this.v2TokensLink); + this.v2TokensLink = null; + } + } + + onSingleSortChange(detail: GoabTableOnSortDetail) { + this.currentSorts = [{ column: detail.sortBy, direction: detail.sortDir === 1 ? "asc" : "desc" }]; + this.singleSorted = this.sortData(this.data, this.currentSorts); + } + + onMultiSortChange(detail: GoabTableOnMultiSortDetail) { + this.multiSorts = detail.sorts; + this.multiSorted = this.sortData(this.data, this.multiSorts); + } + + onTest3SortChange(detail: GoabTableOnMultiSortDetail) { + this.test3Sorts = detail.sorts; + this.test3Sorted = this.sortData(this.data, this.test3Sorts); + } + + formatSorts(sorts: GoabTableSortEntry[]): string { + if (sorts.length === 0) return "None"; + return sorts.map((s, i) => `${i + 1}. ${s.column} (${s.direction})`).join(", "); + } + + formatCurrency(value: number): string { + return "$" + value.toLocaleString(); + } + + private sortData( + data: typeof this.data, + sorts: GoabTableSortEntry[], + ): typeof this.data { + if (sorts.length === 0) return [...data]; + return [...data].sort((a, b) => { + for (const { column, direction } of sorts) { + const aVal = a[column as keyof typeof a]; + const bVal = b[column as keyof typeof b]; + let cmp = 0; + if (typeof aVal === "string" && typeof bVal === "string") { + cmp = aVal.localeCompare(bVal); + } else { + cmp = (aVal as number) - (bVal as number); + } + if (cmp !== 0) return direction === "asc" ? cmp : -cmp; + } + return 0; + }); + } +} diff --git a/apps/prs/angular/src/routes/features/feat3370/feat3370.component.ts b/apps/prs/angular/src/routes/features/feat3370/feat3370.component.ts index 8896bade1a..73a4216de7 100644 --- a/apps/prs/angular/src/routes/features/feat3370/feat3370.component.ts +++ b/apps/prs/angular/src/routes/features/feat3370/feat3370.component.ts @@ -1,4 +1,3 @@ -import { CommonModule } from "@angular/common"; import { Component } from "@angular/core"; import { GoabButton, @@ -15,7 +14,7 @@ import { standalone: true, selector: "abgov-feat3370", templateUrl: "./feat3370.component.html", - imports: [CommonModule, GoabButton, GoabButtonGroup, GoabCalendar, GoabDatePicker], + imports: [GoabButton, GoabButtonGroup, GoabCalendar, GoabDatePicker], }) export class Feat3370Component { calendarValue: Date | string = ""; diff --git a/apps/prs/angular/src/routes/features/feat3396/feat3396.component.html b/apps/prs/angular/src/routes/features/feat3396/feat3396.component.html new file mode 100644 index 0000000000..07f4a7ad7b --- /dev/null +++ b/apps/prs/angular/src/routes/features/feat3396/feat3396.component.html @@ -0,0 +1,47 @@ +b +
+ Feature: Text heading-2xs size + + + View on GitHub + + + + The Text component now supports heading-2xs from v2 design tokens. + + + + V2 Design Tokens + +
+ heading-xs + heading-2xs (distinct from heading-xs) +
+ + V1 Design Tokens + + heading-xs + heading-2xs (falls back to heading-xs) +
diff --git a/apps/prs/angular/src/routes/features/feat3396/feat3396.component.ts b/apps/prs/angular/src/routes/features/feat3396/feat3396.component.ts new file mode 100644 index 0000000000..a267ac2c08 --- /dev/null +++ b/apps/prs/angular/src/routes/features/feat3396/feat3396.component.ts @@ -0,0 +1,10 @@ +import { Component } from "@angular/core"; +import { GoabDivider, GoabLink, GoabText } from "@abgov/angular-components"; + +@Component({ + standalone: true, + selector: "abgov-feat3396", + templateUrl: "./feat3396.component.html", + imports: [GoabDivider, GoabLink, GoabText], +}) +export class Feat3396Component {} diff --git a/apps/prs/angular/src/routes/features/feat3398/feat3398.component.html b/apps/prs/angular/src/routes/features/feat3398/feat3398.component.html new file mode 100644 index 0000000000..18af06dafa --- /dev/null +++ b/apps/prs/angular/src/routes/features/feat3398/feat3398.component.html @@ -0,0 +1,62 @@ +
+ Feature 3398: Work Side Menu Group open prop + + Use the button below to toggle the side menu group open and closed. + + + Scenario 1: Open and close a group + The button should toggle the group open and closed. + +
+ +
+ + + + {{ groupOpen ? "Close group" : "Open group" }} + + + + + + + + + Scenario 2: Open a group with a current item + + The Features group should be open because it has a current menu item. The + Bugs group should remain closed. + + +
+ +
+ + + + + + + + + + + +
diff --git a/apps/prs/angular/src/routes/features/feat3398/feat3398.component.ts b/apps/prs/angular/src/routes/features/feat3398/feat3398.component.ts new file mode 100644 index 0000000000..f14458b57f --- /dev/null +++ b/apps/prs/angular/src/routes/features/feat3398/feat3398.component.ts @@ -0,0 +1,30 @@ +import { CommonModule } from "@angular/common"; +import { Component } from "@angular/core"; +import { + GoabButton, + GoabText, + GoabWorkSideMenu, + GoabWorkSideMenuGroup, + GoabWorkSideMenuItem, +} from "@abgov/angular-components"; + +@Component({ + standalone: true, + selector: "abgov-feat3398", + templateUrl: "./feat3398.component.html", + imports: [ + CommonModule, + GoabButton, + GoabText, + GoabWorkSideMenu, + GoabWorkSideMenuGroup, + GoabWorkSideMenuItem, + ], +}) +export class Feat3398Component { + groupOpen = false; + + toggleGroup(): void { + this.groupOpen = !this.groupOpen; + } +} diff --git a/apps/prs/angular/src/routes/features/feat3407SkipOnFocusTab/feat3407-skip-on-focus-tab.component.html b/apps/prs/angular/src/routes/features/feat3407SkipOnFocusTab/feat3407-skip-on-focus-tab.component.html new file mode 100644 index 0000000000..9ec6cb352f --- /dev/null +++ b/apps/prs/angular/src/routes/features/feat3407SkipOnFocusTab/feat3407-skip-on-focus-tab.component.html @@ -0,0 +1,49 @@ +
+ #3407: Skip Focus on Initial Tab Load + + Testing skipFocus on initial page load (no visible focus ring) and + segmented tabpanel fixes (no focus ring or tab stop on empty content). + + + + + + + Test 1: Skip focus on initial load + + When the page loads, the active tab should NOT have a visible focus + ring. Reload the page and confirm no tab shows a focus outline + until you interact via keyboard. + + + + Not initially selected. + + + + This tab is initially active via initialTab=2. It should NOT + have a focus ring on page load. + + + + Not initially selected. + + + + + + Test 2: When no initialize Tabs + + + Default tabs — check URL changes when clicking tabs. + + + The URL hash should update to reflect the active tab. + + + Resize browser to mobile width — tabs should stack vertically. + + + + +
diff --git a/apps/prs/angular/src/routes/features/feat3407SkipOnFocusTab/feat3407-skip-on-focus-tab.component.ts b/apps/prs/angular/src/routes/features/feat3407SkipOnFocusTab/feat3407-skip-on-focus-tab.component.ts new file mode 100644 index 0000000000..471a109252 --- /dev/null +++ b/apps/prs/angular/src/routes/features/feat3407SkipOnFocusTab/feat3407-skip-on-focus-tab.component.ts @@ -0,0 +1,16 @@ +import { Component } from "@angular/core"; +import { + GoabBlock, + GoabText, + GoabDivider, + GoabTabs, + GoabTab, +} from "@abgov/angular-components"; + +@Component({ + standalone: true, + selector: "abgov-feat3407-skip-on-focus-tab", + templateUrl: "./feat3407-skip-on-focus-tab.component.html", + imports: [GoabBlock, GoabText, GoabDivider, GoabTabs, GoabTab], +}) +export class Feat3407SkipOnFocusTabComponent {} diff --git a/apps/prs/angular/src/routes/features/feat3407StackOnMobile/feat3407-stack-on-mobile.component.html b/apps/prs/angular/src/routes/features/feat3407StackOnMobile/feat3407-stack-on-mobile.component.html new file mode 100644 index 0000000000..37148d8b11 --- /dev/null +++ b/apps/prs/angular/src/routes/features/feat3407StackOnMobile/feat3407-stack-on-mobile.component.html @@ -0,0 +1,79 @@ +
+ #3407: orientation Prop + + Testing orientation prop (controls mobile stacking behavior). orientation is + only available on goab-tabs. + + + + + + + + Test 1: Experimental Tabs + orientation="auto" (default) + + + Experimental (v2) tabs that stack vertically on mobile (default behavior). + Resize browser to mobile width to verify tabs stack. + + + + These tabs should stack vertically on mobile. + + + Vertical stacking on narrow screens. + + + Compare with Test 2 below. + + + + + + Test 2: Experimental Tabs + orientation="horizontal" + + Experimental (v2) tabs that stay horizontal on mobile. Resize browser to + mobile width to verify tabs remain in a row. + + + + These tabs should stay horizontal on mobile. + + + No vertical stacking on narrow screens. + + + Useful when horizontal space is preferred. + + + + + + + Test 3: Segmented variant (always not stacked on mobile) + + + Segmented tabs stay horizontal on mobile by default (no prop needed). Resize + to mobile width to verify. + + + + + + + + + + Test 4: Segmented + orientation="horizontal" + + Segmented tabs with orientation explicitly set to "horizontal". Should remain + horizontal on mobile (same as default segmented behavior). + + + + + + + + +
diff --git a/apps/prs/angular/src/routes/features/feat3407StackOnMobile/feat3407-stack-on-mobile.component.ts b/apps/prs/angular/src/routes/features/feat3407StackOnMobile/feat3407-stack-on-mobile.component.ts new file mode 100644 index 0000000000..6ad2ec1509 --- /dev/null +++ b/apps/prs/angular/src/routes/features/feat3407StackOnMobile/feat3407-stack-on-mobile.component.ts @@ -0,0 +1,16 @@ +import { Component } from "@angular/core"; +import { + GoabBlock, + GoabText, + GoabDivider, + GoabTabs, + GoabTab, +} from "@abgov/angular-components"; + +@Component({ + standalone: true, + selector: "abgov-feat3407-stack-on-mobile", + templateUrl: "./feat3407-stack-on-mobile.component.html", + imports: [GoabBlock, GoabText, GoabDivider, GoabTabs, GoabTab], +}) +export class Feat3407StackOnMobileComponent {} diff --git a/apps/prs/angular/src/routes/features/feat3478/feat3478.component.html b/apps/prs/angular/src/routes/features/feat3478/feat3478.component.html new file mode 100644 index 0000000000..de6fa413cd --- /dev/null +++ b/apps/prs/angular/src/routes/features/feat3478/feat3478.component.html @@ -0,0 +1,370 @@ +
+ Feature #3478: Popover API Rewrite + Test Cases + + + Calendar + + + + + + Popover + + Popover with Close Button (Focus Trap test) + + Open the popover and verify Tab key cycles focus within the popover content (focus + trap). Click the Close button inside to close. + + + + Open Popover + +

This popover has buttons inside. Tab between them to test focus trap.

+ + + Action + + + Close Popover + + +
+ + Popover Playground + + Modify popover properties dynamically to verify positioning, sizing, and padding work + correctly after the rewrite. + + +
+ + + Click me + + Popover content with dynamic properties. + + Max Width: {{ popoverMaxWidth || "(default)" }} | Min Width: + {{ popoverMinWidth || "(none)" }} | Position: {{ popoverPosition }} | Padded: + {{ popoverPadded ? "Yes" : "No" }} + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Menu Button + + Test Menu Button: Press Enter and arrow up and down see whether Menu Button works as + expected. + + +
+ Short actions: + + + + +
+
+ Many actions with long text: + + + + + + + +
+
+ + +
+ Dropdown + + Standard Dropdown + + Dropdown controls its popover by setting open="true"/"false". Click it to verify the + option list appears. If the open prop is missing, the Dropdown will not show its + options. + + + + + + + Selected: {{ modalDropdownValue || "(none)" }} + + Filterable Dropdown + + Focus the input and press Space — it should type a space, not toggle the popover. + + + + + + + + + +
+ Edge Cases + + + Test 1: Popover in Modal (z-index fix) + + Previously, position: absolute and z-index: 99 on the popover content caused dropdowns + and date pickers inside modals to render behind or outside the modal. The native + Popover API renders in the top layer, fixing this. Click the button below to open a + modal with a Dropdown and DatePicker inside. + + Open Modal with Popover Components + + + The Dropdown and DatePicker below should render their popovers correctly above the + modal — not clipped or hidden behind it. + + + + + + + + + + +
+ + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor + incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis + nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + + + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia + deserunt mollit anim id est laborum. Sed ut perspiciatis unde omnis iste natus + error sit voluptatem accusantium doloremque laudantium. + +
+ + + + +
+
+ + + + + Test 2: AppHeaderMenu closes on navigation + + The "Services" and "Account" menus in the header above use + goab-app-header-menu, which uses goa-popover internally. Open a menu, then click a + link inside it. The page content will change but the header stays — verify the menu + popover closed. This is to test handleUrlChange inside the Popover.svelte + + + + Test 3: Multiple Popovers + + Opening one popover should close others (popover="auto" behavior). + + + + Popover A + Content A + + + Popover B + Content B + + + Popover C + Content C + + + + + Test 4: #3499 Dismissing Notification breaks AppHeaderMenu + + When a Notification banner is dismissed (removed from the DOM), it should not break + the AppHeaderMenu popover. Steps to reproduce: dismiss the notification below, then + try opening the AppHeaderMenu in the header. It should still work. + + + Menu Item 1 + Menu Item 2 + Menu Item 3 + + @if (showBanner) { + + Dismiss this notification, then verify AppHeaderMenu still works. + + } + @if (!showBanner) { + + Notification dismissed. Now open the AppHeaderMenu above — it should still function + correctly. + + + Reset notification + + } + + + Test 5: #3067 Focus issues with Popover + + After closing a popover with Escape, focus should return to the trigger element. + Steps: 1) Focus the button below, 2) Press Enter to open the popover, 3) Press Escape + to close, 4) The button should still be focused (yellow border visible), 5) Press Tab + — the next interactive element should be selected, not the popover. + + + + Focus Test Button + Press Escape to close. Focus should return to the button. + + Next Focusable Element + + + + Test 6: #3062 Popover maxWidth not respected above a button + + When a Popover is placed directly above a goab-button or goab-input in the DOM, it + should still respect the maxWidth property. Both popovers below should have the same + width (default 320px). Previously the one above the button would ignore maxWidth. + + + + + Show Popover + + This popover is above the button. It should respect maxWidth (320px). + + + Submit Form + + + + Popover Test + + This popover is below the button. It should also respect maxWidth + (320px). + + +
diff --git a/apps/prs/angular/src/routes/features/feat3478/feat3478.component.ts b/apps/prs/angular/src/routes/features/feat3478/feat3478.component.ts new file mode 100644 index 0000000000..78c84c0110 --- /dev/null +++ b/apps/prs/angular/src/routes/features/feat3478/feat3478.component.ts @@ -0,0 +1,108 @@ +import { Component, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; +import { + GoabBlock, + GoabButton, + GoabCheckbox, + GoabDatePicker, + GoabDetails, + GoabDivider, + GoabDropdown, + GoabDropdownItem, + GoabFormItem, + GoabInput, + GoabMenuAction, + GoabMenuButton, + GoabModal, + GoabNotification, + GoabPopover, + GoabText, + GoabAppHeaderMenu, +} from "@abgov/angular-components"; +import { + GoabCheckboxOnChangeDetail, + GoabDatePickerOnChangeDetail, + GoabDropdownOnChangeDetail, + GoabInputOnChangeDetail, + GoabMenuButtonOnActionDetail, +} from "@abgov/ui-components-common"; + +@Component({ + standalone: true, + selector: "abgov-feat3478", + templateUrl: "./feat3478.component.html", + schemas: [CUSTOM_ELEMENTS_SCHEMA], + imports: [ + GoabBlock, + GoabButton, + GoabCheckbox, + GoabDatePicker, + GoabDetails, + GoabDivider, + GoabDropdown, + GoabDropdownItem, + GoabFormItem, + GoabInput, + GoabMenuAction, + GoabMenuButton, + GoabModal, + GoabNotification, + GoabPopover, + GoabText, + GoabAppHeaderMenu, + ], +}) +export class Feat3478Component { + modalOpen = false; + modalDropdownValue = ""; + modalDateValue: string | Date = ""; + + popoverMaxWidth = "320px"; + popoverMinWidth = ""; + popoverPosition: "above" | "below" | "auto" = "auto"; + popoverPadded = true; + showBanner = true; + + onDateChange(detail: GoabDatePickerOnChangeDetail) { + console.log("DatePicker changed:", detail); + } + + onModalDropdownChange(detail: GoabDropdownOnChangeDetail) { + this.modalDropdownValue = detail.value ?? ""; + } + + onModalDateChange(detail: GoabDatePickerOnChangeDetail) { + this.modalDateValue = detail.valueStr; + } + + onMenuAction(detail: GoabMenuButtonOnActionDetail) { + console.log("Action:", detail); + } + + onFilterableChange(detail: GoabDropdownOnChangeDetail) { + console.log("Filterable selected:", detail.value); + } + + onMaxWidthChange(detail: GoabInputOnChangeDetail) { + this.popoverMaxWidth = detail.value; + } + + onMinWidthChange(detail: GoabInputOnChangeDetail) { + this.popoverMinWidth = detail.value; + } + + onPositionChange(detail: GoabDropdownOnChangeDetail) { + this.popoverPosition = detail.value as "above" | "below" | "auto"; + } + + onPaddedChange(detail: GoabCheckboxOnChangeDetail) { + this.popoverPadded = detail.checked; + } + + dismissNotification() { + this.showBanner = false; + } + + resetNotification() { + this.showBanner = true; + } +} diff --git a/apps/prs/angular/src/routes/features/feat3529/feat3529.component.html b/apps/prs/angular/src/routes/features/feat3529/feat3529.component.html new file mode 100644 index 0000000000..1bdd7b07a8 --- /dev/null +++ b/apps/prs/angular/src/routes/features/feat3529/feat3529.component.html @@ -0,0 +1,104 @@ +
+

Feature #3529: Heading Letter Spacing

+

+ Letter-spacing design tokens have been applied to all heading sizes. Inspect each + heading below and verify that letter-spacing is set via the + corresponding CSS custom property. +

+ + + + +

Explicit size prop

+

Each goab-text below uses an explicit size prop. Resize to mobile to verify the mobile tokens also apply.

+ + +
+

size="heading-xl" — token: --goa-typography-heading-xl-letter-spacing

+ + Heading XL — The quick brown fox jumps over the lazy dog + +
+ +
+

size="heading-l" — token: --goa-typography-heading-l-letter-spacing

+ + Heading L — The quick brown fox jumps over the lazy dog + +
+ +
+

size="heading-m" — token: --goa-typography-heading-m-letter-spacing

+ + Heading M — The quick brown fox jumps over the lazy dog + +
+ +
+

size="heading-s" — token: --goa-typography-heading-s-letter-spacing

+ + Heading S — The quick brown fox jumps over the lazy dog + +
+ +
+

size="heading-xs" — token: --goa-typography-heading-xs-letter-spacing

+ + Heading XS — The quick brown fox jumps over the lazy dog + +
+ +
+

size="heading-2xs" — token: --goa-typography-heading-2xs-letter-spacing

+ + Heading 2XS — The quick brown fox jumps over the lazy dog + +
+
+ + + + +

Semantic heading tags (default sizing)

+

+ Each heading tag below relies on the default size mapping in + Text.svelte. The same letter-spacing tokens should apply. +

+ + +
+

tag="h1" → heading-xl — token: --goa-typography-heading-xl-letter-spacing

+ + H1 — The quick brown fox jumps over the lazy dog + +
+ +
+

tag="h2" → heading-l — token: --goa-typography-heading-l-letter-spacing

+ + H2 — The quick brown fox jumps over the lazy dog + +
+ +
+

tag="h3" → heading-m — token: --goa-typography-heading-m-letter-spacing

+ + H3 — The quick brown fox jumps over the lazy dog + +
+ +
+

tag="h4" → heading-s — token: --goa-typography-heading-s-letter-spacing

+ + H4 — The quick brown fox jumps over the lazy dog + +
+ +
+

tag="h5" → heading-xs — token: --goa-typography-heading-xs-letter-spacing

+ + H5 — The quick brown fox jumps over the lazy dog + +
+
+
diff --git a/apps/prs/angular/src/routes/features/feat3529/feat3529.component.ts b/apps/prs/angular/src/routes/features/feat3529/feat3529.component.ts new file mode 100644 index 0000000000..4f850146ee --- /dev/null +++ b/apps/prs/angular/src/routes/features/feat3529/feat3529.component.ts @@ -0,0 +1,11 @@ +import { Component, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; +import { GoabBlock, GoabDivider, GoabText } from "@abgov/angular-components"; + +@Component({ + standalone: true, + selector: "abgov-feat3529", + templateUrl: "./feat3529.component.html", + schemas: [CUSTOM_ELEMENTS_SCHEMA], + imports: [GoabBlock, GoabDivider, GoabText], +}) +export class Feat3529Component {} diff --git a/apps/prs/angular/src/routes/features/feat3544/feat3544.component.html b/apps/prs/angular/src/routes/features/feat3544/feat3544.component.html new file mode 100644 index 0000000000..f3bdbeab64 --- /dev/null +++ b/apps/prs/angular/src/routes/features/feat3544/feat3544.component.html @@ -0,0 +1,61 @@ +
+ Feature 3544: Optional Side Menu Icons + + Both menus below use the same structure in primary content: one item and one group. + The left menu includes icons, and the right menu does not. + + +
+ + With icons +
+ +
+
+ + + Without icons +
+ +
+
+
+
+ + + + + + + + + + + + + + diff --git a/apps/prs/angular/src/routes/features/feat3544/feat3544.component.ts b/apps/prs/angular/src/routes/features/feat3544/feat3544.component.ts new file mode 100644 index 0000000000..6ef366e9cb --- /dev/null +++ b/apps/prs/angular/src/routes/features/feat3544/feat3544.component.ts @@ -0,0 +1,22 @@ +import { Component } from "@angular/core"; +import { + GoabContainer, + GoabText, + GoabWorkSideMenu, + GoabWorkSideMenuGroup, + GoabWorkSideMenuItem, +} from "@abgov/angular-components"; + +@Component({ + standalone: true, + selector: "abgov-feat3544", + templateUrl: "./feat3544.component.html", + imports: [ + GoabContainer, + GoabText, + GoabWorkSideMenu, + GoabWorkSideMenuGroup, + GoabWorkSideMenuItem, + ], +}) +export class Feat3544Component {} diff --git a/apps/prs/angular/src/routes/features/featV2Checkbox/featV2Checkbox.component.html b/apps/prs/angular/src/routes/features/featV2Checkbox/featV2Checkbox.component.html new file mode 100644 index 0000000000..81817f1774 --- /dev/null +++ b/apps/prs/angular/src/routes/features/featV2Checkbox/featV2Checkbox.component.html @@ -0,0 +1,203 @@ +
+ V2 Checkbox Fixes + + + This page demonstrates fixes for checkbox spacing issues: + + + + 1. Checkbox auto-margin removed - Checkboxes no longer have default + bottom margin, fixing alignment in tables + + + 2. CheckboxList gap - CheckboxList now controls its own spacing + between items using gap: var(--goa-space-m) + + + + + + + + Test 1: Checkbox in Table + + + Previously, checkboxes in tables had unwanted bottom margin causing misalignment. Now + they align properly with the row content. + + + + + + + + + Name + Email + Status + + + + @for (row of tableData; track row.id) { + + + + + {{ row.name }} + {{ row.email }} + {{ row.status }} + + } + + + + + Selected: {{ selectedRows.size }} of {{ tableData.length }} rows + + + + + + + Test 2: CheckboxList Spacing + + + CheckboxList now uses gap: var(--goa-space-m) for consistent spacing between items. + Previously relied on individual checkbox margins. + + + + + + + + + + Selected: {{ checkboxListValue.length > 0 ? checkboxListValue.join(", ") : "none" }} + + + + + + + Test 3: V2 Compact CheckboxList + + + Compact checkbox list uses smaller gap (var(--goa-space-s)) between items. + + + + + + + + + + Selected: {{ compactListValue.length > 0 ? compactListValue.join(", ") : "none" }} + + + + + + + Test 4: V2 Standalone Checkbox (No Auto-Margin) + + + V2 checkboxes no longer have default bottom margin. Spacing should be controlled by + the parent layout. + + + + + + + + + + Notice: No extra margin between checkboxes - spacing controlled by goab-block gap. + + + + + + V1 Regression Tests + + These tests verify V1 checkboxes still behave correctly after the V2 spacing changes. + + + + + Test 5: V1 Standalone Checkboxes (Auto-Margin) + + + V1 checkboxes should still have their default bottom margin (space-m). + + +
+ + +
+ + + + + + Test 6: V1 CheckboxList (No Gap Change) + + + V1 checkbox lists should look the same as before - individual checkbox margins control + spacing, list gap is 0. + + + + + + + + + + Selected: {{ v1ListValue.length > 0 ? v1ListValue.join(", ") : "none" }} + +
diff --git a/apps/prs/angular/src/routes/features/featV2Checkbox/featV2Checkbox.component.ts b/apps/prs/angular/src/routes/features/featV2Checkbox/featV2Checkbox.component.ts new file mode 100644 index 0000000000..b0bea4f4a8 --- /dev/null +++ b/apps/prs/angular/src/routes/features/featV2Checkbox/featV2Checkbox.component.ts @@ -0,0 +1,79 @@ +import { Component } from "@angular/core"; +import { + GoabCheckbox, + GoabCheckboxList, + GoabText, + GoabTable, + GoabBlock, + GoabDivider, + GoabCheckboxOnChangeDetail, + GoabCheckboxListOnChangeDetail, +} from "@abgov/angular-components"; + +@Component({ + standalone: true, + selector: "abgov-feat-v2-checkbox", + templateUrl: "./featV2Checkbox.component.html", + imports: [ + GoabCheckbox, + GoabCheckboxList, + GoabText, + GoabTable, + GoabBlock, + GoabDivider, + ], +}) +export class FeatV2CheckboxComponent { + selectedRows: Set = new Set(); + checkboxListValue: string[] = []; + compactListValue: string[] = []; + v1ListValue: string[] = []; + + tableData = [ + { id: "row1", name: "Alice Johnson", email: "alice@example.com", status: "Active" }, + { id: "row2", name: "Bob Smith", email: "bob@example.com", status: "Pending" }, + { id: "row3", name: "Carol Davis", email: "carol@example.com", status: "Active" }, + ]; + + get allSelected(): boolean { + return this.selectedRows.size === this.tableData.length; + } + + get someSelected(): boolean { + return this.selectedRows.size > 0 && this.selectedRows.size < this.tableData.length; + } + + isRowSelected(rowId: string): boolean { + return this.selectedRows.has(rowId); + } + + toggleSelectAll(event: GoabCheckboxOnChangeDetail) { + if (event.checked) { + this.selectedRows = new Set(this.tableData.map((row) => row.id)); + } else { + this.selectedRows = new Set(); + } + } + + toggleRow(rowId: string, event: GoabCheckboxOnChangeDetail) { + const newSelected = new Set(this.selectedRows); + if (event.checked) { + newSelected.add(rowId); + } else { + newSelected.delete(rowId); + } + this.selectedRows = newSelected; + } + + onCheckboxListChange(event: GoabCheckboxListOnChangeDetail) { + this.checkboxListValue = event.value; + } + + onCompactListChange(event: GoabCheckboxListOnChangeDetail) { + this.compactListValue = event.value; + } + + onV1ListChange(event: GoabCheckboxListOnChangeDetail) { + this.v1ListValue = event.value; + } +} diff --git a/apps/prs/react/src/app/all.tsx b/apps/prs/react/src/app/all.tsx index 02c4a0a3dd..49163dbaf4 100644 --- a/apps/prs/react/src/app/all.tsx +++ b/apps/prs/react/src/app/all.tsx @@ -237,9 +237,9 @@ export function AllComponents() { - - - + + + {/* Component ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ */} @@ -3866,7 +3866,7 @@ export function AllComponents() { Side menu item } + meta={} > Side menu heading diff --git a/apps/prs/react/src/app/app.tsx b/apps/prs/react/src/app/app.tsx index c63a1c7200..04194782fb 100644 --- a/apps/prs/react/src/app/app.tsx +++ b/apps/prs/react/src/app/app.tsx @@ -1,105 +1,374 @@ -import { Link, Outlet } from "react-router-dom"; +import { Outlet, useNavigate } from "react-router-dom"; import { GoabAppFooter, GoabAppHeader, + GoabAppHeaderMenu, GoabMicrositeHeader, GoabOneColumnLayout, - GoabSideMenu, - GoabSideMenuGroup, + GoabWorkSideMenu, + GoabWorkSideMenuGroup, + GoabWorkSideMenuItem, } from "@abgov/react-components"; + import "@abgov/style"; export function App() { + const navigate = useNavigate(); + return ( -
+
- + + {/* Verify AppHeaderMenu still works after Popover API refactor (PR #3478) */} + + bug2720 + Popover Test + Dropdown expanding + ...inside Container + + Super long menu item to test overflow handling lorem ipsum dolor sit amet + + + + Bug 3450 + Bug 3450 + + Super long menu item to test overflow handling lorem ipsum dolor sit amet + + + + Manage account + Request new staff account + System admin + + Sign out + + + Super long menu item to test overflow handling lorem ipsum dolor sit amet + + +
-
- - - 2152 Icon Custom Alignment - 2331 Block and Tab Dynamic Data - 2393 Popover Not Appearing - 2404 Input Angular Icon Button - 2408 Form Stepper Incomplete Rendering - 2459 File Upload Card TestId - 2473 DatePicker Ordinal Suffixes - 2502 Native Dropdown Height - 2529 Input Width Generation - 2547 Popover Hidden Near Notification - 2655 Dropdown/DatePicker in Modal - 2720 Tabs Change via Link - 2721 Text Tag Margin - 2750 Year Select Sorting - 2768 Enable/Disable Components - 2782 Disabled Inputs Hidden - 2789 Width Rem Measurements - 2821 Table Header Sorting Toggle - 2837 InputNumber Leading/Trailing Content - 2839 Button State After Click - 2849 Filterable Dropdown Keyboard - 2852 Filterable Dropdown Space Key - 2873 Drawer Scrolling Focus - 2878 DatePicker Input onChange - 2892 Input Width Calculations - 2922 Form Stepper Vertical - 2943 Drawer Text Components - 2948 Modal Heading Spacing - 2977 OnChangeDetails Event Missing - 3118 Text Component ID - 3201 Input Component Events - 3215 Drawer Initial Height - 3232 GoabText Tag Size - 3248 Dropdown Dynamic Children Sync - 3275 Can't unset month - 3322 App Header Menu Hover - 3281 GoabText p tag margin issues - 3337 Input autocomplete styling - 3279 Work Side Menu Key Nav - 3384 v2 Table Border - - - 1383 Button Filled Icons - 1547 Tooltip Multiline - 1813 DatePicker Width Properties - 1908 Linear Progress - 2054 MaxWidth Support - 2267 Checkbox List - 2328 Container Height Property - 2361 Radio/Checkbox Clickable Area - 2440 MenuButton Icon - 2469 Push Drawer - 2492 TextArea onBlur - 2609 Data Table Base Component - 2611 Segmented Tab - 2611 Disabled Tab - 2682 DatePicker Issues - 2722 Input Text-Align - 2730 Temporary Notification Controller - 2829 Modal ARIA Live Region - 2877 Badge Types and Custom Icon - 3102 MenuButton Width - 3137 Work Side Menu Group - 3241 V2 Experimental Wrappers - v2 header icons - 3306 Custom slug value for tabs - 3370 Clear calendar day selection - - - A - - -
+ navigate(path)} + primaryContent={ + <> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + } + />
diff --git a/apps/prs/react/src/main.tsx b/apps/prs/react/src/main.tsx index 1e7ccef42e..59a0862e04 100644 --- a/apps/prs/react/src/main.tsx +++ b/apps/prs/react/src/main.tsx @@ -40,11 +40,20 @@ import { Bug3215Route } from "./routes/bugs/bug3215"; import { Bug3232Route } from "./routes/bugs/bug3232"; import { Bug3279Route } from "./routes/bugs/bug3279"; import { Bug3248Route } from "./routes/bugs/bug3248"; +import { Bug3273Route } from "./routes/bugs/bug3273"; +import { Bug3273Page2Route } from "./routes/bugs/bug3273-2"; import { Bug3275Route } from "./routes/bugs/bug3275"; import { Bug3322Route } from "./routes/bugs/bug3322"; import { Bug3281Route } from "./routes/bugs/bug3281"; import { Bug3337Route } from "./routes/bugs/bug3337"; import { Bug3384Route } from "./routes/bugs/bug3384"; +import { Bug3450Route } from "./routes/bugs/bug3450"; +import { Bug3497Route } from "./routes/bugs/bug3497"; +import { Bug3498Route } from "./routes/bugs/bug3498"; +import { Bug3607Route } from "./routes/bugs/bug3607"; +import { Bug3505Route } from "./routes/bugs/bug3505"; +import { Bug3614Route } from "./routes/bugs/bug3614"; +import { Bug3685Route } from "./routes/bugs/bug3685"; import { EverythingRoute } from "./routes/everything"; import { EverythingBRoute } from "./routes/everything-b"; @@ -70,10 +79,22 @@ import { Feat2877Route } from "./routes/features/feat2877"; import { Feat3102Route } from "./routes/features/feat3102"; import { Feat3241Route } from "./routes/features/feat3241"; import { FeatV2IconsRoute } from "./routes/features/featV2Icons"; +import { Feat3407SkipOnFocusTabRoute } from "./routes/features/feat3407SkipOnFocusTab"; +import { Feat3407StackOnMobileRoute } from "./routes/features/feat3407StackOnMobile"; +import { Feat3344Route } from "./routes/features/feat3344"; import { Feat3137Route } from "./routes/features/feat3137"; import { Feat3306Route } from "./routes/features/feat3306"; import { Feat2469Route } from "./routes/features/feat2469"; import { Feat3370Route } from "./routes/features/feat3370"; +import { Feat3396Route } from "./routes/features/feat3396"; +import { Feat3229Route } from "./routes/features/feat3229"; +import { FeatV2CheckboxRoute } from "./routes/features/featV2Checkbox"; +import { Feat3398Route } from "./routes/features/feat3398"; +import { Feat3478Route } from "./routes/features/feat3478"; +import { Feat2885Route } from "./routes/features/feat2885"; +import { Feat2885NavigationTabsRoute } from "./routes/features/feat2885-navigation-tabs"; +import { Feat3529Route } from "./routes/features/feat3529"; +import { Feat3544Route } from "./routes/features/feat3544"; const root = ReactDOM.createRoot(document.getElementById("root") as HTMLElement); @@ -120,11 +141,20 @@ root.render( } /> } /> } /> + } key={"bugs/3273"} /> + } /> } /> } /> } /> } /> } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> } /> } /> @@ -153,9 +183,32 @@ root.render( } /> } /> } /> + } /> + } /> } /> } /> + } /> + } + /> + } + /> + } /> + } /> + } /> + } + /> + } /> + } /> + + {/* Standalone route without App wrapper for full-page layout demos */} + } /> , diff --git a/apps/prs/react/src/routes/bugs/bug2393.tsx b/apps/prs/react/src/routes/bugs/bug2393.tsx index bac1671d4d..0467ee21a5 100644 --- a/apps/prs/react/src/routes/bugs/bug2393.tsx +++ b/apps/prs/react/src/routes/bugs/bug2393.tsx @@ -61,7 +61,7 @@ export function Bug2393Route() { MI CASA MONTESSORI LTD. July 2025 - + { setIsModalOpen(true); @@ -19,6 +20,14 @@ export function Bug2655Route() { setIsModalOpen(false); }; + const openSmallModal = () => { + setIsSmallModalOpen(true); + }; + + const closeSmallModal = () => { + setIsSmallModalOpen(false); + }; + const onDate1Change = (event: any) => { console.log("Date 1 changed:", event); }; @@ -27,6 +36,10 @@ export function Bug2655Route() { console.log("Date 2 changed:", event); }; + const onDate3Change = (event: any) => { + console.log("Date 3 changed:", event); + }; + const onDropdown1Change = (event: any) => { console.log("Dropdown 1 changed:", event); }; @@ -35,6 +48,10 @@ export function Bug2655Route() { console.log("Dropdown 2 changed:", event); }; + const onDropdown3Change = (event: any) => { + console.log("Dropdown 3 changed:", event); + }; + return (

Bug 2655 - Modal with Date Pickers and Dropdowns

@@ -43,19 +60,14 @@ export function Bug2655Route() { Open Modal -
+
+

At the top these open downwards

-
- - - -
-
@@ -66,7 +78,14 @@ export function Bug2655Route() {
-
+
+

At the bottom these open upwards

+ + + +
+ +
@@ -77,6 +96,41 @@ export function Bug2655Route() {
+ + + Open Small Modal + + + +
+

+ It should expand downwards within a space too small for the popover content +

+
+ + + +
+
+
+
+

+ A good testing cheat to test if the dropdown opens above or below the target is + to anchor the developer tools window to the bottom and slide it up and down to + reduce window size. +

+ + + + + + + +
); } diff --git a/apps/prs/react/src/routes/bugs/bug3273-2.tsx b/apps/prs/react/src/routes/bugs/bug3273-2.tsx new file mode 100644 index 0000000000..67767d0c60 --- /dev/null +++ b/apps/prs/react/src/routes/bugs/bug3273-2.tsx @@ -0,0 +1,32 @@ +import { GoabSideMenu, GoabSideMenuGroup } from "@abgov/react-components"; +import { Link } from "react-router-dom"; + +export function Bug3273Page2Route() { + return ( +
+

Bug 3273: Keep side menu group open

+

This page tests a nested side menu group.

+ +

Scenario two

+

+ When you select the Parent Item, +
+ Then the Child Group will be closed, +
+ And the Parent Group will be open. +

+ +
+ + + Parent Item + + + Child Item + + + +
+
+ ); +} diff --git a/apps/prs/react/src/routes/bugs/bug3273.tsx b/apps/prs/react/src/routes/bugs/bug3273.tsx new file mode 100644 index 0000000000..29758ec00c --- /dev/null +++ b/apps/prs/react/src/routes/bugs/bug3273.tsx @@ -0,0 +1,34 @@ +import { GoabSideMenu, GoabSideMenuGroup } from "@abgov/react-components"; +import { Link } from "react-router-dom"; + +export function Bug3273Route() { + return ( +
+

Bug 3273: Keep side menu group open

+

This page tests a nested side menu group.

+ +

Scenario one

+

+ When you open the Child Group, +
+ And you select the Child Item, +
+ Then the Child Group will be open, +
+ And the Parent Group will be open. +

+ +
+ + + Parent Item + + + Child Item + + + +
+
+ ); +} diff --git a/apps/prs/react/src/routes/bugs/bug3279.tsx b/apps/prs/react/src/routes/bugs/bug3279.tsx index 44946ccf0b..ab1cc1de05 100644 --- a/apps/prs/react/src/routes/bugs/bug3279.tsx +++ b/apps/prs/react/src/routes/bugs/bug3279.tsx @@ -4,12 +4,10 @@ import { GoabContainer, GoabDetails, GoabLink, + GoabWorkSideMenu, + GoabWorkSideMenuGroup, + GoabWorkSideMenuItem, } from "@abgov/react-components"; -import { - GoabxWorkSideMenu, - GoabxWorkSideMenuGroup, - GoabxWorkSideMenuItem, -} from "@abgov/react-components/experimental"; export function Bug3279Route() { const [open, setOpen] = useState(true); @@ -26,7 +24,7 @@ export function Bug3279Route() { Work Side Menu component.

- - - + - - + - - - + +
- - - - + - - - - + + + + } /> diff --git a/apps/prs/react/src/routes/bugs/bug3337.tsx b/apps/prs/react/src/routes/bugs/bug3337.tsx index cd3723c4f0..6a674b68d4 100644 --- a/apps/prs/react/src/routes/bugs/bug3337.tsx +++ b/apps/prs/react/src/routes/bugs/bug3337.tsx @@ -1,5 +1,10 @@ -import { GoabText, GoabFormItem, GoabInput, GoabButton } from "@abgov/react-components"; -import { GoabxInput } from "@abgov/react-components/experimental"; +import { + GoabButton, + GoabFormItem, + GoabInput, + GoabText, +} from "@abgov/react-components"; + import { GoabInputOnBlurDetail } from "@abgov/ui-components-common"; import { useState } from "react"; @@ -31,8 +36,8 @@ export function Bug3337Route() { autoComplete="name" /> - - + inputBlur(e)} diff --git a/apps/prs/react/src/routes/bugs/bug3384.tsx b/apps/prs/react/src/routes/bugs/bug3384.tsx index 3b6a707869..0bc2d45740 100644 --- a/apps/prs/react/src/routes/bugs/bug3384.tsx +++ b/apps/prs/react/src/routes/bugs/bug3384.tsx @@ -1,16 +1,19 @@ -import { GoabBlock, GoabText } from "@abgov/react-components"; -import { GoabxTable } from "@abgov/react-components/experimental"; +import { + GoabBlock, + GoabTable, + GoabText, +} from "@abgov/react-components"; export function Bug3384Route() { return ( - Bug 3384 - GoabxTable Border + Bug 3384 - GoabTable Border The below table should have a border with a border radius. - + Service @@ -39,7 +42,7 @@ export function Bug3384Route() { 2026-02-03 - + ); } diff --git a/apps/prs/react/src/routes/bugs/bug3450.tsx b/apps/prs/react/src/routes/bugs/bug3450.tsx new file mode 100644 index 0000000000..e63f795bc6 --- /dev/null +++ b/apps/prs/react/src/routes/bugs/bug3450.tsx @@ -0,0 +1,71 @@ +import { + GoabBlock, + GoabContainer, + GoabDatePicker, + GoabDropdown, + GoabDropdownItem, + GoabFormItem, + GoabMenuAction, + GoabMenuButton, +} from "@abgov/react-components"; +import { GoabMenuButtonOnActionDetail } from "@abgov/ui-components-common"; + +export function Bug3450Route() { + function onMenuAction(detail: GoabMenuButtonOnActionDetail) { + console.log("Menu action:", detail.action); + } + + return ( +
+

Bug 3450 - Dropdown expanding inside Container

+ + + +

The GoabDropdown below should expand outside of the container.

+ + + + + + + + +
+ +

The GoabDatePicker below should expand outside of the container.

+ + + + +
+ +

Menu Button should open properly also.

+ + + + + + + +
+
+ +

Testing Directions

+

This is a test of GoabPopover not GoabDropdown or GoabDatePicker.

+
    +
  • + Open the GoabDropdown and GoabDatePicker and verify that they expand outside of + the container. +
  • +
  • + Verify that the GoabDropdown and GoabDatePicker are not cut off by the + container. +
  • +
  • + Shrink and expand the window to cause the GoabDropdown and GoabDatePicker to + expand upwards instead. +
  • +
+
+ ); +} diff --git a/apps/prs/react/src/routes/bugs/bug3497.tsx b/apps/prs/react/src/routes/bugs/bug3497.tsx new file mode 100644 index 0000000000..23705773e4 --- /dev/null +++ b/apps/prs/react/src/routes/bugs/bug3497.tsx @@ -0,0 +1,29 @@ +import { GoabBlock, GoabCalendar, GoabText } from "@abgov/react-components"; + +export function Bug3497Route() { + const today = new Date(); + + const noop = () => { + return null; + }; + + return ( + + Bug 3497 Calendar Years Empty + + + When min or max is set to today then the year dropdown is empty and doesn't show + anything. + + + min test + + + max test + + + ordinary + + + ); +} diff --git a/apps/prs/react/src/routes/bugs/bug3498.tsx b/apps/prs/react/src/routes/bugs/bug3498.tsx new file mode 100644 index 0000000000..684c45920f --- /dev/null +++ b/apps/prs/react/src/routes/bugs/bug3498.tsx @@ -0,0 +1,142 @@ +import { useState } from 'react'; +import { + GoabFormItem, + GoabInput, + GoabRadioGroup, + GoabRadioItem, +} from "@abgov/react-components"; + +export function Bug3498Route() { + const [contactMethod, setContactMethod] = useState(""); + const [contactMethodTwo, setContactMethodTwo] = useState(""); + const [contactMethodThree, setContactMethodThree] = useState(""); + + return ( +
+

3498 - Radio group alignment and border adjustment

+

Version 1

+ + setContactMethod(e.value)} + > + + + + } + /> + + + + } + /> + + + + } + /> + + +

Version 2 (Experimental)

+

Regular size

+ + setContactMethodTwo(e.value)} + > + + + + } + /> + + + + } + /> + + + + } + /> + + +

Compact size

+ + setContactMethodThree(e.value)} + > + + + + } + /> + + + + } + /> + + + + } + /> + + +
+ + ); +} diff --git a/apps/prs/react/src/routes/bugs/bug3505.tsx b/apps/prs/react/src/routes/bugs/bug3505.tsx new file mode 100644 index 0000000000..b2a57d54dc --- /dev/null +++ b/apps/prs/react/src/routes/bugs/bug3505.tsx @@ -0,0 +1,28 @@ +import { GoabBlock, GoabLink, GoabText } from "@abgov/react-components"; + +export function Bug3505Route() { + return ( + + Bug 3505 - Link icon click behavior + + + Click the leading icon, trailing icon, or link text. All should open the same + target. + + + + Press Tab to move focus to the link. The link should show a single outer focus + outline on the component, and the internal anchor text should not show its own + separate focus outline. + + + + + Alberta.ca (icon click test) + + + + ); +} + +export default Bug3505Route; diff --git a/apps/prs/react/src/routes/bugs/bug3607.tsx b/apps/prs/react/src/routes/bugs/bug3607.tsx new file mode 100644 index 0000000000..6b1f8ccc47 --- /dev/null +++ b/apps/prs/react/src/routes/bugs/bug3607.tsx @@ -0,0 +1,241 @@ +import { useState } from 'react'; +import { + GoabCheckbox, + GoabCheckboxList, + GoabFormItem, + GoabInput, + GoabRadioGroup, + GoabRadioItem, +} from "@abgov/react-components"; + +export function Bug3607Route() { + const [contactMethod, setContactMethod] = useState(""); + const [contactMethodTwo, setContactMethodTwo] = useState(""); + const [contactMethodThree, setContactMethodThree] = useState(""); + const [checkboxSelection, setCheckboxSelection] = useState([]); + const [checkboxSelectionTwo, setCheckboxSelectionTwo] = useState([]); + const [checkboxSelectionThree, setCheckboxSelectionThree] = useState([]); + + return ( +
+

3607 - Radio and Checkbox Interaction Area

+

Version 1

+ + setContactMethod(e.value)} + > + + + + + + } + /> + + + + + setCheckboxSelection(e.value || [])} + > + + Help text with as a description. + + } + text="Travel" + value="travel-0" + /> + + + + + + } + /> + + + +

Version 2 (Experimental)

+

Regular size

+ + setContactMethodTwo(e.value)} + > + + + + + + } + /> + + + + + setCheckboxSelectionTwo(e.value || [])} + > + + Help text with as a description. + + } + text="Travel" + value="travel-1" + /> + + + + + + } + /> + + + +

Compact size

+ + setContactMethodThree(e.value)} + > + + + + + + } + /> + + + + + setCheckboxSelectionThree(e.value || [])} + > + + Help text with as a description. + + } + name="travel-2" + text="Travel" + value="travel-2" + /> + + + + + + } + /> + + +
+ + ); +} diff --git a/apps/prs/react/src/routes/bugs/bug3614.tsx b/apps/prs/react/src/routes/bugs/bug3614.tsx new file mode 100644 index 0000000000..72be74e7d2 --- /dev/null +++ b/apps/prs/react/src/routes/bugs/bug3614.tsx @@ -0,0 +1,201 @@ +import { useState } from "react"; +import { + GoabBlock, + GoabButton, + GoabText, + GoabDivider, + GoabDetails, + GoabDropdown, + GoabDropdownItem, + GoabFilterChip, + GoabInput, + GoabIconButton, + GoabLink, + GoabMenuAction, + GoabMenuButton, + GoabModal, +} from "@abgov/react-components"; + +export function Bug3614Route() { + const [modalOpen, setModalOpen] = useState(false); + const [dropdownValue, setDropdownValue] = useState(""); + const [inputValue, setInputValue] = useState(""); + const [chips, setChips] = useState(["Alpha", "Beta", "Gamma"]); + + return ( +
+ + Bug #3614: IconButton Hitboxes + + + + + + + View on GitHub + + + + Icon buttons at 2xsmall and xsmall sizes do not + render as square buttons - they show as weird rounded rectangles. The + clickable area has a non-square aspect ratio, which is inconsistent with the + larger sizes (small, medium, large,{" "} + xlarge) that all render as squares. + + + + + + + Test Cases + + Test 1: Named sizes (2xsmall to xlarge) + + All sizes should render as square buttons with consistent aspect ratios. + + + + + + + + + + + + Test 2: Numeric sizes (1 to 6) + + All numeric sizes should also render as square buttons. + + + + + + + + + + + Test 3: Other Components that use IconButton + + + Testing various components that use IconButton internally. Verify that the icon + buttons within these components render with correct square hitboxes. + + + + Dropdown + + + The dropdown toggle button should have a properly sized square hitbox. + + + setDropdownValue(detail.value as string)} + placeholder="Select an option" + width="250px" + > + + + + + + + + Dropdown v2 + + + The dropdown toggle button should have a properly sized square hitbox. + + + setDropdownValue(detail.value as string)} + placeholder="Select an option" + width="250px" + > + + + + + + + Filter Chips + + + The v2 FilterChip uses IconButton. The close/remove icon button on each chip + should look normal. + + + {chips.map((chip) => ( + setChips((prev) => prev.filter((c) => c !== chip))} + /> + ))} + + + + Menu Button + + + The dropdown arrow icon button should have a square hitbox. + + + + + + + + + + + Modal + + + The close icon button in the modal header should be a square hitbox. + + + setModalOpen(true)}> + Open Modal + + setModalOpen(false)} + actions={ setModalOpen(false)}>Close} + > + + Check that the close (X) icon button in the top-right corner has a square + hitbox. + + + + + + Input with Trailing Icon + + The trailing icon button should have a square hitbox. + + setInputValue(detail.value)} + trailingIcon="close" + trailingIconAriaLabel="Clear input" + onTrailingIconClick={() => setInputValue("")} + placeholder="The X is an icon button - check its hitbox!" + width="350px" + /> + +
+ ); +} + +export default Bug3614Route; diff --git a/apps/prs/react/src/routes/bugs/bug3685.tsx b/apps/prs/react/src/routes/bugs/bug3685.tsx new file mode 100644 index 0000000000..66357854f4 --- /dev/null +++ b/apps/prs/react/src/routes/bugs/bug3685.tsx @@ -0,0 +1,476 @@ +import { useState } from 'react'; +import { + GoabFormItem, + GoabButton, + GoabButtonGroup, + GoabDropdown, + GoabDropdownItem, + GoabCheckbox, + GoabCheckboxList, + GoabModal, + GoabInput, + GoabRadioGroup, + GoabTextArea, + GoabRadioItem, +} from "@abgov/react-components"; + +export function Bug3685Route() { + const [open, setOpen] = useState(false); + const [openTwo, setOpenTwo] = useState(false); + const [type, setType] = useState(); + const [name, setName] = useState(); + const [description, setDescription] = useState(); + const [contactMethod, setContactMethod] = useState(""); + const [contactMethodTwo, setContactMethodTwo] = useState(""); + const [contactMethodThree, setContactMethodThree] = useState(""); + const [checkboxSelection, setCheckboxSelection] = useState([]); + const [checkboxSelectionTwo, setCheckboxSelectionTwo] = useState([]); + const [checkboxSelectionThree, setCheckboxSelectionThree] = useState([]); + + return ( +
+

3685 - Checkbox & Radio: Reveal width not aligned with item

+

Version 1

+ + setOpen(true)}> + Add another item + + + setOpen(false)}> + Cancel + + setOpen(false)}> + Save new item + + + } + > +

Fill in the information to create a new item

+ + setType(e.value)} value={type}> + + + + + + setName(e.value)} + value={name} + name="name" + width="100%" + /> + + + setContactMethodTwo(e.value)} + > + + + + + + } + /> + + + + + setCheckboxSelectionTwo(e.value || [])} + > + + Help text with as a description. + + } + text="Travel" + value="travel-1" + /> + + + + + + } + /> + + + + setDescription(e.value)} + value={description} + /> + +
+ + setContactMethod(e.value)} + > + + + + + + } + /> + + + + + setCheckboxSelection(e.value || [])} + > + + Help text with as a description. + + } + text="Travel" + value="travel-0" + /> + + + + + + } + /> + + + +

Version 2 (Experimental)

+

Regular size

+ + setOpenTwo(true)}> + Add another item + + + setOpenTwo(false)}> + Cancel + + setOpenTwo(false)}> + Save new item + + + } + > +

Fill in the information to create a new item

+ + setType(e.value)} value={type}> + + + + + + setName(e.value)} + value={name} + name="name" + width="100%" + /> + + + setContactMethodTwo(e.value)} + > + + + + + + } + /> + + + + + setCheckboxSelectionTwo(e.value || [])} + > + + Help text with as a description. + + } + text="Travel" + value="travel-1" + /> + + + + + + } + /> + + + + setDescription(e.value)} + value={description} + /> + +
+ + setContactMethodTwo(e.value)} + > + + + + + + } + /> + + + + + setCheckboxSelectionTwo(e.value || [])} + > + + Help text with as a description. + + } + text="Travel" + value="travel-1" + /> + + + + + + } + /> + + + +

Compact size

+ + setContactMethodThree(e.value)} + > + + + + + + } + /> + + + + + setCheckboxSelectionThree(e.value || [])} + > + + Help text with as a description. + + } + name="travel-2" + text="Travel" + value="travel-2" + /> + + + + + + } + /> + + +
+ + ); +} diff --git a/apps/prs/react/src/routes/everything-b.tsx b/apps/prs/react/src/routes/everything-b.tsx index d09b67265c..f8360e2c7b 100644 --- a/apps/prs/react/src/routes/everything-b.tsx +++ b/apps/prs/react/src/routes/everything-b.tsx @@ -400,71 +400,17 @@ export function EverythingBRoute() { - - - + + + - - - - - - - - - - - - - - - - - - - - - - + + + + @@ -4348,7 +4294,7 @@ export function EverythingBRoute() { Side menu item } + meta={} > Side menu heading diff --git a/apps/prs/react/src/routes/everything.tsx b/apps/prs/react/src/routes/everything.tsx index ecd5d6fac2..d0d706b53d 100644 --- a/apps/prs/react/src/routes/everything.tsx +++ b/apps/prs/react/src/routes/everything.tsx @@ -146,29 +146,14 @@ const BADGE_TYPES: GoabBadgeType[] = [ "success", "important", "emergency", - "dark", - "midtone", - "light", "archived", - "aqua", - "black", - "blue", - "green", - "orange", - "pink", - "red", - "violet", - "white", - "yellow", - "aqua-light", - "black-light", - "blue-light", - "green-light", - "orange-light", - "pink-light", - "red-light", - "violet-light", - "yellow-light", + "sky", + "prairie", + "lilac", + "pasture", + "sunset", + "dawn", + "default", ]; const BUTTON_TYPES: GoabButtonType[] = [ "primary", diff --git a/apps/prs/react/src/routes/features/feat2469.tsx b/apps/prs/react/src/routes/features/feat2469.tsx index d4eb76e654..2cddee7512 100644 --- a/apps/prs/react/src/routes/features/feat2469.tsx +++ b/apps/prs/react/src/routes/features/feat2469.tsx @@ -1,4 +1,4 @@ -import { JSX, useState } from "react"; +import { JSX, useState, useEffect } from "react"; import { GoabButton, GoabFormItem, @@ -7,7 +7,9 @@ import { GoabPushDrawer, GoabTable, } from "@abgov/react-components"; + import { GoabInputOnChangeDetail } from "@abgov/ui-components-common"; +import v2TokensUrl from "@abgov/design-tokens-v2/dist/tokens.css?url"; type DataTableFields = { firstName: string; @@ -30,23 +32,84 @@ function generateFakeData(numRows: number): DataTableFields[] { } export function Feat2469Route(): JSX.Element { + useEffect(() => { + const link = document.createElement("link"); + link.rel = "stylesheet"; + link.href = v2TokensUrl; + document.head.appendChild(link); + + const deletedRules: Array<{ sheet: CSSStyleSheet; index: number; cssText: string }> = + []; + + link.onload = () => { + [...document.styleSheets].forEach((ss) => { + if (ss.ownerNode === link) return; + try { + for (let i = ss.cssRules.length - 1; i >= 0; i--) { + const rule = ss.cssRules[i]; + if (rule instanceof CSSStyleRule && rule.selectorText === ":root") { + deletedRules.push({ sheet: ss, index: i, cssText: rule.cssText }); + ss.deleteRule(i); + } + } + } catch (e) { + // skip cross-origin sheets + } + }); + }; + + return () => { + link.remove(); + deletedRules.forEach(({ sheet, index, cssText }) => { + try { + sheet.insertRule(cssText, Math.min(index, sheet.cssRules.length)); + } catch (e) { + // skip if sheet is no longer available + } + }); + }; + }, []); + const smallDrawerControlSet = (
-

Drawer

+

Drawer

This is a drawer

); - const pageStyle: React.CSSProperties = { + // Simulates a full-screen app layout (like the workspace app). + // Fixed height container where content scrolls internally. + const appShellBase: React.CSSProperties = { + height: "80vh", display: "flex", flexDirection: "row", - minHeight: "80vh", + border: "2px solid #666", + borderRadius: "8px", + overflow: "hidden", + margin: "16px 0", + padding: 0, }; - const pageContainerStyles: React.CSSProperties = { + const v2ShellStyle: React.CSSProperties = { + ...appShellBase, + background: "var(--goa-color-greyscale-50)", + }; + + const v2PageContainerStyles: React.CSSProperties = { flex: "1 1 0%", - overflow: "hidden", - border: "1px solid green", + overflowY: "auto", + padding: "var(--goa-space-l)", + margin: + "var(--goa-drawer-offset, 16px) 0 var(--goa-drawer-offset, 16px) var(--goa-drawer-offset, 16px)", + borderRadius: "var(--goa-push-drawer-border-radius)", + border: "var(--goa-border-width-s) solid var(--goa-color-greyscale-150)", + background: "var(--goa-color-greyscale-white)", + }; + + const v1PageContainerStyles: React.CSSProperties = { + flex: "1 1 0%", + overflowY: "auto", + padding: "16px", }; const [pushDrawerOpen, setPushDrawerOpen] = useState(false); @@ -88,37 +151,52 @@ export function Feat2469Route(): JSX.Element { setDrawerWidth(detail.value); }; - const actions = ( - togglePushDrawerOpen()}> + const [showActions, setShowActions] = useState(true); + const actions = showActions ? ( + togglePushDrawerOpen()}> Close - ); + ) : undefined; + + // --- V1 state --- + const [v1Open, setV1Open] = useState(false); + const [v1Controls, setV1Controls] = useState([smallDrawerControlSet]); + const [v1ShowActions, setV1ShowActions] = useState(true); + const v1Actions = v1ShowActions ? ( + setV1Open(false)}> + Close + + ) : undefined; return ( -
-
-

Pushed In Content

-
- - {pushDrawerOpen ? "Close" : "Open"} Push Drawer - -
- - - -
- Clear Table Data - Add Table Data - Clear Drawer Content - Add Drawer Content -
+

V2 (Experimental)

+
+ + {pushDrawerOpen ? "Close" : "Open"} Push Drawer + + + + + Clear Table + Add Row + Clear Drawer + Add Drawer Content + setShowActions(!showActions)}> + {showActions ? "Remove Actions" : "Add Actions"} + +
+
+
+

Page Content

@@ -139,7 +217,7 @@ export function Feat2469Route(): JSX.Element {
{pushDrawerControls} - Close + +
+ +

V1 (Standard)

+
+ setV1Open(!v1Open)}> + {v1Open ? "Close" : "Open"} Push Drawer + + + setV1Controls([ + ...v1Controls, +
+

Additional Content

+

More drawer content

+
    +
  • Item 1
  • +
  • Item 2
  • +
  • Item 3
  • +
+
, + ]) + } + > + Add Drawer Content +
+ setV1Controls([smallDrawerControlSet])}> + Clear Drawer Content + + setV1ShowActions(!v1ShowActions)}> + {v1ShowActions ? "Remove Actions" : "Add Actions"} + +
+
+
+

Page Content

+

V1 push drawer for comparison.

+
+ setV1Open(false)} + actions={v1Actions} + > + {v1Controls}
diff --git a/apps/prs/react/src/routes/features/feat2682.tsx b/apps/prs/react/src/routes/features/feat2682.tsx index 380a1468b6..8f5fd8fa5e 100644 --- a/apps/prs/react/src/routes/features/feat2682.tsx +++ b/apps/prs/react/src/routes/features/feat2682.tsx @@ -1,8 +1,11 @@ import React from "react"; -import { GoabFormItem } from "@abgov/react-components"; -import { GoabDatePicker } from "@abgov/react-components"; -import { GoabBlock } from "@abgov/react-components"; -import { GoabText } from "@abgov/react-components"; +import { + GoabBlock, + GoabDatePicker, + GoabFormItem, + GoabText, +} from "@abgov/react-components"; + import { GoabDatePickerOnChangeDetail } from "@abgov/ui-components-common"; export function Feat2682Route() { diff --git a/apps/prs/react/src/routes/features/feat2877.tsx b/apps/prs/react/src/routes/features/feat2877.tsx index 3a49d40801..a80f71f4f6 100644 --- a/apps/prs/react/src/routes/features/feat2877.tsx +++ b/apps/prs/react/src/routes/features/feat2877.tsx @@ -92,32 +92,13 @@ export function Feat2877Route() { - - - - - - - - - - - - - - Light Variants - - - - - - - - - - - - + + + + + + + diff --git a/apps/prs/react/src/routes/features/feat2885-navigation-tabs.tsx b/apps/prs/react/src/routes/features/feat2885-navigation-tabs.tsx new file mode 100644 index 0000000000..4520b95576 --- /dev/null +++ b/apps/prs/react/src/routes/features/feat2885-navigation-tabs.tsx @@ -0,0 +1,94 @@ +import { + GoabDivider, + GoabTab, + GoabTabs, + GoabText, +} from "@abgov/react-components"; + +export function Feat2885NavigationTabsRoute() { + return ( +
+ + Feature #2885: Tabs navigation prop + + + Showcases the new navigation prop on GoabTabs. + When set to "none", tabs act as a UI switcher without updating the browser URL hash. + + + + + Test 1: Segmented + navigation="none" + + Tabs switch content without changing the URL hash. Used inside notification panels. + + console.log("Tab changed:", detail)}> + + Unread notifications content + + + Urgent notifications content + + + All notifications content + + + + + + Test 2: Segmented + navigation="url" (default) + + Default behavior: tabs update the browser URL hash when switched. + + console.log("Tab changed:", detail)}> + + Tab A content with URL navigation + + + Tab B content with URL navigation + + + Tab C content with URL navigation + + + + + + Test 3: Default (non-segmented) + navigation="none" + + Standard tab style with URL navigation disabled. + + console.log("Tab changed:", detail)}> + + Overview content + + + Details content + + + History content + + + + + + Test 4: Default (non-segmented) + navigation="url" (default) + + Standard tab style with default URL navigation. + + console.log("Tab changed:", detail)}> + + Section 1 content with URL navigation + + + Section 2 content with URL navigation + + + Section 3 content with URL navigation + + +
+ ); +} + +export default Feat2885NavigationTabsRoute; diff --git a/apps/prs/react/src/routes/features/feat2885.tsx b/apps/prs/react/src/routes/features/feat2885.tsx new file mode 100644 index 0000000000..bed09d78b3 --- /dev/null +++ b/apps/prs/react/src/routes/features/feat2885.tsx @@ -0,0 +1,398 @@ +import { useState, useEffect } from "react"; +import { + GoabIconButton, + GoabWorkSideMenu, + GoabWorkSideMenuItem, + GoabWorkSideNotificationItem, + GoabWorkSideNotificationPanel, +} from "@abgov/react-components"; + +// ?url suffix tells Vite to resolve the path without injecting the CSS +import v2TokensUrl from "@abgov/design-tokens-v2/dist/tokens.css?url"; + +type Notification = { + id: string; + title: string; + description: string; + timestamp: string; + type: "info" | "success" | "warning" | "critical"; + readStatus: "read" | "unread"; + priority: "normal" | "urgent"; +}; + +export function Feat2885Route() { + const [menuOpen, setMenuOpen] = useState(true); + + // Dynamically load v2 design tokens only while this page is mounted, + // so they don't leak into other routes in the SPA. + useEffect(() => { + const link = document.createElement("link"); + link.rel = "stylesheet"; + link.href = v2TokensUrl; + document.head.appendChild(link); + return () => { + document.head.removeChild(link); + }; + }, []); + + // Helper to get date at specific days ago + const daysAgo = (days: number, hours = 0) => { + const date = new Date(); + date.setDate(date.getDate() - days); + date.setHours(date.getHours() - hours); + return date.toISOString(); + }; + + // Sample notification data - with different dates to test date headers + const [notifications, setNotifications] = useState([ + // Today (newest first) + { + id: "1", + title: "New case assigned", + description: "Case #12345 has been assigned to you for review.", + timestamp: new Date(Date.now() - 5 * 60 * 1000).toISOString(), // 5 min ago + type: "info", + readStatus: "unread", + priority: "normal", + }, + { + id: "2", + title: "Document uploaded", + description: "A new document was uploaded to Case #12340.", + timestamp: new Date(Date.now() - 30 * 60 * 1000).toISOString(), // 30 min ago + type: "success", + readStatus: "unread", + priority: "normal", + }, + { + id: "3", + title: "System maintenance", + description: "Scheduled maintenance tonight at 11 PM MST.", + timestamp: new Date(Date.now() - 1 * 60 * 60 * 1000).toISOString(), // 1 h ago + type: "critical", + readStatus: "unread", + priority: "urgent", + }, + // Yesterday + { + id: "4", + title: "Action required", + description: "Please review the pending approval request.", + timestamp: daysAgo(1, 2), // Yesterday, 2 hours ago + type: "warning", + readStatus: "unread", + priority: "normal", + }, + { + id: "5", + title: "Deadline approaching", + description: "Case #12300 deadline is in 24 hours.", + timestamp: daysAgo(1, 5), // Yesterday, 5 hours ago + type: "warning", + readStatus: "unread", + priority: "urgent", + }, + { + id: "6", + title: "Comment added", + description: "John Smith commented on Case #12342.", + timestamp: daysAgo(1, 8), // Yesterday, 8 hours ago + type: "info", + readStatus: "unread", + priority: "normal", + }, + // 3 days ago + { + id: "7", + title: "Case status updated", + description: "Case #12339 status changed to 'In Review'.", + timestamp: daysAgo(3, 2), // 3 days ago + type: "success", + readStatus: "read", + priority: "normal", + }, + { + id: "8", + title: "New attachment", + description: "PDF document attached to Case #12338.", + timestamp: daysAgo(3, 6), // 3 days ago + type: "info", + readStatus: "read", + priority: "normal", + }, + // 7 days ago + { + id: "9", + title: "Weekly report generated", + description: "Your weekly summary report is ready.", + timestamp: daysAgo(7, 0), // 7 days ago + type: "info", + readStatus: "read", + priority: "normal", + }, + // 14 days ago + { + id: "10", + title: "Password reminder", + description: "Your password will expire in 30 days.", + timestamp: daysAgo(14, 0), // 14 days ago + type: "warning", + readStatus: "read", + priority: "normal", + }, + ]); + + const handleNotificationClick = (id: string) => { + console.log("Notification clicked:", id); + // Mark as read when clicking an unread notification + setNotifications((prev) => + prev.map((notif) => + notif.id === id && notif.readStatus === "unread" + ? { ...notif, readStatus: "read" as const } + : notif, + ), + ); + }; + + const handleMarkAllRead = () => { + console.log("Mark all as read clicked"); + setNotifications((prev) => + prev.map((notif) => ({ ...notif, readStatus: "read" as const })), + ); + }; + + const handleViewAll = () => { + console.log("View all clicked"); + }; + + return ( +
+ setMenuOpen((prev) => !prev)} + primaryContent={ + <> + + + + + +

+ Custom Popover Content +

+

+ This demonstrates that popoverContent accepts any React + node, not just GoabWorkSideNotificationPanel. +

+
    +
  • Custom alerts
  • +
  • Quick actions
  • +
  • Mini dashboards
  • +
  • Any custom UI
  • +
+
+ } + /> + + } + secondaryContent={ + <> + + {/* Single slot - items are auto-filtered by readStatus/priority */} + {notifications.map((notif) => ( + handleNotificationClick(notif.id)} + /> + ))} + + } + /> + + + } + accountContent={ + <> + + + + } + /> + +
+ {/* Mobile menu toggle button */} +
+ setMenuOpen(true)} /> +
+ + +

Feature #2885: Work Side Menu with Notification Popover

+

+ This demonstrates the GoabWorkSideMenu with the new notification + popover feature. +

+ +

New Features

+
    +
  • + Notification Popover - Click the "Notifications" menu item to + see the popover panel +
  • +
  • + Custom Popover Content - Click the "Alerts" menu item to see + a custom div, demonstrating that popoverContent accepts any React + node +
  • +
  • + GoabWorkSideNotificationPanel - Panel with tabs (Unread, + Urgent, All) +
  • +
  • + GoabWorkSideNotificationItem - Individual notification cards + with: +
      +
    • Title and description
    • +
    • Smart timestamp formatting (e.g., "5 min ago", "2 h ago")
    • +
    • Type badges (info, success, warning, critical)
    • +
    • Read/unread status indicator (green dot)
    • +
    • Urgent priority styling
    • +
    +
  • +
  • + Footer actions - "View all" and "Mark all as read" buttons +
  • +
+ +

Existing Features

+
    +
  • + Collapsible menu - Click the toggle button at the bottom to + expand/collapse +
  • +
  • + Primary content slot - Main navigation items +
  • +
  • + Secondary content slot - Additional navigation + (notifications, help) +
  • +
  • + Account content slot - User account menu (click profile to + show) +
  • +
  • + Badges - Notification counts with different types (success, + emergency) +
  • +
  • + Dividers - Visual separation between menu groups +
  • +
  • + Icons - Each menu item can have an icon +
  • +
  • + Keyboard navigation - Arrow keys, Escape, Ctrl+[ +
  • +
  • + Tooltips - Shown when menu is collapsed +
  • +
+ +

Menu State

+

+ Menu is currently: {menuOpen ? "Open" : "Closed"} +

+ + +

Console Output

+

+ Open the browser console to see events when clicking notifications or footer + actions. +

+
+
+ ); +} diff --git a/apps/prs/react/src/routes/features/feat3137.tsx b/apps/prs/react/src/routes/features/feat3137.tsx index d4efe88dc6..67d0bb9994 100644 --- a/apps/prs/react/src/routes/features/feat3137.tsx +++ b/apps/prs/react/src/routes/features/feat3137.tsx @@ -1,14 +1,12 @@ import React, { useState } from "react"; import { GoabButton, - GoabText, GoabContainer, + GoabText, + GoabWorkSideMenu, + GoabWorkSideMenuGroup, + GoabWorkSideMenuItem, } from "@abgov/react-components"; -import { - GoabxWorkSideMenu, - GoabxWorkSideMenuGroup, - GoabxWorkSideMenuItem, -} from "@abgov/react-components/experimental"; export function Feat3137Route() { const [isMenuOpen, setIsMenuOpen] = useState(true); @@ -38,7 +36,7 @@ export function Feat3137Route() {
- {/* Dashboard Group */} - - + - - - + {/* Projects Group */} - - + - - - - + {/* Team Group */} - - + - - - - + {/* Documents Group */} - - + - - - - - + {/* Communication Group */} - - + - - - + } secondaryContent={ <> {/* Tools Group */} - - + - - - + {/* Resources Group */} - - + - - - + } accountContent={ <> {/* Account Group */} - - + - - - - - + } /> diff --git a/apps/prs/react/src/routes/features/feat3229.tsx b/apps/prs/react/src/routes/features/feat3229.tsx new file mode 100644 index 0000000000..a84e8c5285 --- /dev/null +++ b/apps/prs/react/src/routes/features/feat3229.tsx @@ -0,0 +1,536 @@ +import { useState, useEffect } from "react"; +import { + GoabBadge, + GoabBlock, + GoabDivider, + GoabMenuAction, + GoabMenuButton, + GoabText, +} from "@abgov/react-components"; + +import { GoabMenuButtonOnActionDetail } from "@abgov/ui-components-common"; +import v2TokensUrl from "@abgov/design-tokens-v2/dist/tokens.css?url"; + +// Menu actions with icon + text +const menuActionsWithIcons = ( + <> + + + + + +); + +// Menu actions with text only (no icons) +const menuActionsTextOnly = ( + <> + + + + + +); + +export function Feat3229Route() { + const [lastAction, setLastAction] = useState(""); + + useEffect(() => { + // Load V2 tokens + const link = document.createElement("link"); + link.rel = "stylesheet"; + link.href = v2TokensUrl; + document.head.appendChild(link); + + // Save deleted rules so we can restore them on cleanup + const deletedRules: Array<{ sheet: CSSStyleSheet; index: number; cssText: string }> = + []; + + // Remove V1 token definitions (:root rules) from all other stylesheets, + // keeping component styles intact + link.onload = () => { + [...document.styleSheets].forEach((ss) => { + if (ss.ownerNode === link) return; // skip V2 stylesheet + try { + for (let i = ss.cssRules.length - 1; i >= 0; i--) { + const rule = ss.cssRules[i]; + if (rule instanceof CSSStyleRule && rule.selectorText === ":root") { + deletedRules.push({ sheet: ss, index: i, cssText: rule.cssText }); + ss.deleteRule(i); + } + } + } catch (e) { + // skip cross-origin sheets + } + }); + }; + + return () => { + document.head.removeChild(link); + // Restore V1 :root rules in reverse order to maintain correct indices + deletedRules.reverse().forEach(({ sheet, index, cssText }) => { + try { + sheet.insertRule(cssText, index); + } catch (e) { + console.log(e); + } + }); + }; + }, []); + + const handleAction = (detail: GoabMenuButtonOnActionDetail, label?: string) => { + const source = label ? ` (${label})` : ""; + setLastAction(`Action "${detail.action}"${source}`); + }; + + return ( +
+ + Feature #3229: MenuButton + + + + + {lastAction && ( + + + + )} + + {/* ── Test 1: Icon-only edge cases ── */} + 1. Icon-only (no text) — edge cases + + When no text is provided, renders as a borderless icon button. + + + + + + No text, no icon, no size — defaults to ellipsis-horizontal, normal size, + ariaLabel="Open menu" + + handleAction(d, "icon-only defaults")}> + {menuActionsWithIcons} + + + + + No text, no icon, no ariaLabel, size="compact" + handleAction(d, "icon-only compact no ariaLabel")} + > + {menuActionsWithIcons} + + + + + No text, custom ariaLabel="Actions for John Smith" + handleAction(d, "icon-only custom ariaLabel")} + > + {menuActionsWithIcons} + + + + + No text, custom ariaLabel, size="compact" + handleAction(d, "icon-only custom ariaLabel compact")} + > + {menuActionsWithIcons} + + + + + + + {/* ── Test 2: Size on icon-only ── */} + 2. Size on icon-only + + + + icon + normal (default) + handleAction(d, "icon normal")} + > + {menuActionsWithIcons} + + + + + icon + compact + handleAction(d, "icon compact")} + > + {menuActionsWithIcons} + + + + + + + {/* ── Test 3: Size on text-only ── */} + 3. Size on text-only + + + + text + normal (default) + handleAction(d, "text normal")} + > + {menuActionsWithIcons} + + + + + text + compact + handleAction(d, "text compact")} + > + {menuActionsWithIcons} + + + + + + + {/* ── Test 4: Size on text + icon ── */} + 4. Size on text + leadingIcon + + + + text + icon + normal + handleAction(d, "text+icon normal")} + > + {menuActionsWithIcons} + + + + + text + icon + compact + handleAction(d, "text+icon compact")} + > + {menuActionsWithIcons} + + + + + + + {/* ── Test 5: Menu action variants ── */} + 5. Menu action items — with icon vs text-only + + Verify that menu action items render correctly for both normal and compact sizes, + with and without icons. + + + + + normal — actions with icon + text + handleAction(d, "actions with icons normal")} + > + {menuActionsWithIcons} + + + + + compact — actions with icon + text + handleAction(d, "actions with icons compact")} + > + {menuActionsWithIcons} + + + + + normal — actions text-only + handleAction(d, "actions text-only normal")} + > + {menuActionsTextOnly} + + + + + compact — actions text-only + handleAction(d, "actions text-only compact")} + > + {menuActionsTextOnly} + + + + + + + {/* ── Test 6: Button types ── */} + 6. Button types (normal vs compact) + + + + primary + handleAction(d, "primary normal")} + > + {menuActionsWithIcons} + + handleAction(d, "primary compact")} + > + {menuActionsWithIcons} + + + + + secondary + handleAction(d, "secondary normal")} + > + {menuActionsWithIcons} + + handleAction(d, "secondary compact")} + > + {menuActionsWithIcons} + + + + + tertiary + handleAction(d, "tertiary normal")} + > + {menuActionsWithIcons} + + handleAction(d, "tertiary compact")} + > + {menuActionsWithIcons} + + + + + + + {/* ── Test 7: Button variants (normal, destructive) ── */} + 7. Button variants + + The variant prop controls the color scheme: normal or destructive. + + + + + normal (default) + handleAction(d, "variant normal")} + > + {menuActionsWithIcons} + + handleAction(d, "variant normal compact")} + > + {menuActionsWithIcons} + + + + + destructive + handleAction(d, "variant destructive")} + > + {menuActionsWithIcons} + + handleAction(d, "variant destructive compact")} + > + {menuActionsWithIcons} + + + + + icon-only destructive + handleAction(d, "icon-only destructive")} + > + {menuActionsWithIcons} + + handleAction(d, "icon-only destructive compact")} + > + {menuActionsWithIcons} + + + + + destructive + secondary + handleAction(d, "destructive secondary")} + > + {menuActionsWithIcons} + + handleAction(d, "destructive secondary compact")} + > + {menuActionsWithIcons} + + + + + destructive + tertiary + handleAction(d, "destructive tertiary")} + > + {menuActionsWithIcons} + + handleAction(d, "destructive tertiary compact")} + > + {menuActionsWithIcons} + + + + + + + {/* ── Test 8: Icon theme — filled vs outline ── */} + 8. Icon theme (filled vs outline) + + Use icon-name:filled or icon-name:outline suffix to + control icon theme. + + + + + ellipsis-horizontal + handleAction(d, "ellipsis outline")} + > + {menuActionsWithIcons} + + handleAction(d, "ellipsis filled")} + > + {menuActionsWithIcons} + + + + + ellipsis-vertical + handleAction(d, "ellipsis-v outline")} + > + {menuActionsWithIcons} + + handleAction(d, "ellipsis-v filled")} + > + {menuActionsWithIcons} + + + + + menu + handleAction(d, "menu outline")} + > + {menuActionsWithIcons} + + handleAction(d, "menu filled")} + > + {menuActionsWithIcons} + + + + + settings + handleAction(d, "settings outline")} + > + {menuActionsWithIcons} + + handleAction(d, "settings filled")} + > + {menuActionsWithIcons} + + + +
+ ); +} + +export default Feat3229Route; diff --git a/apps/prs/react/src/routes/features/feat3241.tsx b/apps/prs/react/src/routes/features/feat3241.tsx index ed6699bfc0..c64e870e48 100644 --- a/apps/prs/react/src/routes/features/feat3241.tsx +++ b/apps/prs/react/src/routes/features/feat3241.tsx @@ -35,38 +35,7 @@ import { GoabText, GoabTextArea, } from "@abgov/react-components"; -import { - GoabxAppFooter, - GoabxAppFooterMetaSection, - GoabxAppFooterNavSection, - GoabxBadge, - GoabxButton, - GoabxCalendar, - GoabxCallout, - GoabxCheckbox, - GoabxDatePicker, - GoabxDrawer, - GoabxDropdown, - GoabxDropdownItem, - GoabxFileUploadCard, - GoabxFileUploadInput, - GoabxFilterChip, - GoabxFormItem, - GoabxInput, - GoabxLink, - GoabxModal, - GoabxNotification, - GoabxPagination, - GoabxRadioGroup, - GoabxRadioItem, - GoabxSideMenu, - GoabxSideMenuGroup, - GoabxSideMenuHeading, - GoabxTable, - GoabxTableSortHeader, - GoabxTabs, - GoabxTextArea, -} from "@abgov/react-components/experimental"; + import type { GoabPaginationOnChangeDetail, GoabTableOnSortDetail, @@ -103,18 +72,19 @@ export function Feat3241Route() { }, ]); const [goabxDrawerOpen, setGoabxDrawerOpen] = useState(false); - const [goabDrawerOpen, setGoabDrawerOpen] = useState(false); const [goabxModalOpen, setGoabxModalOpen] = useState(false); - const [goabModalOpen, setGoabModalOpen] = useState(false); const [goabxPage, setGoabxPage] = useState(1); - const [goabPage, setGoabPage] = useState(1); const [goabxTab, setGoabxTab] = useState(1); - const [goabTab, setGoabTab] = useState(1); const [goabxFilterClicks, setGoabxFilterClicks] = useState(0); - const [goabFilterClicks, setGoabFilterClicks] = useState(0); const [goabxNotificationStatus, setGoabxNotificationStatus] = useState( "No dismiss action yet.", ); + + const [goabDrawerOpen, setGoabDrawerOpen] = useState(false); + const [goabModalOpen, setGoabModalOpen] = useState(false); + const [goabPage, setGoabPage] = useState(1); + const [goabTab, setGoabTab] = useState(1); + const [goabFilterClicks, setGoabFilterClicks] = useState(0); const [goabNotificationStatus, setGoabNotificationStatus] = useState( "No dismiss action yet.", ); @@ -123,30 +93,30 @@ export function Feat3241Route() { setGoabxPage(detail.page); }; - const onGoabPaginationChange = (detail: GoabPaginationOnChangeDetail) => { - setGoabPage(detail.page); - }; - const onGoabxTabsChange = (detail: GoabTabsOnChangeDetail) => { setGoabxTab(detail.tab); }; - const onGoabTabsChange = (detail: GoabTabsOnChangeDetail) => { - setGoabTab(detail.tab); - }; - const onGoabxFilterClick = () => { setGoabxFilterClicks((prev) => prev + 1); }; - const onGoabFilterClick = () => { - setGoabFilterClicks((prev) => prev + 1); - }; - const onGoabxNotificationDismiss = () => { setGoabxNotificationStatus("Goabx notification dismissed."); }; + const onGoabPaginationChange = (detail: GoabPaginationOnChangeDetail) => { + setGoabPage(detail.page); + }; + + const onGoabTabsChange = (detail: GoabTabsOnChangeDetail) => { + setGoabTab(detail.tab); + }; + + const onGoabFilterClick = () => { + setGoabFilterClicks((prev) => prev + 1); + }; + const onGoabNotificationDismiss = () => { setGoabNotificationStatus("Goab notification dismissed."); }; @@ -168,10 +138,10 @@ export function Feat3241Route() { <> Feat 3241 - Experimental wrapper checks - Side-by-side comparisons of Goabx wrappers and the matching Goab components. + V2 component comparisons — all components now promoted from experimental to the main package. - Also implements all new properties created for Goabx components + Implements all new V2 properties @@ -180,16 +150,16 @@ export function Feat3241Route() {
- GoabxFooter + GoabFooter - - + + Arts and culture - - + + Privacy - - + +
@@ -212,21 +182,21 @@ export function Feat3241Route() {
- GoabxBadge + GoabBadge - + Size = large - + Emphasis = subtle - + New type property value - +
@@ -239,7 +209,7 @@ export function Feat3241Route() { Should only work with design tokens v1 - +
@@ -249,11 +219,11 @@ export function Feat3241Route() {
- GoabxButton + GoabButton - + Goabx action - +
@@ -271,9 +241,9 @@ export function Feat3241Route() {
- GoabxCalendar + GoabCalendar - +
@@ -289,17 +259,17 @@ export function Feat3241Route() {
- GoabxCallout + GoabCallout - + Experimental callout content. - + Emphasis = high - + Experimental callout content - +
@@ -317,9 +287,9 @@ export function Feat3241Route() {
- GoabxDatepicker + GoabDatepicker - +
@@ -335,36 +305,36 @@ export function Feat3241Route() {
- GoabxFormItem + GoabxInput + GoabFormItem + GoabInput - - - + + + Form Item - Input type = text-input - - - + Input - Size = compact - - + - +
@@ -386,13 +356,13 @@ export function Feat3241Route() {
- GoabxCheckbox + GoabCheckbox - + Size = compact -
- GoabxDropdown + GoabDropdown - - - - - - - + + + + + + + Size = compact - - + - - - - - + + + + +
@@ -457,22 +427,22 @@ export function Feat3241Route() {
- GoabxTextArea + GoabTextArea - - - + + + Text Area - Size = compact - - + - +
@@ -490,36 +460,36 @@ export function Feat3241Route() {
- GoabxRadioGroup + GoabRadioGroup - - - - - - + + + + + + Radio Group - Size = compact Radio Item - Compact = true - - - + + - - - + +
@@ -540,9 +510,9 @@ export function Feat3241Route() {
- GoabxFilterChip w/ Secondary Text + GoabFilterChip w/ Secondary Text - Leading Icon -
- GoabxLink + GoabLink - + Goabx link - + Color = dark - + Goabx link - + Size = large - + Goabx link - +
@@ -620,31 +590,31 @@ export function Feat3241Route() {
- GoabxNotification + GoabNotification - + Goabx notification content. - + Emphasis = low - Goabx notification content. - + Compact = true - Goabx notification content. - + Status: {goabxNotificationStatus}
@@ -664,9 +634,9 @@ export function Feat3241Route() {
- GoabxPagination + GoabPagination -
- GoabxTabs + GoabTabs - + Goabx tab one content. @@ -706,7 +676,7 @@ export function Feat3241Route() { Goabx tab three content. - + Selected tab: {goabxTab} @@ -738,21 +708,21 @@ export function Feat3241Route() {
- GoabxTable + GoabTable - + - First name + First name - Last name + Last name - + Age - + @@ -765,11 +735,11 @@ export function Feat3241Route() { ))} - + - GoabxTable - Striped = true + GoabTable - Striped = true - + First name @@ -786,7 +756,7 @@ export function Feat3241Route() { ))} - +
@@ -827,15 +797,15 @@ export function Feat3241Route() {
- GoabxFileUploadInput + GoabFileUploadInput - - + noop} /> - +
@@ -857,9 +827,9 @@ export function Feat3241Route() {
- GoabxFileUploadCard + GoabFileUploadCard - +
@@ -875,24 +845,24 @@ export function Feat3241Route() {
- GoabxDrawer + GoabDrawer - setGoabxDrawerOpen(true)}> + setGoabxDrawerOpen(true)}> Open Goabx drawer - - + setGoabxDrawerOpen(false)}> + setGoabxDrawerOpen(false)}> Close - + } onClose={() => setGoabxDrawerOpen(false)} > Goabx drawer content. - +
@@ -923,28 +893,28 @@ export function Feat3241Route() {
- GoabxModal + GoabModal - setGoabxModalOpen(true)}> + setGoabxModalOpen(true)}> Open Goabx modal - - + - setGoabxModalOpen(false)}> + setGoabxModalOpen(false)}> Cancel - - setGoabxModalOpen(false)}> + + setGoabxModalOpen(false)}> Confirm - + } onClose={() => setGoabxModalOpen(false)} > Goabx modal content. - +
@@ -979,20 +949,20 @@ export function Feat3241Route() {
- GoabxSideMenu + GoabSideMenu - - } + + } icon="settings" > Goabx navigation - - + + Goabx home Goabx settings - - + +
diff --git a/apps/prs/react/src/routes/features/feat3344.tsx b/apps/prs/react/src/routes/features/feat3344.tsx new file mode 100644 index 0000000000..c39cd44f37 --- /dev/null +++ b/apps/prs/react/src/routes/features/feat3344.tsx @@ -0,0 +1,202 @@ +/** + * PR 4: Table & TableSortHeader V2 Updates + * + * Tests: + * - TableSortHeader with chevron-expand icon (unsorted state) + * - TableSortHeader with arrow-up/arrow-down (sorted states) + * - Built-in single and multi-column sorting + * - sortOrder numbers for multi-column sort priority + * - V2 focus ring on icon only (not whole button) + */ + +import { useEffect, useMemo, useState } from "react"; +import { + GoabBlock, + GoabDetails, + GoabDivider, + GoabTable, + GoabTableSortHeader, +} from "@abgov/react-components"; +// ?url suffix tells Vite to resolve the path without injecting the CSS +import v2TokensUrl from "@abgov/design-tokens-v2/dist/tokens.css?url"; + +import type { GoabTableSortEntry } from "@abgov/ui-components-common"; + +type RowData = { id: number; name: string; department: string; salary: number }; + +const initialData: RowData[] = [ + { id: 1, name: "Alice Johnson", department: "Engineering", salary: 95000 }, + { id: 2, name: "Bob Smith", department: "Marketing", salary: 72000 }, + { id: 3, name: "Carol Williams", department: "Engineering", salary: 105000 }, + { id: 4, name: "David Brown", department: "Sales", salary: 68000 }, + { id: 5, name: "Eve Davis", department: "Marketing", salary: 78000 }, +]; + +function sortData(data: RowData[], sorts: GoabTableSortEntry[]): RowData[] { + if (sorts.length === 0) return data; + return [...data].sort((a, b) => { + for (const { column, direction } of sorts) { + const aVal = a[column as keyof RowData]; + const bVal = b[column as keyof RowData]; + let cmp = 0; + if (typeof aVal === "string" && typeof bVal === "string") { + cmp = aVal.localeCompare(bVal); + } else { + cmp = (aVal as number) - (bVal as number); + } + if (cmp !== 0) return direction === "asc" ? cmp : -cmp; + } + return 0; + }); +} + +export function Feat3344Route() { + useEffect(() => { + const link = document.createElement("link"); + link.rel = "stylesheet"; + link.href = v2TokensUrl; + document.head.appendChild(link); + return () => { + document.head.removeChild(link); + }; + }, []); + + const [currentSorts, setCurrentSorts] = useState([]); + const [multiSorts, setMultiSorts] = useState([]); + const [test3Sorts, setTest3Sorts] = useState([]); + + const singleSorted = useMemo(() => sortData(initialData, currentSorts), [currentSorts]); + const multiSorted = useMemo(() => sortData(initialData, multiSorts), [multiSorts]); + const test3Sorted = useMemo(() => sortData(initialData, test3Sorts), [test3Sorts]); + + const formatSorts = (sorts: GoabTableSortEntry[]): string => { + if (sorts.length === 0) return "None"; + return sorts.map((s, i) => `${i + 1}. ${s.column} (${s.direction})`).join(", "); + }; + + return ( +
+

PR 4: Table & TableSortHeader V2

+ + + +

+ TableSortHeader:
+ - Always-visible sort icon (chevron-expand when unsorted)
+ - Arrow-up/arrow-down for sorted states
+ - sortOrder prop shows "1", "2" for multi-column sort
+
+ Table:
+ - sortMode="single" (default) or "multi" (up to 2 columns)
+ - Initial sort declared on headers via direction + sortOrder
+ - onSort callback with sortBy, sortDir, and sorts array +

+
+
+ + + +

Test 1: Single-Column Sort (Default)

+

Click column headers to sort. Only one column sorts at a time (default behavior).

+

Current sort: {formatSorts(currentSorts)}

+ + setCurrentSorts([{ column: detail.sortBy, direction: detail.sortDir === 1 ? "asc" : "desc" }])}> + + + + Name + + + Department + + + Salary + + + + + {singleSorted.map((row) => ( + + {row.name} + {row.department} + ${row.salary.toLocaleString()} + + ))} + + + + + +

Test 2: Multi-Column Sort

+

With sortMode="multi", click columns to add them to sort order (up to 2).

+

Current sort: {formatSorts(multiSorts)}

+ + setMultiSorts(detail.sorts)}> + + + + Name + + + Department + + + Salary + + + + + {multiSorted.map((row) => ( + + {row.name} + {row.department} + ${row.salary.toLocaleString()} + + ))} + + + + + +

Test 3: Multi Initial Sort (declarative)

+

Two initial sorts declared on headers: Department ascending (primary), Salary + descending (secondary). Use direction + sortOrder on each header to set priority.

+

Current sort: {formatSorts(test3Sorts)}

+ + setTest3Sorts(detail.sorts)} + > + + + + Name + + + + Department + + + + + Salary + + + + + + {test3Sorted.map((row) => ( + + {row.name} + {row.department} + ${row.salary.toLocaleString()} + + ))} + + +
+ ); +} + +export default Feat3344Route; diff --git a/apps/prs/react/src/routes/features/feat3396.tsx b/apps/prs/react/src/routes/features/feat3396.tsx new file mode 100644 index 0000000000..d714066a53 --- /dev/null +++ b/apps/prs/react/src/routes/features/feat3396.tsx @@ -0,0 +1,67 @@ +/** + * Test page for Text component heading-2xs size + */ +import { + GoabBlock, + GoabText, + GoabDivider, + GoabDetails, + GoabLink, +} from "@abgov/react-components"; + +export function Feat3396Route() { + return ( +
+ + Feature: Text heading-2xs size + + + + View on GitHub + + + + The Text component now supports heading-2xs from v2 design tokens. + + + + V2 Design Tokens + +
+ heading-xs + heading-2xs (distinct from heading-xs) +
+ + V1 Design Tokens + + heading-xs + heading-2xs (falls back to heading-xs) +
+ ); +} + +export default Feat3396Route; diff --git a/apps/prs/react/src/routes/features/feat3398.tsx b/apps/prs/react/src/routes/features/feat3398.tsx new file mode 100644 index 0000000000..d37c797232 --- /dev/null +++ b/apps/prs/react/src/routes/features/feat3398.tsx @@ -0,0 +1,89 @@ +import React, { useState } from "react"; +import { + GoabButton, + GoabText, + GoabWorkSideMenu, + GoabWorkSideMenuGroup, + GoabWorkSideMenuItem, +} from "@abgov/react-components"; + +export function Feat3398Route() { + const [groupOpen, setGroupOpen] = useState(false); + + return ( +
+ Feature 3398: Work Side Menu Group open prop + + Use the button below to toggle the side menu group open and closed. + + + Scenario 1: Open and close a group + The button should toggle the group open and closed. + +
+ + setGroupOpen(!groupOpen)} + > + {groupOpen ? "Close group" : "Open group"} + + + + + + + + } + /> +
+ + Scenario 2: Open a group with a current item + + The Features group should be open because it has a current menu item. The{" "} + Bugs group should remain closed. + + +
+ + + + + + + + + + + + + + } + /> +
+
+ ); +} diff --git a/apps/prs/react/src/routes/features/feat3407SkipOnFocusTab.tsx b/apps/prs/react/src/routes/features/feat3407SkipOnFocusTab.tsx new file mode 100644 index 0000000000..d6f64af372 --- /dev/null +++ b/apps/prs/react/src/routes/features/feat3407SkipOnFocusTab.tsx @@ -0,0 +1,67 @@ +import { + GoabBlock, + GoabText, + GoabDivider, + GoabTabs, + GoabTab, +} from "@abgov/react-components"; +import type { JSX } from "react"; + +export function Feat3407SkipOnFocusTabRoute(): JSX.Element { + return ( +
+ + #3407: Skip Focus on Initial Tab Load + + + Testing skipFocus on initial page load (no visible focus ring) and + segmented tabpanel fixes (no focus ring or tab stop on empty content). + + + + + + + Test 1: Skip focus on initial load + + When the page loads, the active tab should NOT have a visible focus + ring. Reload the page and confirm no tab shows a focus outline + until you interact via keyboard. + + + + Not initially selected. + + + + This tab is initially active via initialTab=2. It should NOT + have a focus ring on page load. + + + + Not initially selected. + + + + + + Test 2: When no initialize Tabs + + + Default tabs — check URL changes when clicking tabs. + + + The URL hash should update to reflect the active tab. + + + Resize browser to mobile width — tabs should stack vertically. + + + + + +
+ ); +} + +export default Feat3407SkipOnFocusTabRoute; diff --git a/apps/prs/react/src/routes/features/feat3407StackOnMobile.tsx b/apps/prs/react/src/routes/features/feat3407StackOnMobile.tsx new file mode 100644 index 0000000000..7065463bcd --- /dev/null +++ b/apps/prs/react/src/routes/features/feat3407StackOnMobile.tsx @@ -0,0 +1,111 @@ +import { + GoabBlock, + GoabDivider, + GoabTab, + GoabTabs, + GoabText, +} from "@abgov/react-components"; + +import { useEffect, type JSX } from "react"; +// ?url suffix tells Vite to resolve the path without injecting the CSS +import v2TokensUrl from "@abgov/design-tokens-v2/dist/tokens.css?url"; + +export function Feat3407StackOnMobileRoute(): JSX.Element { + // Dynamically load v2 design tokens only while this page is mounted, + // so they don't leak into other routes in the SPA. + useEffect(() => { + const link = document.createElement("link"); + link.rel = "stylesheet"; + link.href = v2TokensUrl; + document.head.appendChild(link); + return () => { + document.head.removeChild(link); + }; + }, []); + + return ( +
+ + #3407: orientation Prop + + + Testing orientation prop (controls mobile stacking behavior). orientation is + only available on GoabTabs (experimental). + + + + + + + + Test 1: Experimental Tabs + orientation="auto" (default) + + + Experimental (v2) tabs that stack vertically on mobile (default behavior). + Resize browser to mobile width to verify tabs stack. + + + + These tabs should stack vertically on mobile. + + + Vertical stacking on narrow screens. + + + Compare with Test 2 below. + + + + + + Test 2: Experimental Tabs + orientation="horizontal" + + Experimental (v2) tabs that stay horizontal on mobile. Resize browser to + mobile width to verify tabs remain in a row. + + + + These tabs should stay horizontal on mobile. + + + No vertical stacking on narrow screens. + + + Useful when horizontal space is preferred. + + + + + + + Test 3: Segmented variant (always not stacked on mobile) + + + Segmented tabs stay horizontal on mobile by default (no prop needed). Resize + to mobile width to verify. + + + {""} + {""} + {""} + + + + + Test 4: Segmented + orientation="horizontal" + + Segmented tabs with orientation explicitly set to "horizontal". Should remain + horizontal on mobile (same as default segmented behavior). + + + {""} + {""} + {""} + + + +
+ ); +} + +export default Feat3407StackOnMobileRoute; diff --git a/apps/prs/react/src/routes/features/feat3478.tsx b/apps/prs/react/src/routes/features/feat3478.tsx new file mode 100644 index 0000000000..214d5b0bb5 --- /dev/null +++ b/apps/prs/react/src/routes/features/feat3478.tsx @@ -0,0 +1,486 @@ +/** + * PR #3478: Popover API Rewrite + * + * Rewrote goa-popover to use the native HTML Popover API + CSS Anchor Positioning API. + * This test page verifies popover behavior across various scenarios. + */ + +import { useState } from "react"; +import { + GoabBlock, + GoabText, + GoabDivider, + GoabDetails, + GoabButton, + GoabModal, + GoabDropdown, + GoabDropdownItem, + GoabDatePicker, + GoabFormItem, + GoabInput, + GoabCheckbox, + GoabPopover, + GoabMenuButton, + GoabMenuAction, + GoabNotification, + GoabAppHeaderMenu, +} from "@abgov/react-components"; + +export function Feat3478Route() { + const [modalOpen, setModalOpen] = useState(false); + const [modalDropdownValue, setModalDropdownValue] = useState(""); + const [modalDateValue, setModalDateValue] = useState(""); + + // Popover playground controls + const [popoverMaxWidth, setPopoverMaxWidth] = useState("320px"); + const [popoverMinWidth, setPopoverMinWidth] = useState(""); + const [popoverPosition, setPopoverPosition] = useState<"above" | "below" | "auto">( + "auto", + ); + const [popoverPadded, setPopoverPadded] = useState(true); + const [showBanner, setShowBanner] = useState(true); + + return ( +
+ + Feature #3478: Popover API Rewrite + + Test Cases + + Calendar + + + console.log("DatePicker changed:", detail)} + name="item" + value={new Date(2026, 2, 3)} + /> + + + + Popover + + + Popover with Close Button (Focus Trap test) + + Open the popover and verify Tab key cycles focus within the popover content (focus + trap). Click the Close button inside to close. + + Open Popover} minWidth="250px"> +

This popover has buttons inside. Tab between them to test focus trap.

+ + console.log("Action clicked")} + > + Action + + + Close Popover + + +
+ + Popover Playground + + Modify popover properties dynamically to verify positioning, sizing, and padding + work correctly after the rewrite. + + +
+ Click me} + maxWidth={popoverMaxWidth || undefined} + minWidth={popoverMinWidth || undefined} + position={popoverPosition} + padded={popoverPadded} + > + Popover content with dynamic properties. + + Max Width: {popoverMaxWidth || "(default)"} | Min Width:{" "} + {popoverMinWidth || "(none)"} | Position: {popoverPosition} | Padded:{" "} + {popoverPadded ? "Yes" : "No"} + + +
+ + + + + + setPopoverMaxWidth(detail.value)} + /> + + + setPopoverMinWidth(detail.value)} + /> + + + + + + setPopoverPosition(detail.value as "above" | "below" | "auto") + } + > + + + + + + + setPopoverPadded(detail.checked)} + /> + + + + + + + Menu Button + + + Test Menu Button: Press Enter and arrow up and down see whether Menu Button works + as expected. + + +
+ + Short actions: + + console.log("Action:", detail)} + > + + + +
+
+ + Many actions with long text: + + console.log("Action:", detail)} + > + + + + + + + + + + + +
+
+ + Menu button at the bottom of the page (scroll down): + + + This one is placed lower on the page. Open it and check whether the page + scrolls when the focus trap kicks in. + +
+
+ + + Dropdown + + + Standard Dropdown + + Dropdown controls its popover by setting open="true"/"false". + Click it to verify the option list appears. If the open prop is missing, the + Dropdown will not show its options. +
+ Test to make sure when we click an option (or Enter to select an option), Dropdown + will close (test open dynamically set by Dropdown works in Popover) +
+ setModalDropdownValue(detail.value ?? "")} + > + + + + + Selected: {modalDropdownValue || "(none)"} + + + Filterable Dropdown + + + Focus the input and press Space — it should type a space, not toggle the popover. + + console.log("Filterable selected:", detail.value)} + > + + + + + + +
+ + + Edge Cases + + + {/* Test 1: Popover in Modal (Benji's review comment) */} + Test 1: Popover in Modal (z-index fix) + + Previously, position: absolute and z-index: 99 on the popover content caused + dropdowns and date pickers inside modals to render behind or outside the modal. + The native Popover API renders in the top layer, fixing this. Click the button + below to open a modal with a Dropdown and DatePicker inside. + + setModalOpen(true)}> + Open Modal with Popover Components + + setModalOpen(false)} + > + + The Dropdown and DatePicker below should render their popovers correctly above + the modal — not clipped or hidden behind it. + + + + setModalDropdownValue(detail.value ?? "")} + > + + + + + + +
+ + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod + tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, + quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo + consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse + cillum dolore eu fugiat nulla pariatur. + + + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia + deserunt mollit anim id est laborum. Sed ut perspiciatis unde omnis iste + natus error sit voluptatem accusantium doloremque laudantium, totam rem + aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto + beatae vitae dicta sunt explicabo. + + + Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, + sed quia consequuntur magni dolores eos qui ratione voluptatem sequi + nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, + consectetur, adipisci velit. + + + At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis + praesentium voluptatum deleniti atque corrupti quos dolores et quas + molestias excepturi sint occaecati cupiditate non provident, similique sunt + in culpa qui officia deserunt mollitia animi, id est laborum et dolorum + fuga. + + + Et harum quidem rerum facilis est et expedita distinctio. Nam libero + tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus + id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis + dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut + rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et + molestiae non recusandae. + + + Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis + voluptatibus maiores alias consequatur aut perferendis doloribus asperiores + repellat. Quis autem vel eum iure reprehenderit qui in ea voluptate velit + esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo + voluptas nulla pariatur. + +
+ + + setModalDateValue(detail.valueStr)} + /> + +
+
+ + + + {/* Test 2: AppHeaderMenu closes on navigation (popstate) */} + Test 2: AppHeaderMenu closes on navigation + + The "Services" and "Account" menus{" "} + in the header above use GoabAppHeaderMenu, which uses + goa-popover internally. Open a menu, then click a link inside it. The page content + will change but the header stays — verify the menu popover closed. This is to test + handleUrlChange inside the Popover.svelte + + + {/* Test 3: Multiple Popovers */} + Test 3: Multiple Popovers + + Opening one popover should close others (popover="auto" behavior). + + + Popover A}> + Content A + + Popover B}> + Content B + + Popover C}> + Content C + + + + {/* Test 4: #3499 Dismissing Notification breaks AppHeaderMenu */} + + Test 4: #3499 Dismissing Notification breaks AppHeaderMenu + + + When a Notification banner is dismissed (removed from the DOM), it should not + break the AppHeaderMenu popover. Steps to reproduce: dismiss the notification + below, then try opening the AppHeaderMenu in the header. It should still work. + + + Menu Item 1 + Menu Item 2 + Menu Item 3 + + {showBanner && ( + setShowBanner(false)} + > + Dismiss this notification, then verify AppHeaderMenu still works. + + )} + {!showBanner && ( + <> + + Notification dismissed. Now open the AppHeaderMenu above — it should still + function correctly. + + setShowBanner(true)}> + Reset notification + + + )} + + {/* Test 5: #3067 Focus issues with Popover */} + Test 5: #3067 Focus issues with Popover + + After closing a popover with Escape, focus should return to the trigger element. + Steps: 1) Focus the button below, 2) Press Enter to open the popover, 3) Press + Escape to close, 4) The button should still be focused (yellow border visible), 5) + Press Tab — the next interactive element should be selected, not the popover. + + + Focus Test Button}> + + Press Escape to close. Focus should return to the button. + + + Next Focusable Element + + + {/* Test 6: #3062 Popover maxWidth not respected above a button */} + + Test 6: #3062 Popover maxWidth not respected above a button + + + When a Popover is placed directly above a GoabButton or GoabInput in the DOM, it + should still respect the maxWidth property. Both popovers below should have the + same width (default 320px). Previously the one above the button would ignore + maxWidth. + + + Show Popover}> + + This popover is above the button. It should respect maxWidth (320px). + + + + Submit Form + + + Popover Test + + } + > + + This popover is below the button. It should also respect maxWidth (320px). + + + +
+ ); +} + +export default Feat3478Route; diff --git a/apps/prs/react/src/routes/features/feat3529.tsx b/apps/prs/react/src/routes/features/feat3529.tsx new file mode 100644 index 0000000000..ab7a06c320 --- /dev/null +++ b/apps/prs/react/src/routes/features/feat3529.tsx @@ -0,0 +1,124 @@ +/** + * PR #3529: Heading Letter Spacing Tokens + * + * Adds letter-spacing design tokens to all heading sizes in Text.svelte, + * reset.css, FooterNavSection.svelte, and FormSummary.svelte. + * + * This page verifies that letter-spacing is correctly applied to each + * heading size via: + * --goa-typography-heading-[size]-letter-spacing (desktop) + * --goa-typography-mobile-heading-[size]-letter-spacing (mobile) + */ + +import { GoabBlock, GoabDivider, GoabText } from "@abgov/react-components"; + +export function Feat3529Route() { + return ( +
+

Feature #3529: Heading Letter Spacing

+

+ Letter-spacing design tokens have been applied to all heading sizes. Inspect each + heading below and verify that letter-spacing is set via the + corresponding CSS custom property. +

+ + + + {/* Explicit size prop */} +

Explicit size prop

+

Each GoabText below uses an explicit size prop. Resize to mobile to verify the mobile tokens also apply.

+ + +
+

size="heading-xl" — token: --goa-typography-heading-xl-letter-spacing

+ + Heading XL — The quick brown fox jumps over the lazy dog + +
+ +
+

size="heading-l" — token: --goa-typography-heading-l-letter-spacing

+ + Heading L — The quick brown fox jumps over the lazy dog + +
+ +
+

size="heading-m" — token: --goa-typography-heading-m-letter-spacing

+ + Heading M — The quick brown fox jumps over the lazy dog + +
+ +
+

size="heading-s" — token: --goa-typography-heading-s-letter-spacing

+ + Heading S — The quick brown fox jumps over the lazy dog + +
+ +
+

size="heading-xs" — token: --goa-typography-heading-xs-letter-spacing

+ + Heading XS — The quick brown fox jumps over the lazy dog + +
+ +
+

size="heading-2xs" — token: --goa-typography-heading-2xs-letter-spacing

+ + Heading 2XS — The quick brown fox jumps over the lazy dog + +
+
+ + + + {/* Semantic heading tags with default sizes */} +

Semantic heading tags (default sizing)

+

+ Each heading tag below relies on the default size mapping in{" "} + Text.svelte. The same letter-spacing tokens should apply. +

+ + +
+

as="h1" → heading-xl — token: --goa-typography-heading-xl-letter-spacing

+ + H1 — The quick brown fox jumps over the lazy dog + +
+ +
+

as="h2" → heading-l — token: --goa-typography-heading-l-letter-spacing

+ + H2 — The quick brown fox jumps over the lazy dog + +
+ +
+

as="h3" → heading-m — token: --goa-typography-heading-m-letter-spacing

+ + H3 — The quick brown fox jumps over the lazy dog + +
+ +
+

as="h4" → heading-s — token: --goa-typography-heading-s-letter-spacing

+ + H4 — The quick brown fox jumps over the lazy dog + +
+ +
+

as="h5" → heading-xs — token: --goa-typography-heading-xs-letter-spacing

+ + H5 — The quick brown fox jumps over the lazy dog + +
+
+
+ ); +} + +export default Feat3529Route; diff --git a/apps/prs/react/src/routes/features/feat3544.tsx b/apps/prs/react/src/routes/features/feat3544.tsx new file mode 100644 index 0000000000..966251629c --- /dev/null +++ b/apps/prs/react/src/routes/features/feat3544.tsx @@ -0,0 +1,101 @@ +import { + GoabContainer, + GoabText, + GoabWorkSideMenu, + GoabWorkSideMenuGroup, + GoabWorkSideMenuItem, +} from "@abgov/react-components"; + +export function Feat3544Route() { + return ( +
+ Feature 3544: Optional Side Menu Icons + + Both menus below use the same structure in primary content: one item and one + group. The left menu includes icons, and the right menu does not. + + +
+ + With icons +
+ + + + + + + } + /> +
+
+ + + Without icons +
+ + + + + + + } + /> +
+
+ + + Mixed: back icon + no icons +
+ + + + + + + + + + + + + + } + /> +
+
+
+
+ ); +} diff --git a/apps/prs/react/src/routes/features/featV2Checkbox.tsx b/apps/prs/react/src/routes/features/featV2Checkbox.tsx new file mode 100644 index 0000000000..abe7b64fd0 --- /dev/null +++ b/apps/prs/react/src/routes/features/featV2Checkbox.tsx @@ -0,0 +1,324 @@ +import React, { useState } from "react"; +import { + GoabBlock, + GoabCheckbox, + GoabCheckboxList, + GoabDivider, + GoabOneColumnLayout, + GoabPageBlock, + GoabText, +} from "@abgov/react-components"; + +import { + GoabCheckboxOnChangeDetail, + GoabCheckboxListOnChangeDetail, +} from "@abgov/ui-components-common"; +import { Link } from "react-router-dom"; + +export function FeatV2CheckboxRoute() { + const [selectedRows, setSelectedRows] = useState>(new Set()); + const [checkboxListValue, setCheckboxListValue] = useState([]); + const [v2CompactListValue, setV2CompactListValue] = useState([]); + const [v1ListValue, setV1ListValue] = useState([]); + const [descListValue, setDescListValue] = useState([]); + const [v1DescListValue, setV1DescListValue] = useState([]); + + const tableData = [ + { id: "row1", name: "Alice Johnson", email: "alice@example.com", status: "Active" }, + { id: "row2", name: "Bob Smith", email: "bob@example.com", status: "Pending" }, + { id: "row3", name: "Carol Davis", email: "carol@example.com", status: "Active" }, + ]; + + const handleRowSelect = (rowId: string, detail: GoabCheckboxOnChangeDetail) => { + const newSelected = new Set(selectedRows); + if (detail.checked) { + newSelected.add(rowId); + } else { + newSelected.delete(rowId); + } + setSelectedRows(newSelected); + }; + + return ( + + + + + Back + + + V2 Checkbox Fixes + + + + This page demonstrates fixes for checkbox spacing issues: + + + + 1. Checkbox auto-margin removed - Checkboxes no longer have + default bottom margin, fixing alignment in tables + + + 2. CheckboxList gap - CheckboxList now controls its own spacing + between items using gap: var(--goa-space-m) + + + + + + {/* Test Case 1: Checkbox in Table */} + + Test 1: Checkbox in Table + + + Previously, checkboxes in tables had unwanted bottom margin causing misalignment. + Now they align properly with the row content. + + + + + + + 0 && selectedRows.size < tableData.length} + onChange={(detail: GoabCheckboxOnChangeDetail) => { + if (detail.checked) { + setSelectedRows(new Set(tableData.map(row => row.id))); + } else { + setSelectedRows(new Set()); + } + }} + ariaLabel="Select all rows" + /> + + Name + Email + Status + + + + {tableData.map((row) => ( + + + handleRowSelect(row.id, detail)} + ariaLabel={`Select ${row.name}`} + /> + + {row.name} + {row.email} + {row.status} + + ))} + + + + + Selected: {selectedRows.size} of {tableData.length} rows + + + + + {/* Test Case 2: CheckboxList Spacing */} + + Test 2: CheckboxList Spacing + + + CheckboxList now uses gap: var(--goa-space-m) for consistent spacing between items. + Previously relied on individual checkbox margins. + + + setCheckboxListValue(detail.value)} + > + + + + + + + Selected: {checkboxListValue.join(", ") || "none"} + + + + + {/* Test Case 2b: CheckboxList with Descriptions */} + + Test 2b: V2 CheckboxList with Descriptions + + + Testing checkbox description alignment when descriptions are set per option. + + + setDescListValue(detail.value)} + > + + + + + + + + {/* Test Case 2c: V1 CheckboxList with Descriptions (comparison) */} + + Test 2c: V1 CheckboxList with Descriptions (comparison) + + + V1 version for comparison. + + + setV1DescListValue(detail.value)} + > + + + + + + + + {/* Test Case 3: V2 Compact CheckboxList */} + + Test 3: V2 Compact CheckboxList + + + Compact checkbox list uses smaller gap (var(--goa-space-s)) between items. + + + setV2CompactListValue(detail.value)} + > + + + + + + + Selected: {v2CompactListValue.join(", ") || "none"} + + + + + {/* Test Case 4: Standalone Checkbox */} + + Test 4: V2 Standalone Checkbox (No Auto-Margin) + + + V2 checkboxes no longer have default bottom margin. + Spacing should be controlled by the parent layout. + + + + + + + + + + Notice: No extra margin between checkboxes - spacing controlled by GoabBlock gap. + + + + + {/* V1 Regression Tests */} + + V1 Regression Tests + + + These tests verify V1 checkboxes still behave correctly after the V2 spacing changes. + + + {/* Test Case 5: V1 Standalone Checkboxes */} + + Test 5: V1 Standalone Checkboxes (Auto-Margin) + + + V1 checkboxes should still have their default bottom margin (space-m). + + +
+ + +
+ + + + {/* Test Case 6: V1 CheckboxList */} + + Test 6: V1 CheckboxList (No Gap Change) + + + V1 checkbox lists should look the same as before - individual checkbox margins control spacing, list gap is 0. + + + setV1ListValue(detail.value)} + > + + + + + + + Selected: {v1ListValue.join(", ") || "none"} + +
+
+
+ ); +} diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md new file mode 100644 index 0000000000..6da695ee31 --- /dev/null +++ b/docs/ARCHITECTURE.md @@ -0,0 +1,427 @@ +# Docs Site — How It Works + +Practical guide for the team on how this site is built, where content comes from, and how to make changes. + +**Location:** `ui-components/docs/` (not the old `ui-components-docs/` SPA) +**Stack:** Astro + MDX + React islands +**Dev server:** `npm run dev` → http://localhost:4203 + +--- + +## How the site is structured + +The docs site pulls content from three types of sources: + +``` +Svelte source code Manual MDX content +(libs/web-components/) (docs/src/content/) + │ │ + ▼ ▼ + extract-api.ts Astro content collections + │ (components, guidance, examples) + ▼ │ + generated/component-apis/*.json │ + │ │ + └──────────────┬──────────────────────┘ + ▼ + Astro static build + (pages assembled from all sources) +``` + +### Content sources at a glance + +| Content | Source | Automated? | +| ------------------------------------ | --------------------------------------------------------- | ----------------------------- | +| Component API (props, events, slots) | Extracted from Svelte → `generated/component-apis/*.json` | **Yes** — runs on every build | +| Component descriptions & metadata | `src/content/components/*.mdx` | Manual | +| Guidance atoms (~130+) | `src/content/guidance/*.mdx` | Manual | +| Examples (~80) | `src/content/examples/*/` | Manual | +| Configuration previews (~65) | `src/data/configurations/*.ts` | Manual (curated) | +| Design tokens | `@abgov/design-tokens-v2` npm package | Yes (npm import) | +| Search index | `search-index.json` | Yes (build step) | + +--- + +## Build pipeline + +```bash +npm run build +``` + +This runs three steps in sequence: + +1. **`npm run extract-api`** — Runs `tsx src/scripts/extract-api.ts --all`. Scans every Svelte component in `libs/web-components/src/components/`, extracts props/events/slots, writes JSON to `docs/generated/component-apis/`. +2. **`astro check`** — TypeScript type checking. +3. **`astro build`** — Static site generation. Content collections are processed, dynamic routes are pre-rendered, output goes to `ui-components/dist/docs`. + +The generated API JSON files are **committed to git** so changes are visible in PR diffs. They're also regenerated on every build to ensure freshness. + +> **Note:** The `extract-api` step was added in PR #3513. If you're on a branch that predates this merge, you'll need to manually create or copy the JSON files in `docs/generated/component-apis/` for the dev server to show API data. + +### Vite aliases + +The site resolves monorepo packages directly via aliases in `astro.config.mjs`: + +- `@abgov/react-components` → `libs/react-components/src/index.ts` +- `@abgov/web-components` → `dist/libs/web-components/` +- `@abgov/style` → `dist/libs/web-components/index.css` +- `@design-tokens` → `node_modules/@abgov/design-tokens-v2/dist` + +**Important:** `@abgov/web-components` points to `dist/`, so you need to build web components first (`npm run build` from the root) for the docs site to work. + +--- + +## Content collections + +Defined in `src/content/config.ts`. Three collections: + +### Components (`src/content/components/*.mdx`) + +One MDX file per component. Mostly frontmatter — the page template pulls in API data, guidance, examples, and configurations automatically. + +```yaml +--- +name: Button +description: Carry out an important action or navigate to another page. +status: stable # stable | beta | deprecated | experimental +category: inputs-and-actions # determines nav section +tags: [action, submit] +relatedComponents: [button-group, icon-button] +figmaUrl: https://www.figma.com/... +githubUrl: https://github.com/... +webComponentTag: goa-button +reactClassName: GoabButton +angularSelector: goab-button +hidden: true # optional — hide from nav (used for subcomponents, deprecated, internal) +subcomponent: true # optional — show API on parent component page +--- +``` + +The MDX body is usually empty. Any content you add appears at the bottom of the "Usage guidelines" tab. + +**Subcomponents:** Some components are children that developers compose with a parent (e.g., Tab inside Tabs, Footer Nav Section inside Footer). These have `hidden: true` (not in nav) and `subcomponent: true` (API shown on parent page). The parent discovers subcomponents via its `relatedComponents` array. See "Add a subcomponent" below for how this works. + +### Guidance (`src/content/guidance/*.mdx`) + +Atomic pieces of design knowledge — do's, don'ts, tips, warnings. These are linked to components via `appliesTo.components` and appear on those component pages automatically. + +```yaml +--- +id: accordion-content-left-aligned +type: do # do | dont | tip | warning | info +description: Ensure accordion content is left-aligned with the heading. +topic: positioning # determines which section on the page +tags: [accordion, alignment] +appliesTo: + components: [accordion] # shows on these component pages +status: published # published | draft | deprecated +--- + + +Content here... + + +``` + +**Topics** determine where guidance appears on the component page. Only these values are recognized by the rendering code in `src/lib/content-queries.ts`: + +- **Usage tab:** `types`, `states`, `sizing`, `icons`, `positioning`, `content`, `other` +- **Accessibility tab:** `screen-readers`, `keyboard`, `focus` + +The schema in `config.ts` accepts additional topic values (usage, interaction, forms, layout, performance, accessibility, feedback), but any guidance using those topics will be **silently filtered out** and won't render on the page. Stick to the values above. + +### Examples (`src/content/examples/*/`) + +Each example is a folder with an `index.mdx` + framework code files: + +``` +src/content/examples/button-with-icon/ +├── index.mdx # Frontmatter + description +├── react.tsx # React implementation +├── angular.html # Angular template +├── angular.ts # Angular component class +└── web-components.html # Web components implementation +``` + +```yaml +# index.mdx frontmatter +--- +id: button-with-icon +title: Button with Icon +categories: [inputs-and-actions] # content-layout | feedback-and-alerts | inputs-and-actions | forms | structure-and-navigation | technical +scale: interaction # interaction | task | page | service +userType: both # citizen | worker | both +tags: [icons, buttons] +components: [button, icon] # links this example to component pages +accessibilityNotes: | + Button text provides the accessible name. +status: published +--- +``` + +Example code is loaded at build time via Vite glob imports (`src/lib/example-code.ts`). + +--- + +## Configuration previews + +The interactive preview at the top of each component page (dropdown + live preview + code snippet). + +**Files:** `src/data/configurations/.ts` +**Registry:** `src/data/configurations/index.ts` + +Each file exports an object with preset configurations: + +```typescript +export const buttonConfigurations: ComponentConfigurations = { + componentSlug: "button", + componentName: "Button", + defaultConfigurationId: "basic", + configurations: [ + { + id: "basic", + name: "Primary button", + code: { + react: `Submit`, + angular: `Submit`, + webComponents: `Submit`, + }, + }, + // ... more variants + ], +}; +``` + +**Note:** Most configuration code uses `Goab*` / `goab-*` prefixes. Some components also include V2-specific variants — check `libs/react-components/src/lib/` for the full list. + +**Slots across frameworks:** Each configuration file contains code for all three frameworks, and slots work differently in each: + +- **Web Components:** native `slot="name"` attribute — `
...
` +- **React:** slots become JSX props — `actions={
...
}` +- **Angular:** slots become `TemplateRef` inputs with `ng-template` — `[actions]="actionsTemplate"` and `...` + +This is a common source of errors when writing configuration code since all three are in the same file. + +--- + +## How to: common changes + +### Add a new component page + +1. **Create the MDX file:** + + ```bash + # Create src/content/components/my-component.mdx + ``` + + Add frontmatter with name, description, status, category, framework identifiers. See any existing file for the template. + +2. **API data is automatic.** As long as the Svelte component exists in `libs/web-components/src/components/my-component/`, the build extracts its API. The slug must match the folder name. + +3. **Add a configuration preview** (optional but recommended): + - Create `src/data/configurations/my-component.ts` + - Export a `ComponentConfigurations` object + - Add the import + export to `src/data/configurations/index.ts` + - Add the slug to the `configurationRegistry` object in the same file + +4. The component appears in the nav and grid automatically. The side nav is built dynamically from the content collection — Astro queries all component MDX files, groups them by `category`, and passes the data to `ComponentsSubMenu` via `nav-categories.ts`. No hardcoded nav lists to update. + +### Add a subcomponent + +Subcomponents are child components that developers compose with a parent (e.g., `` inside ``). Their API appears on the parent's Properties tab under a separate heading. + +**How it works:** The parent lists the subcomponent in its `relatedComponents`. The page template calls `getSubcomponents()`, which filters that list for entries with `subcomponent: true` and loads their extracted API data. + +**Example: Tabs and Tab** + +The parent (`tabs.mdx`) includes `tab` in its `relatedComponents`: + +```yaml +# src/content/components/tabs.mdx +--- +name: Tabs +status: stable +category: structure-and-navigation +relatedComponents: + - tab # <-- this is how the parent discovers the subcomponent +webComponentTag: goa-tabs +--- +``` + +The child (`tab.mdx`) marks itself as hidden and a subcomponent: + +```yaml +# src/content/components/tab.mdx +--- +name: Tab +status: stable +category: structure-and-navigation +hidden: true # not shown in nav +subcomponent: true # API appears on parent page +relatedComponents: + - tabs +webComponentTag: goa-tab +--- +``` + +Result: the Tabs page shows "Tab Props", "Tab Slots" (and "Tab Events" if any exist) with a "Subcomponent" badge on each heading. + +**To add a new subcomponent:** + +1. Create the subcomponent MDX file with `hidden: true` and `subcomponent: true` +2. Add its slug to the parent's `relatedComponents` array +3. Ensure API data exists. If the Svelte component has its own directory (`libs/web-components/src/components/my-sub/`), the extraction script handles it automatically. If it's a nested file inside the parent's directory (like `WorkSideMenuGroup.svelte` inside `work-side-menu/`), you need to manually create the API JSON in `generated/component-apis/my-sub.json` + +**Current subcomponent mappings:** + +| Parent | Subcomponents | +| -------------- | ----------------------------------------- | +| Header | App Header Menu | +| File uploader | File Upload Card | +| Footer | Footer Meta Section, Footer Nav Section | +| Form stepper | Form Step | +| Menu button | Menu Action | +| Radio | Radio Item | +| Side menu | Side Menu Group, Side Menu Heading | +| Tabs | Tab | +| Work Side Menu | Work Side Menu Group, Work Side Menu Item | + +### Hide a component from navigation + +Set `hidden: true` in the component's MDX frontmatter. It won't appear in the nav or component grid, but the page still exists if you visit the URL directly. + +### Add guidance for a component + +1. Create `src/content/guidance/.mdx` +2. Set `appliesTo.components` to include the component slug(s) +3. Choose the right `type` (do/dont/tip/warning/info) and `topic` +4. The guidance appears automatically on those component pages, in the correct tab + +One guidance atom can apply to multiple components — just list them all in `appliesTo.components`. + +### Add a new example + +1. Create a folder: `src/content/examples/my-example/` +2. Add `index.mdx` with frontmatter (id, title, categories, scale, components, etc.) +3. Add framework files: + - `react.tsx` — React implementation + - `angular.html` + `angular.ts` — Angular template and component + - `web-components.html` — Web components HTML +4. List the component slugs in the `components` array — this links the example to those component pages +5. Generate a preview image (see below) + +All three framework files are optional, but at least one is needed. + +### Generate example preview images + +Preview images show a screenshot of each example in the grid cards. To generate them: + +```bash +cd ui-components/docs + +# Generate for all examples (skips manually-provided ones) +npm run generate-previews -- --url http://localhost:4203 + +# Generate for a specific example +npm run generate-previews -- --url http://localhost:4203 my-example-slug +``` + +This requires the dev server to be running (`npm run dev`). Images are saved as WebP to `public/images/examples/`. Add `previewImage: /images/examples/my-example.webp` to the example's frontmatter. + +**For modals, drawers, or notifications:** the script can't capture these well automatically. Take a manual screenshot (1280x800 viewport), save it as a PNG in `public/images/examples/`, update the frontmatter path to `.png`, and add the slug to the `SKIP_EXAMPLES` list in `src/scripts/generate-preview-images.ts`. + +### Update a configuration preview + +Edit the relevant file in `src/data/configurations/.ts`. Each configuration has an `id`, `name`, and `code` with React/Angular/Web Components snippets. + +### Add/update a component thumbnail + +Place an SVG in `docs/public/thumbnails/.svg`. The components grid references these. + +--- + +## Key files reference + +| What | Where | +| ----------------------- | ---------------------------------------- | +| Astro config | `docs/astro.config.mjs` | +| Content schemas | `docs/src/content/config.ts` | +| Component page template | `docs/src/pages/components/[slug].astro` | +| Example page template | `docs/src/pages/examples/[slug].astro` | +| Content query helpers | `docs/src/lib/content-queries.ts` | +| Example code loader | `docs/src/lib/example-code.ts` | +| API extraction script | `docs/src/scripts/extract-api.ts` | +| Configuration registry | `docs/src/data/configurations/index.ts` | +| Configuration types | `docs/src/data/configurations/types.ts` | +| JSX workarounds | `docs/src/global.d.ts` | +| Layouts | `docs/src/layouts/` | +| Generated API JSON | `docs/generated/component-apis/` | + +--- + +## How component pages are assembled + +The page template (`src/pages/components/[slug].astro`) pulls from six sources: + +1. **MDX content** — renders the component's `.mdx` file (mostly frontmatter-driven) +2. **Extracted API** — `getComponentApi(slug)` loads from `generated/component-apis/.json` +3. **Subcomponent APIs** — `getSubcomponents(relatedComponents)` finds entries with `subcomponent: true` and loads their API data +4. **Guidance** — `getGuidanceForComponent(slug)` filters guidance where `appliesTo.components` includes this slug, then splits into usage vs accessibility topics +5. **Examples** — `getExamplesForComponent(slug)` filters examples where `components` includes this slug +6. **Configurations** — `getComponentConfigurations(slug)` looks up from the registry + +These are rendered into four tabs: Properties (including subcomponent APIs), Examples, Usage guidelines, Accessibility. + +--- + +## Framework preference sync + +The site has a framework preference switcher (React / Angular / Web Components). The choice is stored in `localStorage` and synced across tabs via `CustomEvent`. See `src/lib/framework-preference.ts`. + +Configuration previews and example code tabs both respect this preference — change it once and it applies everywhere. + +--- + +## Workarounds and known issues + +### `global.d.ts` — JSX type workarounds + +When a React wrapper doesn't support a V2 feature yet, we declare the raw web component in JSX so TypeScript doesn't error. Each entry has a tracking issue: + +- `goa-badge` — V2 types not in wrapper ([#3385](https://github.com/GovAlta/ui-components/issues/3385)) +- `goa-table` — V2 styling issues ([#3384](https://github.com/GovAlta/ui-components/issues/3384)) +- `goa-table-sort-header` — missing sortOrder prop +- `goa-tabs` / `goa-tab` — missing updateUrl and stackOnMobile props + +When the wrapper is fixed, remove the corresponding `global.d.ts` entry and switch to the React wrapper. + +### Design tokens V2 + +The docs site uses V2 tokens via an npm alias: + +```json +"@abgov/design-tokens-v2": "npm:@abgov/design-tokens@^2.0.0" +``` + +Referenced in code as `@design-tokens` (Vite alias). This lets us use V2 tokens while the main package is still at V1 for other consumers. + +### `client:only="react"` hydration + +Some React components (like `ConfigurationPreview`) use `client:only="react"` instead of `client:load`. This avoids SSR hydration mismatches with web components. If you see React state issues during SSR, this is the fix. + +### Web components need a build + +The docs site resolves `@abgov/web-components` to `dist/libs/web-components/`. If you're seeing missing components in dev, run a build from the repo root first: + +```bash +cd /path/to/ui-components +npm run build +``` + +--- + +## What's still planned + +- **Wrapper-based extraction** — Extract React/Angular prop names from wrappers too, not just Svelte. Blocked on [#3361](https://github.com/GovAlta/ui-components/issues/3361). +- **Automated example screenshots** — Generate preview images for the examples grid automatically. +- **MCP JSON generation** — Generate the MCP server's knowledge base from the docs site content, closing the loop between docs and AI tooling. diff --git a/docs/astro.config.mjs b/docs/astro.config.mjs index e106f4d38d..379f029e7f 100644 --- a/docs/astro.config.mjs +++ b/docs/astro.config.mjs @@ -10,8 +10,22 @@ const workspaceRoot = path.resolve(__dirname, ".."); // https://astro.build/config export default defineConfig({ + site: "https://design.alberta.ca", root: ".", outDir: "../dist/docs", + redirects: { + "/components/circular-progress-indicator": "/components/circular-progress", + "/components/file-uploader": "/components/file-upload-input", + "/components/header": "/components/app-header", + "/components/icons": "/components/icon", + "/components/linear-progress-indicator": "/components/linear-progress", + "/components/notification-banner": "/components/notification", + "/components/radio": "/components/radio-group", + "/components/skeleton-loader": "/components/skeleton", + "/design-tokens": "/tokens", + "/get-started/support": "/support", + "/examples/show-multiple-actions-in-a-table": "/examples/show-multiple-actions-in-a-compact-table", + }, build: { chunkSizeWarningLimit: 1000, }, @@ -55,7 +69,10 @@ export default defineConfig({ // Design tokens V2 for docs styling (via npm alias) { find: "@design-tokens", - replacement: path.resolve(workspaceRoot, "node_modules/@abgov/design-tokens-v2/dist"), + replacement: path.resolve( + workspaceRoot, + "node_modules/@abgov/design-tokens-v2/dist", + ), }, ], dedupe: ["react", "react-dom", "react/jsx-runtime", "react/jsx-dev-runtime"], diff --git a/docs/generated/component-apis/accordion.json b/docs/generated/component-apis/accordion.json index d1a728750d..132e50b852 100644 --- a/docs/generated/component-apis/accordion.json +++ b/docs/generated/component-apis/accordion.json @@ -1,7 +1,6 @@ { "componentSlug": "accordion", "extractedFrom": "libs/web-components/src/components/accordion/Accordion.svelte", - "extractedAt": "2026-02-04T08:10:50.390Z", "props": [ { "name": "open", diff --git a/docs/generated/component-apis/app-header-menu.json b/docs/generated/component-apis/app-header-menu.json index 02665ecfbc..1e8fca8a88 100644 --- a/docs/generated/component-apis/app-header-menu.json +++ b/docs/generated/component-apis/app-header-menu.json @@ -1,7 +1,6 @@ { "componentSlug": "app-header-menu", "extractedFrom": "libs/web-components/src/components/app-header-menu/AppHeaderMenu.svelte", - "extractedAt": "2026-02-04T08:10:50.392Z", "props": [ { "name": "heading", @@ -29,6 +28,17 @@ "default": "primary", "description": "The menu style variant. Primary uses bold text, secondary uses regular weight." }, + { + "name": "version", + "type": "\"1\" | \"2\"", + "values": [ + "1", + "2" + ], + "required": false, + "default": "1", + "description": "The header version this menu is used with." + }, { "name": "testId", "type": "string", diff --git a/docs/generated/component-apis/app-header-navigation.json b/docs/generated/component-apis/app-header-navigation.json new file mode 100644 index 0000000000..8d8a1251fc --- /dev/null +++ b/docs/generated/component-apis/app-header-navigation.json @@ -0,0 +1,38 @@ +{ + "componentSlug": "app-header-navigation", + "extractedFrom": "libs/web-components/src/components/app-header-navigation/AppHeaderNavigation.svelte", + "props": [ + { + "name": "version", + "type": "\"1\" | \"2\"", + "values": [ + "1", + "2" + ], + "required": false, + "default": "1", + "description": "" + }, + { + "name": "windowWidth", + "type": "number", + "required": true, + "default": null, + "description": "" + }, + { + "name": "mobile", + "type": "boolean", + "required": false, + "default": "false", + "description": "" + } + ], + "events": [], + "slots": [ + { + "name": "default", + "description": "" + } + ] +} \ No newline at end of file diff --git a/docs/generated/component-apis/app-header.json b/docs/generated/component-apis/app-header.json index 4e4aae8a3e..164f93138c 100644 --- a/docs/generated/component-apis/app-header.json +++ b/docs/generated/component-apis/app-header.json @@ -1,8 +1,18 @@ { "componentSlug": "app-header", "extractedFrom": "libs/web-components/src/components/app-header/AppHeader.svelte", - "extractedAt": "2026-02-04T08:10:50.392Z", "props": [ + { + "name": "version", + "type": "\"1\" | \"2\"", + "values": [ + "1", + "2" + ], + "required": false, + "default": "1", + "description": "" + }, { "name": "heading", "type": "string", @@ -10,6 +20,13 @@ "default": "", "description": "Set the service name to display in the app header." }, + { + "name": "secondarytext", + "type": "string", + "required": false, + "default": "", + "description": "V2 only: Secondary text displayed under the service name." + }, { "name": "url", "type": "string", @@ -68,6 +85,22 @@ { "name": "default", "description": "" + }, + { + "name": "banner", + "description": "" + }, + { + "name": "phase", + "description": "" + }, + { + "name": "utilities", + "description": "" + }, + { + "name": "navigation", + "description": "" } ] } \ No newline at end of file diff --git a/docs/generated/component-apis/badge.json b/docs/generated/component-apis/badge.json index c43ec0a408..cc16d9e39b 100644 --- a/docs/generated/component-apis/badge.json +++ b/docs/generated/component-apis/badge.json @@ -1,7 +1,6 @@ { "componentSlug": "badge", "extractedFrom": "libs/web-components/src/components/badge/Badge.svelte", - "extractedAt": "2026-02-04T08:10:50.393Z", "props": [ { "name": "type", diff --git a/docs/generated/component-apis/block.json b/docs/generated/component-apis/block.json index 476ccb2ac6..499c8e80e5 100644 --- a/docs/generated/component-apis/block.json +++ b/docs/generated/component-apis/block.json @@ -1,7 +1,6 @@ { "componentSlug": "block", "extractedFrom": "libs/web-components/src/components/block/Block.svelte", - "extractedAt": "2026-02-04T08:10:50.394Z", "props": [ { "name": "gap", diff --git a/docs/generated/component-apis/button-group.json b/docs/generated/component-apis/button-group.json index 6c07fe07aa..8014882d01 100644 --- a/docs/generated/component-apis/button-group.json +++ b/docs/generated/component-apis/button-group.json @@ -1,7 +1,6 @@ { "componentSlug": "button-group", "extractedFrom": "libs/web-components/src/components/button-group/ButtonGroup.svelte", - "extractedAt": "2026-02-04T08:10:50.394Z", "props": [ { "name": "alignment", diff --git a/docs/generated/component-apis/button.json b/docs/generated/component-apis/button.json index 969cc8656b..755dffddc7 100644 --- a/docs/generated/component-apis/button.json +++ b/docs/generated/component-apis/button.json @@ -1,7 +1,6 @@ { "componentSlug": "button", "extractedFrom": "libs/web-components/src/components/button/Button.svelte", - "extractedAt": "2026-02-04T08:10:50.394Z", "props": [ { "name": "type", diff --git a/docs/generated/component-apis/calendar.json b/docs/generated/component-apis/calendar.json index a404130e5b..5a6285f88b 100644 --- a/docs/generated/component-apis/calendar.json +++ b/docs/generated/component-apis/calendar.json @@ -1,7 +1,6 @@ { "componentSlug": "calendar", "extractedFrom": "libs/web-components/src/components/calendar/Calendar.svelte", - "extractedAt": "2026-02-04T08:10:50.395Z", "props": [ { "name": "name", diff --git a/docs/generated/component-apis/callout.json b/docs/generated/component-apis/callout.json index 1487db5865..bbb0415aca 100644 --- a/docs/generated/component-apis/callout.json +++ b/docs/generated/component-apis/callout.json @@ -1,7 +1,6 @@ { "componentSlug": "callout", "extractedFrom": "libs/web-components/src/components/callout/Callout.svelte", - "extractedAt": "2026-02-04T08:10:50.395Z", "props": [ { "name": "mt", diff --git a/docs/generated/component-apis/card-actions.json b/docs/generated/component-apis/card-actions.json index 407acdc9ca..9efe3cc159 100644 --- a/docs/generated/component-apis/card-actions.json +++ b/docs/generated/component-apis/card-actions.json @@ -1,7 +1,6 @@ { "componentSlug": "card-actions", "extractedFrom": "libs/web-components/src/components/card-actions/CardActions.svelte", - "extractedAt": "2026-02-04T08:10:50.396Z", "props": [], "events": [], "slots": [ diff --git a/docs/generated/component-apis/card-content.json b/docs/generated/component-apis/card-content.json index eaa9415441..e757b05dbe 100644 --- a/docs/generated/component-apis/card-content.json +++ b/docs/generated/component-apis/card-content.json @@ -1,7 +1,6 @@ { "componentSlug": "card-content", "extractedFrom": "libs/web-components/src/components/card-content/CardContent.svelte", - "extractedAt": "2026-02-04T08:10:50.396Z", "props": [], "events": [], "slots": [ diff --git a/docs/generated/component-apis/card-group.json b/docs/generated/component-apis/card-group.json index 7dfb5247c7..5ca2073983 100644 --- a/docs/generated/component-apis/card-group.json +++ b/docs/generated/component-apis/card-group.json @@ -1,7 +1,6 @@ { "componentSlug": "card-group", "extractedFrom": "libs/web-components/src/components/card-group/CardGroup.svelte", - "extractedAt": "2026-02-04T08:10:50.396Z", "props": [], "events": [], "slots": [ diff --git a/docs/generated/component-apis/card-image.json b/docs/generated/component-apis/card-image.json index dcccaedd40..6569d15281 100644 --- a/docs/generated/component-apis/card-image.json +++ b/docs/generated/component-apis/card-image.json @@ -1,7 +1,6 @@ { "componentSlug": "card-image", "extractedFrom": "libs/web-components/src/components/card-image/CardImage.svelte", - "extractedAt": "2026-02-04T08:10:50.396Z", "props": [ { "name": "src", diff --git a/docs/generated/component-apis/card.json b/docs/generated/component-apis/card.json index e885f3ddb7..bff87bf697 100644 --- a/docs/generated/component-apis/card.json +++ b/docs/generated/component-apis/card.json @@ -1,7 +1,6 @@ { "componentSlug": "card", "extractedFrom": "libs/web-components/src/components/card/Card.svelte", - "extractedAt": "2026-02-04T08:10:50.395Z", "props": [ { "name": "elevation", diff --git a/docs/generated/component-apis/checkbox-list.json b/docs/generated/component-apis/checkbox-list.json index 749952d938..921345b50f 100644 --- a/docs/generated/component-apis/checkbox-list.json +++ b/docs/generated/component-apis/checkbox-list.json @@ -1,7 +1,6 @@ { "componentSlug": "checkbox-list", "extractedFrom": "libs/web-components/src/components/checkbox-list/CheckboxList.svelte", - "extractedAt": "2026-02-04T19:24:42.584Z", "props": [ { "name": "name", @@ -45,6 +44,17 @@ "default": "none", "description": "Sets the maximum width of the checkbox list container." }, + { + "name": "size", + "type": "\"default\" | \"compact\"", + "values": [ + "default", + "compact" + ], + "required": false, + "default": "default", + "description": "Sets the size of the checkbox list. 'compact' reduces spacing between items." + }, { "name": "mt", "type": "Spacing", diff --git a/docs/generated/component-apis/checkbox.json b/docs/generated/component-apis/checkbox.json index 3db9f637d4..5e2809db8e 100644 --- a/docs/generated/component-apis/checkbox.json +++ b/docs/generated/component-apis/checkbox.json @@ -1,7 +1,6 @@ { "componentSlug": "checkbox", "extractedFrom": "libs/web-components/src/components/checkbox/Checkbox.svelte", - "extractedAt": "2026-02-04T08:10:50.397Z", "props": [ { "name": "name", diff --git a/docs/generated/component-apis/chip.json b/docs/generated/component-apis/chip.json index cb2fc27d5b..ed45fe3d41 100644 --- a/docs/generated/component-apis/chip.json +++ b/docs/generated/component-apis/chip.json @@ -1,7 +1,6 @@ { "componentSlug": "chip", "extractedFrom": "libs/web-components/src/components/chip/Chip.svelte", - "extractedAt": "2026-02-04T08:10:50.398Z", "props": [ { "name": "mt", @@ -78,7 +77,7 @@ }, { "name": "variant", - "type": "ChipVariant", + "type": "\"filter\"", "required": true, "default": null, "description": "@deprecated Use GoAFilterChip instead. The chip variant style.", diff --git a/docs/generated/component-apis/circular-progress.json b/docs/generated/component-apis/circular-progress.json index 14f29e041b..15cdda806d 100644 --- a/docs/generated/component-apis/circular-progress.json +++ b/docs/generated/component-apis/circular-progress.json @@ -1,7 +1,6 @@ { "componentSlug": "circular-progress", "extractedFrom": "libs/web-components/src/components/circular-progress/CircularProgress.svelte", - "extractedAt": "2026-02-04T08:10:50.399Z", "props": [ { "name": "variant", diff --git a/docs/generated/component-apis/container.json b/docs/generated/component-apis/container.json index f86316b7a5..6b8be6c90d 100644 --- a/docs/generated/component-apis/container.json +++ b/docs/generated/component-apis/container.json @@ -1,7 +1,6 @@ { "componentSlug": "container", "extractedFrom": "libs/web-components/src/components/container/Container.svelte", - "extractedAt": "2026-02-04T08:10:50.399Z", "props": [ { "name": "type", diff --git a/docs/generated/component-apis/data-grid.json b/docs/generated/component-apis/data-grid.json index ff058c8495..bf52986bea 100644 --- a/docs/generated/component-apis/data-grid.json +++ b/docs/generated/component-apis/data-grid.json @@ -1,7 +1,6 @@ { "componentSlug": "data-grid", "extractedFrom": "libs/web-components/src/components/data-grid/DataGrid.svelte", - "extractedAt": "2026-02-04T08:10:50.400Z", "props": [ { "name": "keyboardIconVisibility", diff --git a/docs/generated/component-apis/date-picker.json b/docs/generated/component-apis/date-picker.json index a65aaa58c1..536705b8ef 100644 --- a/docs/generated/component-apis/date-picker.json +++ b/docs/generated/component-apis/date-picker.json @@ -1,7 +1,6 @@ { "componentSlug": "date-picker", "extractedFrom": "libs/web-components/src/components/date-picker/DatePicker.svelte", - "extractedAt": "2026-02-04T08:10:50.400Z", "props": [ { "name": "type", diff --git a/docs/generated/component-apis/details.json b/docs/generated/component-apis/details.json index 569bd66ee5..0a698e46db 100644 --- a/docs/generated/component-apis/details.json +++ b/docs/generated/component-apis/details.json @@ -1,7 +1,6 @@ { "componentSlug": "details", "extractedFrom": "libs/web-components/src/components/details/Details.svelte", - "extractedAt": "2026-02-04T08:10:50.401Z", "props": [ { "name": "heading", diff --git a/docs/generated/component-apis/divider.json b/docs/generated/component-apis/divider.json index 8cdfb589a3..4982fd0656 100644 --- a/docs/generated/component-apis/divider.json +++ b/docs/generated/component-apis/divider.json @@ -1,7 +1,6 @@ { "componentSlug": "divider", "extractedFrom": "libs/web-components/src/components/divider/Divider.svelte", - "extractedAt": "2026-02-04T08:10:50.401Z", "props": [ { "name": "testId", diff --git a/docs/generated/component-apis/drawer.json b/docs/generated/component-apis/drawer.json index 455940af7d..c77e1dc2dd 100644 --- a/docs/generated/component-apis/drawer.json +++ b/docs/generated/component-apis/drawer.json @@ -1,7 +1,6 @@ { "componentSlug": "drawer", "extractedFrom": "libs/web-components/src/components/drawer/Drawer.svelte", - "extractedAt": "2026-02-04T08:10:50.401Z", "props": [ { "name": "open", @@ -40,7 +39,11 @@ }, { "name": "version", - "type": "VersionType", + "type": "\"1\" | \"2\"", + "values": [ + "1", + "2" + ], "required": false, "default": "1", "description": "" diff --git a/docs/generated/component-apis/dropdown.json b/docs/generated/component-apis/dropdown.json index ee0dbe9395..76012d4799 100644 --- a/docs/generated/component-apis/dropdown.json +++ b/docs/generated/component-apis/dropdown.json @@ -1,7 +1,6 @@ { "componentSlug": "dropdown", "extractedFrom": "libs/web-components/src/components/dropdown/Dropdown.svelte", - "extractedAt": "2026-02-04T08:10:50.403Z", "props": [ { "name": "name", @@ -26,11 +25,7 @@ }, { "name": "value", - "type": "string | undefined", - "values": [ - "string", - "undefined" - ], + "type": "string", "required": false, "default": "", "description": "Stores the value of the item selected from the dropdown." diff --git a/docs/generated/component-apis/file-upload-card.json b/docs/generated/component-apis/file-upload-card.json index 0290fe9ffb..eef41bd76c 100644 --- a/docs/generated/component-apis/file-upload-card.json +++ b/docs/generated/component-apis/file-upload-card.json @@ -1,7 +1,6 @@ { "componentSlug": "file-upload-card", "extractedFrom": "libs/web-components/src/components/file-upload-card/FileUploadCard.svelte", - "extractedAt": "2026-02-04T08:10:50.404Z", "props": [ { "name": "filename", diff --git a/docs/generated/component-apis/file-upload-input.json b/docs/generated/component-apis/file-upload-input.json index 675cc1ba78..360834b1bb 100644 --- a/docs/generated/component-apis/file-upload-input.json +++ b/docs/generated/component-apis/file-upload-input.json @@ -1,11 +1,14 @@ { "componentSlug": "file-upload-input", "extractedFrom": "libs/web-components/src/components/file-upload-input/FileUploadInput.svelte", - "extractedAt": "2026-02-04T08:10:50.404Z", "props": [ { "name": "variant", - "type": "Variant", + "type": "\"dragdrop\" | \"button\"", + "values": [ + "dragdrop", + "button" + ], "required": false, "default": "dragdrop", "description": "The input display variant. \"dragdrop\" shows a drag-and-drop area, \"button\" shows a simple button." diff --git a/docs/generated/component-apis/filter-chip.json b/docs/generated/component-apis/filter-chip.json index 227ab5800c..ebe6047613 100644 --- a/docs/generated/component-apis/filter-chip.json +++ b/docs/generated/component-apis/filter-chip.json @@ -1,7 +1,6 @@ { "componentSlug": "filter-chip", "extractedFrom": "libs/web-components/src/components/filter-chip/FilterChip.svelte", - "extractedAt": "2026-02-04T08:10:50.404Z", "props": [ { "name": "mt", diff --git a/docs/generated/component-apis/focus-trap.json b/docs/generated/component-apis/focus-trap.json index 5b67b45af1..fdbda8a84b 100644 --- a/docs/generated/component-apis/focus-trap.json +++ b/docs/generated/component-apis/focus-trap.json @@ -1,7 +1,6 @@ { "componentSlug": "focus-trap", "extractedFrom": "libs/web-components/src/components/focus-trap/FocusTrap.svelte", - "extractedAt": "2026-02-04T08:10:50.405Z", "props": [ { "name": "open", diff --git a/docs/generated/component-apis/footer-meta-section.json b/docs/generated/component-apis/footer-meta-section.json index 8a0a1b2c2d..2fbe01ebb2 100644 --- a/docs/generated/component-apis/footer-meta-section.json +++ b/docs/generated/component-apis/footer-meta-section.json @@ -1,7 +1,6 @@ { "componentSlug": "footer-meta-section", "extractedFrom": "libs/web-components/src/components/footer-meta-section/FooterMetaSection.svelte", - "extractedAt": "2026-02-04T08:10:50.405Z", "props": [ { "name": "testId", diff --git a/docs/generated/component-apis/footer-nav-section.json b/docs/generated/component-apis/footer-nav-section.json index 9891387078..c4016d9b34 100644 --- a/docs/generated/component-apis/footer-nav-section.json +++ b/docs/generated/component-apis/footer-nav-section.json @@ -1,7 +1,6 @@ { "componentSlug": "footer-nav-section", "extractedFrom": "libs/web-components/src/components/footer-nav-section/FooterNavSection.svelte", - "extractedAt": "2026-02-04T08:10:50.406Z", "props": [ { "name": "heading", diff --git a/docs/generated/component-apis/footer.json b/docs/generated/component-apis/footer.json index a25e04ab98..fc3313b76e 100644 --- a/docs/generated/component-apis/footer.json +++ b/docs/generated/component-apis/footer.json @@ -1,7 +1,6 @@ { "componentSlug": "footer", "extractedFrom": "libs/web-components/src/components/footer/Footer.svelte", - "extractedAt": "2026-02-04T08:10:50.405Z", "props": [ { "name": "maxcontentwidth", diff --git a/docs/generated/component-apis/form-item.json b/docs/generated/component-apis/form-item.json index f6636112fd..2785c75759 100644 --- a/docs/generated/component-apis/form-item.json +++ b/docs/generated/component-apis/form-item.json @@ -1,7 +1,6 @@ { "componentSlug": "form-item", "extractedFrom": "libs/web-components/src/components/form-item/FormItem.svelte", - "extractedAt": "2026-02-04T08:10:50.407Z", "props": [ { "name": "mt", diff --git a/docs/generated/component-apis/form-step.json b/docs/generated/component-apis/form-step.json index 5491572709..d8bfb22ee0 100644 --- a/docs/generated/component-apis/form-step.json +++ b/docs/generated/component-apis/form-step.json @@ -1,7 +1,6 @@ { "componentSlug": "form-step", "extractedFrom": "libs/web-components/src/components/form-step/FormStep.svelte", - "extractedAt": "2026-02-04T08:10:50.408Z", "props": [ { "name": "text", @@ -12,10 +11,11 @@ }, { "name": "status", - "type": "FormStepStatus | undefined", + "type": "\"complete\" | \"incomplete\" | \"not-started\"", "values": [ - "FormStepStatus", - "undefined" + "complete", + "incomplete", + "not-started" ], "required": false, "default": null, diff --git a/docs/generated/component-apis/form-stepper.json b/docs/generated/component-apis/form-stepper.json index 83747ad003..78f1db04e2 100644 --- a/docs/generated/component-apis/form-stepper.json +++ b/docs/generated/component-apis/form-stepper.json @@ -1,7 +1,6 @@ { "componentSlug": "form-stepper", "extractedFrom": "libs/web-components/src/components/form-stepper/FormStepper.svelte", - "extractedAt": "2026-02-04T08:10:50.408Z", "props": [ { "name": "step", diff --git a/docs/generated/component-apis/form.json b/docs/generated/component-apis/form.json index b8d1d2270d..f60c7e3fb6 100644 --- a/docs/generated/component-apis/form.json +++ b/docs/generated/component-apis/form.json @@ -1,7 +1,6 @@ { "componentSlug": "form", "extractedFrom": "libs/web-components/src/components/form/Form.svelte", - "extractedAt": "2026-02-04T08:10:50.407Z", "props": [ { "name": "status", diff --git a/docs/generated/component-apis/grid.json b/docs/generated/component-apis/grid.json index ba37934cae..3bad56dd41 100644 --- a/docs/generated/component-apis/grid.json +++ b/docs/generated/component-apis/grid.json @@ -1,7 +1,6 @@ { "componentSlug": "grid", "extractedFrom": "libs/web-components/src/components/grid/Grid.svelte", - "extractedAt": "2026-02-04T08:10:50.408Z", "props": [ { "name": "gap", diff --git a/docs/generated/component-apis/hero-banner.json b/docs/generated/component-apis/hero-banner.json index 38c9bc89ad..c5185159b6 100644 --- a/docs/generated/component-apis/hero-banner.json +++ b/docs/generated/component-apis/hero-banner.json @@ -1,7 +1,6 @@ { "componentSlug": "hero-banner", "extractedFrom": "libs/web-components/src/components/hero-banner/HeroBanner.svelte", - "extractedAt": "2026-02-04T08:10:50.408Z", "props": [ { "name": "heading", diff --git a/docs/generated/component-apis/icon-button.json b/docs/generated/component-apis/icon-button.json index 19cec5c09f..9b3ca9c4e2 100644 --- a/docs/generated/component-apis/icon-button.json +++ b/docs/generated/component-apis/icon-button.json @@ -1,7 +1,6 @@ { "componentSlug": "icon-button", "extractedFrom": "libs/web-components/src/components/icon-button/IconButton.svelte", - "extractedAt": "2026-02-04T08:10:50.410Z", "props": [ { "name": "icon", diff --git a/docs/generated/component-apis/icon.json b/docs/generated/component-apis/icon.json index a8ebbfecff..d69598cc20 100644 --- a/docs/generated/component-apis/icon.json +++ b/docs/generated/component-apis/icon.json @@ -1,7 +1,6 @@ { "componentSlug": "icon", "extractedFrom": "libs/web-components/src/components/icon/Icon.svelte", - "extractedAt": "2026-02-04T08:10:50.410Z", "props": [ { "name": "mt", @@ -37,22 +36,546 @@ }, { "name": "type", - "type": "GoAIconType", + "type": "\"accessibility\" | \"add-circle\" | \"add\" | \"airplane\" | \"alarm\" | \"albums\" | \"alert-circle\" | \"alert\" | \"american-football\" | \"analytics\" | \"aperture\" | \"apps\" | \"archive\" | \"arrow-back-circle\" | \"arrow-back\" | \"arrow-down-circle\" | \"arrow-down\" | \"arrow-forward-circle\" | \"arrow-forward\" | \"arrow-redo-circle\" | \"arrow-redo\" | \"arrow-undo-circle\" | \"arrow-undo\" | \"arrow-up-circle\" | \"arrow-up\" | \"at-circle\" | \"at\" | \"attach\" | \"backspace\" | \"bag-add\" | \"bag-check\" | \"bag-handle\" | \"bag\" | \"bag-remove\" | \"balloon\" | \"ban\" | \"bandage\" | \"bar-chart\" | \"barbell\" | \"barcode\" | \"baseball\" | \"basket\" | \"basketball\" | \"battery-charging\" | \"battery-dead\" | \"battery-full\" | \"battery-half\" | \"beaker\" | \"bed\" | \"beer\" | \"bicycle\" | \"bluetooth\" | \"boat\" | \"body\" | \"bonfire\" | \"book\" | \"bookmark\" | \"bookmarks\" | \"bowling-ball\" | \"briefcase\" | \"browsers\" | \"brush\" | \"bug\" | \"build\" | \"bulb\" | \"bus\" | \"business\" | \"cafe\" | \"calculator\" | \"calendar-clear\" | \"calendar-number\" | \"calendar\" | \"call\" | \"camera\" | \"camera-reverse\" | \"car\" | \"car-sport\" | \"card\" | \"caret-back-circle\" | \"caret-back\" | \"caret-down-circle\" | \"caret-down\" | \"caret-forward-circle\" | \"caret-forward\" | \"caret-up-circle\" | \"caret-up\" | \"cart\" | \"cash\" | \"cellular\" | \"chatbox-ellipses\" | \"chatbox\" | \"chatbubble-ellipses\" | \"chatbubble\" | \"chatbubbles\" | \"checkbox\" | \"checkmark-circle\" | \"checkmark-done-circle\" | \"checkmark-done\" | \"chevron-back-circle\" | \"chevron-back\" | \"chevron-down-circle\" | \"chevron-down\" | \"chevron-expand\" | \"chevron-forward-circle\" | \"chevron-forward\" | \"chevron-up-circle\" | \"chevron-up\" | \"clipboard\" | \"close-circle\" | \"close\" | \"cloud-circle\" | \"cloud-done\" | \"cloud-download\" | \"cloud-offline\" | \"cloud\" | \"cloud-upload\" | \"cloudy-night\" | \"cloudy\" | \"code-download\" | \"code\" | \"code-slash\" | \"code-working\" | \"cog\" | \"color-fill\" | \"color-filter\" | \"color-palette\" | \"color-wand\" | \"compass\" | \"construct\" | \"contract\" | \"contrast\" | \"copy\" | \"create\" | \"crop\" | \"cube\" | \"cut\" | \"desktop\" | \"diamond\" | \"dice\" | \"disc\" | \"document-attach\" | \"document-lock\" | \"document\" | \"document-text\" | \"documents\" | \"download\" | \"duplicate\" | \"ear\" | \"earth\" | \"easel\" | \"egg\" | \"ellipse\" | \"ellipsis-horizontal-circle\" | \"ellipsis-horizontal\" | \"ellipsis-vertical-circle\" | \"ellipsis-vertical\" | \"enter\" | \"exit\" | \"expand\" | \"extension-puzzle\" | \"eye-off\" | \"eye\" | \"eyedrop\" | \"fast-food\" | \"female\" | \"file-tray-full\" | \"file-tray\" | \"file-tray-stacked\" | \"filenames.ps1\" | \"film\" | \"filter-circle\" | \"filter-lines\" | \"filter\" | \"finger-print\" | \"fish\" | \"fitness\" | \"flag\" | \"flame\" | \"flash-off\" | \"flash\" | \"flashlight\" | \"flask\" | \"flower\" | \"folder-open\" | \"folder\" | \"football\" | \"footsteps\" | \"funnel\" | \"game-controller\" | \"gift\" | \"git-branch\" | \"git-commit\" | \"git-compare\" | \"git-merge\" | \"git-network\" | \"git-pull-request\" | \"glasses\" | \"globe\" | \"golf\" | \"grid\" | \"hammer\" | \"hand-left\" | \"hand-right\" | \"happy\" | \"hardware-chip\" | \"headset\" | \"heart-circle\" | \"heart-dislike-circle\" | \"heart-dislike\" | \"heart-half\" | \"heart\" | \"help-buoy\" | \"help-circle\" | \"help\" | \"home\" | \"hourglass\" | \"ice-cream\" | \"id-card\" | \"image\" | \"images\" | \"infinite\" | \"information-circle\" | \"information\" | \"invert-mode\" | \"journal\" | \"key\" | \"keypad\" | \"language\" | \"laptop\" | \"layers\" | \"leaf\" | \"library\" | \"link\" | \"list-circle\" | \"list\" | \"locate\" | \"location\" | \"lock-closed\" | \"lock-open\" | \"log-in\" | \"log-out\" | \"magnet\" | \"mail-open\" | \"mail\" | \"mail-unread\" | \"male-female\" | \"male\" | \"man\" | \"map\" | \"medal\" | \"medical\" | \"medkit\" | \"megaphone\" | \"menu\" | \"mic-circle\" | \"mic-off-circle\" | \"mic-off\" | \"mic\" | \"moon\" | \"move\" | \"musical-note\" | \"musical-notes\" | \"navigate-circle\" | \"navigate\" | \"newspaper\" | \"notifications-circle\" | \"notifications-off-circle\" | \"notifications-off\" | \"notifications\" | \"nuclear\" | \"nutrition\" | \"open\" | \"options\" | \"paper-plane\" | \"partly-sunny\" | \"pause-circle\" | \"pause\" | \"paw\" | \"people-circle\" | \"people\" | \"person-add\" | \"person-circle\" | \"person\" | \"person-remove\" | \"phone-landscape\" | \"phone-portrait\" | \"pie-chart\" | \"pin\" | \"pint\" | \"pizza\" | \"planet\" | \"play-back-circle\" | \"play-back\" | \"play-circle\" | \"play-forward-circle\" | \"play-forward\" | \"play\" | \"play-skip-back-circle\" | \"play-skip-back\" | \"play-skip-forward-circle\" | \"play-skip-forward\" | \"podium\" | \"power\" | \"pricetag\" | \"pricetags\" | \"print\" | \"prism\" | \"pulse\" | \"push\" | \"qr-code\" | \"radio-button-off\" | \"radio-button-on\" | \"radio\" | \"rainy\" | \"reader\" | \"receipt\" | \"recording\" | \"refresh-circle\" | \"refresh\" | \"reload-circle\" | \"reload\" | \"remove-circle\" | \"reorder-four\" | \"reorder-three\" | \"reorder-two\" | \"repeat\" | \"resize\" | \"restaurant\" | \"return-down-back\" | \"return-down-forward\" | \"return-up-back\" | \"return-up-forward\" | \"ribbon\" | \"rocket\" | \"rose\" | \"sad\" | \"save\" | \"scale\" | \"scan-circle\" | \"scan\" | \"school\" | \"search-circle\" | \"search\" | \"send\" | \"server\" | \"settings\" | \"shapes\" | \"share\" | \"share-social\" | \"shield-checkmark\" | \"shield-half\" | \"shield\" | \"shirt\" | \"shuffle\" | \"skull\" | \"snow\" | \"sparkles\" | \"speedometer\" | \"square\" | \"star-half\" | \"star\" | \"stats-chart\" | \"stop-circle\" | \"stop\" | \"stopwatch\" | \"storefront\" | \"subway\" | \"sunny\" | \"swap-horizontal\" | \"swap-vertical\" | \"sync-circle\" | \"sync\" | \"tablet-landscape\" | \"tablet-portrait\" | \"telescope\" | \"tennisball\" | \"terminal\" | \"text\" | \"thermometer\" | \"thumbs-down\" | \"thumbs-up\" | \"thunderstorm\" | \"ticket\" | \"time\" | \"timer\" | \"today\" | \"toggle\" | \"trail-sign\" | \"train\" | \"transgender\" | \"trash-bin\" | \"trash\" | \"trending-down\" | \"trending-up\" | \"triangle\" | \"trophy\" | \"tv\" | \"umbrella\" | \"unlink\" | \"videocam-off\" | \"videocam\" | \"volume-high\" | \"volume-low\" | \"volume-medium\" | \"volume-mute\" | \"volume-off\" | \"walk\" | \"wallet\" | \"warning\" | \"watch\" | \"water\" | \"wifi\" | \"wine\" | \"woman\" | \"logo-alipay\" | \"logo-amazon\" | \"logo-amplify\" | \"logo-android\" | \"logo-angular\" | \"logo-apple\" | \"logo-apple-appstore\" | \"logo-apple-ar\" | \"logo-behance\" | \"logo-bitbucket\" | \"logo-bitcoin\" | \"logo-buffer\" | \"logo-capacitor\" | \"logo-chrome\" | \"logo-closed-captioning\" | \"logo-codepen\" | \"logo-css3\" | \"logo-designernews\" | \"logo-deviantart\" | \"logo-discord\" | \"logo-docker\" | \"logo-dribbble\" | \"logo-dropbox\" | \"logo-edge\" | \"logo-electron\" | \"logo-euro\" | \"logo-facebook\" | \"logo-figma\" | \"logo-firebase\" | \"logo-firefox\" | \"logo-flickr\" | \"logo-foursquare\" | \"logo-github\" | \"logo-gitlab\" | \"logo-google\" | \"logo-google-playstore\" | \"logo-hackernews\" | \"logo-html5\" | \"logo-instagram\" | \"logo-ionic\" | \"logo-ionitron\" | \"logo-javascript\" | \"logo-laravel\" | \"logo-linkedin\" | \"logo-markdown\" | \"logo-mastodon\" | \"logo-medium\" | \"logo-microsoft\" | \"logo-no-smoking\" | \"logo-nodejs\" | \"logo-npm\" | \"logo-octocat\" | \"logo-paypal\" | \"logo-pinterest\" | \"logo-playstation\" | \"logo-pwa\" | \"logo-python\" | \"logo-react\" | \"logo-reddit\" | \"logo-rss\" | \"logo-sass\" | \"logo-skype\" | \"logo-slack\" | \"logo-snapchat\" | \"logo-soundcloud\" | \"logo-stackoverflow\" | \"logo-steam\" | \"logo-stencil\" | \"logo-tableau\" | \"logo-tiktok\" | \"logo-tumblr\" | \"logo-tux\" | \"logo-twitch\" | \"logo-twitter\" | \"logo-usd\" | \"logo-venmo\" | \"logo-vercel\" | \"logo-vimeo\" | \"logo-vk\" | \"logo-vue\" | \"logo-web-component\" | \"logo-wechat\" | \"logo-whatsapp\" | \"logo-windows\" | \"logo-wordpress\" | \"logo-xbox\" | \"logo-xing\" | \"logo-yahoo\" | \"logo-yen\" | \"logo-youtube\"", "typeLabel": "GoAIconType", + "values": [ + "accessibility", + "add-circle", + "add", + "airplane", + "alarm", + "albums", + "alert-circle", + "alert", + "american-football", + "analytics", + "aperture", + "apps", + "archive", + "arrow-back-circle", + "arrow-back", + "arrow-down-circle", + "arrow-down", + "arrow-forward-circle", + "arrow-forward", + "arrow-redo-circle", + "arrow-redo", + "arrow-undo-circle", + "arrow-undo", + "arrow-up-circle", + "arrow-up", + "at-circle", + "at", + "attach", + "backspace", + "bag-add", + "bag-check", + "bag-handle", + "bag", + "bag-remove", + "balloon", + "ban", + "bandage", + "bar-chart", + "barbell", + "barcode", + "baseball", + "basket", + "basketball", + "battery-charging", + "battery-dead", + "battery-full", + "battery-half", + "beaker", + "bed", + "beer", + "bicycle", + "bluetooth", + "boat", + "body", + "bonfire", + "book", + "bookmark", + "bookmarks", + "bowling-ball", + "briefcase", + "browsers", + "brush", + "bug", + "build", + "bulb", + "bus", + "business", + "cafe", + "calculator", + "calendar-clear", + "calendar-number", + "calendar", + "call", + "camera", + "camera-reverse", + "car", + "car-sport", + "card", + "caret-back-circle", + "caret-back", + "caret-down-circle", + "caret-down", + "caret-forward-circle", + "caret-forward", + "caret-up-circle", + "caret-up", + "cart", + "cash", + "cellular", + "chatbox-ellipses", + "chatbox", + "chatbubble-ellipses", + "chatbubble", + "chatbubbles", + "checkbox", + "checkmark-circle", + "checkmark-done-circle", + "checkmark-done", + "chevron-back-circle", + "chevron-back", + "chevron-down-circle", + "chevron-down", + "chevron-expand", + "chevron-forward-circle", + "chevron-forward", + "chevron-up-circle", + "chevron-up", + "clipboard", + "close-circle", + "close", + "cloud-circle", + "cloud-done", + "cloud-download", + "cloud-offline", + "cloud", + "cloud-upload", + "cloudy-night", + "cloudy", + "code-download", + "code", + "code-slash", + "code-working", + "cog", + "color-fill", + "color-filter", + "color-palette", + "color-wand", + "compass", + "construct", + "contract", + "contrast", + "copy", + "create", + "crop", + "cube", + "cut", + "desktop", + "diamond", + "dice", + "disc", + "document-attach", + "document-lock", + "document", + "document-text", + "documents", + "download", + "duplicate", + "ear", + "earth", + "easel", + "egg", + "ellipse", + "ellipsis-horizontal-circle", + "ellipsis-horizontal", + "ellipsis-vertical-circle", + "ellipsis-vertical", + "enter", + "exit", + "expand", + "extension-puzzle", + "eye-off", + "eye", + "eyedrop", + "fast-food", + "female", + "file-tray-full", + "file-tray", + "file-tray-stacked", + "filenames.ps1", + "film", + "filter-circle", + "filter-lines", + "filter", + "finger-print", + "fish", + "fitness", + "flag", + "flame", + "flash-off", + "flash", + "flashlight", + "flask", + "flower", + "folder-open", + "folder", + "football", + "footsteps", + "funnel", + "game-controller", + "gift", + "git-branch", + "git-commit", + "git-compare", + "git-merge", + "git-network", + "git-pull-request", + "glasses", + "globe", + "golf", + "grid", + "hammer", + "hand-left", + "hand-right", + "happy", + "hardware-chip", + "headset", + "heart-circle", + "heart-dislike-circle", + "heart-dislike", + "heart-half", + "heart", + "help-buoy", + "help-circle", + "help", + "home", + "hourglass", + "ice-cream", + "id-card", + "image", + "images", + "infinite", + "information-circle", + "information", + "invert-mode", + "journal", + "key", + "keypad", + "language", + "laptop", + "layers", + "leaf", + "library", + "link", + "list-circle", + "list", + "locate", + "location", + "lock-closed", + "lock-open", + "log-in", + "log-out", + "magnet", + "mail-open", + "mail", + "mail-unread", + "male-female", + "male", + "man", + "map", + "medal", + "medical", + "medkit", + "megaphone", + "menu", + "mic-circle", + "mic-off-circle", + "mic-off", + "mic", + "moon", + "move", + "musical-note", + "musical-notes", + "navigate-circle", + "navigate", + "newspaper", + "notifications-circle", + "notifications-off-circle", + "notifications-off", + "notifications", + "nuclear", + "nutrition", + "open", + "options", + "paper-plane", + "partly-sunny", + "pause-circle", + "pause", + "paw", + "people-circle", + "people", + "person-add", + "person-circle", + "person", + "person-remove", + "phone-landscape", + "phone-portrait", + "pie-chart", + "pin", + "pint", + "pizza", + "planet", + "play-back-circle", + "play-back", + "play-circle", + "play-forward-circle", + "play-forward", + "play", + "play-skip-back-circle", + "play-skip-back", + "play-skip-forward-circle", + "play-skip-forward", + "podium", + "power", + "pricetag", + "pricetags", + "print", + "prism", + "pulse", + "push", + "qr-code", + "radio-button-off", + "radio-button-on", + "radio", + "rainy", + "reader", + "receipt", + "recording", + "refresh-circle", + "refresh", + "reload-circle", + "reload", + "remove-circle", + "reorder-four", + "reorder-three", + "reorder-two", + "repeat", + "resize", + "restaurant", + "return-down-back", + "return-down-forward", + "return-up-back", + "return-up-forward", + "ribbon", + "rocket", + "rose", + "sad", + "save", + "scale", + "scan-circle", + "scan", + "school", + "search-circle", + "search", + "send", + "server", + "settings", + "shapes", + "share", + "share-social", + "shield-checkmark", + "shield-half", + "shield", + "shirt", + "shuffle", + "skull", + "snow", + "sparkles", + "speedometer", + "square", + "star-half", + "star", + "stats-chart", + "stop-circle", + "stop", + "stopwatch", + "storefront", + "subway", + "sunny", + "swap-horizontal", + "swap-vertical", + "sync-circle", + "sync", + "tablet-landscape", + "tablet-portrait", + "telescope", + "tennisball", + "terminal", + "text", + "thermometer", + "thumbs-down", + "thumbs-up", + "thunderstorm", + "ticket", + "time", + "timer", + "today", + "toggle", + "trail-sign", + "train", + "transgender", + "trash-bin", + "trash", + "trending-down", + "trending-up", + "triangle", + "trophy", + "tv", + "umbrella", + "unlink", + "videocam-off", + "videocam", + "volume-high", + "volume-low", + "volume-medium", + "volume-mute", + "volume-off", + "walk", + "wallet", + "warning", + "watch", + "water", + "wifi", + "wine", + "woman", + "logo-alipay", + "logo-amazon", + "logo-amplify", + "logo-android", + "logo-angular", + "logo-apple", + "logo-apple-appstore", + "logo-apple-ar", + "logo-behance", + "logo-bitbucket", + "logo-bitcoin", + "logo-buffer", + "logo-capacitor", + "logo-chrome", + "logo-closed-captioning", + "logo-codepen", + "logo-css3", + "logo-designernews", + "logo-deviantart", + "logo-discord", + "logo-docker", + "logo-dribbble", + "logo-dropbox", + "logo-edge", + "logo-electron", + "logo-euro", + "logo-facebook", + "logo-figma", + "logo-firebase", + "logo-firefox", + "logo-flickr", + "logo-foursquare", + "logo-github", + "logo-gitlab", + "logo-google", + "logo-google-playstore", + "logo-hackernews", + "logo-html5", + "logo-instagram", + "logo-ionic", + "logo-ionitron", + "logo-javascript", + "logo-laravel", + "logo-linkedin", + "logo-markdown", + "logo-mastodon", + "logo-medium", + "logo-microsoft", + "logo-no-smoking", + "logo-nodejs", + "logo-npm", + "logo-octocat", + "logo-paypal", + "logo-pinterest", + "logo-playstation", + "logo-pwa", + "logo-python", + "logo-react", + "logo-reddit", + "logo-rss", + "logo-sass", + "logo-skype", + "logo-slack", + "logo-snapchat", + "logo-soundcloud", + "logo-stackoverflow", + "logo-steam", + "logo-stencil", + "logo-tableau", + "logo-tiktok", + "logo-tumblr", + "logo-tux", + "logo-twitch", + "logo-twitter", + "logo-usd", + "logo-venmo", + "logo-vercel", + "logo-vimeo", + "logo-vk", + "logo-vue", + "logo-web-component", + "logo-wechat", + "logo-whatsapp", + "logo-windows", + "logo-wordpress", + "logo-xbox", + "logo-xing", + "logo-yahoo", + "logo-yen", + "logo-youtube" + ], "required": true, "default": null, "description": "The icon type to display. See GoAIconType for available icons." }, { "name": "size", - "type": "IconSize", + "type": "\"1\" | \"2\" | \"3\" | \"4\" | \"5\" | \"6\" | \"2xsmall\" | \"xsmall\" | \"small\" | \"medium\" | \"large\" | \"xlarge\"", + "values": [ + "1", + "2", + "3", + "4", + "5", + "6", + "2xsmall", + "xsmall", + "small", + "medium", + "large", + "xlarge" + ], "required": false, "default": "medium", "description": "Sets the size of the icon. Accepts numeric (1-6) or named sizes." }, { "name": "theme", - "type": "IconTheme", + "type": "\"outline\" | \"filled\"", + "values": [ + "outline", + "filled" + ], "required": false, "default": "outline", "description": "Sets the icon theme. 'outline' shows stroked icons, 'filled' shows solid icons." diff --git a/docs/generated/component-apis/input.json b/docs/generated/component-apis/input.json index 71c8e0d3a1..9faee7dc10 100644 --- a/docs/generated/component-apis/input.json +++ b/docs/generated/component-apis/input.json @@ -1,7 +1,6 @@ { "componentSlug": "input", "extractedFrom": "libs/web-components/src/components/input/Input.svelte", - "extractedAt": "2026-02-04T08:10:50.410Z", "props": [ { "name": "type", @@ -88,7 +87,11 @@ }, { "name": "variant", - "type": "GoAInputVariant", + "type": "\"goa\" | \"bare\"", + "values": [ + "goa", + "bare" + ], "required": false, "default": "goa", "description": "Sets the visual style variant. 'goa' for standard GoA styling, 'bare' for minimal styling." @@ -202,11 +205,7 @@ }, { "name": "maxLength", - "type": "number | null", - "values": [ - "number", - "null" - ], + "type": "number", "required": false, "default": null, "description": "Defines the maximum number of characters (as UTF-16 code units) the user can enter into the input." diff --git a/docs/generated/component-apis/linear-progress.json b/docs/generated/component-apis/linear-progress.json index f6b94e16c6..22c95b034e 100644 --- a/docs/generated/component-apis/linear-progress.json +++ b/docs/generated/component-apis/linear-progress.json @@ -1,26 +1,17 @@ { "componentSlug": "linear-progress", "extractedFrom": "libs/web-components/src/components/linear-progress/LinearProgress.svelte", - "extractedAt": "2026-02-04T08:10:50.411Z", "props": [ { "name": "testId", - "type": "string | undefined", - "values": [ - "string", - "undefined" - ], + "type": "string", "required": false, "default": null, "description": "Sets a data-testid attribute for automated testing." }, { "name": "progress", - "type": "number | undefined", - "values": [ - "number", - "undefined" - ], + "type": "number", "required": false, "default": null, "description": "Progress value (0-100). When undefined, shows an indeterminate loading animation." @@ -38,22 +29,14 @@ }, { "name": "ariaLabel", - "type": "string | undefined", - "values": [ - "string", - "undefined" - ], + "type": "string", "required": false, "default": null, "description": "Accessible label for the progress bar." }, { "name": "ariaLabelledBy", - "type": "string | undefined", - "values": [ - "string", - "undefined" - ], + "type": "string", "required": false, "default": null, "description": "ID of the element that labels this progress bar." diff --git a/docs/generated/component-apis/link-button.json b/docs/generated/component-apis/link-button.json index c64d4b4ec5..2c1bb9e6bd 100644 --- a/docs/generated/component-apis/link-button.json +++ b/docs/generated/component-apis/link-button.json @@ -1,7 +1,6 @@ { "componentSlug": "link-button", "extractedFrom": "libs/web-components/src/components/link-button/LinkButton.svelte", - "extractedAt": "2026-02-04T08:10:50.411Z", "props": [ { "name": "color", diff --git a/docs/generated/component-apis/link.json b/docs/generated/component-apis/link.json index 1b37ff7aee..fbd438df74 100644 --- a/docs/generated/component-apis/link.json +++ b/docs/generated/component-apis/link.json @@ -1,7 +1,6 @@ { "componentSlug": "link", "extractedFrom": "libs/web-components/src/components/link/Link.svelte", - "extractedAt": "2026-02-04T08:10:50.411Z", "props": [ { "name": "leadingIcon", diff --git a/docs/generated/component-apis/menu-action.json b/docs/generated/component-apis/menu-action.json new file mode 100644 index 0000000000..be59c631e3 --- /dev/null +++ b/docs/generated/component-apis/menu-action.json @@ -0,0 +1,37 @@ +{ + "componentSlug": "menu-action", + "extractedFrom": "libs/web-components/src/components/menu-button/MenuAction.svelte", + "props": [ + { + "name": "text", + "type": "string", + "required": false, + "default": "", + "description": "Display text for the menu action." + }, + { + "name": "action", + "type": "string", + "required": false, + "default": "default", + "description": "Action identifier included in the click event." + }, + { + "name": "testId", + "type": "string", + "required": false, + "default": "", + "description": "Sets a data-testid attribute for automated testing." + }, + { + "name": "icon", + "type": "GoAIconType", + "typeLabel": "GoAIconType", + "required": false, + "default": null, + "description": "Icon displayed before the text." + } + ], + "events": [], + "slots": [] +} diff --git a/docs/generated/component-apis/menu-button.json b/docs/generated/component-apis/menu-button.json index 4cb1dd24ce..ac9450c0d9 100644 --- a/docs/generated/component-apis/menu-button.json +++ b/docs/generated/component-apis/menu-button.json @@ -1,13 +1,12 @@ { "componentSlug": "menu-button", "extractedFrom": "libs/web-components/src/components/menu-button/MenuButton.svelte", - "extractedAt": "2026-02-04T08:10:50.411Z", "props": [ { "name": "text", "type": "string", - "required": true, - "default": null, + "required": false, + "default": "", "description": "The button label text. When provided, displays as a text button with a dropdown icon." }, { @@ -43,6 +42,35 @@ "required": true, "default": null, "description": "Maximum width of the dropdown menu." + }, + { + "name": "size", + "type": "\"normal\" | \"compact\"", + "values": [ + "normal", + "compact" + ], + "required": false, + "default": "normal", + "description": "Sets the size of the button." + }, + { + "name": "variant", + "type": "\"normal\" | \"destructive\"", + "values": [ + "normal", + "destructive" + ], + "required": false, + "default": "normal", + "description": "Sets the color variant for semantic meaning." + }, + { + "name": "ariaLabel", + "type": "string", + "required": false, + "default": "Open menu", + "description": "Sets the aria-label for the icon button in icon-only mode." } ], "events": [ diff --git a/docs/generated/component-apis/microsite-header.json b/docs/generated/component-apis/microsite-header.json index 0ae09d208d..fa93c3147f 100644 --- a/docs/generated/component-apis/microsite-header.json +++ b/docs/generated/component-apis/microsite-header.json @@ -1,7 +1,6 @@ { "componentSlug": "microsite-header", "extractedFrom": "libs/web-components/src/components/microsite-header/MicrositeHeader.svelte", - "extractedAt": "2026-02-04T08:10:50.412Z", "props": [ { "name": "type", diff --git a/docs/generated/component-apis/modal.json b/docs/generated/component-apis/modal.json index 6fa18e10b1..592278d64c 100644 --- a/docs/generated/component-apis/modal.json +++ b/docs/generated/component-apis/modal.json @@ -1,7 +1,6 @@ { "componentSlug": "modal", "extractedFrom": "libs/web-components/src/components/modal/Modal.svelte", - "extractedAt": "2026-02-04T08:10:50.412Z", "props": [ { "name": "heading", @@ -39,11 +38,7 @@ }, { "name": "calloutVariant", - "type": "CalloutVariant | null", - "values": [ - "CalloutVariant", - "null" - ], + "type": "\"\"", "required": false, "default": null, "description": "Define the context and colour of the callout modal. It is required when type is set to callout." diff --git a/docs/generated/component-apis/notification.json b/docs/generated/component-apis/notification.json index c75e4dcedb..8f6ac51b2a 100644 --- a/docs/generated/component-apis/notification.json +++ b/docs/generated/component-apis/notification.json @@ -1,7 +1,6 @@ { "componentSlug": "notification", "extractedFrom": "libs/web-components/src/components/notification/Notification.svelte", - "extractedAt": "2026-02-04T08:10:50.413Z", "props": [ { "name": "type", diff --git a/docs/generated/component-apis/page-block.json b/docs/generated/component-apis/page-block.json index 4e24858b7a..a38dd13162 100644 --- a/docs/generated/component-apis/page-block.json +++ b/docs/generated/component-apis/page-block.json @@ -1,11 +1,14 @@ { "componentSlug": "page-block", "extractedFrom": "libs/web-components/src/components/page-block/PageBlock.svelte", - "extractedAt": "2026-02-04T08:10:50.413Z", "props": [ { "name": "width", - "type": "Size", + "type": "\"full\" | string", + "values": [ + "full", + "string" + ], "required": false, "default": "full", "description": "Maximum width of the content area. Use \"full\" for 100% width or a CSS dimension like \"1200px\"." diff --git a/docs/generated/component-apis/pages.json b/docs/generated/component-apis/pages.json index e0bcf9e6f0..11a1560d9a 100644 --- a/docs/generated/component-apis/pages.json +++ b/docs/generated/component-apis/pages.json @@ -1,7 +1,6 @@ { "componentSlug": "pages", "extractedFrom": "libs/web-components/src/components/pages/Pages.svelte", - "extractedAt": "2026-02-04T08:10:50.413Z", "props": [ { "name": "current", diff --git a/docs/generated/component-apis/pagination.json b/docs/generated/component-apis/pagination.json index 1ccbeb877b..fd65d9187c 100644 --- a/docs/generated/component-apis/pagination.json +++ b/docs/generated/component-apis/pagination.json @@ -1,7 +1,6 @@ { "componentSlug": "pagination", "extractedFrom": "libs/web-components/src/components/pagination/Pagination.svelte", - "extractedAt": "2026-02-04T08:10:50.414Z", "props": [ { "name": "pagenumber", diff --git a/docs/generated/component-apis/popover.json b/docs/generated/component-apis/popover.json index 812189843a..ee57a4dfb6 100644 --- a/docs/generated/component-apis/popover.json +++ b/docs/generated/component-apis/popover.json @@ -1,7 +1,6 @@ { "componentSlug": "popover", "extractedFrom": "libs/web-components/src/components/popover/Popover.svelte", - "extractedAt": "2026-02-04T08:10:50.414Z", "props": [ { "name": "testId", diff --git a/docs/generated/component-apis/push-drawer.json b/docs/generated/component-apis/push-drawer.json new file mode 100644 index 0000000000..41d1a3e8bd --- /dev/null +++ b/docs/generated/component-apis/push-drawer.json @@ -0,0 +1,45 @@ +{ + "componentSlug": "push-drawer", + "extractedFrom": "libs/web-components/src/components/push-drawer/PushDrawer.svelte", + "props": [ + { + "name": "testId", + "type": "string", + "required": false, + "default": null, + "description": "" + }, + { + "name": "open", + "type": "boolean", + "required": false, + "default": "false", + "description": "" + }, + { + "name": "heading", + "type": "string", + "required": false, + "default": "", + "description": "" + }, + { + "name": "width", + "type": "string", + "required": false, + "default": "492px", + "description": "" + } + ], + "events": [], + "slots": [ + { + "name": "default", + "description": "" + }, + { + "name": "actions", + "description": "" + } + ] +} \ No newline at end of file diff --git a/docs/generated/component-apis/radio-group.json b/docs/generated/component-apis/radio-group.json index e31334346e..7c04d97a54 100644 --- a/docs/generated/component-apis/radio-group.json +++ b/docs/generated/component-apis/radio-group.json @@ -1,7 +1,6 @@ { "componentSlug": "radio-group", "extractedFrom": "libs/web-components/src/components/radio-group/RadioGroup.svelte", - "extractedAt": "2026-02-04T08:10:50.414Z", "props": [ { "name": "name", diff --git a/docs/generated/component-apis/radio-item.json b/docs/generated/component-apis/radio-item.json index db42e1f0c3..13e6d1b66c 100644 --- a/docs/generated/component-apis/radio-item.json +++ b/docs/generated/component-apis/radio-item.json @@ -1,7 +1,6 @@ { "componentSlug": "radio-item", "extractedFrom": "libs/web-components/src/components/radio-item/RadioItem.svelte", - "extractedAt": "2026-02-04T08:10:50.415Z", "props": [ { "name": "value", diff --git a/docs/generated/component-apis/scrollable.json b/docs/generated/component-apis/scrollable.json index b32f101347..4c2302a60a 100644 --- a/docs/generated/component-apis/scrollable.json +++ b/docs/generated/component-apis/scrollable.json @@ -1,7 +1,6 @@ { "componentSlug": "scrollable", "extractedFrom": "libs/web-components/src/components/scrollable/Scrollable.svelte", - "extractedAt": "2026-02-04T08:10:50.415Z", "props": [ { "name": "direction", diff --git a/docs/generated/component-apis/side-menu-group.json b/docs/generated/component-apis/side-menu-group.json index 220791b633..ff25664e78 100644 --- a/docs/generated/component-apis/side-menu-group.json +++ b/docs/generated/component-apis/side-menu-group.json @@ -1,7 +1,6 @@ { "componentSlug": "side-menu-group", "extractedFrom": "libs/web-components/src/components/side-menu-group/SideMenuGroup.svelte", - "extractedAt": "2026-02-04T08:10:50.416Z", "props": [ { "name": "heading", diff --git a/docs/generated/component-apis/side-menu-heading.json b/docs/generated/component-apis/side-menu-heading.json index 9e066317fc..b68372cac7 100644 --- a/docs/generated/component-apis/side-menu-heading.json +++ b/docs/generated/component-apis/side-menu-heading.json @@ -1,7 +1,6 @@ { "componentSlug": "side-menu-heading", "extractedFrom": "libs/web-components/src/components/side-menu-heading/SideMenuHeading.svelte", - "extractedAt": "2026-02-04T08:10:50.416Z", "props": [ { "name": "icon", diff --git a/docs/generated/component-apis/side-menu.json b/docs/generated/component-apis/side-menu.json index 75b3559477..c1abe89ed3 100644 --- a/docs/generated/component-apis/side-menu.json +++ b/docs/generated/component-apis/side-menu.json @@ -1,7 +1,6 @@ { "componentSlug": "side-menu", "extractedFrom": "libs/web-components/src/components/side-menu/SideMenu.svelte", - "extractedAt": "2026-02-04T08:10:50.415Z", "props": [ { "name": "testId", diff --git a/docs/generated/component-apis/skeleton.json b/docs/generated/component-apis/skeleton.json index cdd33feb30..c65fc48a86 100644 --- a/docs/generated/component-apis/skeleton.json +++ b/docs/generated/component-apis/skeleton.json @@ -1,7 +1,6 @@ { "componentSlug": "skeleton", "extractedFrom": "libs/web-components/src/components/skeleton/Skeleton.svelte", - "extractedAt": "2026-02-04T08:10:50.416Z", "props": [ { "name": "maxWidth", diff --git a/docs/generated/component-apis/spacer.json b/docs/generated/component-apis/spacer.json index c465308ab6..7c3620b442 100644 --- a/docs/generated/component-apis/spacer.json +++ b/docs/generated/component-apis/spacer.json @@ -1,7 +1,6 @@ { "componentSlug": "spacer", "extractedFrom": "libs/web-components/src/components/spacer/Spacer.svelte", - "extractedAt": "2026-02-04T08:10:50.416Z", "props": [ { "name": "hspacing", diff --git a/docs/generated/component-apis/spinner.json b/docs/generated/component-apis/spinner.json index 4914a359a2..61580a2564 100644 --- a/docs/generated/component-apis/spinner.json +++ b/docs/generated/component-apis/spinner.json @@ -1,11 +1,16 @@ { "componentSlug": "spinner", "extractedFrom": "libs/web-components/src/components/spinner/Spinner.svelte", - "extractedAt": "2026-02-04T08:10:50.416Z", "props": [ { "name": "size", - "type": "SpinnerSize", + "type": "\"small\" | \"medium\" | \"large\" | \"xlarge\"", + "values": [ + "small", + "medium", + "large", + "xlarge" + ], "required": true, "default": null, "description": "Sets the size of the spinner." diff --git a/docs/generated/component-apis/tab.json b/docs/generated/component-apis/tab.json index c8deba729c..e65c70fae6 100644 --- a/docs/generated/component-apis/tab.json +++ b/docs/generated/component-apis/tab.json @@ -1,7 +1,6 @@ { "componentSlug": "tab", "extractedFrom": "libs/web-components/src/components/tab/Tab.svelte", - "extractedAt": "2026-02-04T08:10:50.417Z", "props": [ { "name": "heading", diff --git a/docs/generated/component-apis/table-sort-header.json b/docs/generated/component-apis/table-sort-header.json new file mode 100644 index 0000000000..dce0360354 --- /dev/null +++ b/docs/generated/component-apis/table-sort-header.json @@ -0,0 +1,41 @@ +{ + "componentSlug": "table-sort-header", + "extractedFrom": "libs/web-components/src/components/table/TableSortHeader.svelte", + "extractedAt": "2026-02-26T00:00:00.000Z", + "props": [ + { + "name": "name", + "type": "string", + "required": false, + "default": "", + "description": "Column name identifier for sorting." + }, + { + "name": "direction", + "type": "\"asc\" | \"desc\" | \"none\"", + "typeLabel": "GoabTableSortDirection", + "values": [ + "asc", + "desc", + "none" + ], + "required": false, + "default": "none", + "description": "Sets the sort direction indicator." + }, + { + "name": "sortOrder", + "type": "number", + "required": false, + "default": 0, + "description": "Sort order number for multi-column sort display (1, 2, etc)." + } + ], + "events": [], + "slots": [ + { + "name": "default", + "description": "" + } + ] +} diff --git a/docs/generated/component-apis/table.json b/docs/generated/component-apis/table.json index 15e3104def..8b86d28407 100644 --- a/docs/generated/component-apis/table.json +++ b/docs/generated/component-apis/table.json @@ -1,7 +1,6 @@ { "componentSlug": "table", "extractedFrom": "libs/web-components/src/components/table/Table.svelte", - "extractedAt": "2026-02-04T08:10:50.417Z", "props": [ { "name": "width", @@ -36,6 +35,18 @@ "default": "normal", "description": "A relaxed variant of the table with more vertical padding for the cells." }, + { + "name": "sortMode", + "type": "\"single\" | \"multi\"", + "typeLabel": "GoabTableSortMode", + "values": [ + "single", + "multi" + ], + "required": false, + "default": "single", + "description": "Sort mode: \"single\" allows one column, \"multi\" allows up to 2 columns." + }, { "name": "testId", "type": "string", @@ -79,8 +90,8 @@ "events": [ { "name": "onSort", - "type": "(event: Event) => void", - "description": "", + "type": "(detail: GoabTableOnSortDetail) => void", + "description": "Called when sort state changes in single-sort mode. Receives { sortBy, sortDir }.", "frameworks": [ "react" ] @@ -88,7 +99,23 @@ { "name": "_sort", "type": "CustomEvent", - "description": "", + "description": "Dispatched when sort state changes in single-sort mode. Detail contains { sortBy, sortDir }.", + "frameworks": [ + "angular" + ] + }, + { + "name": "onMultiSort", + "type": "(detail: GoabTableOnMultiSortDetail) => void", + "description": "Called when sort state changes in multi-sort mode. Receives { sorts: GoabTableSortEntry[] }.", + "frameworks": [ + "react" + ] + }, + { + "name": "_multisort", + "type": "CustomEvent", + "description": "Dispatched when sort state changes in multi-sort mode. Detail contains { sorts: GoabTableSortEntry[] }.", "frameworks": [ "angular" ] diff --git a/docs/generated/component-apis/tabs.json b/docs/generated/component-apis/tabs.json index 520f7fde75..41eecf4ab2 100644 --- a/docs/generated/component-apis/tabs.json +++ b/docs/generated/component-apis/tabs.json @@ -1,7 +1,6 @@ { "componentSlug": "tabs", "extractedFrom": "libs/web-components/src/components/tabs/Tabs.svelte", - "extractedAt": "2026-02-04T08:10:50.418Z", "props": [ { "name": "initialtab", @@ -26,7 +25,18 @@ ], "required": false, "default": "default", - "description": "" + "description": "Visual style variant. \"segmented\" shows pill-style tabs with animation." + }, + { + "name": "orientation", + "type": "\"auto\" | \"horizontal\"", + "values": [ + "auto", + "horizontal" + ], + "required": false, + "default": "auto", + "description": "Tab layout orientation. \"auto\" stacks vertically on mobile, \"horizontal\" keeps horizontal on all screen sizes." } ], "events": [ diff --git a/docs/generated/component-apis/temporary-notification.json b/docs/generated/component-apis/temporary-notification.json index 6f9d528d60..0b8b15252d 100644 --- a/docs/generated/component-apis/temporary-notification.json +++ b/docs/generated/component-apis/temporary-notification.json @@ -1,7 +1,6 @@ { "componentSlug": "temporary-notification", "extractedFrom": "libs/web-components/src/components/temporary-notification/TemporaryNotification.svelte", - "extractedAt": "2026-02-04T08:10:50.418Z", "props": [ { "name": "message", @@ -12,7 +11,14 @@ }, { "name": "type", - "type": "TemporaryNotificationType", + "type": "\"basic\" | \"success\" | \"failure\" | \"indeterminate\" | \"progress\"", + "values": [ + "basic", + "success", + "failure", + "indeterminate", + "progress" + ], "required": false, "default": "basic", "description": "The notification type which determines the visual style and icon." @@ -47,7 +53,11 @@ }, { "name": "animationDirection", - "type": "TemporaryNotificationAnimationDirection", + "type": "\"up\" | \"down\"", + "values": [ + "up", + "down" + ], "required": false, "default": "down", "description": "Direction the notification animates from when appearing or disappearing." diff --git a/docs/generated/component-apis/text-area.json b/docs/generated/component-apis/text-area.json index 97e459819b..d3c636bb97 100644 --- a/docs/generated/component-apis/text-area.json +++ b/docs/generated/component-apis/text-area.json @@ -1,7 +1,6 @@ { "componentSlug": "text-area", "extractedFrom": "libs/web-components/src/components/text-area/TextArea.svelte", - "extractedAt": "2026-02-04T08:10:50.419Z", "props": [ { "name": "name", @@ -107,14 +106,22 @@ }, { "name": "version", - "type": "VersionType", + "type": "\"1\" | \"2\"", + "values": [ + "1", + "2" + ], "required": false, "default": "1", "description": "" }, { "name": "size", - "type": "SizeType", + "type": "\"default\" | \"compact\"", + "values": [ + "default", + "compact" + ], "required": false, "default": "default", "description": "" diff --git a/docs/generated/component-apis/text.json b/docs/generated/component-apis/text.json index 04382535a3..91b7c66f12 100644 --- a/docs/generated/component-apis/text.json +++ b/docs/generated/component-apis/text.json @@ -1,7 +1,6 @@ { "componentSlug": "text", "extractedFrom": "libs/web-components/src/components/text/Text.svelte", - "extractedAt": "2026-02-04T19:50:01.587Z", "props": [ { "name": "as", @@ -33,13 +32,14 @@ }, { "name": "size", - "type": "\"heading-xl\" | \"heading-l\" | \"heading-m\" | \"heading-s\" | \"heading-xs\" | \"body-l\" | \"body-m\" | \"body-s\" | \"body-xs\"", + "type": "\"heading-xl\" | \"heading-l\" | \"heading-m\" | \"heading-s\" | \"heading-xs\" | \"heading-2xs\" | \"body-l\" | \"body-m\" | \"body-s\" | \"body-xs\"", "values": [ "heading-xl", "heading-l", "heading-m", "heading-s", "heading-xs", + "heading-2xs", "body-l", "body-m", "body-s", diff --git a/docs/generated/component-apis/tooltip.json b/docs/generated/component-apis/tooltip.json index 49bd6ce118..9464d6c3d7 100644 --- a/docs/generated/component-apis/tooltip.json +++ b/docs/generated/component-apis/tooltip.json @@ -1,7 +1,6 @@ { "componentSlug": "tooltip", "extractedFrom": "libs/web-components/src/components/tooltip/Tooltip.svelte", - "extractedAt": "2026-02-04T08:10:50.419Z", "props": [ { "name": "content", diff --git a/docs/generated/component-apis/work-side-menu-group.json b/docs/generated/component-apis/work-side-menu-group.json new file mode 100644 index 0000000000..3ee4a0cea6 --- /dev/null +++ b/docs/generated/component-apis/work-side-menu-group.json @@ -0,0 +1,42 @@ +{ + "componentSlug": "work-side-menu-group", + "extractedFrom": "libs/web-components/src/components/work-side-menu/WorkSideMenuGroup.svelte", + "props": [ + { + "name": "heading", + "type": "string", + "required": true, + "default": null, + "description": "The text displayed in the group heading." + }, + { + "name": "icon", + "type": "GoAIconType", + "typeLabel": "GoAIconType", + "required": false, + "default": null, + "description": "Icon displayed before the group label. When omitted, no icon is rendered and no space is reserved." + }, + { + "name": "testId", + "type": "string", + "required": false, + "default": "", + "description": "Sets a data-testid attribute for automated testing." + }, + { + "name": "open", + "type": "boolean", + "required": false, + "default": "false", + "description": "Whether the group is open." + } + ], + "events": [], + "slots": [ + { + "name": "default", + "description": "" + } + ] +} diff --git a/docs/generated/component-apis/work-side-menu-item.json b/docs/generated/component-apis/work-side-menu-item.json new file mode 100644 index 0000000000..302ecd2f0e --- /dev/null +++ b/docs/generated/component-apis/work-side-menu-item.json @@ -0,0 +1,70 @@ +{ + "componentSlug": "work-side-menu-item", + "extractedFrom": "libs/web-components/src/components/work-side-menu/WorkSideMenuItem.svelte", + "props": [ + { + "name": "label", + "type": "string", + "required": true, + "default": null, + "description": "The text label displayed for the menu item." + }, + { + "name": "url", + "type": "string", + "required": false, + "default": "", + "description": "The URL the menu item links to. Optional — when absent, renders as a button instead of a link." + }, + { + "name": "badge", + "type": "string", + "required": false, + "default": "", + "description": "Badge text displayed alongside the menu item (e.g., notification count)." + }, + { + "name": "current", + "type": "boolean", + "required": false, + "default": "false", + "description": "When true, indicates this is the currently active menu item." + }, + { + "name": "divider", + "type": "boolean", + "required": false, + "default": "false", + "description": "When true, displays a divider line above this menu item." + }, + { + "name": "icon", + "type": "string", + "required": false, + "default": "", + "description": "Icon displayed before the menu item label." + }, + { + "name": "testId", + "type": "string", + "required": false, + "default": "", + "description": "Sets a data-testid attribute for automated testing." + }, + { + "name": "type", + "type": "\"normal\" | \"emergency\" | \"success\"", + "values": ["normal", "emergency", "success"], + "required": false, + "default": "normal", + "description": "Sets the visual style of the badge. Use \"emergency\" for urgent items, \"success\" for positive status." + } + ], + "events": [], + "slots": [ + { + "name": "popoverContent", + "description": "Content displayed in a popover panel beside the menu item." + } + ] +} diff --git a/docs/generated/component-apis/work-side-menu.json b/docs/generated/component-apis/work-side-menu.json index 15ce161dbc..1c2c51e232 100644 --- a/docs/generated/component-apis/work-side-menu.json +++ b/docs/generated/component-apis/work-side-menu.json @@ -1,7 +1,6 @@ { "componentSlug": "work-side-menu", "extractedFrom": "libs/web-components/src/components/work-side-menu/WorkSideMenu.svelte", - "extractedAt": "2026-02-04T08:10:50.420Z", "props": [ { "name": "heading", diff --git a/docs/nginx.conf b/docs/nginx.conf new file mode 100644 index 0000000000..53b4f91c88 --- /dev/null +++ b/docs/nginx.conf @@ -0,0 +1,32 @@ +events { + worker_connections 1024; +} + +http { + sendfile on; + include mime.types; + default_type application/octet-stream; + + server { + listen 8080; + root /opt/app-root/src; + index index.html; + + port_in_redirect off; + + location ~* \.(png|jpg|jpeg|svg|webp)$ { + expires 7d; + add_header Cache-Control "public, no-transform"; + } + + location ~* \.(js|css)$ { + expires 1d; + add_header Cache-Control "public, no-transform"; + } + + location / { + gzip on; + try_files $uri $uri/ =404; + } + } +} diff --git a/docs/package-lock.json b/docs/package-lock.json index c648453c96..cd512e4c6c 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -8,17 +8,21 @@ "name": "docs", "version": "0.0.1", "dependencies": { - "@abgov/design-tokens-v2": "npm:@abgov/design-tokens@^2.0.0", + "@abgov/design-tokens-v2": "npm:@abgov/design-tokens@^2.1.1", "@abgov/react-components": "*", "@abgov/ui-components-common": "*", - "@abgov/web-components": "*" + "@abgov/web-components": "*", + "flexsearch": "^0.7.43" + }, + "devDependencies": { + "tsx": "^4.19.0" } }, "node_modules/@abgov/design-tokens-v2": { "name": "@abgov/design-tokens", - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@abgov/design-tokens/-/design-tokens-2.0.0.tgz", - "integrity": "sha512-vmkM3AWHqlvBav1iPYhI9Y8ZTL2c3qTc3whaNdPTFlOpoC4LJR/oMQUgSeafLygSuAHrAr4iuTdK/CUbgVKHtA==" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@abgov/design-tokens/-/design-tokens-2.1.1.tgz", + "integrity": "sha512-JpNFdkgFIkrIQTmQ8h/A91EF4qoaXDK9sL/gN5QE54xCr8LxUCpEtdHpUVDwVhk8cugLrp6klhQMw8yqWLrBoA==" }, "node_modules/@abgov/react-components": { "version": "6.9.3", @@ -43,6 +47,448 @@ "integrity": "sha512-SIjYxOSsQzGlHmSUJvZVx/N6hOZ4JhItO8Z2xTHj0UCZg3Q40v6l8Z5L8shBO4GZ20o51SC3oEIvewfLOtnAXw==", "license": "Apache-2.0" }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", + "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz", + "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", + "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz", + "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz", + "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", + "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", + "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", + "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", + "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", + "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", + "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", + "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", + "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", + "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", + "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", + "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", + "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", + "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", + "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", + "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", + "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", + "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", + "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", + "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", + "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", + "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@types/react": { "version": "19.2.7", "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.7.tgz", @@ -57,7 +503,84 @@ "version": "3.2.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", - "license": "MIT" + "license": "MIT", + "peer": true + }, + "node_modules/esbuild": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", + "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.2", + "@esbuild/android-arm": "0.27.2", + "@esbuild/android-arm64": "0.27.2", + "@esbuild/android-x64": "0.27.2", + "@esbuild/darwin-arm64": "0.27.2", + "@esbuild/darwin-x64": "0.27.2", + "@esbuild/freebsd-arm64": "0.27.2", + "@esbuild/freebsd-x64": "0.27.2", + "@esbuild/linux-arm": "0.27.2", + "@esbuild/linux-arm64": "0.27.2", + "@esbuild/linux-ia32": "0.27.2", + "@esbuild/linux-loong64": "0.27.2", + "@esbuild/linux-mips64el": "0.27.2", + "@esbuild/linux-ppc64": "0.27.2", + "@esbuild/linux-riscv64": "0.27.2", + "@esbuild/linux-s390x": "0.27.2", + "@esbuild/linux-x64": "0.27.2", + "@esbuild/netbsd-arm64": "0.27.2", + "@esbuild/netbsd-x64": "0.27.2", + "@esbuild/openbsd-arm64": "0.27.2", + "@esbuild/openbsd-x64": "0.27.2", + "@esbuild/openharmony-arm64": "0.27.2", + "@esbuild/sunos-x64": "0.27.2", + "@esbuild/win32-arm64": "0.27.2", + "@esbuild/win32-ia32": "0.27.2", + "@esbuild/win32-x64": "0.27.2" + } + }, + "node_modules/flexsearch": { + "version": "0.7.43", + "resolved": "https://registry.npmjs.org/flexsearch/-/flexsearch-0.7.43.tgz", + "integrity": "sha512-c5o/+Um8aqCSOXGcZoqZOm+NqtVwNsvVpWv6lfmSclU954O3wvQKxxK8zj74fPaSJbXpSLTs4PRhh+wnoCXnKg==", + "license": "Apache-2.0" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/get-tsconfig": { + "version": "4.13.3", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.3.tgz", + "integrity": "sha512-vp8Cj/+9Q/ibZUrq1rhy8mCTQpCk31A3uu9wc1C50yAb3x2pFHOsGdAZQ7jD86ARayyxZUViYeIztW+GE8dcrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } }, "node_modules/react": { "version": "19.2.3", @@ -82,11 +605,42 @@ "react": "^19.2.3" } }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, "node_modules/scheduler": { "version": "0.27.0", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", - "license": "MIT" + "license": "MIT", + "peer": true + }, + "node_modules/tsx": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", + "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "~0.27.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } } } } diff --git a/docs/package.json b/docs/package.json index 693bec48f2..bcd0424b90 100644 --- a/docs/package.json +++ b/docs/package.json @@ -5,14 +5,21 @@ "scripts": { "dev": "astro dev", "start": "astro dev", - "build": "astro check && astro build", + "build": "npm run extract-api && npm run build:search-index && astro build", + "build:search-index": "npx tsx src/scripts/build-search-index.ts", + "extract-api": "npx tsx src/scripts/extract-api.ts --all", "preview": "astro preview", + "generate-previews": "npx tsx src/scripts/generate-preview-images.ts", "astro": "astro" }, "dependencies": { - "@abgov/design-tokens-v2": "npm:@abgov/design-tokens@^2.0.0", + "@abgov/design-tokens-v2": "npm:@abgov/design-tokens@^2.1.1", "@abgov/react-components": "*", "@abgov/ui-components-common": "*", - "@abgov/web-components": "*" + "@abgov/web-components": "*", + "flexsearch": "^0.7.43" + }, + "devDependencies": { + "tsx": "^4.19.0" } } diff --git a/docs/project.json b/docs/project.json index c1ac390398..b46419d42e 100644 --- a/docs/project.json +++ b/docs/project.json @@ -9,7 +9,7 @@ "executor": "nx:run-commands", "outputs": ["{workspaceRoot}/dist/docs"], "options": { - "command": "astro build --root docs" + "command": "npm run build --prefix docs" } }, "serve": { diff --git a/docs/public/apple-touch-icon.png b/docs/public/apple-touch-icon.png new file mode 100644 index 0000000000..ea8981b388 Binary files /dev/null and b/docs/public/apple-touch-icon.png differ diff --git a/docs/public/favicon.ico b/docs/public/favicon.ico new file mode 100644 index 0000000000..a6f28993f7 Binary files /dev/null and b/docs/public/favicon.ico differ diff --git a/docs/public/favicon.png b/docs/public/favicon.png new file mode 100644 index 0000000000..21f72eb862 Binary files /dev/null and b/docs/public/favicon.png differ diff --git a/docs/public/favicon.svg b/docs/public/favicon.svg new file mode 100644 index 0000000000..4a3c265d3b --- /dev/null +++ b/docs/public/favicon.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/docs/public/icon-192.png b/docs/public/icon-192.png new file mode 100644 index 0000000000..dfd2a5e591 Binary files /dev/null and b/docs/public/icon-192.png differ diff --git a/docs/public/icon-512.png b/docs/public/icon-512.png new file mode 100644 index 0000000000..ee54d7021e Binary files /dev/null and b/docs/public/icon-512.png differ diff --git a/docs/public/images/component-thumbnails/accordion.svg b/docs/public/images/component-thumbnails/accordion.svg new file mode 100644 index 0000000000..50dce64fb6 --- /dev/null +++ b/docs/public/images/component-thumbnails/accordion.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/docs/public/images/component-thumbnails/badge.svg b/docs/public/images/component-thumbnails/badge.svg new file mode 100644 index 0000000000..674d1f970c --- /dev/null +++ b/docs/public/images/component-thumbnails/badge.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/docs/public/images/component-thumbnails/block.svg b/docs/public/images/component-thumbnails/block.svg new file mode 100644 index 0000000000..ed36493020 --- /dev/null +++ b/docs/public/images/component-thumbnails/block.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/public/images/component-thumbnails/button-group.svg b/docs/public/images/component-thumbnails/button-group.svg new file mode 100644 index 0000000000..ef20e35e95 --- /dev/null +++ b/docs/public/images/component-thumbnails/button-group.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/docs/public/images/component-thumbnails/button.svg b/docs/public/images/component-thumbnails/button.svg new file mode 100644 index 0000000000..b2917066d9 --- /dev/null +++ b/docs/public/images/component-thumbnails/button.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/docs/public/images/component-thumbnails/callout.svg b/docs/public/images/component-thumbnails/callout.svg new file mode 100644 index 0000000000..68757a5a7f --- /dev/null +++ b/docs/public/images/component-thumbnails/callout.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/docs/public/images/component-thumbnails/checkbox-group.svg b/docs/public/images/component-thumbnails/checkbox-group.svg new file mode 100644 index 0000000000..867a1d7351 --- /dev/null +++ b/docs/public/images/component-thumbnails/checkbox-group.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/public/images/component-thumbnails/checkbox.svg b/docs/public/images/component-thumbnails/checkbox.svg new file mode 100644 index 0000000000..ad3a1dbf19 --- /dev/null +++ b/docs/public/images/component-thumbnails/checkbox.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/public/images/component-thumbnails/circular-progress-indicator.svg b/docs/public/images/component-thumbnails/circular-progress-indicator.svg new file mode 100644 index 0000000000..fe5066300f --- /dev/null +++ b/docs/public/images/component-thumbnails/circular-progress-indicator.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/docs/public/images/component-thumbnails/container.svg b/docs/public/images/component-thumbnails/container.svg new file mode 100644 index 0000000000..deaea50904 --- /dev/null +++ b/docs/public/images/component-thumbnails/container.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/docs/public/images/component-thumbnails/data-grid.svg b/docs/public/images/component-thumbnails/data-grid.svg new file mode 100644 index 0000000000..160c1bf034 --- /dev/null +++ b/docs/public/images/component-thumbnails/data-grid.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/public/images/component-thumbnails/date-picker.svg b/docs/public/images/component-thumbnails/date-picker.svg new file mode 100644 index 0000000000..ae298f68a0 --- /dev/null +++ b/docs/public/images/component-thumbnails/date-picker.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/public/images/component-thumbnails/details.svg b/docs/public/images/component-thumbnails/details.svg new file mode 100644 index 0000000000..d93b073de0 --- /dev/null +++ b/docs/public/images/component-thumbnails/details.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/public/images/component-thumbnails/divider.svg b/docs/public/images/component-thumbnails/divider.svg new file mode 100644 index 0000000000..25324b5bcb --- /dev/null +++ b/docs/public/images/component-thumbnails/divider.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/docs/public/images/component-thumbnails/drawer.svg b/docs/public/images/component-thumbnails/drawer.svg new file mode 100644 index 0000000000..d301509517 --- /dev/null +++ b/docs/public/images/component-thumbnails/drawer.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/docs/public/images/component-thumbnails/dropdown.svg b/docs/public/images/component-thumbnails/dropdown.svg new file mode 100644 index 0000000000..d34320aa99 --- /dev/null +++ b/docs/public/images/component-thumbnails/dropdown.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/docs/public/images/component-thumbnails/file-uploader.svg b/docs/public/images/component-thumbnails/file-uploader.svg new file mode 100644 index 0000000000..f8e6c1f2eb --- /dev/null +++ b/docs/public/images/component-thumbnails/file-uploader.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/public/images/component-thumbnails/filter-chip.svg b/docs/public/images/component-thumbnails/filter-chip.svg new file mode 100644 index 0000000000..2d4c1c9413 --- /dev/null +++ b/docs/public/images/component-thumbnails/filter-chip.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/docs/public/images/component-thumbnails/footer.svg b/docs/public/images/component-thumbnails/footer.svg new file mode 100644 index 0000000000..1506b984ae --- /dev/null +++ b/docs/public/images/component-thumbnails/footer.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/public/images/component-thumbnails/form-item.svg b/docs/public/images/component-thumbnails/form-item.svg new file mode 100644 index 0000000000..03d881ceea --- /dev/null +++ b/docs/public/images/component-thumbnails/form-item.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/docs/public/images/component-thumbnails/form-stepper.svg b/docs/public/images/component-thumbnails/form-stepper.svg new file mode 100644 index 0000000000..35ab0df8a7 --- /dev/null +++ b/docs/public/images/component-thumbnails/form-stepper.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/docs/public/images/component-thumbnails/form.svg b/docs/public/images/component-thumbnails/form.svg new file mode 100644 index 0000000000..bb31a9ecae --- /dev/null +++ b/docs/public/images/component-thumbnails/form.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/public/images/component-thumbnails/grid.svg b/docs/public/images/component-thumbnails/grid.svg new file mode 100644 index 0000000000..858414d8cf --- /dev/null +++ b/docs/public/images/component-thumbnails/grid.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/public/images/component-thumbnails/header.svg b/docs/public/images/component-thumbnails/header.svg new file mode 100644 index 0000000000..46f173da6b --- /dev/null +++ b/docs/public/images/component-thumbnails/header.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/docs/public/images/component-thumbnails/hero-banner.svg b/docs/public/images/component-thumbnails/hero-banner.svg new file mode 100644 index 0000000000..246a6f4d34 --- /dev/null +++ b/docs/public/images/component-thumbnails/hero-banner.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/public/images/component-thumbnails/icon-button.svg b/docs/public/images/component-thumbnails/icon-button.svg new file mode 100644 index 0000000000..8d99627daa --- /dev/null +++ b/docs/public/images/component-thumbnails/icon-button.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/public/images/component-thumbnails/icons.svg b/docs/public/images/component-thumbnails/icons.svg new file mode 100644 index 0000000000..2ed0939ded --- /dev/null +++ b/docs/public/images/component-thumbnails/icons.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/public/images/component-thumbnails/linear-progress-indicator.svg b/docs/public/images/component-thumbnails/linear-progress-indicator.svg new file mode 100644 index 0000000000..1d1b11bacf --- /dev/null +++ b/docs/public/images/component-thumbnails/linear-progress-indicator.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/public/images/component-thumbnails/link.svg b/docs/public/images/component-thumbnails/link.svg new file mode 100644 index 0000000000..0ab21232a5 --- /dev/null +++ b/docs/public/images/component-thumbnails/link.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/public/images/component-thumbnails/list.svg b/docs/public/images/component-thumbnails/list.svg new file mode 100644 index 0000000000..44ef722161 --- /dev/null +++ b/docs/public/images/component-thumbnails/list.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/public/images/component-thumbnails/menu-button.svg b/docs/public/images/component-thumbnails/menu-button.svg new file mode 100644 index 0000000000..32e3a5d877 --- /dev/null +++ b/docs/public/images/component-thumbnails/menu-button.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/public/images/component-thumbnails/microsite-header.svg b/docs/public/images/component-thumbnails/microsite-header.svg new file mode 100644 index 0000000000..30a989d277 --- /dev/null +++ b/docs/public/images/component-thumbnails/microsite-header.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/docs/public/images/component-thumbnails/modal.svg b/docs/public/images/component-thumbnails/modal.svg new file mode 100644 index 0000000000..ecd05c707f --- /dev/null +++ b/docs/public/images/component-thumbnails/modal.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/docs/public/images/component-thumbnails/notification-banner.svg b/docs/public/images/component-thumbnails/notification-banner.svg new file mode 100644 index 0000000000..0bc7e53c71 --- /dev/null +++ b/docs/public/images/component-thumbnails/notification-banner.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/docs/public/images/component-thumbnails/pagination.svg b/docs/public/images/component-thumbnails/pagination.svg new file mode 100644 index 0000000000..afb23bc101 --- /dev/null +++ b/docs/public/images/component-thumbnails/pagination.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/docs/public/images/component-thumbnails/popover.svg b/docs/public/images/component-thumbnails/popover.svg new file mode 100644 index 0000000000..5ffb6f83a1 --- /dev/null +++ b/docs/public/images/component-thumbnails/popover.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/public/images/component-thumbnails/radio.svg b/docs/public/images/component-thumbnails/radio.svg new file mode 100644 index 0000000000..9118318898 --- /dev/null +++ b/docs/public/images/component-thumbnails/radio.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/public/images/component-thumbnails/side-menu.svg b/docs/public/images/component-thumbnails/side-menu.svg new file mode 100644 index 0000000000..94dbc1438d --- /dev/null +++ b/docs/public/images/component-thumbnails/side-menu.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/docs/public/images/component-thumbnails/skeleton-loader.svg b/docs/public/images/component-thumbnails/skeleton-loader.svg new file mode 100644 index 0000000000..d0a27a3463 --- /dev/null +++ b/docs/public/images/component-thumbnails/skeleton-loader.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/docs/public/images/component-thumbnails/spacer.svg b/docs/public/images/component-thumbnails/spacer.svg new file mode 100644 index 0000000000..56c5dc2dac --- /dev/null +++ b/docs/public/images/component-thumbnails/spacer.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/docs/public/images/component-thumbnails/table.svg b/docs/public/images/component-thumbnails/table.svg new file mode 100644 index 0000000000..86176cbef9 --- /dev/null +++ b/docs/public/images/component-thumbnails/table.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/docs/public/images/component-thumbnails/tabs.svg b/docs/public/images/component-thumbnails/tabs.svg new file mode 100644 index 0000000000..129ef6522c --- /dev/null +++ b/docs/public/images/component-thumbnails/tabs.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/docs/public/images/component-thumbnails/temporary-notification.svg b/docs/public/images/component-thumbnails/temporary-notification.svg new file mode 100644 index 0000000000..8d3eb6a4af --- /dev/null +++ b/docs/public/images/component-thumbnails/temporary-notification.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/docs/public/images/component-thumbnails/text-area.svg b/docs/public/images/component-thumbnails/text-area.svg new file mode 100644 index 0000000000..0500907f3e --- /dev/null +++ b/docs/public/images/component-thumbnails/text-area.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/public/images/component-thumbnails/text-input.svg b/docs/public/images/component-thumbnails/text-input.svg new file mode 100644 index 0000000000..b89da8cc6c --- /dev/null +++ b/docs/public/images/component-thumbnails/text-input.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/public/images/component-thumbnails/text.svg b/docs/public/images/component-thumbnails/text.svg new file mode 100644 index 0000000000..156f681dc7 --- /dev/null +++ b/docs/public/images/component-thumbnails/text.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/docs/public/images/component-thumbnails/tooltip.svg b/docs/public/images/component-thumbnails/tooltip.svg new file mode 100644 index 0000000000..a344f005ec --- /dev/null +++ b/docs/public/images/component-thumbnails/tooltip.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/docs/public/images/component-thumbnails/work-side-menu.svg b/docs/public/images/component-thumbnails/work-side-menu.svg new file mode 100644 index 0000000000..3abe8bbc82 --- /dev/null +++ b/docs/public/images/component-thumbnails/work-side-menu.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/docs/public/images/Examples/Menu/Logo.png b/docs/public/images/examples/Menu/Logo.png similarity index 100% rename from docs/public/images/Examples/Menu/Logo.png rename to docs/public/images/examples/Menu/Logo.png diff --git a/docs/public/images/Examples/Menu/Rectangle 146703.svg b/docs/public/images/examples/Menu/Rectangle 146703.svg similarity index 100% rename from docs/public/images/Examples/Menu/Rectangle 146703.svg rename to docs/public/images/examples/Menu/Rectangle 146703.svg diff --git a/docs/public/images/examples/add-a-filter-chip.webp b/docs/public/images/examples/add-a-filter-chip.webp new file mode 100644 index 0000000000..9b1179f46c Binary files /dev/null and b/docs/public/images/examples/add-a-filter-chip.webp differ diff --git a/docs/public/images/examples/add-a-record-using-a-drawer.webp b/docs/public/images/examples/add-a-record-using-a-drawer.webp new file mode 100644 index 0000000000..544401a9c2 Binary files /dev/null and b/docs/public/images/examples/add-a-record-using-a-drawer.webp differ diff --git a/docs/public/images/examples/add-and-edit-lots-of-filters.webp b/docs/public/images/examples/add-and-edit-lots-of-filters.webp new file mode 100644 index 0000000000..1124fd9998 Binary files /dev/null and b/docs/public/images/examples/add-and-edit-lots-of-filters.webp differ diff --git a/docs/public/images/examples/add-another-item-in-a-modal.webp b/docs/public/images/examples/add-another-item-in-a-modal.webp new file mode 100644 index 0000000000..cee034620c Binary files /dev/null and b/docs/public/images/examples/add-another-item-in-a-modal.webp differ diff --git a/docs/public/images/examples/ask-a-long-answer-question-with-a-maximum-word-count.webp b/docs/public/images/examples/ask-a-long-answer-question-with-a-maximum-word-count.webp new file mode 100644 index 0000000000..4317803c6e Binary files /dev/null and b/docs/public/images/examples/ask-a-long-answer-question-with-a-maximum-word-count.webp differ diff --git a/docs/public/images/examples/ask-a-user-for-a-birthday.webp b/docs/public/images/examples/ask-a-user-for-a-birthday.webp new file mode 100644 index 0000000000..c6b360bf2b Binary files /dev/null and b/docs/public/images/examples/ask-a-user-for-a-birthday.webp differ diff --git a/docs/public/images/examples/ask-a-user-for-an-address.webp b/docs/public/images/examples/ask-a-user-for-an-address.webp new file mode 100644 index 0000000000..325ff3d0f9 Binary files /dev/null and b/docs/public/images/examples/ask-a-user-for-an-address.webp differ diff --git a/docs/public/images/examples/ask-a-user-for-an-indian-registration-number.webp b/docs/public/images/examples/ask-a-user-for-an-indian-registration-number.webp new file mode 100644 index 0000000000..885abb106c Binary files /dev/null and b/docs/public/images/examples/ask-a-user-for-an-indian-registration-number.webp differ diff --git a/docs/public/images/examples/ask-a-user-for-direct-deposit-information.webp b/docs/public/images/examples/ask-a-user-for-direct-deposit-information.webp new file mode 100644 index 0000000000..fc1dabca16 Binary files /dev/null and b/docs/public/images/examples/ask-a-user-for-direct-deposit-information.webp differ diff --git a/docs/public/images/examples/ask-a-user-for-dollar-amounts.webp b/docs/public/images/examples/ask-a-user-for-dollar-amounts.webp new file mode 100644 index 0000000000..ebe3e7a299 Binary files /dev/null and b/docs/public/images/examples/ask-a-user-for-dollar-amounts.webp differ diff --git a/docs/public/images/examples/ask-a-user-one-question-at-a-time.webp b/docs/public/images/examples/ask-a-user-one-question-at-a-time.webp new file mode 100644 index 0000000000..6999f06b1c Binary files /dev/null and b/docs/public/images/examples/ask-a-user-one-question-at-a-time.webp differ diff --git a/docs/public/images/examples/basic-page-layout.webp b/docs/public/images/examples/basic-page-layout.webp new file mode 100644 index 0000000000..9020347b71 Binary files /dev/null and b/docs/public/images/examples/basic-page-layout.webp differ diff --git a/docs/public/images/examples/button-with-icon.webp b/docs/public/images/examples/button-with-icon.webp new file mode 100644 index 0000000000..a2f49fe17a Binary files /dev/null and b/docs/public/images/examples/button-with-icon.webp differ diff --git a/docs/public/images/examples/card-grid.webp b/docs/public/images/examples/card-grid.webp new file mode 100644 index 0000000000..8adab9e26a Binary files /dev/null and b/docs/public/images/examples/card-grid.webp differ diff --git a/docs/public/images/examples/card-view-of-case-files.webp b/docs/public/images/examples/card-view-of-case-files.webp new file mode 100644 index 0000000000..1a0b57e544 Binary files /dev/null and b/docs/public/images/examples/card-view-of-case-files.webp differ diff --git a/docs/public/images/examples/communicate-a-future-service-outage.webp b/docs/public/images/examples/communicate-a-future-service-outage.webp new file mode 100644 index 0000000000..624feb622a Binary files /dev/null and b/docs/public/images/examples/communicate-a-future-service-outage.webp differ diff --git a/docs/public/images/examples/confirm-a-change.webp b/docs/public/images/examples/confirm-a-change.webp new file mode 100644 index 0000000000..559ebf6b8b Binary files /dev/null and b/docs/public/images/examples/confirm-a-change.webp differ diff --git a/docs/public/images/examples/confirm-a-destructive-action.webp b/docs/public/images/examples/confirm-a-destructive-action.webp new file mode 100644 index 0000000000..e1604e48c5 Binary files /dev/null and b/docs/public/images/examples/confirm-a-destructive-action.webp differ diff --git a/docs/public/images/examples/confirm-before-navigating-away.webp b/docs/public/images/examples/confirm-before-navigating-away.webp new file mode 100644 index 0000000000..4f712a5184 Binary files /dev/null and b/docs/public/images/examples/confirm-before-navigating-away.webp differ diff --git a/docs/public/images/examples/confirm-that-an-application-was-submitted.webp b/docs/public/images/examples/confirm-that-an-application-was-submitted.webp new file mode 100644 index 0000000000..b37b6694ab Binary files /dev/null and b/docs/public/images/examples/confirm-that-an-application-was-submitted.webp differ diff --git a/docs/public/images/examples/copy-to-clipboard.webp b/docs/public/images/examples/copy-to-clipboard.webp new file mode 100644 index 0000000000..cf5e8662e6 Binary files /dev/null and b/docs/public/images/examples/copy-to-clipboard.webp differ diff --git a/docs/public/images/examples/disabled-button-with-a-required-field.webp b/docs/public/images/examples/disabled-button-with-a-required-field.webp new file mode 100644 index 0000000000..8dd90f52a3 Binary files /dev/null and b/docs/public/images/examples/disabled-button-with-a-required-field.webp differ diff --git a/docs/public/images/examples/display-numbers-in-a-table-so-they-can-be-scanned-easily.webp b/docs/public/images/examples/display-numbers-in-a-table-so-they-can-be-scanned-easily.webp new file mode 100644 index 0000000000..7fdd5727a1 Binary files /dev/null and b/docs/public/images/examples/display-numbers-in-a-table-so-they-can-be-scanned-easily.webp differ diff --git a/docs/public/images/examples/display-user-information.webp b/docs/public/images/examples/display-user-information.webp new file mode 100644 index 0000000000..5c0cc542ec Binary files /dev/null and b/docs/public/images/examples/display-user-information.webp differ diff --git a/docs/public/images/examples/dynamically-add-an-item-to-a-dropdown-list.webp b/docs/public/images/examples/dynamically-add-an-item-to-a-dropdown-list.webp new file mode 100644 index 0000000000..6f9f3d0731 Binary files /dev/null and b/docs/public/images/examples/dynamically-add-an-item-to-a-dropdown-list.webp differ diff --git a/docs/public/images/examples/dynamically-change-items-in-a-dropdown-list.webp b/docs/public/images/examples/dynamically-change-items-in-a-dropdown-list.webp new file mode 100644 index 0000000000..5dac4bd37b Binary files /dev/null and b/docs/public/images/examples/dynamically-change-items-in-a-dropdown-list.webp differ diff --git a/docs/public/images/examples/expand-or-collapse-part-of-a-form.webp b/docs/public/images/examples/expand-or-collapse-part-of-a-form.webp new file mode 100644 index 0000000000..8d47b305a0 Binary files /dev/null and b/docs/public/images/examples/expand-or-collapse-part-of-a-form.webp differ diff --git a/docs/public/images/examples/filter-a-list-using-a-push-drawer.webp b/docs/public/images/examples/filter-a-list-using-a-push-drawer.webp new file mode 100644 index 0000000000..3666538fe3 Binary files /dev/null and b/docs/public/images/examples/filter-a-list-using-a-push-drawer.webp differ diff --git a/docs/public/images/examples/filter-data-in-a-table.webp b/docs/public/images/examples/filter-data-in-a-table.webp new file mode 100644 index 0000000000..78e140f7dc Binary files /dev/null and b/docs/public/images/examples/filter-data-in-a-table.webp differ diff --git a/docs/public/images/examples/form-stepper-with-controlled-navigation.webp b/docs/public/images/examples/form-stepper-with-controlled-navigation.webp new file mode 100644 index 0000000000..e35acfa0b6 Binary files /dev/null and b/docs/public/images/examples/form-stepper-with-controlled-navigation.webp differ diff --git a/docs/public/images/examples/give-background-information-before-asking-a-question.webp b/docs/public/images/examples/give-background-information-before-asking-a-question.webp new file mode 100644 index 0000000000..45afa67e11 Binary files /dev/null and b/docs/public/images/examples/give-background-information-before-asking-a-question.webp differ diff --git a/docs/public/images/examples/give-context-before-asking-a-long-answer-question.webp b/docs/public/images/examples/give-context-before-asking-a-long-answer-question.webp new file mode 100644 index 0000000000..99f16ba6a9 Binary files /dev/null and b/docs/public/images/examples/give-context-before-asking-a-long-answer-question.webp differ diff --git a/docs/public/images/examples/group-related-questions-together-on-a-question-page.webp b/docs/public/images/examples/group-related-questions-together-on-a-question-page.webp new file mode 100644 index 0000000000..a7c3a08e53 Binary files /dev/null and b/docs/public/images/examples/group-related-questions-together-on-a-question-page.webp differ diff --git a/docs/public/images/examples/header-with-navigation.webp b/docs/public/images/examples/header-with-navigation.webp new file mode 100644 index 0000000000..9f12b8664b Binary files /dev/null and b/docs/public/images/examples/header-with-navigation.webp differ diff --git a/docs/public/images/examples/hero-banner-with-actions.webp b/docs/public/images/examples/hero-banner-with-actions.webp new file mode 100644 index 0000000000..da9fe804c8 Binary files /dev/null and b/docs/public/images/examples/hero-banner-with-actions.webp differ diff --git a/docs/public/images/examples/hide-and-show-many-sections-of-information.webp b/docs/public/images/examples/hide-and-show-many-sections-of-information.webp new file mode 100644 index 0000000000..746b8f69f2 Binary files /dev/null and b/docs/public/images/examples/hide-and-show-many-sections-of-information.webp differ diff --git a/docs/public/images/examples/include-a-link-in-the-helper-text-of-an-option.webp b/docs/public/images/examples/include-a-link-in-the-helper-text-of-an-option.webp new file mode 100644 index 0000000000..daa557b189 Binary files /dev/null and b/docs/public/images/examples/include-a-link-in-the-helper-text-of-an-option.webp differ diff --git a/docs/public/images/examples/include-descriptions-for-items-in-a-checkbox-list.webp b/docs/public/images/examples/include-descriptions-for-items-in-a-checkbox-list.webp new file mode 100644 index 0000000000..c82a4da8d3 Binary files /dev/null and b/docs/public/images/examples/include-descriptions-for-items-in-a-checkbox-list.webp differ diff --git a/docs/public/images/examples/link-the-user-to-give-feedback-to-the-service.webp b/docs/public/images/examples/link-the-user-to-give-feedback-to-the-service.webp new file mode 100644 index 0000000000..708bc07bae Binary files /dev/null and b/docs/public/images/examples/link-the-user-to-give-feedback-to-the-service.webp differ diff --git a/docs/public/images/examples/link-to-an-external-page.webp b/docs/public/images/examples/link-to-an-external-page.webp new file mode 100644 index 0000000000..f057c44ccf Binary files /dev/null and b/docs/public/images/examples/link-to-an-external-page.webp differ diff --git a/docs/public/images/examples/public-form.webp b/docs/public/images/examples/public-form.webp new file mode 100644 index 0000000000..c56e904930 Binary files /dev/null and b/docs/public/images/examples/public-form.webp differ diff --git a/docs/public/images/examples/question-page.webp b/docs/public/images/examples/question-page.webp new file mode 100644 index 0000000000..45592418c1 Binary files /dev/null and b/docs/public/images/examples/question-page.webp differ diff --git a/docs/public/images/examples/remove-a-filter.webp b/docs/public/images/examples/remove-a-filter.webp new file mode 100644 index 0000000000..071d4b05ec Binary files /dev/null and b/docs/public/images/examples/remove-a-filter.webp differ diff --git a/docs/public/images/examples/require-user-action-before-continuing.webp b/docs/public/images/examples/require-user-action-before-continuing.webp new file mode 100644 index 0000000000..e153fbb367 Binary files /dev/null and b/docs/public/images/examples/require-user-action-before-continuing.webp differ diff --git a/docs/public/images/examples/reset-date-picker-field.webp b/docs/public/images/examples/reset-date-picker-field.webp new file mode 100644 index 0000000000..025014e147 Binary files /dev/null and b/docs/public/images/examples/reset-date-picker-field.webp differ diff --git a/docs/public/images/examples/result-page.webp b/docs/public/images/examples/result-page.webp new file mode 100644 index 0000000000..aaeead3d27 Binary files /dev/null and b/docs/public/images/examples/result-page.webp differ diff --git a/docs/public/images/examples/reveal-input-based-on-a-selection.webp b/docs/public/images/examples/reveal-input-based-on-a-selection.webp new file mode 100644 index 0000000000..64d308443e Binary files /dev/null and b/docs/public/images/examples/reveal-input-based-on-a-selection.webp differ diff --git a/docs/public/images/examples/review-and-action.webp b/docs/public/images/examples/review-and-action.webp new file mode 100644 index 0000000000..7f3adf799c Binary files /dev/null and b/docs/public/images/examples/review-and-action.webp differ diff --git a/docs/public/images/examples/review-page.webp b/docs/public/images/examples/review-page.webp new file mode 100644 index 0000000000..ed544bc60a Binary files /dev/null and b/docs/public/images/examples/review-page.webp differ diff --git a/docs/public/images/examples/search.webp b/docs/public/images/examples/search.webp new file mode 100644 index 0000000000..8b68218857 Binary files /dev/null and b/docs/public/images/examples/search.webp differ diff --git a/docs/public/images/examples/select-one-or-more-from-a-list-of-options.webp b/docs/public/images/examples/select-one-or-more-from-a-list-of-options.webp new file mode 100644 index 0000000000..9bc2977d63 Binary files /dev/null and b/docs/public/images/examples/select-one-or-more-from-a-list-of-options.webp differ diff --git a/docs/public/images/examples/set-a-max-width-on-a-long-radio-item.webp b/docs/public/images/examples/set-a-max-width-on-a-long-radio-item.webp new file mode 100644 index 0000000000..da2c0d20d3 Binary files /dev/null and b/docs/public/images/examples/set-a-max-width-on-a-long-radio-item.webp differ diff --git a/docs/public/images/examples/set-a-specific-tab-to-be-active.webp b/docs/public/images/examples/set-a-specific-tab-to-be-active.webp new file mode 100644 index 0000000000..54dd90b509 Binary files /dev/null and b/docs/public/images/examples/set-a-specific-tab-to-be-active.webp differ diff --git a/docs/public/images/examples/set-the-status-of-step-on-a-form-stepper.webp b/docs/public/images/examples/set-the-status-of-step-on-a-form-stepper.webp new file mode 100644 index 0000000000..24fdec1f58 Binary files /dev/null and b/docs/public/images/examples/set-the-status-of-step-on-a-form-stepper.webp differ diff --git a/docs/public/images/examples/show-a-label-on-an-icon-only-button.webp b/docs/public/images/examples/show-a-label-on-an-icon-only-button.webp new file mode 100644 index 0000000000..9b46dc70ec Binary files /dev/null and b/docs/public/images/examples/show-a-label-on-an-icon-only-button.webp differ diff --git a/docs/public/images/examples/show-a-list-to-help-answer-a-question.webp b/docs/public/images/examples/show-a-list-to-help-answer-a-question.webp new file mode 100644 index 0000000000..c63b3b0e5c Binary files /dev/null and b/docs/public/images/examples/show-a-list-to-help-answer-a-question.webp differ diff --git a/docs/public/images/examples/show-a-notification-with-an-action.webp b/docs/public/images/examples/show-a-notification-with-an-action.webp new file mode 100644 index 0000000000..d7e5bf54fd Binary files /dev/null and b/docs/public/images/examples/show-a-notification-with-an-action.webp differ diff --git a/docs/public/images/examples/show-a-notification.webp b/docs/public/images/examples/show-a-notification.webp new file mode 100644 index 0000000000..0462d88210 Binary files /dev/null and b/docs/public/images/examples/show-a-notification.webp differ diff --git a/docs/public/images/examples/show-a-section-title-on-a-question-page.webp b/docs/public/images/examples/show-a-section-title-on-a-question-page.webp new file mode 100644 index 0000000000..9eb75e3a49 Binary files /dev/null and b/docs/public/images/examples/show-a-section-title-on-a-question-page.webp differ diff --git a/docs/public/images/examples/show-a-simple-progress-indicator-on-a-question-page-with-multiple-questions.webp b/docs/public/images/examples/show-a-simple-progress-indicator-on-a-question-page-with-multiple-questions.webp new file mode 100644 index 0000000000..f6c96f70f7 Binary files /dev/null and b/docs/public/images/examples/show-a-simple-progress-indicator-on-a-question-page-with-multiple-questions.webp differ diff --git a/docs/public/images/examples/show-a-simple-progress-indicator-on-a-question-page.webp b/docs/public/images/examples/show-a-simple-progress-indicator-on-a-question-page.webp new file mode 100644 index 0000000000..e494c970bd Binary files /dev/null and b/docs/public/images/examples/show-a-simple-progress-indicator-on-a-question-page.webp differ diff --git a/docs/public/images/examples/show-a-user-progress-when-the-time-is-unknown.webp b/docs/public/images/examples/show-a-user-progress-when-the-time-is-unknown.webp new file mode 100644 index 0000000000..d4468f4cd1 Binary files /dev/null and b/docs/public/images/examples/show-a-user-progress-when-the-time-is-unknown.webp differ diff --git a/docs/public/images/examples/show-a-user-progress.webp b/docs/public/images/examples/show-a-user-progress.webp new file mode 100644 index 0000000000..741191c410 Binary files /dev/null and b/docs/public/images/examples/show-a-user-progress.webp differ diff --git a/docs/public/images/examples/show-different-views-of-data-in-a-table.webp b/docs/public/images/examples/show-different-views-of-data-in-a-table.webp new file mode 100644 index 0000000000..3709ab870e Binary files /dev/null and b/docs/public/images/examples/show-different-views-of-data-in-a-table.webp differ diff --git a/docs/public/images/examples/show-full-date-in-a-tooltip.webp b/docs/public/images/examples/show-full-date-in-a-tooltip.webp new file mode 100644 index 0000000000..d426a8ce30 Binary files /dev/null and b/docs/public/images/examples/show-full-date-in-a-tooltip.webp differ diff --git a/docs/public/images/examples/show-links-to-navigation-items.webp b/docs/public/images/examples/show-links-to-navigation-items.webp new file mode 100644 index 0000000000..84a322c05f Binary files /dev/null and b/docs/public/images/examples/show-links-to-navigation-items.webp differ diff --git a/docs/public/images/examples/show-more-information-to-help-answer-a-question.webp b/docs/public/images/examples/show-more-information-to-help-answer-a-question.webp new file mode 100644 index 0000000000..81386807c1 Binary files /dev/null and b/docs/public/images/examples/show-more-information-to-help-answer-a-question.webp differ diff --git a/docs/public/images/examples/show-multiple-actions-in-a-compact-table.webp b/docs/public/images/examples/show-multiple-actions-in-a-compact-table.webp new file mode 100644 index 0000000000..d9426a47a0 Binary files /dev/null and b/docs/public/images/examples/show-multiple-actions-in-a-compact-table.webp differ diff --git a/docs/public/images/examples/show-multiple-tags-together.webp b/docs/public/images/examples/show-multiple-tags-together.webp new file mode 100644 index 0000000000..2442454f69 Binary files /dev/null and b/docs/public/images/examples/show-multiple-tags-together.webp differ diff --git a/docs/public/images/examples/show-number-of-results-per-page.webp b/docs/public/images/examples/show-number-of-results-per-page.webp new file mode 100644 index 0000000000..6230f36521 Binary files /dev/null and b/docs/public/images/examples/show-number-of-results-per-page.webp differ diff --git a/docs/public/images/examples/show-quick-links.webp b/docs/public/images/examples/show-quick-links.webp new file mode 100644 index 0000000000..196cbc40ce Binary files /dev/null and b/docs/public/images/examples/show-quick-links.webp differ diff --git a/docs/public/images/examples/show-status-in-a-table.webp b/docs/public/images/examples/show-status-in-a-table.webp new file mode 100644 index 0000000000..923abc0792 Binary files /dev/null and b/docs/public/images/examples/show-status-in-a-table.webp differ diff --git a/docs/public/images/examples/show-status-on-a-card.webp b/docs/public/images/examples/show-status-on-a-card.webp new file mode 100644 index 0000000000..2b50adfcba Binary files /dev/null and b/docs/public/images/examples/show-status-on-a-card.webp differ diff --git a/docs/public/images/examples/show-version-number.webp b/docs/public/images/examples/show-version-number.webp new file mode 100644 index 0000000000..46e01f0246 Binary files /dev/null and b/docs/public/images/examples/show-version-number.webp differ diff --git a/docs/public/images/examples/slotted-error-text-in-a-form-item.webp b/docs/public/images/examples/slotted-error-text-in-a-form-item.webp new file mode 100644 index 0000000000..09f2f5ad9b Binary files /dev/null and b/docs/public/images/examples/slotted-error-text-in-a-form-item.webp differ diff --git a/docs/public/images/examples/slotted-helper-text-in-a-form-item.webp b/docs/public/images/examples/slotted-helper-text-in-a-form-item.webp new file mode 100644 index 0000000000..c1fc8404f5 Binary files /dev/null and b/docs/public/images/examples/slotted-helper-text-in-a-form-item.webp differ diff --git a/docs/public/images/examples/sort-data-in-a-table.webp b/docs/public/images/examples/sort-data-in-a-table.webp new file mode 100644 index 0000000000..ebb19a17e8 Binary files /dev/null and b/docs/public/images/examples/sort-data-in-a-table.webp differ diff --git a/docs/public/images/examples/start-page.webp b/docs/public/images/examples/start-page.webp new file mode 100644 index 0000000000..7cb04e4f74 Binary files /dev/null and b/docs/public/images/examples/start-page.webp differ diff --git a/docs/public/images/examples/task-list-page.webp b/docs/public/images/examples/task-list-page.webp new file mode 100644 index 0000000000..a8d6acfe21 Binary files /dev/null and b/docs/public/images/examples/task-list-page.webp differ diff --git a/docs/public/images/examples/type-to-create-a-new-filter.webp b/docs/public/images/examples/type-to-create-a-new-filter.webp new file mode 100644 index 0000000000..f1620f36b9 Binary files /dev/null and b/docs/public/images/examples/type-to-create-a-new-filter.webp differ diff --git a/docs/public/images/examples/warn-a-user-of-a-deadline.webp b/docs/public/images/examples/warn-a-user-of-a-deadline.webp new file mode 100644 index 0000000000..d726843156 Binary files /dev/null and b/docs/public/images/examples/warn-a-user-of-a-deadline.webp differ diff --git a/docs/public/images/foundations/content-guidelines/helper-text-anatomy.svg b/docs/public/images/foundations/content-guidelines/helper-text-anatomy.svg new file mode 100644 index 0000000000..8b1ef82fd2 --- /dev/null +++ b/docs/public/images/foundations/content-guidelines/helper-text-anatomy.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/docs/public/images/foundations/motion/expressive-exit.svg b/docs/public/images/foundations/motion/expressive-exit.svg new file mode 100644 index 0000000000..c5cb2c9193 --- /dev/null +++ b/docs/public/images/foundations/motion/expressive-exit.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/docs/public/images/foundations/motion/expressive-reveal.svg b/docs/public/images/foundations/motion/expressive-reveal.svg new file mode 100644 index 0000000000..ee747eedaa --- /dev/null +++ b/docs/public/images/foundations/motion/expressive-reveal.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/docs/public/images/foundations/motion/expressive-transform.svg b/docs/public/images/foundations/motion/expressive-transform.svg new file mode 100644 index 0000000000..8ee749e471 --- /dev/null +++ b/docs/public/images/foundations/motion/expressive-transform.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/docs/public/images/foundations/motion/expressive.svg b/docs/public/images/foundations/motion/expressive.svg new file mode 100644 index 0000000000..e6a3cd5a93 --- /dev/null +++ b/docs/public/images/foundations/motion/expressive.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/docs/public/images/foundations/motion/productive.svg b/docs/public/images/foundations/motion/productive.svg new file mode 100644 index 0000000000..bc43319924 --- /dev/null +++ b/docs/public/images/foundations/motion/productive.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/docs/public/images/foundations/style-guide/abstract-shapes.svg b/docs/public/images/foundations/style-guide/abstract-shapes.svg new file mode 100644 index 0000000000..14981f75f3 --- /dev/null +++ b/docs/public/images/foundations/style-guide/abstract-shapes.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/docs/public/images/foundations/style-guide/alberta-service-logo.svg b/docs/public/images/foundations/style-guide/alberta-service-logo.svg new file mode 100644 index 0000000000..4dd90fba71 --- /dev/null +++ b/docs/public/images/foundations/style-guide/alberta-service-logo.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/docs/public/images/foundations/style-guide/alberta-sub-mark.svg b/docs/public/images/foundations/style-guide/alberta-sub-mark.svg new file mode 100644 index 0000000000..85df4351fa --- /dev/null +++ b/docs/public/images/foundations/style-guide/alberta-sub-mark.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/docs/public/images/foundations/style-guide/black-version-logo.svg b/docs/public/images/foundations/style-guide/black-version-logo.svg new file mode 100644 index 0000000000..60744f74ea --- /dev/null +++ b/docs/public/images/foundations/style-guide/black-version-logo.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/docs/public/images/foundations/style-guide/illustration-1.svg b/docs/public/images/foundations/style-guide/illustration-1.svg new file mode 100644 index 0000000000..0d22f3a9c3 --- /dev/null +++ b/docs/public/images/foundations/style-guide/illustration-1.svg @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/public/images/foundations/style-guide/logo-anatomy.svg b/docs/public/images/foundations/style-guide/logo-anatomy.svg new file mode 100644 index 0000000000..ffe69c80ed --- /dev/null +++ b/docs/public/images/foundations/style-guide/logo-anatomy.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/docs/public/images/foundations/style-guide/primary-usage-logo.svg b/docs/public/images/foundations/style-guide/primary-usage-logo.svg new file mode 100644 index 0000000000..a773da33db --- /dev/null +++ b/docs/public/images/foundations/style-guide/primary-usage-logo.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/public/images/foundations/style-guide/public-form-1.svg b/docs/public/images/foundations/style-guide/public-form-1.svg new file mode 100644 index 0000000000..1f8ff87443 --- /dev/null +++ b/docs/public/images/foundations/style-guide/public-form-1.svg @@ -0,0 +1,201 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/public/images/foundations/style-guide/public-form-2.svg b/docs/public/images/foundations/style-guide/public-form-2.svg new file mode 100644 index 0000000000..ff8575be11 --- /dev/null +++ b/docs/public/images/foundations/style-guide/public-form-2.svg @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/public/images/foundations/style-guide/reverse-version-logo.svg b/docs/public/images/foundations/style-guide/reverse-version-logo.svg new file mode 100644 index 0000000000..79b7b9926e --- /dev/null +++ b/docs/public/images/foundations/style-guide/reverse-version-logo.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/public/images/foundations/style-guide/the-blend.svg b/docs/public/images/foundations/style-guide/the-blend.svg new file mode 100644 index 0000000000..27c209660c --- /dev/null +++ b/docs/public/images/foundations/style-guide/the-blend.svg @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/public/images/foundations/style-guide/typography-type-specs.jpg b/docs/public/images/foundations/style-guide/typography-type-specs.jpg new file mode 100644 index 0000000000..dd04e52eff Binary files /dev/null and b/docs/public/images/foundations/style-guide/typography-type-specs.jpg differ diff --git a/docs/public/images/foundations/style-guide/white-version-logo.svg b/docs/public/images/foundations/style-guide/white-version-logo.svg new file mode 100644 index 0000000000..77a78ffa5a --- /dev/null +++ b/docs/public/images/foundations/style-guide/white-version-logo.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/docs/public/images/foundations/style-guide/workspace-1.svg b/docs/public/images/foundations/style-guide/workspace-1.svg new file mode 100644 index 0000000000..359052d48c --- /dev/null +++ b/docs/public/images/foundations/style-guide/workspace-1.svg @@ -0,0 +1,355 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/public/images/foundations/style-guide/workspace-2.svg b/docs/public/images/foundations/style-guide/workspace-2.svg new file mode 100644 index 0000000000..adad78c226 --- /dev/null +++ b/docs/public/images/foundations/style-guide/workspace-2.svg @@ -0,0 +1,469 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/public/images/foundations/style-guide/workspace-3.svg b/docs/public/images/foundations/style-guide/workspace-3.svg new file mode 100644 index 0000000000..fa7bfc12a4 --- /dev/null +++ b/docs/public/images/foundations/style-guide/workspace-3.svg @@ -0,0 +1,166 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/public/images/technologies.svg b/docs/public/images/technologies.svg new file mode 100644 index 0000000000..df3dc4683b --- /dev/null +++ b/docs/public/images/technologies.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/docs/public/og-image.png b/docs/public/og-image.png new file mode 100644 index 0000000000..3ba49481de Binary files /dev/null and b/docs/public/og-image.png differ diff --git a/docs/public/search-index.json b/docs/public/search-index.json index aab298aa2c..7978aa13a8 100644 --- a/docs/public/search-index.json +++ b/docs/public/search-index.json @@ -1,29 +1,2718 @@ [ { + "type": "component", + "id": "accordion", + "name": "Accordion", + "description": "Let users show and hide sections of related content on a page.", + "status": "stable", + "category": "content-layout", + "tags": [ + "expand", + "blind", + "collapse", + "content layout", + "expandable panel", + "expand" + ], + "slug": "accordion" + }, + { + "type": "component", + "id": "app-header", + "name": "Header", + "description": "Provide structure to help users find their way around the service.", + "status": "stable", + "category": "structure-and-navigation", + "tags": [ + "app header", + "global navigation", + "header", + "header and navigation", + "main navigation", + "navigation header", + "navigation menu", + "primary navigation", + "service header", + "structure and navigation", + "top navigation" + ], + "slug": "app-header" + }, + { + "type": "component", "id": "badge", - "title": "Badge", - "description": " Small labels which hold small amounts of information, system feedback, or states. ", - "content": "# Badge\n\nSmall labels which hold small amounts of information, system feedback, or states.\n", - "component": "badge", - "filePath": "docs/src/pages/components/badge/badge.mdx", - "urlPath": "components/badge", - "tags": [ - "filter chip", + "name": "Badge", + "description": "Small labels which hold small amounts of information, system feedback, or states.", + "status": "stable", + "category": "feedback-and-alerts", + "tags": [ + "feedback and alerts", + "label", + "lozenge", + "status", + "tag", + "token" + ], + "slug": "badge" + }, + { + "type": "component", + "id": "block", + "name": "Block", + "description": "Group components into a block with consistent space between.", + "status": "stable", + "category": "utilities", + "tags": [ + "utility" + ], + "slug": "block" + }, + { + "type": "component", + "id": "button-group", + "name": "Button group", + "description": "Display multiple related actions stacked or in a horizontal row to help with arrangement and spacing.", + "status": "stable", + "category": "inputs-and-actions", + "tags": [ + "action", + "inputs and actions", + "submit" + ], + "slug": "button-group" + }, + { + "type": "component", + "id": "button", + "name": "Button", + "description": "Carry out an important action or navigate to another page.", + "status": "stable", + "category": "inputs-and-actions", + "tags": [ + "action", + "inputs and actions", + "submit" + ], + "slug": "button" + }, + { + "type": "component", + "id": "callout", + "name": "Callout", + "description": "Communicate important information through a strong visual emphasis.", + "status": "stable", + "category": "feedback-and-alerts", + "tags": [ + "alert", + "feedback and alerts", + "show more information" + ], + "slug": "callout" + }, + { + "type": "component", + "id": "checkbox-list", + "name": "Checkbox list", + "description": "A multiple selection input.", + "status": "stable", + "category": "inputs-and-actions", + "tags": [ + "checkbox", + "input", + "inputs and actions" + ], + "slug": "checkbox-list" + }, + { + "type": "component", + "id": "checkbox", + "name": "Checkbox", + "description": "Let the user select one or more options.", + "status": "stable", + "category": "inputs-and-actions", + "tags": [ + "checklist", + "input", + "inputs and actions", + "options" + ], + "slug": "checkbox" + }, + { + "type": "component", + "id": "circular-progress", + "name": "Circular progress indicator", + "description": "Provide feedback of progress to users while loading.", + "status": "stable", + "category": "feedback-and-alerts", + "tags": [ + "feedback and alerts", + "loading", + "loader", + "loading indicator", + "progress spinner", + "process timer", + "spinner" + ], + "slug": "circular-progress" + }, + { + "type": "component", + "id": "container", + "name": "Container", + "description": "Group information, create hierarchy, and show related information.", + "status": "stable", + "category": "content-layout", + "tags": [ + "card", + "content", + "content layout", + "group", + "structure" + ], + "slug": "container" + }, + { + "type": "component", + "id": "data-grid", + "name": "Data Grid", + "description": "Advanced table with sorting and selection.", + "status": "stable", + "category": "content-layout", + "tags": [], + "slug": "data-grid" + }, + { + "type": "component", + "id": "date-picker", + "name": "Date picker", + "description": "Lets users select a date through a calendar without the need to manually type it in a field.", + "status": "stable", + "category": "inputs-and-actions", + "tags": [ + "calendar", + "date", + "date picker", + "inputs and actions", + "input" + ], + "slug": "date-picker" + }, + { + "type": "component", + "id": "details", + "name": "Details", + "description": "Let users reveal more detailed information when they need it.", + "status": "stable", + "category": "content-layout", + "tags": [ + "accordion details", + "additional info", + "additional information", + "content layout", + "detail accordion", + "details expander", + "details toggle", + "disclosure", + "expand", + "expander", + "expanding detail", + "expandable details", + "expandable help text", + "more info", + "see more", + "show more", + "show more information" + ], + "slug": "details" + }, + { + "type": "component", + "id": "divider", + "name": "Divider", + "description": "Indicate a separation of layout, or to distinguish large chunks of information on a page.", + "status": "stable", + "category": "utilities", + "tags": [ + "dividing line", + "page divider", + "utilities" + ], + "slug": "divider" + }, + { + "type": "component", + "id": "drawer", + "name": "Drawer", + "description": "A panel that slides in from the side of the screen to display additional content or actions without navigating away from the current view.", + "status": "stable", + "category": "content-layout", + "tags": [ + "sections", + "structure and navigation", + "sheet", + "sidesheet", + "sidepanel" + ], + "slug": "drawer" + }, + { + "type": "component", + "id": "dropdown", + "name": "Dropdown", + "description": "Present a list of options to the user to select from.", + "status": "stable", + "category": "inputs-and-actions", + "tags": [ + "inputs and actions", + "select", + "single select dropdown" + ], + "slug": "dropdown" + }, + { + "type": "component", + "id": "file-upload-input", + "name": "File uploader", + "description": "Help users select and upload a file.", + "status": "stable", + "category": "inputs-and-actions", + "tags": [ + "drag and drop", + "file upload", + "inputs and actions", + "uploader" + ], + "slug": "file-upload-input" + }, + { + "type": "component", + "id": "filter-chip", + "name": "Filter chip", + "description": "Allow the user to enter information, filter content, and make selections.", + "status": "stable", + "category": "feedback-and-alerts", + "tags": [ + "inputs and actions", + "pill" + ], + "slug": "filter-chip" + }, + { + "type": "component", + "id": "footer", + "name": "Footer", + "description": "Provides information related your service at the bottom of every page.", + "status": "stable", + "category": "structure-and-navigation", + "tags": [ + "page footer", + "structure and navigation" + ], + "slug": "footer" + }, + { + "type": "component", + "id": "form-item", + "name": "Form item", + "description": "Wraps an input control with a text label, requirement label, helper text, and error text.", + "status": "stable", + "category": "utilities", + "tags": [ + "form", + "input", + "inputs and actions" + ], + "slug": "form-item" + }, + { + "type": "component", + "id": "form-stepper", + "name": "Form stepper", + "description": "Provides a visual representation of a form through a series of steps.", + "status": "deprecated", + "category": "structure-and-navigation", + "tags": [ + "form stepper", + "horizontal step navigation", + "process overview", + "progress indicator", + "steps", + "structure and navigation", + "wizard" + ], + "slug": "form-stepper" + }, + { + "type": "component", + "id": "form", + "name": "Form", + "description": "Container for form inputs and validation.", + "status": "stable", + "category": "inputs-and-actions", + "tags": [], + "slug": "form" + }, + { + "type": "component", + "id": "grid", + "name": "Grid", + "description": "Arrange a number of components into a responsive grid pattern.", + "status": "stable", + "category": "utilities", + "tags": [ + "utilities" + ], + "slug": "grid" + }, + { + "type": "component", + "id": "hero-banner", + "name": "Hero banner", + "description": "A visual band of text, including an image and a call to action.", + "status": "stable", + "category": "content-layout", + "tags": [ + "promotion banner", + "hero panel", + "structure and navigation" + ], + "slug": "hero-banner" + }, + { + "type": "component", + "id": "icon-button", + "name": "Icon button", + "description": "A compact button with an icon and no text.", + "status": "stable", + "category": "inputs-and-actions", + "tags": [ + "action", + "inputs and actions", + "submit" + ], + "slug": "icon-button" + }, + { + "type": "component", + "id": "icon", + "name": "Icons", + "description": "A simple and universal graphic symbol representing an action, object, or concept to help guide the user.", + "status": "stable", + "category": "utilities", + "tags": [ + "utilities" + ], + "slug": "icon" + }, + { + "type": "component", + "id": "input", + "name": "Input", + "description": "A single-line field where users can input and edit text.", + "status": "stable", + "category": "inputs-and-actions", + "tags": [ + "inputs and actions", + "text field", + "text box", + "search", + "text input" + ], + "slug": "input" + }, + { + "type": "component", + "id": "linear-progress", + "name": "Linear progress indicator", + "description": "Provide visual feedback to users while loading.", + "status": "stable", + "category": "feedback-and-alerts", + "tags": [ + "progress", + "feedback and alerts", + "loading", + "loader", + "loading indicator", + "process timer" + ], + "slug": "linear-progress" + }, + { + "type": "component", + "id": "link-button", + "name": "Link Button", + "description": "Button styled as a link for secondary actions.", + "status": "stable", + "category": "inputs-and-actions", + "tags": [], + "slug": "link-button" + }, + { + "type": "component", + "id": "link", + "name": "Link", + "description": "Wraps an anchor element to add icons or margins.", + "status": "stable", + "category": "utilities", + "tags": [ + "utilities", + "text" + ], + "slug": "link" + }, + { + "type": "component", + "id": "menu-button", + "name": "Menu button", + "description": "A button with more than one action.", + "status": "stable", + "category": "inputs-and-actions", + "tags": [ + "menu button", + "split button" + ], + "slug": "menu-button" + }, + { + "type": "component", + "id": "microsite-header", + "name": "Microsite header", + "description": "Communicate what stage the service is at, connect to Alberta.ca, and gather feedback on your service.", + "status": "stable", + "category": "structure-and-navigation", + "tags": [ + "banner", + "development header", + "feedback bar", + "microheader", + "microsite banner", + "service header", + "service bar", + "service stage banner", + "service state banner", + "status bar", + "structure and navigation" + ], + "slug": "microsite-header" + }, + { + "type": "component", + "id": "modal", + "name": "Modal", + "description": "An overlay that appears in front of all other content, and requires a user to take an action before continuing.", + "status": "stable", + "category": "feedback-and-alerts", + "tags": [ + "feedback and alerts", + "popup modal", + "popup box", + "modal dialog", + "show more information" + ], + "slug": "modal" + }, + { + "type": "component", + "id": "notification", + "name": "Notification banner", + "description": "Display important page level information or notifications.", + "status": "stable", + "category": "feedback-and-alerts", + "tags": [ + "alert banner", + "banner", + "feedback and alerts" + ], + "slug": "notification" + }, + { + "type": "component", + "id": "page-block", + "name": "Page Block", + "description": "Full-width section with optional background.", + "status": "stable", + "category": "content-layout", + "tags": [], + "slug": "page-block" + }, + { + "type": "component", + "id": "pagination", + "name": "Pagination", + "description": "Help users navigation between multiple pages or screens as part of a set.", + "status": "stable", + "category": "structure-and-navigation", + "tags": [ + "pager", + "pagination controls", + "structure and navigation" + ], + "slug": "pagination" + }, + { + "type": "component", + "id": "popover", + "name": "Popover", + "description": "A small overlay that opens on demand, used in other components.", + "status": "stable", + "category": "content-layout", + "tags": [ + "content layout", + "show more information" + ], + "slug": "popover" + }, + { + "type": "component", + "id": "push-drawer", + "name": "Push Drawer", + "description": "A panel that pushes the main page content aside on desktop, falling back to an overlay drawer on smaller screens.", + "status": "stable", + "category": "content-layout", + "tags": [ + "sections", + "structure and navigation", + "drawer", + "sidebar", + "panel" + ], + "slug": "push-drawer" + }, + { + "type": "component", + "id": "radio-group", + "name": "Radio", + "description": "Allow users to select one option from a set.", + "status": "stable", + "category": "inputs-and-actions", + "tags": [ + "inputs and actions", + "option button", + "radio button group", + "radio buttons" + ], + "slug": "radio-group" + }, + { + "type": "component", + "id": "side-menu", + "name": "Side menu", + "description": "A side navigation that helps the user navigate between pages.", + "status": "stable", + "category": "structure-and-navigation", + "tags": [ + "secondary navigation", + "side nav", + "side bar", + "structure and navigation" + ], + "slug": "side-menu" + }, + { + "type": "component", + "id": "skeleton", + "name": "Skeleton loader", + "description": "Provide visual feedback to users while loading a content heavy page or page element.", + "status": "stable", + "category": "feedback-and-alerts", + "tags": [ + "content layout", + "loading" + ], + "slug": "skeleton" + }, + { + "type": "component", + "id": "spacer", + "name": "Spacer", + "description": "Negative area between the components and the interface.", + "status": "stable", + "category": "utilities", + "tags": [ + "gap", + "margin", + "padding", + "space", + "utilities" + ], + "slug": "spacer" + }, + { + "type": "component", + "id": "table", + "name": "Table", + "description": "A set of structured data that is easy for a user to scan, examine, and compare.", + "status": "stable", + "category": "content-layout", + "tags": [ + "data table", + "content layout", + "interactive table", + "sortable table" + ], + "slug": "table" + }, + { + "type": "component", + "id": "tabs", + "name": "Tabs", + "description": "Let users navigate between related sections of content, displaying one section at a time.", + "status": "stable", + "category": "structure-and-navigation", + "tags": [ + "sections", + "structure and navigation", + "tabbed interface" + ], + "slug": "tabs" + }, + { + "type": "component", + "id": "temporary-notification", + "name": "Temporary notification", + "description": "A notification that appears at the bottom of the screen.", + "status": "stable", + "category": "feedback-and-alerts", + "tags": [ + "snackbar", + "toast", + "temporary notification" + ], + "slug": "temporary-notification" + }, + { + "type": "component", + "id": "text-area", + "name": "Text area", + "description": "A multi-line field where users can input and edit text.", + "status": "stable", + "category": "inputs-and-actions", + "tags": [ + "inputs and actions", + "long answer input field", + "multi line text input", + "multiple text box", + "text box", + "text input area" + ], + "slug": "text-area" + }, + { + "type": "component", + "id": "text", + "name": "Text", + "description": "Provides consistent sizing, spacing, and colour to written content.", + "status": "stable", + "category": "content-layout", + "tags": [ + "text", + "body", + "copy" + ], + "slug": "text" + }, + { + "type": "component", + "id": "tooltip", + "name": "Tooltip", + "description": "A small popover that displays more information about an item.", + "status": "stable", + "category": "feedback-and-alerts", + "tags": [ + "feedback and alerts" + ], + "slug": "tooltip" + }, + { + "type": "component", + "id": "work-side-menu", + "name": "Work Side Menu", + "description": "Side menu variant for worker applications.", + "status": "stable", + "category": "structure-and-navigation", + "tags": [], + "slug": "work-side-menu" + }, + { + "type": "example", + "id": "add-a-filter-chip", + "title": "Add a filter chip", + "description": "Allow users to apply filters using selectable chips, which visually represent active filters and can be removed to update results dynamically.", + "status": "published", + "categories": [ + "inputs-and-actions" + ], + "tags": [ + "filtering", + "chips", + "dynamic" + ], + "components": [ + "filter-chip", + "button" + ], + "scale": "interaction", + "userType": "both", + "slug": "add-a-filter-chip" + }, + { + "type": "example", + "id": "add-a-record-using-a-drawer", + "title": "Add a record using a drawer", + "description": "Add a record using a drawer. The drawer slides in from the side to allow data entry without navigating away from the current view.", + "status": "published", + "categories": [ + "structure-and-navigation" + ], + "tags": [ + "drawer", + "forms", + "records", + "data-entry" + ], + "components": [ + "drawer", + "button", + "button-group", + "form-item", + "dropdown", + "input", + "radio-group", + "block" + ], + "scale": "task", + "userType": "worker", + "slug": "add-a-record-using-a-drawer" + }, + { + "type": "example", + "id": "add-and-edit-lots-of-filters", + "title": "Add and edit lots of filters", + "description": "Add and edit filters using a drawer. This pattern is useful when you have many filter options that would clutter the main interface.", + "status": "published", + "categories": [ + "structure-and-navigation" + ], + "tags": [ + "filtering", + "drawer", + "forms", + "data-management" + ], + "components": [ + "drawer", + "button", + "button-group", + "form-item", + "checkbox-list", + "checkbox", + "dropdown", + "radio-group" + ], + "scale": "task", + "userType": "worker", + "slug": "add-and-edit-lots-of-filters" + }, + { + "type": "example", + "id": "add-another-item-in-a-modal", + "title": "Add another item in a modal", + "description": "Add a new item within a modal window without navigating away from the current context.", + "status": "published", + "categories": [ + "inputs-and-actions" + ], + "tags": [ + "modal", + "forms", + "data-entry" + ], + "components": [ + "modal", + "button", + "button-group", + "form-item", + "dropdown", + "input", + "text-area" + ], + "scale": "task", + "userType": "both", + "slug": "add-another-item-in-a-modal" + }, + { + "type": "example", + "id": "ask-a-long-answer-question-with-a-maximum-word-count", + "title": "Ask a long answer question with a maximum word count", + "description": "Restrict a long answer input to a maximum number of words or characters.", + "status": "published", + "categories": [ + "forms" + ], + "tags": [ + "forms", + "text-area", + "validation", + "word-count" + ], + "components": [ + "form-item", + "text-area" + ], + "scale": "task", + "userType": "citizen", + "slug": "ask-a-long-answer-question-with-a-maximum-word-count" + }, + { + "type": "example", + "id": "ask-a-user-for-a-birthday", + "title": "Ask a user for a birthday", + "description": "Asks for a user's birthday using the date picker component.", + "status": "published", + "categories": [ + "forms" + ], + "tags": [ + "forms", + "date-input", + "ask-a-user-for" + ], + "components": [ + "form-item", + "date-picker" + ], + "scale": "task", + "userType": "citizen", + "slug": "ask-a-user-for-a-birthday" + }, + { + "type": "example", + "id": "ask-a-user-for-an-address", + "title": "Ask a user for an address", + "description": "Collect a complete mailing address from the user, including fields like street, city, and postal code.", + "status": "published", + "categories": [ + "forms" + ], + "tags": [ + "forms", + "address", + "location" + ], + "components": [ + "form-item", + "input", + "dropdown", + "block", + "button", + "button-group", + "text" + ], + "scale": "task", + "userType": "citizen", + "slug": "ask-a-user-for-an-address" + }, + { + "type": "example", + "id": "ask-a-user-for-an-indian-registration-number", + "title": "Ask a user for an Indian registration number", + "description": "Request a user's Indian registration number with appropriate validation and context.", + "status": "published", + "categories": [ + "forms" + ], + "tags": [ + "forms", + "identity", + "registration" + ], + "components": [ + "form-item", + "input", + "block" + ], + "scale": "task", + "userType": "citizen", + "slug": "ask-a-user-for-an-indian-registration-number" + }, + { + "type": "example", + "id": "ask-a-user-for-direct-deposit-information", + "title": "Ask a user for direct deposit information", + "description": "Gather banking details from users to enable direct deposit, including account number and financial institution information.", + "status": "published", + "categories": [ + "forms" + ], + "tags": [ + "forms", + "banking", + "financial" + ], + "components": [ + "form-item", + "input", + "details", + "text" + ], + "scale": "task", + "userType": "citizen", + "slug": "ask-a-user-for-direct-deposit-information" + }, + { + "type": "example", + "id": "ask-a-user-for-dollar-amounts", + "title": "Ask a user for dollar amounts", + "description": "Prompt users to enter monetary values using a consistent input format that supports validation and currency symbols.", + "status": "published", + "categories": [ + "forms" + ], + "tags": [ + "forms", + "currency", + "financial" + ], + "components": [ + "form-item", + "input" + ], + "scale": "task", + "userType": "citizen", + "slug": "ask-a-user-for-dollar-amounts" + }, + { + "type": "example", + "id": "ask-a-user-one-question-at-a-time", + "title": "Ask a user one question at a time", + "description": "Ask a user one question at a time.", + "status": "published", + "categories": [ + "forms" + ], + "tags": [ + "forms", + "questions", + "public-form" + ], + "components": [ + "form-item", + "radio-group", + "radio-item", + "button" + ], + "scale": "page", + "userType": "citizen", + "slug": "ask-a-user-one-question-at-a-time" + }, + { + "type": "example", + "id": "basic-page-layout", + "title": "Basic page layout", + "description": "A basic page template to use as a starting point.", + "status": "published", + "categories": [ + "content-layout" + ], + "tags": [ + "layout", + "page-structure", + "template" + ], + "components": [ + "app-header", + "footer", + "page-block", + "skeleton", + "grid" + ], + "scale": "page", + "userType": "both", + "slug": "basic-page-layout" + }, + { + "type": "example", + "id": "button-with-icon", + "title": "Button with Icon", + "description": "Shows how to add leading or trailing icons to buttons for enhanced visual communication.", + "status": "published", + "categories": [ + "inputs-and-actions" + ], + "tags": [ "icons", + "buttons", + "actions" + ], + "components": [ + "button", + "button-group", + "icon" + ], + "scale": "interaction", + "userType": "both", + "slug": "button-with-icon" + }, + { + "type": "example", + "id": "card-grid", + "title": "Card grid", + "description": "Display multiple cards in a grid layout, each containing related content or actions.", + "status": "published", + "categories": [ + "content-layout" + ], + "tags": [ + "cards", + "grid", + "navigation", + "dashboard" + ], + "components": [ + "container", + "grid", + "link", + "text" + ], + "scale": "task", + "userType": "both", + "slug": "card-grid" + }, + { + "type": "example", + "id": "card-view-of-case-files", + "title": "Card view of case files", + "description": "Present a visual overview of individual case files in a card format for scanning and access.", + "status": "published", + "categories": [ + "content-layout" + ], + "tags": [ + "cards", + "case-management", + "status", + "list" + ], + "components": [ + "container", + "block", + "badge", + "button" + ], + "scale": "task", + "userType": "worker", + "slug": "card-view-of-case-files" + }, + { + "type": "example", + "id": "communicate-a-future-service-outage", + "title": "Communicate a future service outage", + "description": "Display a clear message to inform users about an upcoming service outage, including the date, time, and expected impact on service availability.", + "status": "published", + "categories": [ + "feedback-and-alerts" + ], + "tags": [ + "notification", + "maintenance", + "alerts", + "system-status" + ], + "components": [ + "notification" + ], + "scale": "task", + "userType": "both", + "slug": "communicate-a-future-service-outage" + }, + { + "type": "example", + "id": "confirm-a-change", + "title": "Confirm a change", + "description": "Ask the user to confirm a proposed change before it is applied.", + "status": "published", + "categories": [ + "inputs-and-actions" + ], + "tags": [ + "modal", + "confirmation", + "forms", + "changes" + ], + "components": [ + "modal", + "button", + "button-group", + "container", + "form-item", + "date-picker" + ], + "scale": "task", + "userType": "both", + "slug": "confirm-a-change" + }, + { + "type": "example", + "id": "confirm-a-destructive-action", + "title": "Confirm a destructive action", + "description": "Confirm a destructive action like deletion to prevent accidental data loss.", + "status": "published", + "categories": [ + "feedback-and-alerts" + ], + "tags": [ + "modal", + "confirmation", + "delete", + "destructive" + ], + "components": [ + "modal", + "button", + "button-group" + ], + "scale": "task", + "userType": "both", + "slug": "confirm-a-destructive-action" + }, + { + "type": "example", + "id": "confirm-before-navigating-away", + "title": "Confirm before navigating away", + "description": "Prompt the user in a modal before navigating to a new route to preserve context.", + "status": "published", + "categories": [ + "feedback-and-alerts" + ], + "tags": [ + "modal", + "navigation", + "confirmation", + "routing" + ], + "components": [ + "modal", + "button", + "button-group" + ], + "scale": "task", + "userType": "worker", + "slug": "confirm-before-navigating-away" + }, + { + "type": "example", + "id": "confirm-that-an-application-was-submitted", + "title": "Confirm that an application was submitted", + "description": "Display a confirmation screen to indicate successful application submission.", + "status": "published", + "categories": [ + "feedback-and-alerts" + ], + "tags": [ + "confirmation", + "success", + "callout", + "application" + ], + "components": [ + "callout", + "button", + "button-group" + ], + "scale": "page", + "userType": "citizen", + "slug": "confirm-that-an-application-was-submitted" + }, + { + "type": "example", + "id": "copy-to-clipboard", + "title": "Copy to clipboard", + "description": "Allow users to quickly copy text or data to their clipboard with a single click.", + "status": "published", + "categories": [ + "inputs-and-actions" + ], + "tags": [ + "clipboard", + "copy", + "tooltip", + "icon-button" + ], + "components": [ + "block", + "icon-button", + "tooltip" + ], + "scale": "interaction", + "userType": "both", + "slug": "copy-to-clipboard" + }, + { + "type": "example", + "id": "disabled-button-with-a-required-field", + "title": "Disabled button with a required field", + "description": "Disable a submit button until required form fields are completed.", + "status": "published", + "categories": [ + "inputs-and-actions" + ], + "tags": [ + "button", + "form", + "validation", + "disabled", + "required" + ], + "components": [ + "button", + "button-group", + "form-item", + "input" + ], + "scale": "interaction", + "userType": "both", + "slug": "disabled-button-with-a-required-field" + }, + { + "type": "example", + "id": "display-numbers-in-a-table-so-they-can-be-scanned-easily", + "title": "Display numbers in a table so they can be scanned easily", + "description": "Right-align numeric columns in tables to make them easier to scan and compare.", + "status": "published", + "categories": [ + "content-layout" + ], + "tags": [ + "table", + "numbers", + "data", + "alignment", + "scanning" + ], + "components": [ "table" - ] + ], + "scale": "task", + "userType": "worker", + "slug": "display-numbers-in-a-table-so-they-can-be-scanned-easily" }, { - "id": "accordion", - "title": "Accordion", - "description": "Some additional description for the component", - "content": "# Accordion\nAccordion containers enable multiple content sections to be displayed in a limited space and collapsed or expanded by the user. You can create hierarchy of information by hiding secondary content inside collapsed expand containers.\n\n## Examples\n\n\n
\n
Name
\n
Joan Smith
\n
Contact preference
\n
Text message
\n
\n
\n\n### Close all\n\nconst AccordionCloseAllExample => () {\n const [expandedAll, setExpandedAll] = useState(false);\n const [expandedList, setExpandedList] = useState([]);\n useEffect(() => {\n setExpandedAll(expandedList.length === 4);\n }, [expandedList.length]);\n\n const expandOrCollapseAll = () => {\n setExpandedAll((prev) => {\n const newState = !prev;\n setExpandedList(newState ? [1, 2, 3, 4] : []);\n return newState;\n });\n };\n\n const updateAccordion = (order: number, isOpen: boolean) => {\n setExpandedList((prev) => {\n if (isOpen) {\n return prev.includes(order) ? prev: [...prev, order];\n }\n return prev.filter((item) => item !== order);\n });\n\n return (\n expandOrCollapseAll()}>\n {expandedAll ? \"Hide all sections\" : \"Show all sections\"}\n \n\n updateAccordion(1, open)}>\n To create an account you will need to contact your office admin.\n \n\n updateAccordion(2, open)}>\n You will need to verify your identity through our two factor authentication in addition to the digital signature.\n \n\n updateAccordion(3, open)}>\n Yes, you can see the status of your application on the main service dashboard when you login. You will receive updates and notifications in your email as your request progresses.\n \n\n updateAccordion(4, open)}>\n Yes, our digital service is designed with accessibility in mind. More information on accessibility.\n \n )\n}\n\n\n", - "component": "accordion", - "filePath": "docs/src/pages/components/accordion/accordion.mdx", - "urlPath": "components/accordion", + "type": "example", + "id": "display-user-information", + "title": "Display user information", + "description": "Display user contact information and related data using containers with clear visual hierarchy.", + "status": "published", + "categories": [ + "content-layout" + ], + "tags": [ + "container", + "user-info", + "contact", + "profile", + "table" + ], + "components": [ + "container", + "block", + "button", + "table", + "text" + ], + "scale": "task", + "userType": "worker", + "slug": "display-user-information" + }, + { + "type": "example", + "id": "dynamically-add-an-item-to-a-dropdown-list", + "title": "Dynamically add an item to a dropdown list", + "description": "Allow users to add new items to a dropdown list dynamically.", + "status": "published", + "categories": [ + "inputs-and-actions" + ], + "tags": [ + "dropdown", + "dynamic", + "form", + "input", + "radio" + ], + "components": [ + "dropdown", + "dropdown-item", + "form-item", + "input", + "button" + ], + "scale": "interaction", + "userType": "both", + "slug": "dynamically-add-an-item-to-a-dropdown-list" + }, + { + "type": "example", + "id": "dynamically-change-items-in-a-dropdown-list", + "title": "Dynamically change items in a dropdown list", + "description": "Update dropdown options based on the selection in another dropdown (cascading/dependent dropdowns).", + "status": "published", + "categories": [ + "inputs-and-actions" + ], + "tags": [ + "dropdown", + "dynamic", + "cascading", + "dependent", + "form" + ], + "components": [ + "dropdown", + "dropdown-item", + "form-item" + ], + "scale": "interaction", + "userType": "both", + "slug": "dynamically-change-items-in-a-dropdown-list" + }, + { + "type": "example", + "id": "expand-or-collapse-part-of-a-form", + "title": "Expand or collapse part of a form", + "description": "Use accordions to organize form review sections that users can expand or collapse.", + "status": "published", + "categories": [ + "forms" + ], + "tags": [ + "accordion", + "form", + "review", + "collapsible", + "badge" + ], + "components": [ + "accordion", + "badge" + ], + "scale": "task", + "userType": "both", + "slug": "expand-or-collapse-part-of-a-form" + }, + { + "type": "example", + "id": "filter-a-list-using-a-push-drawer", + "title": "Filter a list using a push drawer", + "description": "Use a push drawer to house filters alongside a list of records. The push drawer keeps the filter controls accessible while users can still see and interact with the filtered results.", + "status": "published", + "categories": [ + "content-layout" + ], + "tags": [ + "push-drawer", + "filters", + "list", + "search" + ], + "components": [ + "push-drawer", + "button", + "table", + "badge", + "checkbox", + "checkbox-list", + "dropdown", + "form-item" + ], + "scale": "task", + "userType": "worker", + "slug": "filter-a-list-using-a-push-drawer" + }, + { + "type": "example", + "id": "filter-data-in-a-table", + "title": "Filter data in a table", + "description": "Enable users to filter table data using search input and filter chips.", + "status": "published", + "categories": [ + "structure-and-navigation" + ], + "tags": [ + "table", + "filter", + "search", + "chips", + "data" + ], + "components": [ + "table", + "filter-chip", + "input", + "button", + "block", + "form-item", + "badge", + "text" + ], + "scale": "task", + "userType": "worker", + "slug": "filter-data-in-a-table" + }, + { + "type": "example", + "id": "form-stepper-with-controlled-navigation", + "title": "Form stepper with controlled navigation", + "description": "Create a multi-step form with controlled navigation using Previous/Next buttons.", + "status": "published", + "categories": [ + "forms" + ], + "tags": [ + "stepper", + "form", + "wizard", + "multi-step", + "navigation", + "pages" + ], + "components": [ + "form-stepper", + "form-step", + "pages", + "button", + "skeleton", + "spacer" + ], + "scale": "task", + "userType": "both", + "slug": "form-stepper-with-controlled-navigation" + }, + { + "type": "example", + "id": "give-background-information-before-asking-a-question", + "title": "Give background information before asking a question", + "description": "Provide explanatory context before asking a question to help users understand what is being asked.", + "status": "published", + "categories": [ + "forms" + ], + "tags": [ + "form", + "question", + "context", + "radio", + "citizen-facing" + ], + "components": [ + "form-item", + "radio-group", + "radio-item", + "button" + ], + "scale": "task", + "userType": "citizen", + "slug": "give-background-information-before-asking-a-question" + }, + { + "type": "example", + "id": "give-context-before-asking-a-long-answer-question", + "title": "Give context before asking a long answer question", + "description": "Provide context and guidance before a long-answer text field to help users provide relevant information.", + "status": "published", + "categories": [ + "forms" + ], + "tags": [ + "form", + "text-area", + "question", + "context", + "details", + "citizen-facing" + ], + "components": [ + "text-area", + "form-item", + "details", + "button", + "button-group" + ], + "scale": "task", + "userType": "citizen", + "slug": "give-context-before-asking-a-long-answer-question" + }, + { + "type": "example", + "id": "group-related-questions-together-on-a-question-page", + "title": "Group related questions together on a question page", + "description": "Group related form fields together on a single page to collect address information from users, making it easier to complete logically connected questions at once.", + "status": "published", + "categories": [ + "forms" + ], + "tags": [ + "forms", + "address", + "question-page" + ], + "components": [ + "form-item", + "input", + "dropdown", + "dropdown-item", + "button" + ], + "scale": "page", + "userType": "citizen", + "slug": "group-related-questions-together-on-a-question-page" + }, + { + "type": "example", + "id": "header-with-navigation", + "title": "Header with navigation", + "description": "An application header with navigation links, grouped menu items, and a user account menu.", + "status": "published", + "categories": [ + "structure-and-navigation" + ], + "tags": [ + "header", + "navigation", + "menu" + ], + "components": [ + "app-header", + "app-header-menu" + ], + "scale": "task", + "userType": "both", + "slug": "header-with-navigation" + }, + { + "type": "example", + "id": "hero-banner-with-actions", + "title": "Hero banner with actions", + "description": "Create a hero banner with a call-to-action button to guide users toward the primary task on a landing page.", + "status": "published", + "categories": [ + "content-layout" + ], + "tags": [ + "hero", + "banner", + "cta", + "landing" + ], + "components": [ + "hero-banner", + "button" + ], + "scale": "task", + "userType": "both", + "slug": "hero-banner-with-actions" + }, + { + "type": "example", + "id": "hide-and-show-many-sections-of-information", + "title": "Hide and show many sections of information", + "description": "Allow users to expand and collapse multiple accordion sections, with a button to show or hide all sections at once.", + "status": "published", + "categories": [ + "content-layout" + ], + "tags": [ + "accordion", + "expand", + "collapse", + "faq" + ], + "components": [ + "accordion", + "button" + ], + "scale": "task", + "userType": "both", + "slug": "hide-and-show-many-sections-of-information" + }, + { + "type": "example", + "id": "include-a-link-in-the-helper-text-of-an-option", + "title": "Include a link in the helper text of an option", + "description": "Add links within the description text of checkbox options to provide additional context or resources while users are making selections.", + "status": "published", + "categories": [ + "forms" + ], + "tags": [ + "checkbox", + "helper-text", + "links", + "forms" + ], + "components": [ + "checkbox", + "form-item" + ], + "scale": "interaction", + "userType": "both", + "slug": "include-a-link-in-the-helper-text-of-an-option" + }, + { + "type": "example", + "id": "include-descriptions-for-items-in-a-checkbox-list", + "title": "Include descriptions for items in a checkbox list", + "description": "Add descriptive text to radio button options to help users understand the implications of each choice.", + "status": "published", + "categories": [ + "forms" + ], + "tags": [ + "radio", + "descriptions", + "forms" + ], + "components": [ + "form-item", + "radio-group", + "radio-item" + ], + "scale": "task", + "userType": "both", + "slug": "include-descriptions-for-items-in-a-checkbox-list" + }, + { + "type": "example", + "id": "link-the-user-to-give-feedback-to-the-service", + "title": "Link the user to give feedback to the service", + "description": "Use the microsite header's feedback functionality to collect user feedback during alpha or beta phases of a service.", + "status": "published", + "categories": [ + "feedback-and-alerts" + ], + "tags": [ + "feedback", + "microsite-header", + "alpha", + "beta" + ], + "components": [ + "microsite-header" + ], + "scale": "interaction", + "userType": "citizen", + "slug": "link-the-user-to-give-feedback-to-the-service" + }, + { + "type": "example", + "id": "link-to-an-external-page", + "title": "Link to an external page", + "description": "Use an external link indicator to show users when a link will take them to a different website.", + "status": "published", + "categories": [ + "inputs-and-actions" + ], + "tags": [ + "link", + "external", + "navigation" + ], + "components": [ + "link" + ], + "scale": "interaction", + "userType": "both", + "slug": "link-to-an-external-page" + }, + { + "type": "example", + "id": "public-form", + "title": "Public form", + "description": "The public form pattern provides a structure for citizen-facing form experiences, emphasizing simplicity, accessibility, and low cognitive load.", + "status": "published", + "categories": [ + "forms" + ], + "tags": [ + "form", + "public", + "citizen", + "pattern" + ], + "components": [], + "scale": "service", + "userType": "citizen", + "slug": "public-form" + }, + { + "type": "example", + "id": "question-page", + "title": "Question page", + "description": "A question page pattern that presents one question at a time to help users focus, reduce cognitive load, and navigate complex forms more easily.", + "status": "published", + "categories": [ + "forms" + ], + "tags": [ + "forms", + "question", + "wizard", + "one-thing-per-page" + ], + "components": [ + "form-item", + "input", + "button", + "button-group" + ], + "scale": "page", + "userType": "citizen", + "slug": "question-page" + }, + { + "type": "example", + "id": "remove-a-filter", + "title": "Remove a filter", + "description": "Allow users to remove active filters by clicking on filter chips, providing clear visual feedback and dynamic updates to filtered results.", + "status": "published", + "categories": [ + "inputs-and-actions" + ], + "tags": [ + "filtering", + "chips", + "remove" + ], + "components": [ + "filter-chip" + ], + "scale": "interaction", + "userType": "both", + "slug": "remove-a-filter" + }, + { + "type": "example", + "id": "require-user-action-before-continuing", + "title": "Require user action before continuing", + "description": "Use a modal dialog to require users to confirm an action before proceeding, especially for irreversible operations or important decision points.", + "status": "published", + "categories": [ + "forms" + ], + "tags": [ + "modal", + "confirmation", + "warning", + "action" + ], + "components": [ + "modal", + "button", + "button-group" + ], + "scale": "task", + "userType": "both", + "slug": "require-user-action-before-continuing" + }, + { + "type": "example", + "id": "reset-date-picker-field", + "title": "Reset date picker field", + "description": "Allow users to programmatically set or clear a date picker field value, useful for reset functionality or setting default dates.", + "status": "published", + "categories": [ + "inputs-and-actions" + ], + "tags": [ + "date-picker", + "form", + "reset", + "clear" + ], + "components": [ + "date-picker", + "form-item", + "button", + "button-group" + ], + "scale": "interaction", + "userType": "both", + "slug": "reset-date-picker-field" + }, + { + "type": "example", + "id": "result-page", + "title": "Result page", + "description": "A result page shown after form submission to confirm success, provide next steps, and offer relevant contact information.", + "status": "published", + "categories": [ + "forms" + ], + "tags": [ + "confirmation", + "success", + "completion", + "forms" + ], + "components": [ + "block", + "callout" + ], + "scale": "page", + "userType": "citizen", + "slug": "result-page" + }, + { + "type": "example", + "id": "reveal-input-based-on-a-selection", + "title": "Reveal input based on a selection", + "description": "Progressively reveal additional form fields based on user selections, reducing visual complexity while gathering necessary information.", + "status": "published", + "categories": [ + "forms" + ], + "tags": [ + "conditional", + "reveal", + "radio", + "checkbox", + "progressive-disclosure" + ], + "components": [ + "radio-group", + "radio-item", + "checkbox", + "form-item", + "input" + ], + "scale": "task", + "userType": "both", + "slug": "reveal-input-based-on-a-selection" + }, + { + "type": "example", + "id": "review-and-action", + "title": "Review and action", + "description": "A side-by-side layout for workers to review case details while taking an action, commonly used in case management and approval workflows.", + "status": "published", + "categories": [ + "structure-and-navigation" + ], + "tags": [ + "review", + "action", + "container", + "case-management", + "worker" + ], + "components": [ + "container", + "grid", + "block", + "form-item", + "radio-group", + "dropdown", + "text-area", + "button" + ], + "scale": "task", + "userType": "worker", + "slug": "review-and-action" + }, + { + "type": "example", + "id": "review-page", + "title": "Review page", + "description": "A review page where users can check their answers before submitting a form, with options to change individual responses.", + "status": "published", + "categories": [ + "forms" + ], + "tags": [ + "review", + "check-answers", + "forms", + "submission" + ], + "components": [ + "table", + "button", + "button-group" + ], + "scale": "page", + "userType": "citizen", + "slug": "review-page" + }, + { + "type": "example", + "id": "search", + "title": "Search", + "description": "A search input pattern with a search icon and button for users to find content or filter results.", + "status": "published", + "categories": [ + "inputs-and-actions" + ], + "tags": [ + "search", + "input", + "filtering" + ], + "components": [ + "input", + "button", + "block", + "form-item" + ], + "scale": "task", + "userType": "both", + "slug": "search" + }, + { + "type": "example", + "id": "select-one-or-more-from-a-list-of-options", + "title": "Select one or more from a list of options", + "description": "Use checkboxes to let users select one or more options from a list when multiple selections are valid.", + "status": "published", + "categories": [ + "forms" + ], + "tags": [ + "checkbox", + "selection", + "multiple", + "form" + ], + "components": [ + "checkbox", + "form-item" + ], + "scale": "task", + "userType": "both", + "slug": "select-one-or-more-from-a-list-of-options" + }, + { + "type": "example", + "id": "set-a-max-width-on-a-long-radio-item", + "title": "Set a max width on a long radio item", + "description": "Set a max width on a long radio item to control line wrapping.", + "status": "published", + "categories": [ + "inputs-and-actions" + ], + "tags": [ + "radio", + "forms", + "layout" + ], + "components": [ + "form-item", + "radio-group", + "radio-item" + ], + "scale": "interaction", + "userType": "both", + "slug": "set-a-max-width-on-a-long-radio-item" + }, + { + "type": "example", + "id": "set-a-specific-tab-to-be-active", + "title": "Set a specific tab to be active", + "description": "Set a specific tab to be active on page load using the initialTab property.", + "status": "published", + "categories": [ + "inputs-and-actions" + ], + "tags": [ + "tabs", + "navigation", + "tables" + ], + "components": [ + "tabs", + "tab", + "table", + "badge", + "button" + ], + "scale": "interaction", + "userType": "both", + "slug": "set-a-specific-tab-to-be-active" + }, + { + "type": "example", + "id": "set-the-status-of-step-on-a-form-stepper", + "title": "Set the status of step on a form stepper", + "description": "Set the status of each step on a form stepper to indicate completion progress.", + "status": "published", + "categories": [ + "inputs-and-actions" + ], + "tags": [ + "forms", + "stepper", + "multi-step", + "navigation" + ], + "components": [ + "form-stepper", + "form-step", + "pages", + "button" + ], + "scale": "task", + "userType": "both", + "slug": "set-the-status-of-step-on-a-form-stepper" + }, + { + "type": "example", + "id": "show-a-label-on-an-icon-only-button", + "title": "Show a label on an icon only button", + "description": "Show a label on an icon-only button using a tooltip to improve discoverability.", + "status": "published", + "categories": [ + "inputs-and-actions" + ], + "tags": [ + "buttons", + "icons", + "accessibility", + "tooltip" + ], + "components": [ + "icon-button", + "tooltip", + "button-group" + ], + "scale": "interaction", + "userType": "both", + "slug": "show-a-label-on-an-icon-only-button" + }, + { + "type": "example", + "id": "show-a-list-to-help-answer-a-question", + "title": "Show a list to help answer a question", + "description": "Show a list to help answer a question using an expandable details component.", + "status": "published", + "categories": [ + "forms" + ], + "tags": [ + "forms", + "details", + "guidance", + "help" + ], + "components": [ + "form-item", + "radio-group", + "radio-item", + "details", + "block" + ], + "scale": "task", + "userType": "citizen", + "slug": "show-a-list-to-help-answer-a-question" + }, + { + "type": "example", + "id": "show-a-notification", + "title": "Show a notification", + "description": "Show a temporary notification to confirm an action was completed successfully.", + "status": "published", + "categories": [ + "feedback-and-alerts" + ], + "tags": [ + "notification", + "feedback", + "success", + "toast" + ], + "components": [ + "temporary-notification", + "button" + ], + "scale": "interaction", + "userType": "both", + "slug": "show-a-notification" + }, + { + "type": "example", + "id": "show-a-notification-with-an-action", + "title": "Show a notification with an action", + "description": "Show a temporary notification with an action button for user interaction.", + "status": "published", + "categories": [ + "feedback-and-alerts" + ], + "tags": [ + "notification", + "feedback", + "action", + "toast" + ], + "components": [ + "temporary-notification", + "button" + ], + "scale": "interaction", + "userType": "both", + "slug": "show-a-notification-with-an-action" + }, + { + "type": "example", + "id": "show-a-section-title-on-a-question-page", + "title": "Show a section title on a question page", + "description": "Show a section title on a question page to help users understand which part of the form they are completing.", + "status": "published", + "categories": [ + "forms" + ], + "tags": [ + "forms", + "questions", + "navigation", + "section" + ], + "components": [ + "form-item", + "radio-group", + "radio-item", + "button" + ], + "scale": "task", + "userType": "citizen", + "slug": "show-a-section-title-on-a-question-page" + }, + { + "type": "example", + "id": "show-a-simple-progress-indicator-on-a-question-page", + "title": "Show a simple progress indicator on a question page", + "description": "Show a simple progress indicator on a question page to help users understand their progress through the form.", + "status": "published", + "categories": [ + "forms" + ], + "tags": [ + "forms", + "questions", + "progress", + "navigation" + ], + "components": [ + "form-item", + "radio-group", + "radio-item", + "button" + ], + "scale": "task", + "userType": "citizen", + "slug": "show-a-simple-progress-indicator-on-a-question-page" + }, + { + "type": "example", + "id": "show-a-simple-progress-indicator-on-a-question-page-with-multiple-questions", + "title": "Show a simple progress indicator on a question page with multiple questions", + "description": "Show a simple progress indicator on a question page when grouping multiple related questions together.", + "status": "published", + "categories": [ + "forms" + ], + "tags": [ + "forms", + "questions", + "progress", + "navigation", + "multi-question" + ], + "components": [ + "form-item", + "input", + "button" + ], + "scale": "task", + "userType": "citizen", + "slug": "show-a-simple-progress-indicator-on-a-question-page-with-multiple-questions" + }, + { + "type": "example", + "id": "show-a-user-progress", + "title": "Show a user progress", + "description": "Display progress feedback during long-running operations like downloads, showing percentage completion with the ability to cancel and receive success confirmation.", + "status": "published", + "categories": [ + "feedback-and-alerts" + ], + "tags": [ + "progress", + "notification", + "download", + "feedback" + ], + "components": [ + "temporary-notification", + "button" + ], + "scale": "task", + "userType": "both", + "slug": "show-a-user-progress" + }, + { + "type": "example", + "id": "show-a-user-progress-when-the-time-is-unknown", + "title": "Show a user progress when the time is unknown", + "description": "Display indeterminate progress for operations where completion time cannot be estimated, such as complex searches or external system queries.", + "status": "published", + "categories": [ + "feedback-and-alerts" + ], + "tags": [ + "progress", + "notification", + "indeterminate", + "search", + "feedback" + ], + "components": [ + "temporary-notification", + "button" + ], + "scale": "task", + "userType": "both", + "slug": "show-a-user-progress-when-the-time-is-unknown" + }, + { + "type": "example", + "id": "show-different-views-of-data-in-a-table", + "title": "Show different views of data in a table", + "description": "Use tabs to organize table data into different views based on status or category, showing counts in each tab to help workers quickly navigate to relevant items.", + "status": "published", + "categories": [ + "content-layout" + ], + "tags": [ + "table", + "tabs", + "filtering", + "status", + "data-views" + ], + "components": [ + "tabs", + "tab", + "table", + "badge", + "button" + ], + "scale": "task", + "userType": "worker", + "slug": "show-different-views-of-data-in-a-table" + }, + { + "type": "example", + "id": "show-full-date-in-a-tooltip", + "title": "Show full date in a tooltip", + "description": "Display relative time (like \"4 hours ago\") while providing the full date and time on hover via tooltip for users who need exact timestamps.", + "status": "published", + "categories": [ + "inputs-and-actions" + ], "tags": [ + "tooltip", + "date", + "relative-time", + "hover" + ], + "components": [ + "tooltip", + "container" + ], + "scale": "interaction", + "userType": "both", + "slug": "show-full-date-in-a-tooltip" + }, + { + "type": "example", + "id": "show-links-to-navigation-items", + "title": "Show links to navigation items", + "description": "Use the app footer to display comprehensive navigation links organized into sections, along with meta links for common utilities like privacy and accessibility.", + "status": "published", + "categories": [ + "structure-and-navigation" + ], + "tags": [ + "footer", + "navigation", + "links", + "sitemap" + ], + "components": [ + "footer", + "footer-nav-section", + "footer-meta-section" + ], + "scale": "task", + "userType": "both", + "slug": "show-links-to-navigation-items" + }, + { + "type": "example", + "id": "show-more-information-to-help-answer-a-question", + "title": "Show more information to help answer a question", + "description": "Use the Details component to provide optional contextual help that explains why a question is being asked, helping users understand the purpose without cluttering the main form.", + "status": "published", + "categories": [ + "forms" + ], + "tags": [ + "form", + "details", + "help", + "question-page", + "expandable" + ], + "components": [ "details", - "tabs" - ] + "form-item", + "radio-group", + "radio-item", + "button" + ], + "scale": "task", + "userType": "citizen", + "slug": "show-more-information-to-help-answer-a-question" + }, + { + "type": "example", + "id": "show-multiple-actions-in-a-compact-table", + "title": "Show multiple actions in a compact table", + "description": "Use icon buttons to provide multiple row actions in tables where space is limited, keeping the interface compact while maintaining accessibility through aria labels.", + "status": "published", + "categories": [ + "content-layout" + ], + "tags": [ + "table", + "icon-button", + "actions", + "compact", + "worker-ui" + ], + "components": [ + "table", + "icon-button", + "badge", + "block" + ], + "scale": "task", + "userType": "worker", + "slug": "show-multiple-actions-in-a-compact-table" + }, + { + "type": "example", + "id": "show-multiple-tags-together", + "title": "Show multiple tags together", + "description": "Display multiple badges together using GoabBlock with tight spacing to show multiple statuses or categories for a single item.", + "status": "published", + "categories": [ + "inputs-and-actions" + ], + "tags": [ + "badge", + "tags", + "status", + "grouping" + ], + "components": [ + "badge", + "block" + ], + "scale": "interaction", + "userType": "both", + "slug": "show-multiple-tags-together" + }, + { + "type": "example", + "id": "show-number-of-results-per-page", + "title": "Show number of results per page", + "description": "Combine pagination with a dropdown selector to let users control how many results appear per page, improving data browsing for different use cases.", + "status": "published", + "categories": [ + "content-layout" + ], + "tags": [ + "pagination", + "table", + "dropdown", + "results", + "per-page" + ], + "components": [ + "pagination", + "dropdown", + "dropdown-item", + "table", + "block", + "spacer" + ], + "scale": "task", + "userType": "both", + "slug": "show-number-of-results-per-page" + }, + { + "type": "example", + "id": "show-quick-links", + "title": "Show quick links", + "description": "Use the app footer meta section to display essential quick links like feedback, accessibility, privacy, and contact information without the full navigation structure.", + "status": "published", + "categories": [ + "structure-and-navigation" + ], + "tags": [ + "footer", + "navigation", + "meta-links", + "quick-access" + ], + "components": [ + "footer", + "footer-meta-section" + ], + "scale": "task", + "userType": "both", + "slug": "show-quick-links" + }, + { + "type": "example", + "id": "show-status-in-a-table", + "title": "Show status in a table", + "description": "Display status information within table rows using badges to provide clear visual indicators of item states like pending, complete, failed, or in progress.", + "status": "published", + "categories": [ + "content-layout" + ], + "tags": [ + "table", + "badge", + "status" + ], + "components": [ + "table", + "badge", + "button" + ], + "scale": "task", + "userType": "worker", + "slug": "show-status-in-a-table" + }, + { + "type": "example", + "id": "show-status-on-a-card", + "title": "Show status on a card", + "description": "Display status indicators on cards using badges in the actions slot, allowing workers to quickly see the priority or state of each item.", + "status": "published", + "categories": [ + "content-layout" + ], + "tags": [ + "card", + "container", + "badge", + "status" + ], + "components": [ + "container", + "badge" + ], + "scale": "task", + "userType": "worker", + "slug": "show-status-on-a-card" + }, + { + "type": "example", + "id": "show-version-number", + "title": "Show version number", + "description": "Display version information in the microsite header using the version slot, allowing custom formatting and styling of version text.", + "status": "published", + "categories": [ + "inputs-and-actions" + ], + "tags": [ + "microsite-header", + "version", + "alpha", + "beta" + ], + "components": [ + "microsite-header" + ], + "scale": "interaction", + "userType": "both", + "slug": "show-version-number" + }, + { + "type": "example", + "id": "slotted-error-text-in-a-form-item", + "title": "Slotted error text in a form item", + "description": "Use the error slot in a form item to display formatted error messages with custom styling like bold or italic text.", + "status": "published", + "categories": [ + "forms" + ], + "tags": [ + "form", + "form-item", + "error", + "validation", + "slot" + ], + "components": [ + "form-item", + "input" + ], + "scale": "interaction", + "userType": "both", + "slug": "slotted-error-text-in-a-form-item" + }, + { + "type": "example", + "id": "slotted-helper-text-in-a-form-item", + "title": "Slotted helper text in a form item", + "description": "Use the helpText slot in a form item to display formatted helper text with custom styling like bold, italic, or links.", + "status": "published", + "categories": [ + "forms" + ], + "tags": [ + "form", + "form-item", + "helper-text", + "slot" + ], + "components": [ + "form-item", + "input" + ], + "scale": "interaction", + "userType": "both", + "slug": "slotted-helper-text-in-a-form-item" + }, + { + "type": "example", + "id": "sort-data-in-a-table", + "title": "Sort data in a table", + "description": "Enable column sorting in tables using sort headers, allowing workers to organize data by clicking column headers to toggle ascending/descending order.", + "status": "published", + "categories": [ + "content-layout" + ], + "tags": [ + "table", + "sorting", + "data" + ], + "components": [ + "table", + "table-sort-header" + ], + "scale": "task", + "userType": "worker", + "slug": "sort-data-in-a-table" + }, + { + "type": "example", + "id": "start-page", + "title": "Start page", + "description": "A start page is the front door to a government service for citizens. It provides essential information about the service and a clear call to action to begin.", + "status": "published", + "categories": [ + "forms" + ], + "tags": [ + "page", + "service", + "start", + "citizen" + ], + "components": [ + "button" + ], + "scale": "page", + "userType": "citizen", + "slug": "start-page" + }, + { + "type": "example", + "id": "task-list-page", + "title": "Task list page", + "description": "A task list page provides a structure for multi-step services, showing users their progress through a series of tasks with clear status indicators.", + "status": "published", + "categories": [ + "forms" + ], + "tags": [ + "page", + "task-list", + "progress", + "form" + ], + "components": [ + "table", + "badge", + "callout" + ], + "scale": "page", + "userType": "both", + "slug": "task-list-page" + }, + { + "type": "example", + "id": "type-to-create-a-new-filter", + "title": "Type to create a new filter", + "description": "Allow users to type custom filter values and create filter chips by pressing Enter, with the ability to remove chips using Backspace or by clicking them.", + "status": "published", + "categories": [ + "inputs-and-actions" + ], + "tags": [ + "filter-chip", + "input", + "dynamic", + "keyboard" + ], + "components": [ + "filter-chip", + "input", + "form-item", + "container" + ], + "scale": "interaction", + "userType": "both", + "slug": "type-to-create-a-new-filter" + }, + { + "type": "example", + "id": "warn-a-user-of-a-deadline", + "title": "Warn a user of a deadline", + "description": "Use a modal with important callout styling to warn users about time-sensitive deadlines that could affect their submission or action.", + "status": "published", + "categories": [ + "feedback-and-alerts" + ], + "tags": [ + "modal", + "warning", + "deadline", + "callout" + ], + "components": [ + "modal", + "button", + "button-group" + ], + "scale": "task", + "userType": "both", + "slug": "warn-a-user-of-a-deadline" } ] \ No newline at end of file diff --git a/docs/public/site.webmanifest b/docs/public/site.webmanifest new file mode 100644 index 0000000000..f10039edc4 --- /dev/null +++ b/docs/public/site.webmanifest @@ -0,0 +1,22 @@ +{ + "name": "GoA Design System", + "short_name": "GoA Design System", + "icons": [ + { + "src": "/icon-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "any maskable" + }, + { + "src": "/icon-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "any maskable" + } + ], + "theme_color": "#333333", + "background_color": "#ffffff", + "display": "standalone", + "start_url": "/" +} diff --git a/docs/public/thumbnails/workspace-card-view.png b/docs/public/thumbnails/workspace-card-view.png new file mode 100644 index 0000000000..d93ac713ab Binary files /dev/null and b/docs/public/thumbnails/workspace-card-view.png differ diff --git a/docs/public/thumbnails/workspace-case-detail.png b/docs/public/thumbnails/workspace-case-detail.png new file mode 100644 index 0000000000..00e3cdd8c8 Binary files /dev/null and b/docs/public/thumbnails/workspace-case-detail.png differ diff --git a/docs/public/thumbnails/workspace-dashboard.png b/docs/public/thumbnails/workspace-dashboard.png new file mode 100644 index 0000000000..e2c8d2bec1 Binary files /dev/null and b/docs/public/thumbnails/workspace-dashboard.png differ diff --git a/docs/public/thumbnails/workspace-data-grid.png b/docs/public/thumbnails/workspace-data-grid.png new file mode 100644 index 0000000000..3fda814d3f Binary files /dev/null and b/docs/public/thumbnails/workspace-data-grid.png differ diff --git a/docs/public/thumbnails/workspace-list-view.png b/docs/public/thumbnails/workspace-list-view.png new file mode 100644 index 0000000000..8b16cda30b Binary files /dev/null and b/docs/public/thumbnails/workspace-list-view.png differ diff --git a/docs/public/thumbnails/workspace-preview.png b/docs/public/thumbnails/workspace-preview.png new file mode 100644 index 0000000000..e2c8d2bec1 Binary files /dev/null and b/docs/public/thumbnails/workspace-preview.png differ diff --git a/docs/public/thumbnails/workspace-push-drawer.png b/docs/public/thumbnails/workspace-push-drawer.png new file mode 100644 index 0000000000..5c68b428b5 Binary files /dev/null and b/docs/public/thumbnails/workspace-push-drawer.png differ diff --git a/docs/public/thumbnails/workspace-sidebar-contextual.png b/docs/public/thumbnails/workspace-sidebar-contextual.png new file mode 100644 index 0000000000..e1ae795c1e Binary files /dev/null and b/docs/public/thumbnails/workspace-sidebar-contextual.png differ diff --git a/docs/public/thumbnails/workspace-sidebar-main.png b/docs/public/thumbnails/workspace-sidebar-main.png new file mode 100644 index 0000000000..fce51ae420 Binary files /dev/null and b/docs/public/thumbnails/workspace-sidebar-main.png differ diff --git a/docs/public/thumbnails/workspace-sticky-action-bar.png b/docs/public/thumbnails/workspace-sticky-action-bar.png new file mode 100644 index 0000000000..6e9e528067 Binary files /dev/null and b/docs/public/thumbnails/workspace-sticky-action-bar.png differ diff --git a/docs/public/thumbnails/workspace-table-view.png b/docs/public/thumbnails/workspace-table-view.png new file mode 100644 index 0000000000..6e9e528067 Binary files /dev/null and b/docs/public/thumbnails/workspace-table-view.png differ diff --git a/docs/search-index.json b/docs/search-index.json deleted file mode 100644 index aab298aa2c..0000000000 --- a/docs/search-index.json +++ /dev/null @@ -1,29 +0,0 @@ -[ - { - "id": "badge", - "title": "Badge", - "description": " Small labels which hold small amounts of information, system feedback, or states. ", - "content": "# Badge\n\nSmall labels which hold small amounts of information, system feedback, or states.\n", - "component": "badge", - "filePath": "docs/src/pages/components/badge/badge.mdx", - "urlPath": "components/badge", - "tags": [ - "filter chip", - "icons", - "table" - ] - }, - { - "id": "accordion", - "title": "Accordion", - "description": "Some additional description for the component", - "content": "# Accordion\nAccordion containers enable multiple content sections to be displayed in a limited space and collapsed or expanded by the user. You can create hierarchy of information by hiding secondary content inside collapsed expand containers.\n\n## Examples\n\n\n
\n
Name
\n
Joan Smith
\n
Contact preference
\n
Text message
\n
\n
\n\n### Close all\n\nconst AccordionCloseAllExample => () {\n const [expandedAll, setExpandedAll] = useState(false);\n const [expandedList, setExpandedList] = useState([]);\n useEffect(() => {\n setExpandedAll(expandedList.length === 4);\n }, [expandedList.length]);\n\n const expandOrCollapseAll = () => {\n setExpandedAll((prev) => {\n const newState = !prev;\n setExpandedList(newState ? [1, 2, 3, 4] : []);\n return newState;\n });\n };\n\n const updateAccordion = (order: number, isOpen: boolean) => {\n setExpandedList((prev) => {\n if (isOpen) {\n return prev.includes(order) ? prev: [...prev, order];\n }\n return prev.filter((item) => item !== order);\n });\n\n return (\n expandOrCollapseAll()}>\n {expandedAll ? \"Hide all sections\" : \"Show all sections\"}\n \n\n updateAccordion(1, open)}>\n To create an account you will need to contact your office admin.\n \n\n updateAccordion(2, open)}>\n You will need to verify your identity through our two factor authentication in addition to the digital signature.\n \n\n updateAccordion(3, open)}>\n Yes, you can see the status of your application on the main service dashboard when you login. You will receive updates and notifications in your email as your request progresses.\n \n\n updateAccordion(4, open)}>\n Yes, our digital service is designed with accessibility in mind. More information on accessibility.\n \n )\n}\n\n\n", - "component": "accordion", - "filePath": "docs/src/pages/components/accordion/accordion.mdx", - "urlPath": "components/accordion", - "tags": [ - "details", - "tabs" - ] - } -] \ No newline at end of file diff --git a/docs/src/components/CardLite.astro b/docs/src/components/CardLite.astro index 3c9d82a701..7f9f718854 100644 --- a/docs/src/components/CardLite.astro +++ b/docs/src/components/CardLite.astro @@ -8,24 +8,37 @@ interface Props { title: string; description: string; - imageUrl: string; - linkTo: string; + imageUrl?: string; + linkTo?: string; } const { title, description, imageUrl, linkTo } = Astro.props; +const isExternal = linkTo?.startsWith("http"); +const isDisabled = !linkTo; --- - -
- +{isDisabled ? ( +
+ {imageUrl &&
} + + {title} + + + {description} + +
- - {title} - - - {description} - -
+) : ( + + {imageUrl &&
} + + {title} + + + {description} + +
+)}
diff --git a/docs/src/components/DoDont.astro b/docs/src/components/DoDont.astro index ad782db051..bda77459b2 100644 --- a/docs/src/components/DoDont.astro +++ b/docs/src/components/DoDont.astro @@ -91,6 +91,9 @@ const config = typeConfig[type]; ) : (
+ {description && ( +
{description}
+ )}
)} @@ -105,9 +108,8 @@ const config = typeConfig[type]; if (!container || !detailsContent) return; - // Find the guidance-content wrapper (from GuidanceGrid) - const guidanceContent = container.querySelector('.guidance-content'); - if (!guidanceContent) return; + // GuidanceGrid wraps content in .guidance-content, but static page usage does not. + const guidanceContent = container.querySelector('.guidance-content') ?? container; const preview = guidanceContent.querySelector('[data-guidance-preview]'); @@ -176,14 +178,29 @@ const config = typeConfig[type]; }); } + // Force preview layout containers to size to the card width so text can wrap. + function processGuidancePreviewBlocks() { + document.querySelectorAll('[data-guidance-preview] goa-block').forEach(block => { + if (!block.getAttribute('width')) { + block.setAttribute('width', '100%'); + } + + if (!block.getAttribute('max-width')) { + block.setAttribute('max-width', '100%'); + } + }); + } + // Run on page load processDoDontWrappers(); processGuidanceModals(); + processGuidancePreviewBlocks(); // Re-run after Astro page transitions document.addEventListener('astro:page-load', () => { processDoDontWrappers(); processGuidanceModals(); + processGuidancePreviewBlocks(); }); @@ -196,6 +213,7 @@ const config = typeConfig[type]; .info-content { color: var(--goa-color-info-text); margin-bottom: var(--goa-space-l); + max-width: 70ch; } .info-content :global(p) { @@ -233,16 +251,22 @@ const config = typeConfig[type]; height: auto; } + .do-container :global([data-guidance-preview]) { + display: block; + width: 100%; + max-width: 100%; + } + /* Colored indicator bar */ .do-indicator { height: 1.25rem; background-color: var(--goa-color-success-default); - border-radius: 0 0 8px 8px; + border-radius: var(--goa-border-radius-none) var(--goa-border-radius-none) var(--goa-border-radius-m) var(--goa-border-radius-m); } /* When container is visible, indicator doesn't need top radius */ .do-container:not([style*="display: none"]) + .do-indicator { - border-radius: 0 0 8px 8px; + border-radius: var(--goa-border-radius-none) var(--goa-border-radius-none) var(--goa-border-radius-m) var(--goa-border-radius-m); } /* When container is hidden, indicator needs full radius */ @@ -276,7 +300,7 @@ const config = typeConfig[type]; } .content-label { - font-weight: 600; + font-weight: var(--goa-font-weight-semi-bold); margin-top: 1px; } @@ -329,7 +353,7 @@ const config = typeConfig[type]; .details-content :global(code) { background: rgba(0, 0, 0, 0.06); padding: 0.1em 0.3em; - border-radius: 3px; + border-radius: var(--goa-border-radius-xs); font-size: 0.85em; } diff --git a/docs/src/components/DocumentationTabs.tsx b/docs/src/components/DocumentationTabs.tsx index c36570bec3..b3a47b73a0 100644 --- a/docs/src/components/DocumentationTabs.tsx +++ b/docs/src/components/DocumentationTabs.tsx @@ -4,8 +4,11 @@ * This component tests and implements GoA tabs for the docs site dogfooding effort. * Uses actual GoA React components instead of custom CSS tabs. */ -import { GoabxTabs } from "@abgov/react-components/experimental"; -import { GoabTab } from "@abgov/react-components"; +import { + GoabTab, + GoabTabs, +} from "@abgov/react-components"; + import type { ReactNode } from "react"; interface TabConfig { @@ -21,7 +24,7 @@ interface DocumentationTabsProps { export function DocumentationTabs({ tabs, initialTab = 0 }: DocumentationTabsProps) { return ( - + {tabs.map((tab, index) => ( ))} - + ); } diff --git a/docs/src/components/DropInCallout.astro b/docs/src/components/DropInCallout.astro new file mode 100644 index 0000000000..92aa421f9b --- /dev/null +++ b/docs/src/components/DropInCallout.astro @@ -0,0 +1,14 @@ + + Join design system drop-in hours to: +
    +
  • Get feedback on your service
  • +
  • Propose new components or patterns
  • +
  • Suggest updates to existing resources
  • +
  • Ask questions
  • +
  • Share feedback
  • +
+ Drop-in sessions are available to Government of Alberta product teams. + + Book time in drop-in hours + +
diff --git a/docs/src/components/ExampleCard.astro b/docs/src/components/ExampleCard.astro index 9096558a3f..31bb5dc0cb 100644 --- a/docs/src/components/ExampleCard.astro +++ b/docs/src/components/ExampleCard.astro @@ -98,9 +98,9 @@ const scaleStyle = scaleColors[data.scale] || { bg: '#f5f5f5', color: '#666' }; diff --git a/docs/src/components/ExampleDisplay.astro b/docs/src/components/ExampleDisplay.astro index 16ac584a51..1151956cae 100644 --- a/docs/src/components/ExampleDisplay.astro +++ b/docs/src/components/ExampleDisplay.astro @@ -30,6 +30,7 @@ const code = await getExampleCode(example.slug); code={code} figmaUrl={data.figmaUrl} fullWidth={data.fullWidth} + previewStyle={data.previewStyle} titleSize={titleSize} /> @@ -61,7 +62,7 @@ const code = await getExampleCode(example.slug); .example-meta p { margin: 0; - color: var(--goa-color-text-secondary, #666); + color: var(--goa-color-text-secondary); line-height: 1.5; } diff --git a/docs/src/components/ExampleListingCard.astro b/docs/src/components/ExampleListingCard.astro index 474b030e25..0af66d1915 100644 --- a/docs/src/components/ExampleListingCard.astro +++ b/docs/src/components/ExampleListingCard.astro @@ -113,7 +113,7 @@ const userGoal = getUserGoal(data.title); .card-image-link { display: block; text-decoration: none; - border-radius: 12px; + border-radius: var(--goa-border-radius-xl); margin-bottom: var(--goa-space-l, 24px); } @@ -126,7 +126,7 @@ const userGoal = getUserGoal(data.title); .card-image { aspect-ratio: 4/3; background: var(--goa-color-greyscale-200, #e5e5e5); - border-radius: 12px; + border-radius: var(--goa-border-radius-xl); overflow: hidden; } diff --git a/docs/src/components/ExamplePreview.tsx b/docs/src/components/ExamplePreview.tsx index 0fa23ae6bc..a50a2e4f62 100644 --- a/docs/src/components/ExamplePreview.tsx +++ b/docs/src/components/ExamplePreview.tsx @@ -9,18 +9,18 @@ * Reusable anywhere - component pages, example pages, embedded in docs. */ -import { useState, useEffect, useRef } from 'react'; -import { CodeSnippet } from './CodeSnippet'; -import type { ExampleCode } from '../lib/example-code'; -import DOMPurify from 'dompurify'; +import { useState, useEffect, useRef } from "react"; +import { CodeSnippet } from "./CodeSnippet"; +import type { ExampleCode } from "../lib/example-code"; +import DOMPurify from "dompurify"; // Allow GoA web component custom elements through DOMPurify. // By default, DOMPurify strips all custom elements (tags containing hyphens). // Our previews render web components, so we must whitelist them. const DOMPURIFY_CONFIG = { CUSTOM_ELEMENT_HANDLING: { - tagNameCheck: /^goa-/, // allow all elements - attributeNameCheck: () => true, // allow their attributes (type, name, label, etc.) + tagNameCheck: /^goa-/, // allow all elements + attributeNameCheck: () => true, // allow their attributes (type, name, label, etc.) }, }; @@ -37,8 +37,10 @@ interface ExamplePreviewProps { codeMaxHeight?: number; /** Remove side padding for full-width components like callouts */ fullWidth?: boolean; + /** Inline CSS override for preview container (e.g. "padding: 0; max-height: 600px") */ + previewStyle?: string; /** Title size - 'large' for standalone example pages, 'small' for embedded examples */ - titleSize?: 'large' | 'small'; + titleSize?: "large" | "small"; } export function ExamplePreview({ @@ -48,7 +50,8 @@ export function ExamplePreview({ figmaUrl, codeMaxHeight = 200, fullWidth = false, - titleSize = 'small', + previewStyle, + titleSize = "small", }: ExamplePreviewProps) { const [copied, setCopied] = useState(false); const previewRef = useRef(null); @@ -77,23 +80,26 @@ export function ExamplePreview({ const __preview__ = previewRef.current; const scopedScript = scriptContent // Replace document.getElementById with container-scoped querySelector - .replace(/document\.getElementById\s*\(\s*["']([^"']+)["']\s*\)/g, - (_, id) => `__preview__.querySelector("#${id}")` + .replace( + /document\.getElementById\s*\(\s*["']([^"']+)["']\s*\)/g, + (_, id) => `__preview__.querySelector("#${id}")`, ) // Replace document.querySelector with scoped version - .replace(/document\.querySelector\s*\(\s*["']([^"']+)["']\s*\)/g, - (_, selector) => `__preview__.querySelector("${selector}")` + .replace( + /document\.querySelector\s*\(\s*["']([^"']+)["']\s*\)/g, + (_, selector) => `__preview__.querySelector("${selector}")`, ) // Replace document.querySelectorAll with scoped version - .replace(/document\.querySelectorAll\s*\(\s*["']([^"']+)["']\s*\)/g, - (_, selector) => `__preview__.querySelectorAll("${selector}")` + .replace( + /document\.querySelectorAll\s*\(\s*["']([^"']+)["']\s*\)/g, + (_, selector) => `__preview__.querySelectorAll("${selector}")`, ); // Execute the script with preview container in scope - const fn = new Function('__preview__', scopedScript); + const fn = new Function("__preview__", scopedScript); fn(__preview__); } catch (err) { - console.error('Error executing example script:', err); + console.error("Error executing example script:", err); } } } @@ -107,7 +113,7 @@ export function ExamplePreview({ setCopied(true); setTimeout(() => setCopied(false), 2000); } catch (err) { - console.error('Failed to copy link:', err); + console.error("Failed to copy link:", err); } }; @@ -115,14 +121,18 @@ export function ExamplePreview({
{/* Header */}
- {titleSize === 'large' ? ( -

{title}

+ {titleSize === "large" ? ( +

+ {title} +

) : ( -

{title}

+

+ {title} +

)}
+ + diff --git a/docs/src/components/TableOfContents.tsx b/docs/src/components/TableOfContents.tsx index 1e744fb278..c228ef9c34 100644 --- a/docs/src/components/TableOfContents.tsx +++ b/docs/src/components/TableOfContents.tsx @@ -39,12 +39,18 @@ export function TableOfContents({ cssQuery }: TOCProps) { const id = el.getAttribute("id"); const title = el.textContent?.trim(); + // For goa-text elements, read the "as" attribute for the heading level + const tagName = + el.tagName === "GOA-TEXT" + ? (el.getAttribute("as") || "h2").toUpperCase() + : el.tagName; + // Only include visible headings if (id && title && isVisible(el)) { result.push({ id, title, - tagName: el.tagName, + tagName, }); } }); diff --git a/docs/src/components/TokensGrid.tsx b/docs/src/components/TokensGrid.tsx index ed3c2a0bfd..9a5b9779be 100644 --- a/docs/src/components/TokensGrid.tsx +++ b/docs/src/components/TokensGrid.tsx @@ -12,26 +12,25 @@ */ import React, { useState, useMemo, useCallback, useEffect, useRef } from "react"; +import { createPortal } from "react-dom"; import { - GoabxButton, - GoabxInput, - GoabxFormItem, - GoabxFilterChip, - GoabxDrawer, - GoabxCheckbox, -} from "@abgov/react-components/experimental"; -import { - GoabIconButton, - GoabIcon, - GoabDivider, + GoabButton, GoabButtonGroup, - GoabContainer, + GoabCheckbox, GoabCheckboxList, - GoabTab, type GoabCheckboxListOnChangeDetail, + GoabContainer, + GoabDivider, + GoabFilterChip, + GoabFormItem, + GoabIcon, + GoabIconButton, + GoabInput, + GoabPushDrawer, } from "@abgov/react-components"; + import { useTwoLevelSort } from "../hooks/useTwoLevelSort"; -import { useMobile } from "../hooks/useCompactToolbar"; +import { useContainerNarrow } from "../hooks/useContainerWidth"; import type { FlatToken } from "../lib/tokens"; interface FilterGroup { @@ -47,20 +46,43 @@ interface TokensGridProps { // Badge type mapping for categories (using V2 extended colors) function getCategoryBadgeType( category: string, -): "sky" | "pasture" | "sunset" | "lilac" | "prairie" | "dawn" { - switch (category) { +): "sky" | "pasture" | "sunset" | "lilac" | "prairie" | "dawn" | "success" { + switch (category.toLowerCase()) { + // Colors case "color": return "sky"; + // Spacing + case "space": case "spacing": return "pasture"; + // Typography + case "fontfamily": + case "fontsize": + case "fontweight": + case "lineheight": + case "fontvariationsettings": case "typography": return "sunset"; + // Motion + case "motioncurve": + case "translate": + case "motionduration": + case "transition": + return "success"; + // Borders case "border": + case "borderradius": + case "borderwidth": return "lilac"; + // Shadows case "shadow": return "prairie"; - default: + // Icons & misc + case "iconsize": + case "opacity": return "dawn"; + default: + return "sky"; } } @@ -88,10 +110,11 @@ export function TokensGrid({ tokens, filterGroups }: TokensGridProps) { const [tokenSyntax, setTokenSyntax] = useState("css"); // Ref for sticky detection sentinel + const gridRef = useRef(null); const sentinelRef = useRef(null); // Ref for table (to handle sort events from web component) const tableRef = useRef(null); - // TODO: Remove tabsRef when GoabxTabs wrapper exposes updateUrl and stackOnMobile props + // TODO: Remove tabsRef when GoabTabs wrapper exposes updateUrl and stackOnMobile props const tabsRef = useRef(null); // Detect when toolbar becomes sticky using IntersectionObserver @@ -111,6 +134,15 @@ export function TokensGrid({ tokens, filterGroups }: TokensGridProps) { return () => observer.disconnect(); }, []); + // Read URL search parameter on mount (e.g., /tokens?search=color) + useEffect(() => { + const params = new URLSearchParams(window.location.search); + const searchParam = params.get("search"); + if (searchParam && !searchChips.includes(searchParam)) { + setSearchChips([searchParam]); + } + }, []); // Only run on mount + // Filter state const [pendingFilters, setPendingFilters] = useState([]); const [appliedFilters, setAppliedFilters] = useState([]); @@ -118,25 +150,34 @@ export function TokensGrid({ tokens, filterGroups }: TokensGridProps) { // Hooks const { sortConfig, setSortConfig, sortByKey, clearSort, handleTableSort } = useTwoLevelSort(); - const isMobile = useMobile(); + const isContainerNarrow = useContainerNarrow(gridRef, 840); // Listen for table sort events (from goa-table web component) useEffect(() => { const table = tableRef.current; if (!table) return; - const handleSort = (e: Event) => { - const detail = (e as CustomEvent<{ sortBy: string; sortDir: "asc" | "desc" }>) - .detail; - handleTableSort(detail); + const handleMultiSort = (e: Event) => { + const detail = ( + e as CustomEvent<{ sorts: { column: string; direction: "asc" | "desc" }[] }> + ).detail; + const sorts = detail.sorts; + setSortConfig({ + primary: sorts[0] + ? { key: sorts[0].column, direction: sorts[0].direction } + : null, + secondary: sorts[1] + ? { key: sorts[1].column, direction: sorts[1].direction } + : null, + }); }; - table.addEventListener("_sort", handleSort); - return () => table.removeEventListener("_sort", handleSort); - }, [handleTableSort]); + table.addEventListener("_multisort", handleMultiSort); + return () => table.removeEventListener("_multisort", handleMultiSort); + }, [setSortConfig]); - // TODO: Remove this useEffect when GoabxTabs wrapper exposes updateUrl and stackOnMobile props - // Using goa-tabs web component directly because GoabxTabs wrapper is missing these props + // TODO: Remove this useEffect when GoabTabs wrapper exposes updateUrl and stackOnMobile props + // Using goa-tabs web component directly because GoabTabs wrapper is missing these props useEffect(() => { const tabs = tabsRef.current; if (!tabs) return; @@ -157,8 +198,8 @@ export function TokensGrid({ tokens, filterGroups }: TokensGridProps) { // View mode: 'list' (table) on desktop, 'card' on mobile // No user toggle - automatically switches based on viewport const viewMode = useMemo((): "card" | "list" => { - return isMobile ? "card" : "list"; - }, [isMobile]); + return isContainerNarrow ? "card" : "list"; + }, [isContainerNarrow]); // Filter and sort tokens const filteredTokens = useMemo(() => { @@ -307,8 +348,9 @@ export function TokensGrid({ tokens, filterGroups }: TokensGridProps) { [sortConfig], ); - // Render color preview + // Render token preview (color, opacity, etc.) const renderPreview = (token: FlatToken) => { + const value = token.resolvedValue || token.value; if (token.isColor) { return (
+ ); + } + + // Opacity tokens - show overlay on top of content to demonstrate the effect + if (token.category === "opacity") { + // Parse opacity value (e.g., "50%" -> 0.5, "0.9" -> 0.9) + let opacity = 0.5; + if (value.endsWith("%")) { + opacity = parseFloat(value) / 100; + } else { + opacity = parseFloat(value); + } + + return ( +
+ {/* Back: blue square (content behind overlay) */} +
+ {/* Front: gray overlay at the specified opacity */} +
+
+ ); + } + + // Motion curve tokens - show image representing the curve type + if (token.category === "motionCurve") { + const getMotionCurveImage = ( + name: string, + ): + | "expressive" + | "productive" + | "expressive-exit" + | "expressive-reveal" + | "expressive-transform" => { + if (name.endsWith("-expressive")) return "expressive"; + if (name.endsWith("-productive")) return "productive"; + if (name.endsWith("-expressive-exit")) return "expressive-exit"; + if (name.endsWith("-expressive-reveal")) return "expressive-reveal"; + if (name.endsWith("-expressive-transform")) return "expressive-transform"; + return "expressive"; + }; + return ( + {`${token.name} + ); + } + + // Border radius tokens - show gray square with the radius applied + if (token.category === "borderRadius") { + return ( +
); } + + // Border width tokens - show horizontal line with the width applied + if (token.category === "borderWidth") { + return ( +
+ ); + } + + // Space tokens - show two endpoints with a colored bar between them + if (token.category === "space") { + // Color mapping based on spacing size (use endsWith to avoid matching "-space-") + const getSpacingColor = (name: string): string => { + if (name.endsWith("-none")) return "var(--goa-color-greyscale-400)"; + if (name.endsWith("-3xs")) return "#f8a5a5"; // light red/pink + if (name.endsWith("-2xs")) return "#a5e8e0"; // light teal + if (name.endsWith("-xs")) return "#e0a5e8"; // light magenta + if (name.endsWith("-s")) return "#a5d4f8"; // light blue + if (name.endsWith("-m")) return "#f8cfa5"; // light orange + if (name.endsWith("-l")) return "#a5e8c0"; // light green + if (name.endsWith("-xl")) return "#f8f0a5"; // light yellow + if (name.endsWith("-2xl")) return "#f8a5b5"; // light coral + if (name.endsWith("-3xl")) return "#a5e8e8"; // light cyan + if (name.endsWith("-4xl")) return "#c5f8a5"; // light lime + return "var(--goa-color-interactive-default)"; + }; + + return ( +
+ {/* Left endpoint */} +
+ {/* Spacing bar */} +
+ {/* Right endpoint */} +
+
+ ); + } + + // Icon size tokens - show plus icon with background sized to the token value + if (token.category === "iconSize") { + // Map token suffix to GoabIconSize ("1"-"6") + const getIconSize = (name: string): "1" | "2" | "3" | "4" | "5" | "6" => { + if (name.endsWith("-1")) return "1"; + if (name.endsWith("-2")) return "2"; + if (name.endsWith("-3")) return "3"; + if (name.endsWith("-4")) return "4"; + if (name.endsWith("-5")) return "5"; + if (name.endsWith("-6")) return "6"; + if (name.endsWith("-xs")) return "1"; + if (name.endsWith("-s")) return "2"; + if (name.endsWith("-m")) return "3"; + if (name.endsWith("-l")) return "4"; + if (name.endsWith("-xl")) return "5"; + return "3"; + }; + + return ( +
+ +
+ ); + } + + // Shadow tokens - show white card with shadow on gray background + if (token.category === "shadow") { + return ( +
+
+
+ ); + } + + // Font weight tokens - show "Aa" at the weight + if (token.category === "fontWeight") { + return ( +
+ Aa +
+ ); + } + + // Letter spacing tokens - show "Aa" with the letter spacing + if (token.category === "letterSpacing") { + return ( +
+ Aa +
+ ); + } + + // Typography tokens - show "Aa" with all typography styles applied + if (token.category === "typography") { + // Parse the resolved value to get individual properties + let typographyStyles: React.CSSProperties = { + color: "var(--goa-color-greyscale-700)", + }; + + try { + const parsed = JSON.parse(token.resolvedValue || "{}"); + if (parsed.fontFamily) typographyStyles.fontFamily = parsed.fontFamily; + if (parsed.fontSize) typographyStyles.fontSize = parsed.fontSize; + if (parsed.fontWeight) typographyStyles.fontWeight = parsed.fontWeight; + if (parsed.lineHeight) typographyStyles.lineHeight = parsed.lineHeight; + if (parsed.letterSpacing) typographyStyles.letterSpacing = parsed.letterSpacing; + } catch { + // Fallback if parsing fails + typographyStyles.fontFamily = "var(--goa-fontFamily-sans)"; + typographyStyles.fontSize = "16px"; + } + + return ( +
+ Aa +
+ ); + } + + // Font size tokens - show "Aa" at the actual size + if (token.category === "fontSize") { + return ( +
+ Aa +
+ ); + } + + // Font family tokens - show sample text in the font + if (token.category === "fontFamily") { + return ( +
+ Abc 123 +
+ ); + } + + // Line height tokens - show two lines of "Ag" with the line-height applied + if (token.category === "lineHeight") { + return ( +
+ Ag +
+ Ag +
+ ); + } + return ; }; @@ -352,6 +753,7 @@ export function TokensGrid({ tokens, filterGroups }: TokensGridProps) { type={getCategoryBadgeType(token.category)} content={formatCategory(token.category)} emphasis="subtle" + icon="false" />
@@ -377,6 +779,7 @@ export function TokensGrid({ tokens, filterGroups }: TokensGridProps) { type={getCategoryBadgeType(token.category)} content={formatCategory(token.category)} emphasis="subtle" + icon="false" /> @@ -393,11 +796,10 @@ export function TokensGrid({ tokens, filterGroups }: TokensGridProps) { [copiedToken, copyToClipboard, getFormattedTokenName], ); - const hasActiveFilters = - searchChips.length > 0 || appliedFilters.length > 0 || sortConfig.primary; + const hasActiveFilters = searchChips.length > 0 || appliedFilters.length > 0; return ( -
+
{/* Sentinel for sticky detection - placed before toolbar */} @@ -472,33 +894,9 @@ export function TokensGrid({ tokens, filterGroups }: TokensGridProps) { fillColor="var(--goa-color-text-secondary)" /> - {/* Sort chips */} - {sortConfig.primary && ( - - setSortConfig({ primary: sortConfig.secondary, secondary: null }) - } - /> - )} - {sortConfig.secondary && ( - setSortConfig((prev) => ({ ...prev, secondary: null }))} - /> - )} - {/* Search chips */} {searchChips.map((chip) => ( - removeSearchChip(chip)} @@ -507,7 +905,7 @@ export function TokensGrid({ tokens, filterGroups }: TokensGridProps) { {/* Filter group chips */} {appliedFilters.map((filterName) => ( - removeAppliedFilter(filterName)} @@ -534,9 +932,47 @@ export function TokensGrid({ tokens, filterGroups }: TokensGridProps) { {/* List View (table) */} {viewMode === "list" && ( -
+
{ + const el = e.currentTarget; + const table = el.querySelector("goa-table") as HTMLElement; + if (!table) return; + const inset = parseFloat(getComputedStyle(table).marginLeft) || 0; + const maxScroll = el.scrollWidth - el.clientWidth; + const leftShadow = el.querySelector( + ".tokens-table-scroll-shadow-left", + ) as HTMLElement; + const rightShadow = el.querySelector( + ".tokens-table-scroll-shadow-right", + ) as HTMLElement; + if (leftShadow) leftShadow.style.opacity = el.scrollLeft > inset ? "1" : "0"; + if (rightShadow) + rightShadow.style.opacity = el.scrollLeft < maxScroll - inset ? "1" : "0"; + }} + ref={(el) => { + if (!el) return; + requestAnimationFrame(() => { + const table = el.querySelector("goa-table") as HTMLElement; + if (!table) return; + const inset = parseFloat(getComputedStyle(table).marginLeft) || 0; + const maxScroll = el.scrollWidth - el.clientWidth; + const rightShadow = el.querySelector( + ".tokens-table-scroll-shadow-right", + ) as HTMLElement; + if (rightShadow && maxScroll > inset) rightShadow.style.opacity = "1"; + }); + }} + > + -
- +
+
+ +
+
@@ -79,33 +85,67 @@ const { title, description, currentSlug, category } = Astro.props; } .main-content { - padding: var(--goa-space-l); - padding-left: 0; + display: flex; min-height: 100vh; min-width: 0; /* Prevent grid blowout from wide content */ + padding: var(--goa-space-m); + padding-left: 0; + } + + .content-with-drawer { + flex: 1; + min-width: 0; + } + + /* Push drawer portal: desktop (push mode) */ + #push-drawer-portal { + margin-top: calc(-1 * var(--goa-space-m)); + margin-bottom: calc(-1 * var(--goa-space-m)); + position: sticky; + top: 0; + height: 100vh; + } + + #push-drawer-portal:has([open]) { + margin-right: calc(-1 * var(--goa-space-m)); } .content-card { - background: white; - border-radius: 24px; + background: var(--goa-color-greyscale-white); + border-radius: var(--goa-border-radius-3xl); border: 1px solid var(--goa-color-greyscale-150); - padding: var(--goa-space-xl) var(--goa-space-2xl); + --card-padding-h: var(--goa-space-2xl); + padding: var(--goa-space-xl) var(--card-padding-h); min-height: calc(100vh - var(--goa-space-l) * 2); - overflow-x: clip; /* Allows sticky toolbar to break out visually */ - /* Full-width card, page content centers itself within */ } - /* Tablet: Reduce card padding */ - @media (max-width: 1024px) { + /* Tablet: modal drawer mode (push drawer switches at 1023px) */ + @media (max-width: 1023px) { .content-card { - padding: var(--goa-space-l) var(--goa-space-xl); + --card-padding-h: var(--goa-space-xl); + padding: var(--goa-space-l) var(--card-padding-h); + } + + #push-drawer-portal { + position: static; + height: auto; + margin: 0; + } + + #push-drawer-portal:has([open]) { + margin-right: 0; + } + + /* When drawer is open, lower mobile header so scrim covers it */ + :global(.mobile-header-container:has(~ * [open])) { + z-index: 0 !important; } } /* Mobile: 624px breakpoint matches GoA components */ @media (max-width: 623px) { .layout-wrapper { - background: white; + background: var(--goa-color-greyscale-white); } .layout-container { @@ -122,13 +162,15 @@ const { title, description, currentSlug, category } = Astro.props; /* Content: full viewport, no card chrome */ .main-content { + display: block; padding: 0; } .content-card { - border-radius: 0; + border-radius: var(--goa-border-radius-none); border: none; - padding: var(--goa-space-m); + --card-padding-h: var(--goa-space-m); + padding: var(--goa-space-m) var(--card-padding-h); min-height: auto; } } diff --git a/docs/src/layouts/DocumentationPageLayout.astro b/docs/src/layouts/DocumentationPageLayout.astro index 85a60124b8..4c2e3ab528 100644 --- a/docs/src/layouts/DocumentationPageLayout.astro +++ b/docs/src/layouts/DocumentationPageLayout.astro @@ -20,12 +20,13 @@ import BaseLayout from './BaseLayout.astro'; import { SiteNav } from '../components/SiteNav'; import { MobileHeader } from '../components/MobileHeader'; import { TableOfContents } from '../components/TableOfContents'; +import { getNavCategories } from '../lib/nav-categories'; interface Props { title: string; description?: string; - /** Section to highlight in menu: 'get-started' | 'foundations' */ - section: 'get-started' | 'foundations'; + /** Section to highlight in menu: 'get-started' | 'foundations' | 'parent' (no highlight) */ + section: 'get-started' | 'foundations' | 'parent'; /** Show table of contents on right side (default: true) */ showToc?: boolean; /** CSS selector for TOC headings (default: 'h2[id], h3[id]') */ @@ -37,8 +38,9 @@ const { description, section, showToc = true, - tocQuery = 'h2[id], h3[id]' + tocQuery = 'h2[id], h3[id], goa-text[id][as="h2"], goa-text[id][as="h3"]' } = Astro.props; +const navCategories = await getNavCategories(); --- @@ -49,6 +51,7 @@ const { @@ -110,8 +113,8 @@ const { } .content-card { - background: white; - border-radius: 24px; + background: var(--goa-color-greyscale-white); + border-radius: var(--goa-border-radius-3xl); border: 1px solid var(--goa-color-greyscale-150); padding: var(--goa-space-xl) var(--goa-space-2xl); min-height: calc(100vh - var(--goa-space-l) * 2); @@ -138,7 +141,7 @@ const { /* Page title */ .prose-content :global(h1) { - font-size: 2.5rem; + font-size: var(--goa-font-size-9); font-weight: 700; margin: 0 0 var(--goa-space-m); color: var(--goa-color-text-default, #333); @@ -149,7 +152,7 @@ const { .prose-content :global(.lead), .prose-content :global(h1 + p) { font: var(--goa-typography-body-l); - color: var(--goa-color-text-secondary, #666); + color: var(--goa-color-text-secondary); margin: 0 0 var(--goa-space-2xl); max-width: 65ch; } @@ -157,7 +160,7 @@ const { /* Section headings */ .prose-content :global(h2) { font-size: 1.5rem; - font-weight: 600; + font-weight: var(--goa-font-weight-semi-bold); margin: var(--goa-space-2xl) 0 var(--goa-space-m); color: var(--goa-color-text-default, #333); line-height: 1.3; @@ -169,7 +172,7 @@ const { .prose-content :global(h3) { font-size: 1.25rem; - font-weight: 600; + font-weight: var(--goa-font-weight-semi-bold); margin: var(--goa-space-xl) 0 var(--goa-space-m); color: var(--goa-color-text-default, #333); line-height: 1.3; @@ -177,7 +180,7 @@ const { .prose-content :global(h4) { font-size: 1.125rem; - font-weight: 600; + font-weight: var(--goa-font-weight-semi-bold); margin: var(--goa-space-l) 0 var(--goa-space-s); color: var(--goa-color-text-default, #333); } @@ -207,7 +210,7 @@ const { } .prose-content :global(li strong) { - font-weight: 600; + font-weight: var(--goa-font-weight-semi-bold); } /* Nested lists */ @@ -230,10 +233,10 @@ const { /* Inline code */ .prose-content :global(code) { font-family: 'Roboto Mono', monospace; - font-size: 0.875em; + font-size: var(--goa-font-size-2); background: var(--goa-color-greyscale-100, #f5f5f5); padding: 0.125em 0.375em; - border-radius: 4px; + border-radius: var(--goa-border-radius-xs); color: var(--goa-color-text-default, #333); } @@ -241,7 +244,7 @@ const { .prose-content :global(pre) { background: var(--goa-color-greyscale-100, #f5f5f5); padding: var(--goa-space-m); - border-radius: 8px; + border-radius: var(--goa-border-radius-m); overflow-x: auto; margin: 0 0 var(--goa-space-l); } @@ -249,7 +252,7 @@ const { .prose-content :global(pre code) { background: none; padding: 0; - font-size: 0.875rem; + font-size: var(--goa-font-size-2); } /* GoA Divider spacing */ @@ -297,7 +300,7 @@ const { /* Mobile: 624px breakpoint */ @media (max-width: 623px) { .layout-wrapper { - background: white; + background: var(--goa-color-greyscale-white); } .layout-container { @@ -316,7 +319,7 @@ const { } .content-card { - border-radius: 0; + border-radius: var(--goa-border-radius-none); border: none; padding: var(--goa-space-m); min-height: auto; diff --git a/docs/src/layouts/ExamplesPageLayout.astro b/docs/src/layouts/ExamplesPageLayout.astro index 36f92544b8..75883d0201 100644 --- a/docs/src/layouts/ExamplesPageLayout.astro +++ b/docs/src/layouts/ExamplesPageLayout.astro @@ -14,6 +14,7 @@ import BaseLayout from './BaseLayout.astro'; import { SiteNav } from '../components/SiteNav'; import { MobileHeader } from '../components/MobileHeader'; +import { getNavCategories } from '../lib/nav-categories'; interface Props { title: string; @@ -22,6 +23,7 @@ interface Props { } const { title, description, currentSlug } = Astro.props; +const navCategories = await getNavCategories(); --- @@ -34,6 +36,7 @@ const { title, description, currentSlug } = Astro.props; client:only="react" currentSlug={currentSlug} initialSection="examples" + categories={navCategories} /> @@ -44,9 +47,12 @@ const { title, description, currentSlug } = Astro.props;
-
- +
+
+ +
+
@@ -74,33 +80,68 @@ const { title, description, currentSlug } = Astro.props; } .main-content { - padding: var(--goa-space-l); - padding-left: 0; + display: flex; min-height: 100vh; min-width: 0; /* Prevent grid blowout */ + padding: var(--goa-space-m); + padding-left: 0; + } + + .content-with-drawer { + flex: 1; + min-width: 0; + } + + /* Push drawer portal: desktop (push mode) */ + #push-drawer-portal { + margin-top: calc(-1 * var(--goa-space-m)); + margin-bottom: calc(-1 * var(--goa-space-m)); + position: sticky; + top: 0; + height: 100vh; + } + + #push-drawer-portal:has([open]) { + margin-right: calc(-1 * var(--goa-space-m)); } .content-card { - background: white; - border-radius: 24px; + flex: 1; + min-width: 0; + background: var(--goa-color-greyscale-white); + border-radius: var(--goa-border-radius-3xl); border: 1px solid var(--goa-color-greyscale-150); - padding: var(--goa-space-xl) var(--goa-space-2xl); - min-height: calc(100vh - var(--goa-space-l) * 2); - overflow-x: clip; /* Allows sticky toolbar to break out visually */ - /* Full-width card, page content centers itself within */ + --card-padding-h: var(--goa-space-2xl); + padding: var(--goa-space-xl) var(--card-padding-h); } - /* Tablet: Reduce card padding */ - @media (max-width: 1024px) { + /* Tablet: modal drawer mode (push drawer switches at 1023px) */ + @media (max-width: 1023px) { .content-card { - padding: var(--goa-space-l) var(--goa-space-xl); + --card-padding-h: var(--goa-space-xl); + padding: var(--goa-space-l) var(--card-padding-h); + } + + #push-drawer-portal { + position: static; + height: auto; + margin: 0; + } + + #push-drawer-portal:has([open]) { + margin-right: 0; + } + + /* When drawer is open, lower mobile header so scrim covers it */ + :global(.mobile-header-container:has(~ * [open])) { + z-index: 0 !important; } } /* Mobile: 624px breakpoint matches GoA components */ @media (max-width: 623px) { .layout-wrapper { - background: white; + background: var(--goa-color-greyscale-white); } .layout-container { @@ -117,13 +158,15 @@ const { title, description, currentSlug } = Astro.props; /* Content: full viewport, no card chrome */ .main-content { + display: block; padding: 0; } .content-card { - border-radius: 0; + border-radius: var(--goa-border-radius-none); border: none; - padding: var(--goa-space-m); + --card-padding-h: var(--goa-space-m); + padding: var(--goa-space-m) var(--card-padding-h); min-height: auto; } } diff --git a/docs/src/layouts/HomeLayout.astro b/docs/src/layouts/HomeLayout.astro index 6a536e2581..ca6999ab88 100644 --- a/docs/src/layouts/HomeLayout.astro +++ b/docs/src/layouts/HomeLayout.astro @@ -14,6 +14,7 @@ import BaseLayout from './BaseLayout.astro'; import { SiteNav } from '../components/SiteNav'; import { MobileHeader } from '../components/MobileHeader'; +import { getNavCategories } from '../lib/nav-categories'; interface Props { title: string; @@ -21,6 +22,7 @@ interface Props { } const { title, description } = Astro.props; +const navCategories = await getNavCategories(); --- @@ -32,6 +34,7 @@ const { title, description } = Astro.props; @@ -83,7 +86,7 @@ const { title, description } = Astro.props; } .content-area { - background: white; + background: var(--goa-color-greyscale-white); border-radius: 24px; border: 1px solid var(--goa-color-greyscale-150); min-height: calc(100vh - var(--goa-space-l) * 2); @@ -94,7 +97,7 @@ const { title, description } = Astro.props; /* Mobile: 624px breakpoint matches GoA components */ @media (max-width: 623px) { .layout-wrapper { - background: white; + background: var(--goa-color-greyscale-white); } .layout-container { @@ -115,7 +118,7 @@ const { title, description } = Astro.props; } .content-area { - border-radius: 0; + border-radius: var(--goa-border-radius-none); border: none; min-height: auto; /* Pull content up behind transparent header (header is ~73px) */ diff --git a/docs/src/layouts/TokensLayout.astro b/docs/src/layouts/TokensLayout.astro index 2137ee4ef1..08f4e7fd70 100644 --- a/docs/src/layouts/TokensLayout.astro +++ b/docs/src/layouts/TokensLayout.astro @@ -14,6 +14,7 @@ import BaseLayout from './BaseLayout.astro'; import { SiteNav } from '../components/SiteNav'; import { MobileHeader } from '../components/MobileHeader'; +import { getNavCategories } from '../lib/nav-categories'; interface Props { title: string; @@ -21,6 +22,7 @@ interface Props { } const { title, description } = Astro.props; +const navCategories = await getNavCategories(); --- @@ -32,6 +34,7 @@ const { title, description } = Astro.props; @@ -42,9 +45,12 @@ const { title, description } = Astro.props;
-
- +
+
+ +
+
@@ -72,33 +78,67 @@ const { title, description } = Astro.props; } .main-content { - padding: var(--goa-space-l); - padding-left: 0; + display: flex; min-height: 100vh; min-width: 0; /* Prevent grid blowout */ + padding: var(--goa-space-m); + padding-left: 0; + } + + .content-with-drawer { + flex: 1; + min-width: 0; + } + + /* Push drawer portal: desktop (push mode) */ + #push-drawer-portal { + margin-top: calc(-1 * var(--goa-space-m)); + margin-bottom: calc(-1 * var(--goa-space-m)); + position: sticky; + top: 0; + height: 100vh; + } + + #push-drawer-portal:has([open]) { + margin-right: calc(-1 * var(--goa-space-m)); } .content-card { - background: white; - border-radius: 24px; + background: var(--goa-color-greyscale-white); + border-radius: var(--goa-border-radius-3xl); border: 1px solid var(--goa-color-greyscale-150); - padding: var(--goa-space-xl) var(--goa-space-2xl); + --card-padding-h: var(--goa-space-2xl); + padding: var(--goa-space-xl) var(--card-padding-h); min-height: calc(100vh - var(--goa-space-l) * 2); - overflow-x: clip; /* Allows sticky toolbar to break out visually */ - /* Full-width card, page content centers itself within */ } - /* Tablet: Reduce card padding */ - @media (max-width: 1024px) { + /* Tablet: modal drawer mode (push drawer switches at 1023px) */ + @media (max-width: 1023px) { .content-card { - padding: var(--goa-space-l) var(--goa-space-xl); + --card-padding-h: var(--goa-space-xl); + padding: var(--goa-space-l) var(--card-padding-h); + } + + #push-drawer-portal { + position: static; + height: auto; + margin: 0; + } + + #push-drawer-portal:has([open]) { + margin-right: 0; + } + + /* When drawer is open, lower mobile header so scrim covers it */ + :global(.mobile-header-container:has(~ * [open])) { + z-index: 0 !important; } } /* Mobile: 624px breakpoint matches GoA components */ @media (max-width: 623px) { .layout-wrapper { - background: white; + background: var(--goa-color-greyscale-white); } .layout-container { @@ -115,13 +155,15 @@ const { title, description } = Astro.props; /* Content: full viewport, no card chrome */ .main-content { + display: block; padding: 0; } .content-card { - border-radius: 0; + border-radius: var(--goa-border-radius-none); border: none; - padding: var(--goa-space-m); + --card-padding-h: var(--goa-space-m); + padding: var(--goa-space-m) var(--card-padding-h); min-height: auto; } } diff --git a/docs/src/lib/content-queries.ts b/docs/src/lib/content-queries.ts index 6258070b98..427be4f797 100644 --- a/docs/src/lib/content-queries.ts +++ b/docs/src/lib/content-queries.ts @@ -1,4 +1,4 @@ -import { getCollection, type CollectionEntry } from 'astro:content'; +import { getCollection, type CollectionEntry } from "astro:content"; // Types for extracted API data export interface PropDefinition { @@ -23,25 +23,34 @@ export interface SlotDefinition { description: string; } +export interface SubComponentApi { + name: string; + webComponentTag: string; + description: string; + props: PropDefinition[]; + events: EventDefinition[]; + slots: SlotDefinition[]; +} + export interface ComponentApi { componentSlug: string; extractedFrom: string; - extractedAt: string; props: PropDefinition[]; events: EventDefinition[]; slots: SlotDefinition[]; + subComponents?: SubComponentApi[]; } // Load all component API JSON files at build time using Vite glob import const apiModules = import.meta.glob<{ default: ComponentApi }>( - '../../generated/component-apis/*.json', - { eager: true } + "../../generated/component-apis/*.json", + { eager: true }, ); // Build lookup map: slug -> ComponentApi const apiBySlug = new Map(); for (const [path, module] of Object.entries(apiModules)) { - const slug = path.split('/').pop()?.replace('.json', ''); + const slug = path.split("/").pop()?.replace(".json", ""); if (slug && module.default) { apiBySlug.set(slug, module.default); } @@ -63,12 +72,12 @@ export async function getComponentApi(slug: string): Promise[]> { - const allGuidance = await getCollection('guidance'); + componentSlug: string, +): Promise[]> { + const allGuidance = await getCollection("guidance"); - return allGuidance.filter(guidance => - guidance.data.appliesTo?.components?.includes(componentSlug) + return allGuidance.filter((guidance) => + guidance.data.appliesTo?.components?.includes(componentSlug), ); } @@ -76,22 +85,20 @@ export async function getGuidanceForComponent( * Get all examples that use a specific component */ export async function getExamplesForComponent( - componentSlug: string -): Promise[]> { - const allExamples = await getCollection('examples'); + componentSlug: string, +): Promise[]> { + const allExamples = await getCollection("examples"); - return allExamples.filter(example => - example.data.components.includes(componentSlug) - ); + return allExamples.filter((example) => example.data.components.includes(componentSlug)); } /** * Group guidance by topic for page section rendering */ export function groupGuidanceByTopic( - guidance: CollectionEntry<'guidance'>[] -): Record[]> { - const grouped: Record[]> = {}; + guidance: CollectionEntry<"guidance">[], +): Record[]> { + const grouped: Record[]> = {}; for (const item of guidance) { const topic = item.data.topic; @@ -105,19 +112,27 @@ export function groupGuidanceByTopic( } // Topic categories for organizing guidance (must match schema in config.ts) -export const USAGE_TOPICS = ['types', 'states', 'sizing', 'icons', 'positioning', 'content', 'other'] as const; -export const ACCESSIBILITY_TOPICS = ['screen-readers', 'keyboard', 'focus'] as const; +export const USAGE_TOPICS = [ + "types", + "states", + "sizing", + "icons", + "positioning", + "content", + "other", +] as const; +export const ACCESSIBILITY_TOPICS = ["screen-readers", "keyboard", "focus"] as const; /** * Separate guidance into usage and accessibility categories */ -export function categorizeGuidance(guidance: CollectionEntry<'guidance'>[]) { - const usageGuidance = guidance.filter(g => - USAGE_TOPICS.includes(g.data.topic as typeof USAGE_TOPICS[number]) +export function categorizeGuidance(guidance: CollectionEntry<"guidance">[]) { + const usageGuidance = guidance.filter((g) => + USAGE_TOPICS.includes(g.data.topic as (typeof USAGE_TOPICS)[number]), ); - const accessibilityGuidance = guidance.filter(g => - ACCESSIBILITY_TOPICS.includes(g.data.topic as typeof ACCESSIBILITY_TOPICS[number]) + const accessibilityGuidance = guidance.filter((g) => + ACCESSIBILITY_TOPICS.includes(g.data.topic as (typeof ACCESSIBILITY_TOPICS)[number]), ); return { @@ -131,47 +146,76 @@ export function categorizeGuidance(guidance: CollectionEntry<'guidance'>[]) { */ export async function getContentByTag(tag: string) { const [components, guidance, examples] = await Promise.all([ - getCollection('components'), - getCollection('guidance'), - getCollection('examples'), + getCollection("components"), + getCollection("guidance"), + getCollection("examples"), ]); return { - components: components.filter(c => c.data.tags?.includes(tag)), - guidance: guidance.filter(g => g.data.tags?.includes(tag)), - examples: examples.filter(e => e.data.tags?.includes(tag)), + components: components.filter((c) => c.data.tags?.includes(tag)), + guidance: guidance.filter((g) => g.data.tags?.includes(tag)), + examples: examples.filter((e) => e.data.tags?.includes(tag)), }; } /** * Get all visible components (excludes hidden) */ -export async function getVisibleComponents(): Promise[]> { - const allComponents = await getCollection('components'); - return allComponents.filter(c => !c.data.hidden); +export async function getVisibleComponents(): Promise[]> { + const allComponents = await getCollection("components"); + return allComponents.filter((c) => !c.data.hidden); } /** * Get related components from a component entry (excludes hidden) */ export async function getRelatedComponents( - relatedSlugs: string[] -): Promise[]> { - const allComponents = await getCollection('components'); + relatedSlugs: string[], +): Promise[]> { + const allComponents = await getCollection("components"); - return allComponents.filter(c => { + return allComponents.filter((c) => { if (c.data.hidden) return false; const slug = c.data.slug || c.slug; return relatedSlugs.includes(slug); }); } +/** + * Get subcomponents for a parent component by filtering its relatedComponents + * for entries marked with subcomponent: true + */ +export async function getSubcomponents( + relatedSlugs: string[] | undefined, +): Promise> { + if (!relatedSlugs?.length) return []; + + const allComponents = await getCollection("components"); + const results = []; + + for (const slug of relatedSlugs) { + const entry = allComponents.find((c) => (c.data.slug || c.slug) === slug); + if (!entry) { + console.warn(`getSubcomponents: slug "${slug}" not found in components collection`); + continue; + } + if (!entry.data.subcomponent) continue; + + const api = await getComponentApi(slug); + if (!api) continue; + + results.push({ name: entry.data.name, slug, api }); + } + + return results; +} + /** * Format topic name for display */ export function formatTopicName(topic: string): string { return topic - .split('-') - .map(word => word.charAt(0).toUpperCase() + word.slice(1)) - .join(' '); + .split("-") + .map((word) => word.charAt(0).toUpperCase() + word.slice(1)) + .join(" "); } diff --git a/docs/src/lib/nav-categories.ts b/docs/src/lib/nav-categories.ts new file mode 100644 index 0000000000..4c65da0d27 --- /dev/null +++ b/docs/src/lib/nav-categories.ts @@ -0,0 +1,72 @@ +/** + * nav-categories.ts + * + * Builds the component navigation categories from the content collection. + * Used by layouts to pass dynamic nav data to SiteNav → ComponentsSubMenu. + */ + +import { getCollection } from "astro:content"; + +/** Shape consumed by ComponentsSubMenu */ +export interface NavCategory { + name: string; + slug: string; + icon: string; + components: { name: string; slug: string }[]; +} + +/** Display metadata for each category (not stored in content collection) */ +const CATEGORY_META: Record = { + "content-layout": { name: "Content layout", icon: "grid" }, + "feedback-and-alerts": { name: "Feedback and alerts", icon: "notifications" }, + "inputs-and-actions": { name: "Inputs and actions", icon: "create" }, + "structure-and-navigation": { + name: "Structure and navigation", + icon: "browsers", + }, + utilities: { name: "Utilities", icon: "build" }, +}; + +/** + * Query the components content collection and group into nav categories. + * Filters out hidden components, sorts alphabetically within each category. + */ +export async function getNavCategories(): Promise { + const allComponents = await getCollection("components"); + const visible = allComponents.filter((c) => !c.data.hidden); + + // Group by category + const grouped = new Map(); + for (const component of visible) { + const cat = component.data.category; + if (!grouped.has(cat)) { + grouped.set(cat, []); + } + grouped.get(cat)!.push({ + name: component.data.name, + slug: component.slug, + }); + } + + // Sort components alphabetically within each category + for (const components of grouped.values()) { + components.sort((a, b) => a.name.localeCompare(b.name)); + } + + // Build the final array in a stable category order + const categoryOrder = [ + "content-layout", + "feedback-and-alerts", + "inputs-and-actions", + "structure-and-navigation", + "utilities", + ]; + + return categoryOrder + .filter((slug) => grouped.has(slug)) + .map((slug) => ({ + ...CATEGORY_META[slug], + slug, + components: grouped.get(slug)!, + })); +} diff --git a/docs/src/lib/tokens.ts b/docs/src/lib/tokens.ts index dd83d55c7f..935b336d5a 100644 --- a/docs/src/lib/tokens.ts +++ b/docs/src/lib/tokens.ts @@ -15,8 +15,10 @@ import globalTokens from "@abgov/design-tokens-v2/data/goa-global-design-tokens. export interface FlatToken { /** Full token name with CSS variable prefix (e.g., --goa-color-interactive-default) */ name: string; - /** Token value (resolved or raw) */ + /** Token value as defined (may be a reference like {color.greyscale.300}) */ value: string; + /** Resolved value for preview (follows references to get actual hex, etc.) */ + resolvedValue: string; /** Top-level category (e.g., color, space, typography) */ category: string; /** Sub-category path (e.g., interactive/default) */ @@ -60,6 +62,36 @@ function pathToCssVar(path: string[]): string { return `--goa-${path.join("-")}`; } +/** + * Check if a value is a box-shadow object (has x, y, blur, spread, color) + */ +function isBoxShadowObject( + value: unknown, +): value is { x: string; y: string; blur: string; spread: string; color: string } { + return ( + typeof value === "object" && + value !== null && + "x" in value && + "y" in value && + "blur" in value && + "spread" in value && + "color" in value + ); +} + +/** + * Convert a box-shadow object to CSS syntax + */ +function boxShadowToCss(shadow: { + x: string; + y: string; + blur: string; + spread: string; + color: string; +}): string { + return `${shadow.x}px ${shadow.y}px ${shadow.blur}px ${shadow.spread}px ${shadow.color}`; +} + /** * Format a token value for display */ @@ -70,15 +102,100 @@ function formatValue(value: string | number | object): string { if (typeof value === "number") { return String(value); } + // Convert box-shadow objects to CSS syntax + if (isBoxShadowObject(value)) { + return boxShadowToCss(value); + } // For complex values (like typography objects), stringify return JSON.stringify(value); } +/** + * Check if a value is a token reference (e.g., "{color.greyscale.300}") + */ +function isTokenReference(value: string): boolean { + return value.startsWith("{") && value.endsWith("}"); +} + +/** + * Parse a token reference path (e.g., "{color.greyscale.300}" -> ["color", "greyscale", "300"]) + */ +function parseTokenReference(value: string): string[] { + const path = value.slice(1, -1); // Remove { and } + return path.split("."); +} + +/** + * Resolve a token reference to its actual value. + * Follows references recursively until a concrete value is found. + */ +function resolveTokenReference( + value: string, + tokens: Record, + maxDepth = 10, +): string { + if (maxDepth <= 0) return value; // Prevent infinite loops + if (!isTokenReference(value)) return value; + + const path = parseTokenReference(value); + let current: unknown = tokens; + + for (const key of path) { + if (typeof current !== "object" || current === null) { + return value; // Path not found, return original + } + current = (current as Record)[key]; + } + + if (isTokenValue(current)) { + const resolvedValue = formatValue(current.value); + // Recursively resolve if the found value is also a reference + if (typeof resolvedValue === "string" && isTokenReference(resolvedValue)) { + return resolveTokenReference(resolvedValue, tokens, maxDepth - 1); + } + return resolvedValue; + } + + return value; // Couldn't resolve, return original +} + +/** + * Check if a value is a typography object (has fontFamily, fontSize, etc.) + */ +function isTypographyObject( + value: unknown, +): value is Record { + return ( + typeof value === "object" && + value !== null && + ("fontFamily" in value || "fontSize" in value || "fontWeight" in value) + ); +} + +/** + * Resolve a typography object by resolving each property's reference + */ +function resolveTypographyObject( + value: Record, + tokens: Record, +): Record { + const resolved: Record = {}; + for (const [key, val] of Object.entries(value)) { + if (typeof val === "string" && isTokenReference(val)) { + resolved[key] = resolveTokenReference(val, tokens); + } else { + resolved[key] = val; + } + } + return resolved; +} + /** * Recursively flatten the nested token structure */ function flattenTokensRecursive( obj: Record, + rootTokens: Record, path: string[] = [], results: FlatToken[] = [], ): FlatToken[] { @@ -90,13 +207,28 @@ function flattenTokensRecursive( const category = path[0] || key; const tokenPath = currentPath.slice(1).join("/"); const tokenType = value.type || "unknown"; + + // Keep original value, resolve for preview + const rawValue = formatValue(value.value); + let resolvedValue: string; + + // Handle typography objects specially - resolve each property + if (isTypographyObject(value.value)) { + const resolved = resolveTypographyObject(value.value as Record, rootTokens); + resolvedValue = JSON.stringify(resolved); + } else { + resolvedValue = + typeof rawValue === "string" ? resolveTokenReference(rawValue, rootTokens) : rawValue; + } + const isColor = tokenType === "color" || - (typeof value.value === "string" && value.value.startsWith("#")); + (typeof resolvedValue === "string" && resolvedValue.startsWith("#")); results.push({ name: pathToCssVar(currentPath), - value: formatValue(value.value), + value: rawValue, // Original value (may be a reference) + resolvedValue, // Resolved value for preview category, path: tokenPath, type: tokenType, @@ -105,18 +237,30 @@ function flattenTokensRecursive( }); } else if (typeof value === "object" && value !== null) { // Recurse into nested object - flattenTokensRecursive(value as Record, currentPath, results); + flattenTokensRecursive(value as Record, rootTokens, currentPath, results); } } return results; } +/** + * Component-specific token prefixes to exclude from the global tokens display. + * These are implementation details, not meant for direct consumer use. + */ +const EXCLUDED_TOKEN_PREFIXES = ["--goa-input-", "--goa-border-none", "--goa-fontVariationSettings"]; + /** * Get all design tokens flattened for grid display */ export function getAllTokens(): FlatToken[] { - return flattenTokensRecursive(globalTokens as Record); + const tokensObj = globalTokens as Record; + const allTokens = flattenTokensRecursive(tokensObj, tokensObj); + + // Filter out component-specific tokens + return allTokens.filter( + (token) => !EXCLUDED_TOKEN_PREFIXES.some((prefix) => token.name.startsWith(prefix)), + ); } /** @@ -138,6 +282,7 @@ export const FILTER_GROUPS: Record = { Typography: ["fontFamily", "fontSize", "fontWeight", "lineHeight", "typography"], Icon: ["iconSize"], Opacity: ["opacity"], + Motion: ["motionCurve", "transition", "translate", "motionDuration"], Shadow: ["shadow"], Space: ["space"], }; diff --git a/docs/src/pages/components/[slug].astro b/docs/src/pages/components/[slug].astro index 6a072d5ce8..8575e9583a 100644 --- a/docs/src/pages/components/[slug].astro +++ b/docs/src/pages/components/[slug].astro @@ -10,6 +10,7 @@ import { getComponentApi, getGuidanceForComponent, getExamplesForComponent, + getSubcomponents, categorizeGuidance, } from '../../lib/content-queries'; import { getComponentConfigurations } from '../../data/configurations'; @@ -32,6 +33,9 @@ const { Content } = await render(component); // 2. Get the extracted API const api = await getComponentApi(slug); +// 2b. Get subcomponent APIs (discovered via relatedComponents + subcomponent flag) +const subcomponents = await getSubcomponents(component.data.relatedComponents); + // 3. Query related guidance const allGuidance = await getGuidanceForComponent(slug); const { usage: usageGuidance, accessibility: accessibilityGuidance } = @@ -45,6 +49,8 @@ const configurations = getComponentConfigurations(slug); // GitHub issues URL for this component const githubIssuesUrl = `https://github.com/GovAlta/ui-components/issues?q=is%3Aissue+is%3Aopen+label%3A%22${encodeURIComponent(component.data.name)}%22`; + +const v1DocsUrl = `https://v1.design.alberta.ca/components/${slug}`; --- - + {api ? ( - + <> + + {api.subComponents && api.subComponents.length > 0 && ( + api.subComponents.map((sub) => ( +
+

{sub.name}

+

{sub.description}

+ +
+ )) + )} + ) : ( API documentation is automatically extracted from the component source code. )} + {subcomponents.map((sub) => ( +
+ +
+ ))}
@@ -153,6 +175,11 @@ const githubIssuesUrl = `https://github.com/GovAlta/ui-components/issues?q=is%3A
+ + View old component docs + diff --git a/docs/src/pages/foundations/accessibility.astro b/docs/src/pages/foundations/accessibility.astro new file mode 100644 index 0000000000..1163380f2d --- /dev/null +++ b/docs/src/pages/foundations/accessibility.astro @@ -0,0 +1,498 @@ +--- +/** + * Foundations - Accessibility + * + * Accessibility guidance for Government of Alberta digital products. + * Content adapted from Confluence export: + * Foundations - Accessibility. + */ +import DocumentationPageLayout from "../../layouts/DocumentationPageLayout.astro"; +import FoundationsSupportCallout from "../../components/FoundationsSupportCallout.astro"; +--- + + + Accessibility + + We design digital products that everyone can use, regardless of ability or + circumstance. This guide outlines principles, design practices, and tools to support + accessible and inclusive experiences. + + + + + + Design System components meet WCAG 2.2 Level AA standards. Teams must still ensure + accessibility across the full product experience. + + +

Accessibility and inclusion

+ + Inclusive design is broader than meeting an accessibility standard. It aims to make + experiences usable for as many people as possible, regardless of ability or + circumstance. + + + Disabilities are not always visible or permanent. Similar barriers can affect someone + with: + + +
    +
  • + Permanent needs: Long-term conditions (for example, limb difference, + ADHD). +
  • +
  • + Temporary needs: Short-term conditions (for example, a fractured arm, + low sleep). +
  • +
  • + Situational needs: Context-driven limitations (for example, bright + sunlight, one-handed use, noisy environments). +
  • +
+
+ + Designing for permanent needs often improves the experience for temporary and + situational needs too. + + + + +

+ Making digital products accessible and inclusive +

+

+ Use a mix of standards and real-world validation +

+ +
    +
  • + WCAG compliance: Use the + + Web Content Accessibility Guidelines (WCAG) + + as your baseline for web accessibility. +
  • +
  • + Usability testing: Test with a diverse set of users to confirm tasks + are clear and workflows match expectations. +
  • +
  • + Accessibility testing: Include people with disabilities in testing. + This often finds barriers that a checklist or automated scan can miss. +
  • +
+
+ + + +

Key principles of accessibility

+ + Follow + + the four WCAG principles + . + + +

Perceivable

+ + Users must be able to sense information. + + +
    +
  • Provide text alternatives for non-text content.
  • +
  • Support reflow and resizing without losing meaning.
  • +
  • Ensure content is easy to see and hear.
  • +
+
+ +

Operable

+ + Users must be able to operate all functionality. + + +
    +
  • Support full keyboard access.
  • +
  • Provide enough time to complete tasks.
  • +
  • Support clear navigation.
  • +
+
+ +

Understandable

+ + Content must be clear and predictable. + + +
    +
  • Use clear language and consistent patterns.
  • +
  • Keep interactions and layouts consistent.
  • +
  • Help users avoid and correct mistakes.
  • +
+
+ +

Robust

+ + Content must work with current and future tools. + + +
    +
  • Support different browsers and assistive technologies.
  • +
  • Use clear semantic structure.
  • +
+
+ + + +

Design considerations

+

Visuals

+

Colour contrast

+ Use a minimum ratio of: + +
    +
  • 4.5:1 for normal text.
  • +
  • 3:1 for large text.
  • +
+
+ Helpful tools include: + + + + +

Do not rely on colour alone

+ + Use icons or text alongside colour. Colour-only information or changes are hard to + distinguish for users with colour blindness or limited vision. + + +

Semantic colours

+ + Use consistent meaning, such as green for success and red for errors. + + +

Text size

+ + Use the default body text size for primary content. Smaller text sizes should be used + sparingly and only for secondary or less important information. + + +

Interactions

+

Component states

+ + Include focus, hover, active, selected, and disabled states to guide users. + + +

Target size

+ + Make clickable and touch targets at least 24 x 24 pixels, including any padding around + the content. + + +

Avoid unnecessary disabled states

+ + Allow users to attempt actions and provide guidance instead of blocking interaction + where possible. Or, hide the control until it becomes relevant. + + +

Content

+

Clear language

+ + Use simple, inclusive language. Grade 9 is a good starting point, but choose the + reading level that best fits your users and the purpose of the content. + + +

Headings and labels

+ + Use structured headings to organize content. + + +

Alternative text

+ + Provide meaningful descriptions for images and accessible labels for links and + buttons. + + +

Multimedia

+ + Provide captions or transcripts for all video and audio content. These offer a + different way for users with hearing loss, low vision, or blindness to access content. + + +

Time on task

+ +
    +
  • + Allow enough time to complete tasks, for example, completing tasks like one-time + password validation, and other sessions that may expire. +
  • +
  • Support saving and returning when tasks are longer or can be interrupted.
  • +
+
+ +

Input assistance and system feedback

+ + Provide clear instructions, inline help, and error messages that explain what happened + and how to fix it. + + +

Device-friendly design

+ +
    +
  • Ensure content remains usable when text is enlarged.
  • +
  • Design for multiple screen sizes and orientations.
  • +
+
+ + + +

Development considerations

+

ARIA (Accessible Rich Internet Applications)

+ +
    +
  • Use ARIA to add accessibility information when native HTML is not enough.
  • +
  • Design System components include default ARIA roles and behaviours.
  • +
+
+ +

Headings and structure

+ +
    +
  • + Use a logical heading structure (`H1`, `H2`, etc.) to reflect page hierarchy. +
  • +
  • + Heading level does not need to match visual size. Heading structure matters more + than styling. +
  • +
+
+ +

Dynamic content

+ + Dynamic updates must be accessible. Here are some ways to handle dynamic content for + accessibility: + + +

ARIA live regions

+ + ARIA live regions let assistive technologies announce updates to page content without + a full page reload. Use: + + +
    +
  • aria-live="polite" for non-urgent updates.
  • +
  • aria-live="assertive" for important updates.
  • +
  • aria-live="off" to disable announcements.
  • +
+
+ + See the Callout and + Notification components for examples of how updates + are handled for assistive technology. + + +

Form updates

+ + Notify users when form changes or new fields appear. Use ARIA role="alert" or live regions to notify users when new questions show up. + + +

Managing focus

+ + Manage focus to help users understand where they are after dynamic content loads. For + example: + + +
    +
  • Move focus to newly opened dialogs.
  • +
  • Return focus when dialogs close.
  • +
+
+ + + + Provide a "Skip to content" link so keyboard and screen reader users can + bypass repeated navigation: + + +
    +
  • Place it early in the DOM.
  • +
  • Make it visible on focus.
  • +
  • Move focus to the main content region when activated.
  • +
+
+ +

Keyboard navigation

+ + Keyboard navigation is important for users who only use a keyboard to interact with + websites and apps. It allows them to move around and do things without a mouse or + touch screen. + + +
    +
  • Ensure all interactive elements work with keyboard input.
  • +
  • Provide a clear, visible focus indicator.
  • +
+
+ +

Optimizing performance

+ + Faster loading and responsiveness improves accessibility for people on older devices, + slower connections, or mobile networks. + + + + +

Accessibility testing

+ + Use manual testing (with screen readers) and automated tools. + + +

Screen readers

+ + + + +

Automated tools

+ + + + + + +

Additional resources

+ + + + + +
diff --git a/docs/src/pages/foundations/brand-guidelines.astro b/docs/src/pages/foundations/brand-guidelines.astro new file mode 100644 index 0000000000..654ed6007c --- /dev/null +++ b/docs/src/pages/foundations/brand-guidelines.astro @@ -0,0 +1,126 @@ +--- +/** + * Foundations - Brand guidelines + * + * Brand guidance and supporting resources for Government of Alberta digital products. + * Content adapted from Confluence export: + * Foundations - Brand guidelines. + */ +import DocumentationPageLayout from '../../layouts/DocumentationPageLayout.astro'; +import FoundationsSupportCallout from '../../components/FoundationsSupportCallout.astro'; +--- + + + Brand guidelines + + Communications and Public Engagement (CPE) plays an important role in providing and maintaining + brand identity guidelines across the Government of Alberta. These guidelines ensure all digital + products are consistent and easily recognizable, building trust with users. + + + + +

Brand guidelines resources

+ + The DDD design system follows brand guidelines defined by Communications and Public Engagement. + Additional guidelines and resources offered by CPE should also be followed and designers within + DDD should use these resources as needed. + + + For more details on additional guidelines and styles adopted from CPE, please explore the + following links: + + +

Iconography

+ + Besides the icon guidelines and sets provided by DDD's design system, designers can use + CPE's + + icon generator + . This is particularly useful when icons need a more detailed or illustrative style. + + +

Photography

+ + Government of Alberta digital products must follow the photography guidelines set by CPE. For + guidance, see + + CPE's visual identity manual + . + + +

Content

+ + When creating content for web interfaces, refer to the + + content guides + + section on the digital experience standards page on + + Alberta.ca + . + + +

Digital experience standard compliance and policies

+ + CPE's digital experience standard helps ensure that digital products meet required + governance and standards. Refer to the links below to ensure your digital products comply with + Government of Alberta policies: + + + + + + For questions regarding brand guidelines or information in the links above, reach out to CPE + at visual@gov.ab.ca. + + + +
diff --git a/docs/src/pages/foundations/content-guidelines/capitalization.astro b/docs/src/pages/foundations/content-guidelines/capitalization.astro new file mode 100644 index 0000000000..29e5952c2d --- /dev/null +++ b/docs/src/pages/foundations/content-guidelines/capitalization.astro @@ -0,0 +1,233 @@ +--- +/** + * Foundations - Content guidelines - Capitalization + * + * Capitalization guidance for Government of Alberta digital products. + * Content adapted from Confluence export: + * Foundations -> Content guidelines -> Capitalization. + */ +import DocumentationPageLayout from "../../../layouts/DocumentationPageLayout.astro"; +import FoundationsSupportCallout from "../../../components/FoundationsSupportCallout.astro"; +import DoDont from "../../../components/DoDont.astro"; +import Preview from "../../../components/Preview.astro"; +--- + + + Capitalization + + Use sentence case for all headings, labels, and content. + + + + +

Sentence case

+ + Sentence case means everything is lowercase except for the + first word of a label, phrase, or sentence. It follows the natural + patterns of written language, which makes text easier to scan and comprehend. + + + Use sentence case in most titles and headings. Only capitalize the + first word of a sentence or title. + + +
+ + + + + Applicant admission requirements + + + An Alberta high school diploma or non-Alberta Canadian equivalent is required. + + + + + + + + + + Document types will gradually be made available. If you need to file an + UNSUPPORTED DOCUMENT TYPE, you must file via the existing email filing + procedure or it will be rejected by the digital service. + + + + + + + + + + Find available dates for Civil Regular Chambers, Family Docket Court, or + Applications Judges Chambers in Edmonton or Calgary. + + + + + + + + + + Before the alberta digital filing services, the only way to file court + documents was in person or through email. + + + + +
+ + + There are many chief operating officers, so chief operating officer is a + common noun. + There is only one John Doe, Chief Operating Officer, so it is a + proper noun. + + + + +

Title case

+ + Title case may be used in certain situations, including: + + +
    +
  • proper nouns
  • +
  • brands
  • +
  • products
  • +
  • service names
  • +
+
+ + A proper noun is the name of a particular person, place, organization, + or thing. + + Examples: + +
    +
  • Margaret
  • +
  • Calgary
  • +
  • Government of Alberta
  • +
  • Community Initiatives Program
  • +
+
+ +
+ + + + Country/Region + On/Off + + + + + + + + Personal: Employment + Personal: Education + + + + + + + + Submitting adjournment Pre-Court + + + +
+ + + +

Uppercase

+ + When displaying information pulled from legacy systems, some content + may need to remain in capital letters due to system limitations. + + + Use this style only when required, because uppercase: + + +
    +
  • is less readable
  • +
  • is less accessible
  • +
  • creates the perception of emphasis
  • +
+
+ + Whenever possible, convert the content to sentence case for better readability. + + + + +

References

+ + + + + +
+ + diff --git a/docs/src/pages/foundations/content-guidelines/date-format.astro b/docs/src/pages/foundations/content-guidelines/date-format.astro new file mode 100644 index 0000000000..bd841e4da2 --- /dev/null +++ b/docs/src/pages/foundations/content-guidelines/date-format.astro @@ -0,0 +1,575 @@ +--- +/** + * Foundations - Content guidelines - Date format + * + * Date and time formatting guidance for Government of Alberta digital products. + * Content adapted from Confluence export: + * Foundations -> Content guidelines -> Date format. + */ +import DocumentationPageLayout from "../../../layouts/DocumentationPageLayout.astro"; +import FoundationsSupportCallout from "../../../components/FoundationsSupportCallout.astro"; +import DoDont from "../../../components/DoDont.astro"; +import Preview from "../../../components/Preview.astro"; + +const monthAbbreviations = [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec", +]; +const dayAbbreviations = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]; + +const standardTimeZones = [ + ["PST", "Pacific standard time", "Standard time used in the Pacific time zone"], + ["MST", "Mountain standard time", "Standard time used in the Mountain time zone"], + ["CST", "Central standard time", "Standard time used in the Central time zone"], + ["EST", "Eastern standard time", "Standard time used in the Eastern time zone"], + ["AST", "Atlantic standard time", "Standard time used in the Atlantic time zone"], + [ + "NST", + "Newfoundland standard time", + "Standard time used in the Newfoundland time zone", + ], +]; + +const daylightTimeZones = [ + ["PDT", "Pacific daylight time", "Daylight saving time used in the Pacific time zone"], + [ + "MDT", + "Mountain daylight time", + "Daylight saving time used in the Mountain time zone", + ], + ["CDT", "Central daylight time", "Daylight saving time used in the Central time zone"], + ["EDT", "Eastern daylight time", "Daylight saving time used in the Eastern time zone"], + [ + "ADT", + "Atlantic daylight time", + "Daylight saving time used in the Atlantic time zone", + ], + [ + "NDT", + "Newfoundland daylight time", + "Daylight saving time used in the Newfoundland time zone", + ], +]; +--- + + + Date format + + Use consistent date formats to ensure clarity and reduce confusion across Government + of Alberta digital products. Dates should be easy to read, easy to understand, and + accessible across different contexts. + + + + +

Conversational and long-form dates

+ + Use long-form dates in narrative contexts such as: + + +
    +
  • Instructions
  • +
  • Descriptions
  • +
  • Help content
  • +
  • Notifications
  • +
+
+ + + Month day, year (for example, March 14, 2026) + + + + This format follows the Canadian Style Guide. + + +
+ + + + March 14, 2026 + + + + + + + + March 14 + + + + + + + + March 14th, 2026 + + + + + + + + MARCH 14th, 2026 + + + + + + + + March 14, 26 + + + +
+ + + +

Short-form dates

+ + Use short-form dates when space is limited, such as in: + + +
    +
  • Tables
  • +
  • Forms
  • +
  • Summary pages
  • +
  • Mobile layouts
  • +
+
+ + The format remains the same but uses a three-letter month abbreviation. + + +

Format

+ Month cardinal day, year + +

Examples

+ +
    +
  • + Jan 14, 2026 +
  • +
  • + Feb 6, 2026 +
  • +
+
+ +

Month abbreviations

+
    + {monthAbbreviations.map((month) =>
  • {month}
  • )} +
+ +
+ + + + Mar 14, 2026 + + + + + + + + Mar 14, 26 + + + + + + + + Mar. 14, 26 + + + + + + + + MAR 14, 26 + + + + + + + + Mar 07, 26 + + + + + + + + 03/07/2026 + 07/03/2026 + + + +
+ + + +

Including the day of the week

+ + Include the day of the week when it helps users better understand the date. + + +

Format

+ + Day-of-the-week, month cardinal day, year + + +

Example

+ Friday, March 14, 2026 + + Short-form day abbreviations may also be used. + + +
    +
  • + Tue, Jan 13, 2026 +
  • +
  • + Wed, Feb 18, 2026 +
  • +
+
+ +

Day abbreviations

+
    + {dayAbbreviations.map((day) =>
  • {day}
  • )} +
+ +
+ + + + Monday, March 16, 2026 + Mon, Mar 16, 2026 + + + + + + + + Monday, Mar 16, 2026 + Mon, March 16, 2026 + + + + + + + + Mon; March 16, 2026 + + + + + + + + Monday March 16, 2026 + + + +
+ +

Best practice

+ + Avoid including the day of the week in: + + +
    +
  • Tables
  • +
  • Forms
  • +
  • Summary views
  • +
+
+ + This can add unnecessary visual clutter. + + + + +

Time format

+ + Use the 12-hour clock format. Write am and pm + in lowercase without periods. + + +

Examples

+ +
    +
  • 8:00 am
  • +
  • 11:45 pm
  • +
+
+ +

Date with time

+ + When a date and time appear together, write the date first, followed by + at and the time. + + +

Format

+ + Day-of-the-week, month cardinal day, year at time + + +

Example

+ +
    +
  • Friday, March 14, 2026 at 2:26 pm
  • +
+
+ +
+ + + + Monday, March 16, 2026 at 3:30 pm + + + + + + + + 08:15am + + + + + + + + 4:43 p.m. + + + + + + + + 7:55 am on Monday, March 16, 2026 + + + +
+ + + +

Time zones

+ + Include time zones when needed. You may use either the long form or the abbreviated form. + + +

Long form

+ Write the full name in parentheses. + Example: + +
    +
  • 8:00 am (Eastern standard time)
  • +
+
+ +

Short form

+ Use a three-letter abbreviation. + Example: + +
    +
  • 11:45 pm PDT
  • +
+
+ +

Canadian time zones

+

Standard time

+ + + + + + + + + + + { + standardTimeZones.map(([abbreviation, fullName, description]) => ( + + + + + + )) + } + +
AbbreviationFull nameDescription
{abbreviation}{fullName}{description}
+
+ +

Daylight saving time

+ + From mid-March to early November, most time zones observe daylight saving time, when + clocks are moved ahead by one hour. + + + In Alberta daylight saving time begins on the second Sunday in March at 2:00 am + and returns to standard time on the first Sunday in November at 2:00 am. + + + + + + + + + + + + + { + daylightTimeZones.map(([abbreviation, fullName, description]) => ( + + + + + + )) + } + +
AbbreviationFull nameDescription
{abbreviation}{fullName}{description}
+
+ +
+ + + + 4:43pm (MST) + + + +
+ + + +

Accessibility and screen readers

+ + Dates should be readable for assistive technologies. Use accessible formatting when + presenting dates in code. Refer to + + + accessible-date + + + for guidance. + + +

Example HTML

+
<time id="timestamp" datetime="2001-05-15T19:30">
+  May 15, 2001 - 7:30 pm
+</time>
+ + Some screen readers may read this as: + + "May one five, two zero zero one, seven three zero pm" + + + Using the accessible-date npm module improves the reading experience. + +

Example output:

+ + "Tuesday, May fifteenth, two-thousand one at seven thirty pm" + + + + The date time variables entered into the module for producing readable and + conversational dates need to be rendered in ISO 8601 format. + + + +
+ + diff --git a/docs/src/pages/foundations/content-guidelines/error-messages.astro b/docs/src/pages/foundations/content-guidelines/error-messages.astro new file mode 100644 index 0000000000..445d68d2b3 --- /dev/null +++ b/docs/src/pages/foundations/content-guidelines/error-messages.astro @@ -0,0 +1,554 @@ +--- +/** + * Foundations - Content guidelines - Error messages + * + * Error message guidance for Government of Alberta digital products. + * Content adapted from Confluence export: + * Foundations -> Content guidelines -> Error messages. + */ +import DocumentationPageLayout from "../../../layouts/DocumentationPageLayout.astro"; +import FoundationsSupportCallout from "../../../components/FoundationsSupportCallout.astro"; +import DoDont from "../../../components/DoDont.astro"; +import Preview from "../../../components/Preview.astro"; + +interface PatternGroup { + id: string; + title: string; + intro: string; + explicitExample?: string; + doDescription: string; + doExamples: string[]; + dontDescription: string; + dontExamples: string[]; +} + +const anatomyPoints = [ + "An error message displayed below the input", + 'An 18px "warning" icon', + "Red error text", + "A red border on the input", +]; + +const languageToneGuidance = [ + { + id: "be-clear-and-concise", + title: "Be clear and concise", + body: "Use short, direct language that helps users quickly understand the problem.", + }, + { + id: "be-specific", + title: "Be specific", + body: "Explain what information is required and what the user needs to do.", + }, + { + id: "provide-a-solution", + title: "Provide a solution", + body: "Always include clear instructions that help the user resolve the issue. When possible, include an example.", + }, + { + id: "be-empathetic", + title: "Be empathetic", + body: "Use a human tone that acknowledges the user's experience and avoids blaming language.", + }, +]; + +const commonPatterns: PatternGroup[] = [ + { + id: "input-is-empty", + title: "Input is empty", + intro: "This error appears when a required input is left blank.", + explicitExample: + "[Action] + [Label] = Enter a first name", + doDescription: "Provide clear instructions.", + doExamples: ["Enter a first name.", "Enter email address."], + dontDescription: "Don't use vague or non-actionable messages.", + dontExamples: ["First name is required."], + }, + { + id: "incorrect-information-format", + title: "Incorrect information format", + intro: + "This error appears when users enter information in an invalid format, such as a postal code or phone number. Include a clear solution and an example.", + explicitExample: + "[Action] + a valid + [Label] + such as + [correct format] = Enter a valid postal code, such as T3R 8Y2", + doDescription: "Provide a clear positive solution with an example.", + doExamples: ["Enter a valid postal code, such as T3Y 8Y2."], + dontDescription: "Don't use negative language without a solution.", + dontExamples: ["Postal code entered above is not correct."], + }, + { + id: "error-with-a-date-entry", + title: "Error with a date entry", + intro: + "This error appears when a date does not meet the required criteria. Provide clear rules or acceptable ranges.", + explicitExample: + "[Topic] + must be + [duration] = Start date must be within study period.", + doDescription: "Give the user a clear idea of the acceptable date range.", + doExamples: ["The study period must be between 3 and 52 weeks."], + dontDescription: "Don't provide unclear explanations.", + dontExamples: ["Study period must be longer than 3 and shorter than 52 weeks."], + }, + { + id: "error-within-a-value-range", + title: "Error within a value range", + intro: "This error appears when a value exceeds or falls below allowed limits.", + explicitExample: + "[Label] + cost/amount/fee + must be + [qualifier] + [amount] = Tuition cost must be lower than $20,000", + doDescription: "Provide the correct value when known.", + doExamples: ["Books and materials cost must be lower than $4,000."], + dontDescription: "Don't show errors without explaining the acceptable value.", + dontExamples: ["You have exceeded the maximum amount."], + }, + { + id: "input-outside-accepted-values", + title: "Input outside accepted values", + intro: "This error appears when an input does not meet required constraints.", + explicitExample: + "[Label] + must be between + [# number] and [# number] + digits. = PID must be between 10 and 15 digits.", + doDescription: "Provide a clear acceptable range.", + doExamples: ["PID must be between 10 and 15 digits."], + dontDescription: "Don't provide an unclear solution.", + dontExamples: ["PID must be at least 10 digits."], + }, +]; + +const uploadPatterns: PatternGroup[] = [ + { + id: "wrong-file-type", + title: "Wrong file type", + intro: "", + explicitExample: + "The selected file + must be + [List of accepted file formats] = The selected file must be PDF, JPEG, PNG, or TIFF", + doDescription: "Provide a list of accepted formats.", + doExamples: ["The selected file must be a PDF, JPG, PNG, or TIFF."], + dontDescription: "Don't use long or unclear wording.", + dontExamples: [ + "Unsupported file format. Please try again with below mentioned formats. PDF, JPEG, PNG or TIFF file type(s).", + ], + }, + { + id: "file-too-large", + title: "File too large", + intro: "", + explicitExample: + "The selected file + must be + [qualifier] + [size limit] = The selected file must be less than 5 MB", + doDescription: "Provide the exact file size limit.", + doExamples: ["The selected file must be less than 5 MB."], + dontDescription: "Don't provide vague instructions.", + dontExamples: ["File size over limit. Please try again."], + }, + { + id: "file-upload-failed", + title: "File upload failed", + intro: "", + explicitExample: + "[Problem statement] + [guided solution] = We experienced an error while uploading your file. Please try again", + doDescription: "Use empathetic language and take responsibility.", + doExamples: ["File upload error. Please try again."], + dontDescription: "Don't use blunt or accusing language.", + dontExamples: ["Your file upload failed."], + }, + { + id: "duplicate-file-uploaded", + title: "Duplicate file uploaded", + intro: "", + explicitExample: + "[Problem statement] + [guided solution] = This file is already uploaded. Please upload a different one.", + doDescription: "Clearly explain the issue and next step.", + doExamples: ["This file has already been uploaded. Please upload a different file."], + dontDescription: "Don't use negative phrasing without guidance.", + dontExamples: ["Duplicate files are not accepted."], + }, + { + id: "no-file-selected", + title: "No file selected", + intro: "", + explicitExample: + "[Action] + [label] = Upload a work permit", + doDescription: "Provide clear instructions.", + doExamples: ["Upload a work permit."], + dontDescription: "Don't use vague messages.", + dontExamples: ["Document required."], + }, +]; + +const formatPatterns: PatternGroup[] = [ + { + id: "invalid-characters-used", + title: "Invalid characters used", + intro: "This error appears when unsupported characters are entered.", + explicitExample: + "You may only use + [valid characters] = You may only use Aa-Zz, 0-9, hyphen, and space.", + doDescription: "Provide the list of allowed characters.", + doExamples: [ + "You may only use A-Z, a-z, 0-9, accents, periods, apostrophes, hyphens, and spaces.", + ], + dontDescription: "Don't state the guided solution in two parts.", + dontExamples: [ + "You may only use letters, numbers and the following special characters; accents, a period, apostrophe, hyphen or space.", + ], + }, + { + id: "accepted-characters-are-known", + title: "Accepted characters are known", + intro: + "When the accepted characters are known, include an example in the error message.", + explicitExample: + "[Label] + must include + [accepted characters] + (only)*, + such as + [example] = Alberta Bar ID must include numbers only, such as 123456", + doDescription: "Provide a clear guided solution.", + doExamples: ['Alberta Bar ID must include numbers only, such as "12345."'], + dontDescription: "Don't use unclear or wordy phrasing.", + dontExamples: [ + "The Alberta Bar ID must consist of numerical digits only e.g. 12345.", + ], + }, + { + id: "incorrect-number-of-characters", + title: "Incorrect number of characters", + intro: "This error appears when the input length is incorrect.", + explicitExample: + "[Label] + must be + [# number] digits = Mobius reference number must be 10 digits", + doDescription: "Provide clear numeric requirements.", + doExamples: ["The Mobius reference number must be 10 digits."], + dontDescription: "Don't display numbers in letters.", + dontExamples: ["Ensure Mobius reference number is ten digits."], + }, +]; +--- + + + Error messages + + Error messages appear when a user's action cannot be completed. They help users + understand what went wrong and how to fix the problem. Error messages should be clear, + concise, and actionable, guiding users toward a successful outcome. + + + + +

Anatomy

+ + When a user enters invalid or unexpected information, an error message appears below + the input. + + Error states include: + +
    + {anatomyPoints.map((point) =>
  • {point}
  • )} +
+
+ + These elements help users quickly identify and correct the issue. + + + + + + + + + + + + + + + + +

Helper text

+ + When helper text and an error message appear together, the error message should appear + above the helper text. + + +
+ + + + + + + + + + + + + + + +
+ + + +

Input border

+
+ + + + + + + + + + +
+ + + +
+
+
+
+ + + +

File uploader

+ + Error messages should appear below the file uploader. + + + Refer to the + + File uploader + + for implementation guidance. + + +
+ + + + + + + + + + +
+ + + +
+
+
+
+ + + +

Language and tone

+ { + languageToneGuidance.map((item) => ( + <> +

{item.title}

+ + {item.body} + + + )) + } + + + +

Common error message patterns

+ + Use the patterns below when writing error messages for common situations. + + + { + commonPatterns.map((pattern) => ( + <> +

{pattern.title}

+ + {pattern.explicitExample && ( + +
+ +
+
+ )} + +
+ {pattern.doExamples.map((example) => ( + + + + + + + + ))} + + {pattern.dontExamples.map((example) => ( + + + + + + + + ))} +
+ + )) + } + + + +

Upload errors

+ + Upload errors appear below the file uploader. + + These errors may occur when: + +
    +
  • An unsupported file format is uploaded
  • +
  • The file size exceeds the limit
  • +
  • The upload fails
  • +
  • A duplicate file is uploaded
  • +
  • A required file is missing
  • +
+
+ + { + uploadPatterns.map((pattern) => ( + <> +

{pattern.title}

+ {pattern.explicitExample && ( + +
+ +
+
+ )} +
+ {pattern.doExamples.map((example) => ( + + + + + + + + ))} + + {pattern.dontExamples.map((example) => ( + + + + + + + + ))} +
+ + )) + } + + + +

Format errors

+ { + formatPatterns.map((pattern) => ( + <> +

{pattern.title}

+ + {pattern.explicitExample && ( + +
+ +
+
+ )} + +
+ {pattern.doExamples.map((example) => ( + + + + + + + + ))} + + {pattern.dontExamples.map((example) => ( + + + + + + + + ))} +
+ + )) + } + + +
+ + diff --git a/docs/src/pages/foundations/content-guidelines/helper-text.astro b/docs/src/pages/foundations/content-guidelines/helper-text.astro new file mode 100644 index 0000000000..565e5ff3d8 --- /dev/null +++ b/docs/src/pages/foundations/content-guidelines/helper-text.astro @@ -0,0 +1,472 @@ +--- +/** + * Foundations - Content guidelines - Helper text + * + * Helper text guidance for Government of Alberta digital products. + * Content adapted from Confluence export: + * Foundations -> Content guidelines -> Helper text. + */ +import DocumentationPageLayout from "../../../layouts/DocumentationPageLayout.astro"; +import FoundationsSupportCallout from "../../../components/FoundationsSupportCallout.astro"; +import DoDont from "../../../components/DoDont.astro"; +import Preview from "../../../components/Preview.astro"; + +interface HelperTextCard { + label: string; + helper: string; + description: string; +} + +interface HelperTextType { + id: string; + title: string; + intro: string; + examples?: string[]; + doCards: HelperTextCard[]; + dontCards: HelperTextCard[]; +} + +const supportedControls = [ + { + label: "Text inputs", + href: "/components/text-area", + }, + { + label: "Radios", + href: "/components/radio-group", + }, + { + label: "Dropdowns", + href: "/components/dropdown", + }, + { + label: "Checkboxes", + href: "/components/checkbox", + }, + { + label: "Buttons", + href: "/components/button", + }, +]; + +const anatomyStructure = ["Input label", "Input control", "Helper text"]; + +const helperTextQualities = ["Short", "Persistent", "Directly related to the input"]; + +const longFormAlternatives = [ + { label: "Accordion", href: "/components/accordion" }, + { label: "Callout", href: "/components/callout" }, + { label: "Details", href: "/components/details" }, + { label: "Tooltip", href: "/components/tooltip" }, +]; + +const languageToneGuidance = [ + { + id: "keep-it-concise", + title: "Keep it concise", + body: "Use short statements. Avoid long explanations.", + }, + { + id: "use-plain-language", + title: "Use plain language", + body: "Write in a way that is easy for users to understand. Avoid technical jargon.", + }, + { + id: "be-specific", + title: "Be specific", + body: "Clearly describe the information required.", + }, + { + id: "provide-examples-when-helpful", + title: "Provide examples when helpful", + body: 'Examples clarify formatting expectations. For example: "Enter a phone number, such as 403-123-4567"', + }, + { + id: "use-digits-for-numbers", + title: "Use digits for numbers", + body: 'Write numbers using digits unless a sentence begins with a number. For example: "342 days remaining until you graduate."', + }, +]; + +const helperTextTypes: HelperTextType[] = [ + { + id: "disclosure", + title: "Disclosure", + intro: + "Explains why information is needed or how it will be used.", + examples: [ + "Your full name is used for verification", + "Emails will be sent in your language of choice", + "This address will receive your printed certificate", + "Your birthdate is used to verify your eligibility", + ], + doCards: [ + { + label: "Email", + helper: "This email will receive update and communications", + description: "Explain how the information will be used.", + }, + ], + dontCards: [ + { + label: "Comments", + helper: "May be seen by others", + description: "Don't use vague statements that do not explain the purpose.", + }, + ], + }, + { + id: "instructional", + title: "Instructional", + intro: "Explains how to use the input or interact with the control.", + examples: [ + "Search by staff name or certification number", + "Select an existing project or create a new project name", + "Type your search terms to see results", + "Select a file to upload for verification", + ], + doCards: [ + { + label: "Project name", + helper: "Select an existing project or create a new project name", + description: + "Start with a directive verb for example, Search, Select, Enter, Choose, or Upload", + }, + { + label: "Staff search", + helper: "Select by staff name or certification number", + description: "Summarize directions or intended interaction.", + }, + ], + dontCards: [ + { + label: "Project name", + helper: "Carefully select an existing or create a new project name", + description: "Don't begin with polite phrases such as Please or Thank you.", + }, + { + label: "Reason for request", + helper: "Complete this field to continue", + description: "Don't use vague instructions about the information required.", + }, + ], + }, + { + id: "restrictive", + title: "Restrictive", + intro: "Defines rules or requirements for an input.", + examples: [ + "Must be 8 or more characters with one uppercase letter and one number", + "Must be 5 MB or smaller", + "Choose a date within the last six months", + "Password must contain 1 uppercase letter and 1 number", + ], + doCards: [ + { + label: "Proponent names", + helper: "Provide all proponent names", + description: "Clearly describe requirements or limits", + }, + ], + dontCards: [ + { + label: "Region code", + helper: "Only digits <= 9 are acceptable", + description: + "Don't write comparisons in symbols rather than words. For example, use \"less than or equal to 0\" instead of \"<= 9\"", + }, + ], + }, + { + id: "formatting", + title: "Formatting", + intro: "Helper text should follow consistent formatting.", + doCards: [ + { + label: "Social Insurance Number", + helper: "Social Insurance Number must be exactly 9 digits in length", + description: "Use sentence case.", + }, + ], + dontCards: [ + { + label: "Social Insurance Number", + helper: "Social Insurance number must be exactly 9 digits in length.", + description: "Don't use a period at the end of the helper text", + }, + ], + }, +]; + +function buildFieldName(...parts: string[]) { + return parts + .join("-") + .toLowerCase() + .replace(/[^a-z0-9]+/g, "-") + .replace(/^-|-$/g, ""); +} +--- + + + Helper text + + Helper text provides additional context or guidance displayed + below an input field. It helps users understand what information is + required or how to complete a field before moving to the next step in a form or + process. + + + + Helper text can be used with: + + +
    + { + supportedControls.map((item) => ( +
  • + + {item.label} + +
  • + )) + } +
+
+ + + +

Anatomy

+ + Helper text appears directly below the input control. + + Structure: + +
    + {anatomyStructure.map((item) =>
  1. {item}
  2. )} +
+
+ + Helper text should clearly relate to the associated input. + + + Annotated helper text anatomy showing an input label, input control, and helper text. + + + +

When to use helper text

+ + Use helper text when users need brief guidance before interacting with an input. + + Helper text should be: + +
    + {helperTextQualities.map((item) =>
  • {item}
  • )} +
+
+ + Do not use helper text for long explanations. + + + For longer or descriptive information, use: + + +
    + { + longFormAlternatives.map((item) => ( +
  • + + {item.label} + +
  • + )) + } +
+
+ + + +

Language and tone

+ { + languageToneGuidance.map((item) => ( + <> +

{item.title}

+ + {item.body} + + + )) + } + + Refer to the + + + Web writing style guide - Plain language + + + . + + + Refer to the + + + Web writing style guide - Numbers and measurements + + + . + + + + +

Types of helper text

+ + Helper text generally falls into three categories. + + + { + helperTextTypes.map((section) => ( + <> +

{section.title}

+ + + Examples: + + +
    + {section.examples && section.examples.map((example) =>
  • {example}
  • )} +
+
+ +
+ {section.doCards.map((card) => ( + + +
+ + + +
+
+
+ ))} + + {section.dontCards.map((card) => ( + + +
+ + + +
+
+
+ ))} +
+ + )) + } + + + +

Accessibility

+ + Helper text should be associated with the input using the + aria-describedby attribute. This ensures screen readers can provide the + same context to users who rely on assistive technology. + + + Refer to: + + + + + + +
+ + diff --git a/docs/src/pages/foundations/index.astro b/docs/src/pages/foundations/index.astro index 5837c38e31..6f8f78ee7c 100644 --- a/docs/src/pages/foundations/index.astro +++ b/docs/src/pages/foundations/index.astro @@ -2,141 +2,117 @@ /** * Foundations - Landing Page * - * Placeholder demonstrating the DocumentationPageLayout template. - * Content will be migrated from existing documentation in Brief 30. + * Design foundations and experience guidelines for the Government of Alberta. + * Content adapted from Confluence export: + * Foundations - Design at GoA. */ -import DocumentationPageLayout from '../../layouts/DocumentationPageLayout.astro'; +import DocumentationPageLayout from "../../layouts/DocumentationPageLayout.astro"; +import FoundationsSupportCallout from "../../components/FoundationsSupportCallout.astro"; --- - Foundations - - The foundations of the design system define the core visual language and principles that - ensure consistency across all Government of Alberta digital services. + Design at the Government of Alberta + + Citizens expect digital products that are modern, easy to use, and consistent. To meet + these needs, our digital products must follow our user experience guidelines and + should be tested frequently to make continuous improvement and stay relevant. - - This page demonstrates the documentation template. Detailed foundations content will be - migrated from the current design system website in a future update. -

- View current Foundations documentation -
+ -

Design principles

- - Our design principles guide every decision we make when building government services. - They help teams create experiences that are consistent, accessible, and user-centered. +

User experience guidelines

+ + Government of Alberta digital products will deliver an experience in alignment to the + following guidelines: - +
  • - Start with user needs: Design services that meet the needs of Albertans, - not the needs of government processes. + User-centered: Designed with a clear understanding of users, their + goals, tasks, environments, and context of use, using user-centered design methods.
  • - Be inclusive: Create services that work for everyone, regardless of - ability, device, or connectivity. + Usable: Interfaces will be easy to use, enabling users to find the + information they need and complete tasks successfully.
  • - Keep it simple: Remove complexity and help users accomplish their tasks - with minimal effort. + Accessible: Digital products will be inclusive, ensuring usability + for everyone, regardless of physical or cognitive ability.
  • - Be consistent: Use familiar patterns so users can transfer their knowledge - between services. + Trustworthy: Experiences will feel familiar and recognizable as a Government + of Alberta product, ensuring users' security and privacy. +
  • +
  • + Modern: Digital experiences will meet present-day user expectations + and preferences for aesthetics and interaction.
-

Typography

- - Typography creates hierarchy and rhythm in our interfaces. We use the Acumin Pro font family - for headings and body text across all services. + + To get guidance on how to deliver an experience aligned with the guidelines, download + the + + Design Release Checklist + . -

Type scale

- - Our type scale is based on a modular scale that ensures consistent proportions between - heading levels and body text. Use these sizes through design tokens: - - -
    -
  • --goa-typography-heading-xl - Page titles
  • -
  • --goa-typography-heading-l - Section headings
  • -
  • --goa-typography-heading-m - Subsection headings
  • -
  • --goa-typography-body-l - Lead paragraphs
  • -
  • --goa-typography-body-m - Body text
  • -
  • --goa-typography-body-s - Captions and labels
  • -
-
+ -

Color

- - Our color palette is designed to meet WCAG 2.1 AA contrast requirements while maintaining - the Government of Alberta's visual identity. +

Usability testing

+ + Usability testing is our preferred method to ensure digital products meet our + usability guidelines. - -

Color categories

- + + Effective usability testing includes: + +
  • - Brand colors: The primary blue represents the Government of Alberta brand. + Diverse user group: Real users from different demographic, behavioural + backgrounds, and geographical regions within Alberta that will experience the problem + or benefit of the product.
  • - Interactive colors: Used for links, buttons, and focusable elements. + Inclusive testing: Users with various physical and/or cognitive abilities, + literacy levels, and tech savviness.
  • - Status colors: Communicate success, warning, error, and information states. + Device variety: A diverse range of devices that reflect users' + preferred choice when interacting with government services.
  • - Greyscale: Used for text, borders, and backgrounds. + Tasks: Activities that cover tasks and service process from end-to-end.
- - Color accessibility - - All color combinations in the design system have been tested to ensure they meet or exceed - WCAG 2.1 AA contrast ratios. Interactive elements maintain a minimum 4.5:1 contrast ratio - with their backgrounds. - - - -

Spacing

- - Consistent spacing creates visual rhythm and helps users scan content. Our spacing scale - uses an 8-pixel base unit. + + Frequent usability testing is required to maintain product usability, effectiveness, + and alignment to product and user needs as they evolve over time. - -

Spacing tokens

- - Use these tokens instead of hard-coded pixel values: - - -
    -
  • --goa-space-2xs - 4px (0.25rem)
  • -
  • --goa-space-xs - 8px (0.5rem)
  • -
  • --goa-space-s - 12px (0.75rem)
  • -
  • --goa-space-m - 16px (1rem)
  • -
  • --goa-space-l - 24px (1.5rem)
  • -
  • --goa-space-xl - 32px (2rem)
  • -
  • --goa-space-2xl - 48px (3rem)
  • -
  • --goa-space-3xl - 64px (4rem)
  • -
+ + For guidance on the process of usability testing, refer to + + Understanding Usability + . -

Accessibility

- - All Government of Alberta digital services must meet WCAG 2.1 Level AA requirements. - The design system is built with accessibility as a core requirement, not an afterthought. - - - We are actively updating components to meet WCAG 2.2 requirements as they become the - standard for government digital services. - +
diff --git a/docs/src/pages/foundations/style-guide/colour.astro b/docs/src/pages/foundations/style-guide/colour.astro new file mode 100644 index 0000000000..05834f50af --- /dev/null +++ b/docs/src/pages/foundations/style-guide/colour.astro @@ -0,0 +1,445 @@ +--- +/** + * Foundations - Style guide - Colour + * + * Colour guidance and token references for Government of Alberta digital products. + * Content adapted from Confluence export: + * Foundations -> Style guide -> Color. + */ +import DocumentationPageLayout from "../../../layouts/DocumentationPageLayout.astro"; +import FoundationsSupportCallout from "../../../components/FoundationsSupportCallout.astro"; + +const brandTokens = [ + "--goa-color-brand-default", + "--goa-color-brand-dark", + "--goa-color-brand-light", +]; + +const interactiveTokens = [ + "--goa-color-interactive-default", + "--goa-color-interactive-secondary", + "--goa-color-interactive-hover", + "--goa-color-interactive-secondary-hover", + "--goa-color-interactive-disabled", + "--goa-color-interactive-error", + "--goa-color-interactive-error-hover", + "--goa-color-interactive-error-disabled", + "--goa-color-interactive-focus", + "--goa-color-interactive-focus-black", + "--goa-color-interactive-visited", +]; + +const textTokens = [ + "--goa-color-text-default", + "--goa-color-text-secondary", + "--goa-color-text-light", + "--goa-color-text-disabled", +]; + +const statusTokenGroups = [ + { + title: "Info", + tokens: [ + "--goa-color-info-default", + "--goa-color-info-light", + "--goa-color-info-dark", + "--goa-color-info-background", + "--goa-color-info-border", + "--goa-color-info-text", + "--goa-color-info-textDark", + "--goa-color-info-textInverse", + ], + }, + { + title: "Warning", + tokens: [ + "--goa-color-warning-default", + "--goa-color-warning-light", + "--goa-color-warning-dark", + "--goa-color-warning-background", + "--goa-color-warning-border", + "--goa-color-warning-text", + "--goa-color-warning-textDark", + ], + }, + { + title: "Important", + tokens: [ + "--goa-color-important-default", + "--goa-color-important-light", + "--goa-color-important-dark", + "--goa-color-important-background", + "--goa-color-important-border", + "--goa-color-important-text", + "--goa-color-important-text-dark", + ], + }, + { + title: "Emergency", + tokens: [ + "--goa-color-emergency-default", + "--goa-color-emergency-light", + "--goa-color-emergency-dark", + "--goa-color-emergency-background", + "--goa-color-emergency-border", + "--goa-color-emergency-text", + "--goa-color-emergency-textDark", + "--goa-color-emergency-textInverse", + ], + }, + { + title: "Success", + tokens: [ + "--goa-color-success-default", + "--goa-color-success-light", + "--goa-color-success-dark", + "--goa-color-success-background", + "--goa-color-success-border", + "--goa-color-success-text", + "--goa-color-success-textDark", + "--goa-color-success-textInverse", + ], + }, + { + title: "Critical", + tokens: ["--goa-color-critical-default"], + }, +]; + +const greyscaleTokens = [ + "--goa-color-greyscale-50", + "--goa-color-greyscale-100", + "--goa-color-greyscale-150", + "--goa-color-greyscale-200", + "--goa-color-greyscale-300", + "--goa-color-greyscale-400", + "--goa-color-greyscale-500", + "--goa-color-greyscale-600", + "--goa-color-greyscale-700", + "--goa-color-greyscale-800", + "--goa-color-greyscale-black", + "--goa-color-greyscale-white", +]; + +const extendedTokenGroups = [ + { + title: "Extended Sky", + tokens: [ + "--goa-color-extended-sky-default", + "--goa-color-extended-sky-light", + "--goa-color-extended-sky-border", + "--goa-color-extended-sky-text", + ], + }, + { + title: "Extended Pasture", + tokens: [ + "--goa-color-extended-pasture-default", + "--goa-color-extended-pasture-light", + "--goa-color-extended-pasture-border", + "--goa-color-extended-pasture-text", + ], + }, + { + title: "Extended Sunset", + tokens: [ + "--goa-color-extended-sunset-default", + "--goa-color-extended-sunset-light", + "--goa-color-extended-sunset-border", + "--goa-color-extended-sunset-text", + ], + }, + { + title: "Extended Dawn", + tokens: [ + "--goa-color-extended-dawn-default", + "--goa-color-extended-dawn-light", + "--goa-color-extended-dawn-border", + "--goa-color-extended-dawn-text", + ], + }, + { + title: "Extended Lilac", + tokens: [ + "--goa-color-extended-lilac-default", + "--goa-color-extended-lilac-light", + "--goa-color-extended-lilac-border", + "--goa-color-extended-lilac-text", + ], + }, + { + title: "Extended Prairie", + tokens: [ + "--goa-color-extended-prairie-default", + "--goa-color-extended-prairie-light", + "--goa-color-extended-prairie-border", + "--goa-color-extended-prairie-text", + ], + }, +]; +--- + + + Colour + + Colour supports how the Government of Alberta communicates across digital products. It + helps create clarity, establish hierarchy, and support inclusive experiences. + + + + + + The Design System colour palette is organized into the following categories: + + +
    +
  • Brand colours
  • +
  • Interactive colours
  • +
  • Text colours
  • +
  • Status colours
  • +
  • Greyscale colours
  • +
  • Extended colours
  • +
+
+ + Refer to design tokens for implementation guidance in code. + + + + +

Brand colours

+ + Brand colours represent the Government of Alberta identity and align with + + Alberta.ca + + brand guidelines. + + +
    + { + brandTokens.map((token) => ( +
  • + {token} +
  • + )) + } +
+
+ + + +

Interactive colours

+ + Interactive colours support actions and states, such as: + + +
    +
  • Buttons
  • +
  • Links
  • +
  • Focus states
  • +
  • Hover states
  • +
+
+ + Use interactive colours to improve clarity and usability. + + +
    + { + interactiveTokens.map((token) => ( +
  • + {token} +
  • + )) + } +
+
+ + + +

Text colours

+ + Text colours support readability and hierarchy. + + Use them for: + +
    +
  • Headings
  • +
  • Body text
  • +
  • Labels
  • +
+
+ + Select text colours that maintain sufficient contrast in all contexts. + + +
    + { + textTokens.map((token) => ( +
  • + {token} +
  • + )) + } +
+
+ + + +

Status colours

+ + Status colours communicate meaning, such as: + + +
    +
  • Info
  • +
  • Success
  • +
  • Warning
  • +
  • Error
  • +
  • Critical
  • +
+
+ + Use status colours consistently to support clear interpretation. Do not rely on colour + alone. Provide supporting text or icons. + + { + statusTokenGroups.map((group) => ( + <> +

{group.title}

+ +
    + {group.tokens.map((token) => ( +
  • + {token} +
  • + ))} +
+
+ + )) + } + + + +

Greyscale colours

+ + Greyscale colours range from black to white. + + Use them to: + +
    +
  • Create structure
  • +
  • Define backgrounds
  • +
  • Support layout and spacing
  • +
+
+ + Greyscale provides a neutral foundation for accents, backgrounds, and layouts. + + +
    + { + greyscaleTokens.map((token) => ( +
  • + {token} +
  • + )) + } +
+
+ + + +

Extended colours

+ + Extended colours are available for: + + +
    +
  • Badges
  • +
  • Data visualization
  • +
+
+ + Use extended colours sparingly and keep accessible colour contrast ratios in mind. + + { + extendedTokenGroups.map((group) => ( + <> +

{group.title}

+ +
    + {group.tokens.map((token) => ( +
  • + {token} +
  • + ))} +
+
+ + )) + } + + + +

Colour usage and accessibility

+ + All Government of Alberta products must meet WCAG standards. Level AA compliance is + the minimum requirement. + + +

Minimum contrast ratios (AA)

+ + + + + + + + + + + + + + + + + + +
Content typeMinimum ratio
Body text (18px and smaller)4.5:1
Large-scale text (24px and larger)3:1
+
+ + + Use an + + accessibility contrast checker + + to verify colour combinations. + + + The following elements do not need contrast testing: + + +
    +
  • Logos
  • +
  • Decorative elements that do not convey meaning
  • +
  • Disabled form fields
  • +
  • Disabled buttons
  • +
+
+ + +
diff --git a/docs/src/pages/foundations/style-guide/iconography.astro b/docs/src/pages/foundations/style-guide/iconography.astro new file mode 100644 index 0000000000..4c719d7458 --- /dev/null +++ b/docs/src/pages/foundations/style-guide/iconography.astro @@ -0,0 +1,333 @@ +--- +/** + * Foundations - Style guide - Iconography + * + * Iconography guidance and icon sizing references for Government of Alberta digital products. + * Content adapted from Confluence export: + * Foundations -> Style guide -> Iconography. + */ +import DocumentationPageLayout from "../../../layouts/DocumentationPageLayout.astro"; +import FoundationsSupportCallout from "../../../components/FoundationsSupportCallout.astro"; + +const extendedIcons = [ + "accessibility", + "add-circle", + "airplane", + "alarm", + "alert", + "american-football", + "analytics", + "aperture", + "apps", + "archive", + "arrow-back-circle", + "arrow-down-circle", + "arrow-forward-circle", + "arrow-redo", + "arrow-redo-circle", + "arrow-undo", + "arrow-up-circle", + "at", + "attach", + "bag", + "bag-handle", + "ban", + "bandage", + "bar-chart", + "barbell", + "basket", + "battery-dead", + "battery-full", + "battery-half", + "bed", + "beer", + "bicycle", + "bluetooth", + "boat", + "body", + "bookmarks", + "briefcase", + "browsers", + "brush", + "bug", + "bulb", + "bus", + "business", + "cafe", + "calculator", + "calendar", + "camera", + "car", + "car-sport", + "card", + "caret-down-circle", + "caret-up-circle", + "cart", + "chatbox", + "chatbox-ellipses", + "chatbubble", + "chatbubbles", + "checkbox", + "checkmark-circle", + "checkmark-done", + "chevron-back-circle", + "chevron-forward-circle", + "chevron-up-circle", + "close-circle", + "cloud-done", + "cloud-upload", + "cloudy", + "code-slash", + "color-palette", + "globe", + "link", + "locate", + "play-circle", + "time", +] as const; +--- + + + Iconography + + Icons are simple graphic symbols used to support clarity and usability. They enhance + both visual design and functionality. Use icons to support meaning. Pair them with + text when clarity is required. + + + + +

Style

+ + Icons follow a simple, rounded style. + + They use: + +
    +
  • Thin line strokes
  • +
  • Filled shapes
  • +
+
+ + Icons scale proportionally and integrate across different interface sizes. + + The icon library includes: + +
    +
  • Core icon set
  • +
  • Extended icon set
  • +
  • Logo icons
  • +
+
+ + + +

Core icon set

+ + The core icon set is the primary icon library in the Design System. Use it to maintain + visual consistency across digital products. + + Categories include: + +
    +
  • + Alert and messaging +
    + + + + +
    +
  • +
  • + Basic +
    + + + + +
    +
  • +
  • + Direction +
    + + + + +
    +
  • +
  • + Interactions +
    + + + +
    +
  • +
  • + Accounts +
    + + + + +
    +
  • +
+
+ + Refer to the tokens page to explore available icons and properties. + + + + +

Extended icon set

+ + + Ionicons + + is an open-source icon library used to extend available options. Use Ionicons when an appropriate + icon does not exist in the core set. + +
+ { + extendedIcons.map((icon, index) => ( +
+ + +
+ )) + } +
+ + + +

Logo icons

+ + The + + Figma styles library + + includes approved brand logos. + + When using logo icons: + +
    +
  • Follow the respective brand usage guidelines
  • +
  • Do not modify logos
  • +
  • Ensure proper spacing and contrast
  • +
+
+ + + +

Icon size

+ Use standard token-based sizes. + + + + + + + + + + + + + + + + + + + + + +
SizeToken
Size 1--goa-iconSize-1
Size 2--goa-iconSize-2
Size 3--goa-iconSize-3
Size 4--goa-iconSize-4
Size 5--goa-iconSize-5
Size 6--goa-iconSize-6
Size xs--goa-iconSize-xs
Size s--goa-iconSize-s
Size m--goa-iconSize-m
Size l--goa-iconSize-l
Size xl--goa-iconSize-xl
+
+ + Refer to design tokens for implementation details. + + + When icons are interactive, it's best to make them 24 x 24 CSS pixels to meet + + WCAG guidelines + . + + + + +

Best practices

+ +
    +
  • Combine icons with text when possible
  • +
  • Align icons with nearby text and controls
  • +
  • Apply colour using Design System tokens
  • +
  • + Ensure an icon-to-background contrast is at least 3:1 when the icon is interactive + or communicates meaning. +
  • +
+
+ + + +

Creating icons

+ Before creating a new icon: + +
    +
  1. Confirm it does not already exist in the library.
  2. +
  3. Review best practice guidance.
  4. +
  5. Follow the established icon style.
  6. +
  7. Use a clear and descriptive name.
  8. +
+
+ + Submit proposed icons through the design system contribution process. + + + +
+ + diff --git a/docs/src/pages/foundations/style-guide/illustration.astro b/docs/src/pages/foundations/style-guide/illustration.astro new file mode 100644 index 0000000000..7f180f3a6a --- /dev/null +++ b/docs/src/pages/foundations/style-guide/illustration.astro @@ -0,0 +1,406 @@ +--- +/** + * Foundations - Style guide - Illustration + * + * Illustration guidance for Government of Alberta digital products. + * Content adapted from Confluence export: + * Foundations -> Style guide -> Illustration. + */ +import DocumentationPageLayout from "../../../layouts/DocumentationPageLayout.astro"; +import FoundationsSupportCallout from "../../../components/FoundationsSupportCallout.astro"; + +const illustrationTokens = [ + "--goa-color-illustration-dawnDark-700", + "--goa-color-illustration-dawnDark-600", + "--goa-color-illustration-dawnDark-500", + "--goa-color-illustration-dawnDark-400", + "--goa-color-illustration-greyscale-white", + "--goa-color-illustration-greyscale-50", + "--goa-color-illustration-greyscale-100", + "--goa-color-illustration-greyscale-200", + "--goa-color-illustration-greyscale-black", + "--goa-color-illustration-skyDark-navy", + "--goa-color-illustration-skyDark-200", + "--goa-color-illustration-skyDark-100", + "--goa-color-illustration-skyMid-Blue", + "--goa-color-illustration-skyMid-200", + "--goa-color-illustration-skyMid-100", + "--goa-color-illustration-skyMid-25", +]; + +const colourApplications = [ + { + title: "Line work", + tokens: ["--goa-color-illustration-greyscale-black"], + }, + { + title: "Neutral fills", + tokens: ["--goa-color-illustration-greyscale-white"], + }, + { + title: "Backgrounds", + tokens: [ + "--goa-color-illustration-greyscale-50", + "--goa-color-illustration-greyscale-100", + ], + }, + { + title: "Shadows", + tokens: ["--goa-color-illustration-skyDark-200"], + }, + { + title: "Accents", + tokens: [ + "--goa-color-illustration-dawnDark-700", + "--goa-color-illustration-dawnDark-600", + "--goa-color-illustration-dawnDark-500", + "--goa-color-illustration-dawnDark-400", + "--goa-color-illustration-skyDark-navy", + "--goa-color-illustration-skyDark-200", + "--goa-color-illustration-skyDark-100", + "--goa-color-illustration-skyMid-Blue", + "--goa-color-illustration-skyMid-200", + "--goa-color-illustration-skyMid-100", + "--goa-color-illustration-skyMid-25", + ], + }, +]; +--- + + + Illustration + + Illustrations support key moments in a service experience. They add clarity, create + visual interest, and help explain the context of a task or outcome. + + + Illustrations are most commonly used in: + +
    +
  • Landing screens
  • +
  • Success or confirmation screens
  • +
  • Important steps in a process
  • +
  • Empty states or status messages
  • +
+
+ + They introduce a human element while keeping the interface clear and accessible. + + + + +

Illustration approach

+ + The illustration style is designed to be inclusive and adaptable across services. + + + Illustrations avoid specific demographic or geographic details. This ensures they can + be used across multiple services and audiences. Use illustrations sparingly and + intentionally. They should support the interface without competing with it. + + The visual style combines: + +
    +
  • Minimal black line work
  • +
  • Abstract geometric shapes
  • +
  • Controlled colour accents
  • +
+
+ + Together, these elements create a style that feels modern, approachable, and + consistent across the design system. + + + + +

Illustration ingredients

+ + Illustrations follow a consistent structure made up of three core elements. + + +

Line work

+ + The main subject of an illustration is drawn using smooth black vector lines. + + Line work should: + +
    +
  • Use a consistent stroke weight
  • +
  • Be clean and minimal
  • +
  • Avoid unnecessary details
  • +
  • Use only the lines needed to communicate the idea clearly
  • +
+
+ + This approach keeps illustrations readable at different sizes and ensures consistency + across the system. + + Example illustration + +

Colour

+ + Use the following illustration colour tokens: + + +
    + { + illustrationTokens.map((token) => ( +
  • + {token} +
  • + )) + } +
+
+ + Use colour sparingly so illustrations support the interface rather than compete with + it. The palette combines neutral tones for structure with accent colours that + highlight key elements. + + Apply colours in the following way: + { + colourApplications.map((group) => ( + <> +

{group.title}

+ +
    + {group.tokens.map((token) => ( +
  • + {token} +
  • + ))} +
+
+ + )) + } + +

Abstract shapes

+ + Abstract shapes add energy and depth to an illustration. They help guide the + viewer's attention and support the composition. + + Shapes should: + +
    +
  • Use smooth Bezier curves
  • +
  • Avoid jagged or textured edges
  • +
  • Sit behind the line work
  • +
  • Use colours from the illustration palette
  • +
+
+ Abstract shapes example + +

The blend

+ + When combined with line work and colour, these shapes create a balanced and lively + composition. + + Blend example + + + +

Using illustrations

+ + Illustrations are available through the Design System illustration library. Always + start with existing assets before requesting something new. + + +

For designers

+ +

Using illustrations in Figma

+ +
    +
  1. Open the Assets panel
  2. +
  3. Select the Illustrations library
  4. +
  5. Search for the illustration you need
  6. +
  7. Drag the illustration into your frame
  8. +
+
+ + All illustrations are stored in the Figma illustrations library. + + +

Exporting SVGs from Figma

+ + Export illustrations using the following settings: + + +
    +
  • Format: SVG
  • +
  • Colour profile: sRGB
  • +
  • Image resampling: Detailed
  • +
  • Ignore overlapping layers: ON
  • +
  • Include id attribute: OFF
  • +
  • Suffix: None
  • +
+
+ File naming rules: + +
    +
  • Use lowercase letters
  • +
  • Use dashes instead of spaces
  • +
+
+ Example: + + person-on-computer.svg + + + After export, attach the SVG file to the relevant Jira issue for the development team. + + +

For developers

+ + Developers should use the SVG assets provided by designers. + + Do not: + +
    +
  • Redraw illustrations
  • +
  • Stretch or distort them
  • +
  • Modify colours in code
  • +
+
+ +

Accessibility guidance

+ + Only expose illustrations to assistive technologies when they communicate information + that is important to the user. Informative illustrations should include alt text that + clearly describes what the illustration communicates. Decorative illustrations should + use an empty alt attribute: alt="". + + Examples + + Informative illustration +
<img
+  src="/illustrations/identity-verified.svg"
+  alt="Identity verified"
+  width="320"
+  height="320"
+  loading="lazy"
+  decoding="async"
+  style="max-width:100%; height:auto"
+>
+ + Decorative illustration +
<img
+  src="/illustrations/identity-verified.svg"
+  alt=""
+  width="320"
+  height="320"
+  loading="lazy"
+  decoding="async"
+  style="max-width:100%; height:auto"
+>
+ +

Responsive sizing

+ + Set width and height to define the default display size and help + browsers reserve space for the image. Use max-width:100%; height:auto + to keep the illustration responsive across screen sizes. + + + + +

Requesting a new illustration

+ + The illustration library grows over time as new needs emerge. If you need something + that does not exist yet, contact the Design System team. + + +

Illustration request process

+ + This process explains how requests move from submission to delivery. It helps product + teams understand timelines and gives the Design System team the information needed to + plan work. + + +

Pathway 1 -- Self-serve request

+ + Use this pathway when you already know what you need. + + Choose this option if: + +
    +
  • You have a clear idea of the illustration
  • +
  • You understand the context where it will be used
  • +
  • You can provide the required details in the request form
  • +
+
+

How it works

+ +
    +
  1. + Complete the illustration request form +
  2. +
  3. You receive an automatic acknowledgement email
  4. +
  5. Issue is created and priority and timelines are assigned
  6. +
  7. The team contacts you with next steps and expected delivery timing
  8. +
  9. Work begins once scope and timelines are confirmed
  10. +
+
+ +

Pathway 2 -- Guided request

+ + Use this pathway when you need help shaping the request. + + Choose this option if: + +
    +
  • You are unsure what illustration style fits your need
  • +
  • You do not yet have a fully formed concept
  • +
  • You would benefit from a conversation to explore options and constraints
  • +
+
+

How it works

+ +
    +
  1. + Book an illustration consultation +
  2. +
  3. The Design System team helps refine the request
  4. +
  5. Issue is created and priority and timelines are assigned
  6. +
  7. The team contacts you with next steps and expected delivery timing
  8. +
  9. Work begins once scope and timelines are confirmed
  10. +
+
+ + +
diff --git a/docs/src/pages/foundations/style-guide/layout.astro b/docs/src/pages/foundations/style-guide/layout.astro new file mode 100644 index 0000000000..5f867f32b5 --- /dev/null +++ b/docs/src/pages/foundations/style-guide/layout.astro @@ -0,0 +1,231 @@ +--- +/** + * Foundations - Style guide - Layout + * + * Layout guidance for Government of Alberta digital products. + * Content adapted from Confluence export: + * Foundations -> Style guidelines -> Layout. + */ +import DocumentationPageLayout from "../../../layouts/DocumentationPageLayout.astro"; +import FoundationsSupportCallout from "../../../components/FoundationsSupportCallout.astro"; +--- + + + Layout + + Layout is the structure of a page, it helps people understand content, move through a + task, and focus on what matters. Use layout to create clear hierarchy, group related + information, and support consistent experiences across services. + + + + +

Start with the user

+ + Layout decisions should begin with the people using the service. + + + Consider who your users are, what they need to accomplish, and how they will engage + with the service over time. Some services need to feel immediately clear and intuitive + for first-time and occasional users. Others can support more complex structures + because users return often and build familiarity through repeated use. + + Think about: + +
    +
  • What the user is trying to do
  • +
  • How often they use the service
  • +
  • How much time they will have to learn the interface
  • +
  • Their level of familiarity or expertise
  • +
  • What aspects of the experience should be prioritized to help them succeed
  • +
+
+ + These questions help determine the kind of service you are designing and the layout + that will support it best. + + + + +

Service type

+ + Choose a layout that matches the type of service you are building. + + + The Design System provides templates for the most common service types. These + templates package layout, navigation, spacing, and example content so teams can start + from a proven structure. The 2 primary service types are Public form and Workspace. + + + + + Workspace and Public form can be adapted to many contexts, but they may not fit + every situation. + + + If neither service type fits well, talk to the Design System team before creating + something custom. We can help you explore early design decisions, adapt existing + patterns where possible, and identify where new guidance may be needed. This also + helps the system continue to learn from emerging service contexts. + + + +

Public form

+ + This layout supports focused task completion. It helps people move through a process + one step at a time with clear headings, form content, actions, and progress cues. + + +

Typical page anatomy includes

+ +
    +
  • Header
  • +
  • Single column content area
  • +
  • Footer
  • +
+
+ +

Choose Public form when

+ +
    +
  • The user is completing a guided step-by-step task
  • +
  • The page should stay focused and distraction-free
  • +
+
+ + View Public form documentation + + Public form start page + Public form example question + +

Workspace

+ + Use a workspace layout for internal tools and productivity services. + + + This layout supports navigation, data views, task panels, and ongoing work. It is + better suited to products where users manage information, review records, switch + between views, or complete repeated tasks. + + +

Typical page anatomy includes

+ +
    +
  • Work side menu
  • +
  • Page title and actions
  • +
  • + Content area +
      +
    • Dashboards
    • +
    • + Multiple data views +
        +
      • Cards
      • +
      • Tables
      • +
      • Lists
      • +
      +
    • +
    • Toolbars
    • +
    +
  • +
  • Panel for supporting or contextual content
  • +
+
+ +

Choose Workspace when

+ +
    +
  • The user is managing information or reviewing records
  • +
  • The service supports repeated or ongoing tasks
  • +
  • The service needs navigation, utilities, and supporting panels
  • +
+
+ + View Workspace documentation + + Workspace table view + Workspace dashboard view
+ Workspace list view + + + +

Keep layouts simple

+ + Start with the simplest structure that supports the task. + + +
    +
  • Use the fewest layout regions needed
  • +
  • Group related content into clear sections
  • +
  • Use spacing tokens to add consistent space throughout the interface
  • +
  • Use a single-column layout when it supports the task
  • +
  • Start with an existing template before creating a custom structure
  • +
+
+ + + +

Design for responsiveness

+ + Layouts should adapt across screen sizes without losing clarity. + + +

Public form considerations

+ +
    +
  • Use a single-column layout to support a clear reading flow
  • +
  • Keep the main task and primary actions in a predictable location
  • +
  • Avoid adding secondary regions that compete for attention
  • +
+
+ +

Workspace considerations

+ +
    +
  • Keep the main content area as the focus
  • +
  • + Let supporting panels and secondary regions move below or hide as space becomes + limited +
  • +
  • Ensure secondary content is still easy to access
  • +
  • Maintain a clear and predictable page structure across screen sizes
  • +
+
+ + +
+ + diff --git a/docs/src/pages/foundations/style-guide/logo.astro b/docs/src/pages/foundations/style-guide/logo.astro new file mode 100644 index 0000000000..a0b4384d23 --- /dev/null +++ b/docs/src/pages/foundations/style-guide/logo.astro @@ -0,0 +1,199 @@ +--- +/** + * Foundations - Style guide - Logo + * + * Logo guidance for Government of Alberta digital products. + * Content adapted from Confluence export: + * Foundations -> Style guide -> Logo. + */ +import DocumentationPageLayout from '../../../layouts/DocumentationPageLayout.astro'; +import FoundationsSupportCallout from '../../../components/FoundationsSupportCallout.astro'; +--- + + + Logo + + The Alberta logo represents the Government of Alberta brand. Use the logo consistently to + ensure digital products are clearly identifiable and aligned with government standards. Follow + these guidelines when using the Alberta logo. + + + + +

Anatomy

+ + The Alberta logo includes two elements: + + +
    +
  • Wordmark
  • +
  • Symbol
  • +
+
+ + These elements work together to represent the Alberta brand. + + Diagram showing Alberta logo anatomy, including the wordmark and symbol. + + + +

Primary usage

+ + Use the primary Alberta logo for all digital products. The default version uses the + stone grey + wordmark and + sky blue + symbol. Display the logo prominently within the interface, typically in the header and footer. + Design System components already include the Alberta logo where appropriate. + + Primary Alberta logo with stone grey wordmark and sky blue symbol. + + + +

Alternate usage

+ + Use alternate logo versions only when the primary version cannot be applied. + + +

Reverse version (dark)

+ + Use the reversed wordmark on dark backgrounds. The wordmark retains the blue (sky) colour of + the symbol. + + Reverse version of the Alberta logo for dark backgrounds. + +

White version

+ + Use the white version when a simplified logo is required. The background must be one of the + official Alberta brand colours. + + White version of the Alberta logo. + +

Black version

+ + Use the black version when colour is not available. + + Black version of the Alberta logo. + + + + + + When the Alberta logo appears with a service name, maintain protective space around the logo + and service name. + The required spacing is equal to the height and width of the period symbol shown in the logo. + Do not place text or visual elements within this protected space. + + Alberta service logo with required protective spacing. + + + +

Alberta sub-mark

+ + Use the Alberta sub-mark when space is limited. + + Alberta sub-mark. + Common uses include: + +
    +
  • Mobile interfaces
  • +
  • Favicons
  • +
  • Browser tab icons
  • +
+
+ + This ensures the product remains identifiable when the full logo cannot be displayed. + + + + +

Logo usage guidelines

+ +
    +
  • Do not modify the logo
  • +
  • Use only official logo files from the asset library
  • +
  • Do not change the spacing between the wordmark and symbol
  • +
  • Maintain the required protective space around the logo
  • +
  • Use alternate logo versions only in their intended contexts
  • +
  • + Use the official logo components available in the + + + Header + + + and the + + + Work side menu + + + to ensure accuracy and consistency. +
  • +
  • + Use the full + Alberta logo + in application headers on desktop screens. For smaller screen sizes, such as mobile, use + the + Alberta sub-mark . + Refer to the + + + Figma asset library + + + for guidance. +
  • +
+
+ + The Alberta logo cannot be used for commercial purposes without permission. Refer to the + + + Government Identity Policy + + + for additional guidance. + + + +
diff --git a/docs/src/pages/foundations/style-guide/motion.astro b/docs/src/pages/foundations/style-guide/motion.astro new file mode 100644 index 0000000000..f86bc08e20 --- /dev/null +++ b/docs/src/pages/foundations/style-guide/motion.astro @@ -0,0 +1,484 @@ +--- +/** + * Foundations - Motion Page + * + * Our motion system defines how interactions feel across government products. + */ + +import DocumentationPageLayout from "../../../layouts/DocumentationPageLayout.astro"; +import { CodeCopy } from "../../../components/CodeCopy"; +import FoundationsSupportCallout from "../../../components/FoundationsSupportCallout.astro"; +import { DesktopOnly, MobileOnly, ResponsiveBlock } from "../../../components/ResponsiveDisplay"; + +const easeData = [ + { + name: "Expressive", + easeType: "cubic-bezier(0, 0, 0.58, 1) = easeOut", + imageURL: "/images/foundations/motion/expressive.svg", + description: "Used for expressive content reveal and removal, particularly transitioning page content into view and out of view.", + copyLink: "goa-motion-curve-expressive", + }, + { + name: "Productive", + easeType: "cubic-bezier(0, 0, 1, 1) = linear", + imageURL: "/images/foundations/motion/productive.svg", + description: "Used for small UI component state transition such as a button hover state, progress text, etc.", + copyLink: "goa-motion-curve-productive", + }, + { + name: "Expressive exit", + easeType: "cubic-bezier(0.42, 0, 1, 1) = easeIn", + imageURL: "/images/foundations/motion/expressive-exit.svg", + description: "Used for exit transitions where the element is leaving the screen and should feel quick, unobtrusive, and task-focused.", + copyLink: "goa-motion-curve-expressive-exit", + }, + { + name: "Expressive reveal", + easeType: "cubic-bezier(0.7, 0, 0.25, 1)", + imageURL: "/images/foundations/motion/expressive-reveal.svg", + description: "Used for expressive page loading and full logo loading", + copyLink: "goa-motion-curve-expressive-reveal", + }, + { + name: "Expressive transform", + easeType: "cubic-bezier(0.42, 0, 0.58, 1) = easeInandOut", + imageURL: "/images/foundations/motion/expressive-transform.svg", + description: "Used for logo loader stage transitions.", + copyLink: "goa-motion-curve-expressive-transform", + } +]; + +const motionDurations = [ + { + id: "short-1", + value: "15ms", + badgeType: "dawn", + badgeContent: "Workspace", + usage: "Page transition", + code: "goa-motion-duration-short-1", + }, + { + id: "short-2", + value: "70ms", + badgeType: "important", + badgeContent: "Universal", + usage: "Hover state", + code: "goa-motion-duration-short-2", + }, + { + id: "short-3", + value: "100ms", + badgeType: "dawn", + badgeContent: "Workspace", + usage: "Scrim enter", + code: "goa-motion-duration-short-3", + }, + { + id: "short-4", + value: "180ms", + badgeType: "dawn", + badgeContent: "Workspace", + usage: "Side navigation collapse", + code: "goa-motion-duration-short-4", + }, + { + id: "medium-1", + value: "250ms", + badgeType: "dawn", + badgeContent: "Workspace", + usage: "Side navigation expand", + code: "goa-motion-duration-medium-1", + }, + { + id: "medium-2", + value: "300ms", + badgeType: "dawn", + badgeContent: "Workspace", + usage: "-", + code: "goa-motion-duration-medium-2", + }, + { + id: "medium-3", + value: "350ms", + badgeType: "dawn", + badgeContent: "Workspace", + usage: "-", + code: "goa-motion-duration-medium-3", + }, + { + id: "long-1", + value: "400ms", + badgeType: "sky", + badgeContent: "Public", + usage: "Side navigation collapse", + code: "goa-motion-duration-long-1", + }, + { + id: "long-2", + value: "500ms", + badgeType: "sky", + badgeContent: "Public", + usage: "Side navigation expand", + code: "goa-motion-duration-long-2", + }, + { + id: "long-3", + value: "1000ms", + badgeType: "sky", + badgeContent: "Public", + usage: "-", + code: "goa-motion-duration-long-3", + }, + { + id: "long-4", + value: "20000ms", + badgeType: "sky", + badgeContent: "Public", + usage: "Logo loading", + code: "goa-motion-duration-long-4", + }, +]; + +--- + + + Motion + + Our motion system defines how interactions feel across government products. Motion + provides clarity, reduces cognitive load, and directs attention to what matters. + + + + +

Overview

+ + Use motion when it helps users understand what changed. Keep small interactions quick and subtle. Use slightly longer transitions when content is entering, leaving, or changing section of a page so the change is easier to follow. + + + Motion is designed as a system, combining easing, duration, and transition style to create a clear, consistent experience. + + +
    +
  • + Easing defines the feel of the change (how it accelerates and decelerates) so motion reads as natural and intentional. +
  • +
  • + Duration sets the pace so users have enough time to follow what changed, without slowing down their task. +
  • +
  • + Transitions define what changes and how (opacity, transform, or both), helping users understand where content came from and where it went. +
  • +
+
+ + We currently support one motion scheme: Expressive, shared across both Public and Workspace applications. + + + The key difference lies in duration and how content behave: + + +
    +
  • + Public-facing services: Emphasize clarity and guidance by using longer durations. This will make transitions more noticeable and easier to follow. +
  • +
  • + Workspace tools (internal-facing): Keep service workers efficient by ensuring transitions are subtle and never slow down workflows with short and medium durations. +
  • +
+
+ + While consistency should be maintained within each product, advanced use cases may adjust durations to highlight key moments or reduce friction. + + +

Principles

+ Purposeful + + Motion should always have a reason for being there. It can help people notice what changed, highlight what matters, and give feedback as they move through the + experience. + + Natural + + Motion should feel familiar. When movement reflects how things behave in the real world, it feels more intuitive and comfortable to follow. + + Smooth + + Motion should blend into the experience instead of competing with it. A little goes a long way, so it is best to use just enough to support understanding without becoming distracting. + + +

Easing

+ + Easing controls how motion accelerates and decelerates during a transition. It affects how clear and predictable state changes feel. Use the curves below to keep motion consistent across products: + + +
    +
  • + Expressive easing is the default for larger page-level transitions +
  • +
  • + Productive easing supports small component-level state changes. +
  • +
+
+ +

Types of curves

+ {easeData.map(item => ( + + + +
+ +
+
+ + {item.name}
{item.copyLink} +
+ + {item.description} + + + {item.easeType} + +
+
+
+ +
+
+
+ ))} + +

Usage guidelines

+ Ease in + +
    +
  • Default for content leaving the screen or transitioning out of view.
  • +
  • + Starts subtly and accelerates toward the end so elements clear quickly after an action. +
  • +
  • + Use for modal exit, drawer dismissal, collapsing panels, and content removal. +
  • +
+
+ + Ease out + +
    +
  • Default for content entering the screen or transitioning into view.
  • +
  • + Starts quickly and slows at the end so motion settles gently and feels easier to follow. +
  • +
  • + Use for page-level transitions, modal entry, opening drawers, and navigation panel expansion. +
  • +
+
+ +

Duration

+ + Duration is how long a transition takes, setting the pace of the interface and helping users understand what changed. They are tuned differently for Public and Workspace contexts: + + +
    +
  • + Short (15-180ms): Micro-interactions and small state UI + transitions in workspace tools. +
  • +
  • + Medium (250-350ms): Component transitions, such as side + navigation, drawer panels, and other mid-level changes in workspace tools. +
  • +
  • + Long (400ms+): Page-level transitions and large content changes in public-facing applications. +
  • +
+
+ +

Duration lengths

+ + + + + + + + + + + + + + { + motionDurations.map((duration) => ( + + + + + + + + )) + } + +
Length typeValueService typeUsage examples
+ {duration.id} + {duration.value} + + {duration.usage} + +
+
+
+ + + {motionDurations.map((duration) => ( + + +
+
{duration.id}
+
Service type
+
Value
{duration.value}
+
Usage examples
{duration.usage}
+
+
+ +
+
+
+ ))} +
+
+ +

Page transitions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Transition nameProperties changedDurationCurve
page-fadeopacityshort-1expressive
content-move-fadeopacity,
transform
short-2expressive
+
+
+ + + + +
+
page-fade
+
Properties changed
opacity
+
Duration
short-1
+
Curve
expressive
+
+
+
+
+ + +
+
content-move-fade
+
Properties changed
opacity, transform
+
Duration
short-2
+
Curve
expressive
+
+
+
+
+
+
+ +

Accessibility

+ + While animations can make a product eye-catching and interesting, it has the potential to cause real issues for users. Some people might feel dizzy or nauseous when confronted with certain types of motion. Take the following accessibility guidelines into account when working with motion to provide a great user experience: + + +
    +
  • + Minimize flashing: Web pages should not contain anything that flashes more than three times in any one-second period, as it can trigger epileptic physical reactions especially for users who have vestibular disorders. If you do need to include flashing content, ensure that it is below the "general flash" and "red flash" thresholds. +
  • +
  • + Design alternatives for reduced motion: Users should have control over how they view animations. They should have the ability to disable animations unless they are essential to the functionality or information being conveyed. Use the prefers-reduced-motion CSS media query to check if someone has asked for less animation. If they have, make sure that your product respects those settings. +
  • +
+
+ +
+ + \ No newline at end of file diff --git a/docs/src/pages/foundations/style-guide/photography.astro b/docs/src/pages/foundations/style-guide/photography.astro new file mode 100644 index 0000000000..c1f4d133ec --- /dev/null +++ b/docs/src/pages/foundations/style-guide/photography.astro @@ -0,0 +1,101 @@ +--- +/** + * Foundations - Style guide - Photography + * + * Photography guidance for Government of Alberta digital products. + * Content adapted from Confluence export: + * Foundations -> Style guide -> Photography. + */ +import DocumentationPageLayout from '../../../layouts/DocumentationPageLayout.astro'; +import FoundationsSupportCallout from '../../../components/FoundationsSupportCallout.astro'; +--- + + + Photography + + The Government of Alberta maintains a library of photos for government use. These images + reflect Alberta communities and meet established standards for quality, relevance, and + accessibility. + + + + +

Government of Alberta photo library

+ + The photo library is managed by Communications and Public Engagement (CPE). It provides a + large collection of images covering a range of topics. All images follow Government of Alberta + brand and content guidelines. + + + Government staff and contractors can use these photos in Government of Alberta digital + products. Refer to the + + + Confluence documentation + + + for instructions on accessing the library. + + + + +

Best practices

+ +

Use relevant images

+ + Choose images that support the content on the page. Avoid decorative photos that do not help + users understand the service. + + +

Write helpful alternative text

+ + Use alternative text when an image adds meaning. + + +
    +
  • Describe the purpose of the image in context
  • +
  • Keep the description brief and useful
  • +
  • Use empty alternative text for decorative images so screen readers can skip them
  • +
+
+ +

Use captions when they add value

+ + Add a caption when users need extra context or explanation. Do not repeat the same + information in the image, caption, and body content unless it is necessary. + + +

Avoid text in images

+ + Do not place important text inside images. Assistive technologies cannot reliably read embedded + text, and text inside images may be harder to read on smaller screens. + + +

Keep text readable over images

+ + If you use an image as a background: + + +
    +
  • Ensure enough contrast between the image and the text
  • +
  • Check that text remains readable across devices and screen sizes
  • +
+
+ +

Accessibility guidance

+ + When using images, follow the accessibility guidance provided by the + + + W3C's Images tutorial + + . + This resource explains best practices for accessible use of images across different formats. + + + +
diff --git a/docs/src/pages/foundations/style-guide/typography.astro b/docs/src/pages/foundations/style-guide/typography.astro new file mode 100644 index 0000000000..b53a11693d --- /dev/null +++ b/docs/src/pages/foundations/style-guide/typography.astro @@ -0,0 +1,249 @@ +--- +/** + * Foundations - Style guide - Typography + * + * Typography guidance for Government of Alberta digital products. + * Content adapted from Confluence export: + * Foundations -> Style guide -> Typography. + */ +import DocumentationPageLayout from "../../../layouts/DocumentationPageLayout.astro"; +import FoundationsSupportCallout from "../../../components/FoundationsSupportCallout.astro"; +--- + + + Typography + + The typography system creates a consistent and accessible experience across Government + of Alberta digital products. Clear typography, combined with effective content design, + improves readability and helps people quickly find and understand information. + + + + +

Our fonts

+ +

Acumin VF

+ + Acumin VF is the primary font used across Government of Alberta digital interfaces. + Use it for headings, body text, labels, and most interface content. + + +

Roboto Mono

+ + Roboto Mono is used for numeric content where alignment and comparison are important. + This font improves readability when displaying numerical data, making it easier to + compare figures accurately. + + + + +

Using type

+ + Typography choices affect how content is read and understood. Follow these guidelines + to ensure content is clear, accessible, and consistent across digital products. + + +

Text styles

+ + The design system provides predefined text styles for headings, paragraphs, + and numeric content. + + +

Headings

+ + Seven heading sizes are available to structure content: + + +
    +
  • 2XL heading
  • +
  • XL heading
  • +
  • L heading
  • +
  • M heading
  • +
  • S heading
  • +
  • XS heading
  • +
  • 2XS heading
  • +
+
+ + Use headings to organize content and guide users through the page. + + +

Paragraphs

+ + Large text + + Use as an introductory or lead paragraph at the top of a page. + + + Medium text + + Use for the main content and descriptive paragraphs. This is the default body text + size in the Design System. + + + Small text + + Use sparingly in compact areas such as tables or dense layouts. + + + XSmall text + + Use for secondary or less critical content such as terms and conditions. + + + + + 4 link text sizes are available depending on context. + + Links use: + +
    +
  • Underlined text
  • +
  • --goa-color-interactive-default
  • +
+
+ + This improves usability and accessibility. + + + + +

Alignment

+ + Left-align all text elements, including: + + +
    +
  • Headings
  • +
  • Body text
  • +
+
+ + Consistent alignment improves readability and scanning. + + +

Number alignment

+ +

Right alignment

+ + Use for numbers in tables containing comparable values, such as financial or + statistical data. This helps users compare values more easily. + + +

Left alignment

+ + Use for numbers that are not intended to be compared, such as phone numbers or + identification numbers. + + + + +

Capitalization

+ + Use sentence case for: + + +
    +
  • Headings
  • +
  • Body text
  • +
  • Links
  • +
  • Buttons
  • +
+
+ + + +

Decoration

+ + Use the defined text styles and font weights. Avoid underlining text unless it is a + link. + + + + +

Line length

+ + For optimal readability, aim for 45 to 72 characters per line. + + + + +

Why visual hierarchy matters

+ + Visual hierarchy helps users understand content quickly because it: + + +
    +
  • Shapes how readers see the content
  • +
  • Improves readability
  • +
  • Highlights important information
  • +
+
+ +

Designing for visual hierarchy

+ + Consider these key principles for creating effective visual hierarchy: + + +

Structure content clearly

+ +
    +
  • Use different heading sizes to indicate content importance.
  • +
  • + Maintain a logical structure from most important to least important information. +
  • +
  • + Ensure headings follow a consistent 2XL to 2XS hierarchy + to support accessibility. +
  • +
+
+ +

Use emphasis carefully

+ +
    +
  • Use variations in size, weight, or style to highlight key information.
  • +
  • Highlight critical actions or important information.
  • +
  • Create clear distinctions between different content levels.
  • +
+
+ +

Match typography to content purpose

+ +
    +
  • Choose text styles that reflect the intent of the content.
  • +
  • Typography should support the message and guide the users' attention.
  • +
+
+ +

Prioritize readability

+ +
    +
  • + Use body text that supports comfortable reading. In the Design System, + --goa-fontSize-4 meets the minimum recommended size for body text. +
  • +
  • Maintain sufficient colour contrast between text and background.
  • +
  • Ensure text remains readable across devices and screen sizes.
  • +
+
+ + +
+ + diff --git a/docs/src/pages/get-started/automated-accessibility.astro b/docs/src/pages/get-started/automated-accessibility.astro new file mode 100644 index 0000000000..061b16c880 --- /dev/null +++ b/docs/src/pages/get-started/automated-accessibility.astro @@ -0,0 +1,92 @@ +--- +/** + * Get Started - Automated Accessibility + * + * Guidance on combining automated and manual accessibility testing. + * Content from Confluence (Brief 87). + */ +import DropInCallout from '../../components/DropInCallout.astro'; +import DocumentationPageLayout from '../../layouts/DocumentationPageLayout.astro'; +--- + + + Automated accessibility + + Automated accessibility testing tools help you identify potential accessibility issues. Use them as a starting point. + + +

+ However, these tools are not a complete solution. They can produce: +

+
    +
  • False positives – flagging issues that are not actual problems
  • +
  • False negatives – missing real accessibility barriers
  • +
+

+ To ensure your digital product is accessible, combine automated testing with manual testing and apply + human judgment. +

+ Why automated tools alone are not enough + + False positives +

+ Automated tools may flag elements as non-compliant even when they work correctly for users. For + example, a tool may report that an input is "missing an id" even though it is correctly associated with a + label using a valid method, such as wrapping the input inside a <label> element. +

+ + False negatives +

+ Automated tools cannot detect nuanced or context-specific issues. For example, all interactive + elements may be tabbable, but the order jumps around the page. Tools often don't judge whether the + tab order is logical for completing the task. +

+ + Real user experience +

+ Accessibility ensures real people can use a product effectively. Automated tools cannot fully simulate + how users interact with your product. +

+ Steps for effective accessibility testing + +
    +
  1. + Run automated tools to get an initial assessment. +
  2. +
  3. + Manually verify flagged issues and review the element's intent and context. +
  4. +
  5. + Do additional manual testing for issues automated tools cannot detect: +
      +
    • Test with a screen reader, such as VoiceOver (macOS) or NVDA (Windows)
    • +
    • Test keyboard navigation by checking focus visibility and order
    • +
    +
  6. +
  7. + Report findings +
      +
    • Record what you tested, what failed, and how to reproduce it
    • +
    • If the issue relates to a design system component, submit it using the design system bug report form
    • +
    +
  8. +
+ Why this process matters +

+ Automated tools provide helpful insight. Relying only on automation can result in: +

+
    +
  • Time spent fixing issues that are not real barriers
  • +
  • Missed opportunities to address genuine accessibility issues
  • +
  • A false sense of compliance without meaningful usability improvements
  • +
+

+ Combine automated and manual testing to identify real barriers. This approach improves accessibility + and overall product quality. +

+ +
diff --git a/docs/src/pages/get-started/component-lifecycle.astro b/docs/src/pages/get-started/component-lifecycle.astro new file mode 100644 index 0000000000..2f43127d7d --- /dev/null +++ b/docs/src/pages/get-started/component-lifecycle.astro @@ -0,0 +1,66 @@ +--- +/** + * Get Started - Component Lifecycle + * + * Defines the stages each Design System component moves through. + * Content from Confluence (Brief 87). + */ +import DropInCallout from '../../components/DropInCallout.astro'; +import DocumentationPageLayout from '../../layouts/DocumentationPageLayout.astro'; +--- + + + Component lifecycle + + The component lifecycle defines the stages each Design System component moves through, from + Experimental to Production to Legacy. + + +

+ To request a new component or propose an enhancement, follow the + design contribution process. +

+ Experimental +

+ Experimental components are new or significantly updated. They are available for testing and feedback + before public release. +

+ + Characteristics +
    +
  • Feedback is gathered from selected teams
  • +
  • May be unstable or include breaking changes
  • +
  • Limited documentation
  • +
+ Production +

+ Production components are stable and ready for broader adoption. +

+ + Characteristics +
    +
  • Fully documented, including design guidelines, properties, and examples
  • +
  • Meet accessibility and design system standards
  • +
  • Optimized for mobile use
  • +
  • Actively maintained with updates and bug fixes
  • +
  • Publicly available documentation
  • +
+ Legacy +

+ Legacy components are older components maintained primarily to support older implementations. If + possible, transition to production is recommended. +

+ + Characteristics +
    +
  • No active maintenance or updates
  • +
  • Critical issues may remain unresolved
  • +
  • Recommended alternative clearly identified
  • +
  • Marked as "Legacy" in official documentation
  • +
+ +
diff --git a/docs/src/pages/get-started/contribute.astro b/docs/src/pages/get-started/contribute.astro new file mode 100644 index 0000000000..9e006c5426 --- /dev/null +++ b/docs/src/pages/get-started/contribute.astro @@ -0,0 +1,187 @@ +--- +/** + * Get Started - Contribute + * + * How to contribute to the Design System (design and code). + * Content from Confluence (Brief 87). + */ +import DropInCallout from '../../components/DropInCallout.astro'; +import DocumentationPageLayout from '../../layouts/DocumentationPageLayout.astro'; +--- + + + Contribute + + The Design System is a shared resource used and improved by service teams. All roles are encouraged + to contribute. + + +

+ Start by using existing Design System components and patterns. If a component or pattern does not + meet your needs, follow the contribution process below. +

+ Design contribution process +

+ If a required component or example does not exist in production, + contact the Design System team. We will review the request together and determine next steps. +

+ + 1. Contact the team +

+ Book a design system drop-in hours session. +

+

Be prepared to:

+
    +
  • Describe the component or pattern and its purpose
  • +
  • Explain your user needs and service goals
  • +
  • Share iterations explored with and without the Design System
  • +
+ + + There are open contribution files in Figma for every component and pattern in the design system, + including unpublished ideas and experiments. + + + 2. Contribution criteria +

A proposed component or pattern must meet the following criteria.

+ + Proposal criteria +

Useful

+

+ Evidence shows it supports multiple teams or services. Provide screenshots or links to demonstrate usage. +

+ +

Unique

+

+ It does not duplicate an existing component or pattern. If replacing an existing component, provide + evidence that the new approach improves usability or accessibility. +

+ + Publication standards +

To be published, the solution must be:

+ +

Usable

+

+ Improves clarity, usability, and accessibility for users. Is informed by research and addresses a + validated user need. +

+ +

Universal

+

+ Inclusive and accessible. Meets or exceeds accessibility standards. + WCAG 2.2 AA is the minimum requirement. +

+ + 3. Backlog and collaboration +

+ If approved, the item is added to the + Design System's backlog. +

+

+ When development begins, the Design System team will collaborate with you to confirm detailed requirements. +

+ Code contribution process +

+ The Design System supports multiple development frameworks through Web Components. Contributing full + components can be complex. Smaller contributions are encouraged. +

+ + Recommended contribution types +
    +
  • Bug fixes
  • +
  • Documentation updates
  • +
  • Enhancements to existing components
  • +
+

+ Start by contacting the team in the #design-system-support Slack channel. +

+

+ Select an issue tagged ready-for-contribution from the + backlog. + Confirm which issue you will work on. +

+ + + Since the repository is public, use a personal GitHub account instead of your Enterprise Managed User (EMU) account. + + + Set up your contribution environment +
    +
  1. Clone the ui-components repository.
  2. +
  3. Open the repository in your IDE.
  4. +
  5. Create a branch named: contributions/story-number
  6. +
  7. + Run the following commands: +
    npm i
    +npm run build
    +
  8. +
  9. + The playgrounds for local testing are located in: +
    /apps/dev/angular
    +/apps/dev/react
    +
  10. +
+ + Run playground environments +

Angular

+
npm run dev:watch
+npm run serve:dev:angular
+ +

React

+
npm run dev:watch
+npm run serve:dev:react
+ + Repository structure + +

React wrappers

+

/libs/react-components/src/lib

+

Each folder represents a single component with its associated unit tests and wrapper code.

+ +

Angular wrappers

+

/libs/angular-components/src/lib/components

+

Each folder represents a single component with its associated unit tests and wrapper code.

+ +

Web Components

+

/libs/web-components/src/components

+
    +
  • Unit tests as *.spec.ts
  • +
  • Component code as *.svelte
  • +
+ + Testing requirements +
    +
  • Write all unit tests in Svelte.
  • +
  • If updating React or Angular wrappers, write unit tests in those respective frameworks.
  • +
  • + Add browser testing using Jest for React wrappers and Svelte components when appropriate. + These can be found in: libs/react-components/specs +
  • +
  • Manually test components in both React and Angular.
  • +
  • + Create test files that others can use to manually test the PR. These can be created in: +
    /apps/prs/angular
    +/apps/prs/react
    +
  • +
  • Follow the conventions already used in those files to create your test files.
  • +
+

A Design System developer will also manually test the pull request.

+ + Submit your contribution +

Use the following commit message format:

+ +

Bug fix

+
fix(#storyNumber): short description (7 words max)
+ +

Feature request

+
feat(#storyNumber): short description (7 words max)
+ +
    +
  • Create a pull request from your branch to the dev branch.
  • +
  • Notify the design system team of the PR.
  • +
+ +
diff --git a/docs/src/pages/get-started/designers.astro b/docs/src/pages/get-started/designers.astro index 6a70b04261..0c47d99114 100644 --- a/docs/src/pages/get-started/designers.astro +++ b/docs/src/pages/get-started/designers.astro @@ -1,149 +1,93 @@ --- /** - * Get Started - Designers (Early Adopters) + * Get Started - Designers Overview * - * Designer onboarding for the early adopters program. - * Figma setup, BETA libraries, illustration requests, project updates. - * Content from Confluence (Brief 65). + * Overview of design system resources for designers. + * Content from Confluence (Brief 87). */ +import DropInCallout from '../../components/DropInCallout.astro'; import DocumentationPageLayout from '../../layouts/DocumentationPageLayout.astro'; --- - Get started as a designer - - Onboarding for the early adopters program. - - - -
    -
  • Get access to the experimental Figma libraries.
  • -
  • Use experimental libraries to design or evaluate screens in your service context.
  • -
  • Provide feedback on what's working, what's not working and what's missing.
  • -
-
- - - -

Available resources

- - Figma assets - - - Production - Component library - Styles, tokens, icons, and guidelines - Patterns library - - - Beta - Component library BETA - Styles library BETA - Illustration library BETA - - - - - Component names are the same in both libraries, which makes - library swapping - possible. Be aware this can make it harder to tell which library a component came from once - it's on the canvas. - - -

Illustrations

- - The illustration library is a collection of custom GoA illustrations to be used at various - points throughout a service. We will continue to update it regularly, so start by checking what's already - available. - - - Can't find an existing illustration that fits your scenario? Need a new - composition combining existing illustration elements? -

- Request an illustration -
- - If you're unsure, ask in - #design-system-early-adopters - or bring it to drop-in hours — we'll help you decide the best path. - - - - -

Designing with the BETA libraries in Figma

- -

Starting a new design

- - We recommend starting from DS 2.0 templates. - - -

Starting from an existing design

- -
    -
  • Library swap — If your goal is to convert the whole file to DS 2.0, consider trying the library swap approach.
  • -
  • Manual rebuild — The slowest approach, but gives you the most control. Consider using starter templates as a base for rebuilding your pages.
  • -
-
- - - Library swap results can vary. We recommend creating a copy of the file before attempting - a library swap. - - - - -

Updating an existing project

- -

Developer-first

- - A developer creates a new branch, completes the upgrade steps, and runs the upgraded - application. This helps the team quickly see which areas need design updates to align with - DS 2.0. - - - - When reviewing the upgraded branch, watch for: - - -
    -
  • Spacing and layout rhythm
  • -
  • Typography scale/weight usage
  • -
  • Screens with dense content or constrained layouts (these will often have the highest risk of "breaking" during the update)
  • -
-
- -

Design-first

- -
    -
  1. Identify custom elements created to support your users' needs.
  2. -
  3. Create an inventory and prioritize items by importance and effort.
  4. -
  5. Redesign the highest priority elements using the visual design values from the Styles library BETA.
  6. -
-
- - This can allow design work to proceed ahead of development rather than being blocked by the - version update. - - - - In most cases we recommend the Developer-First approach. - - - - -

File location and sharing

- - Early adopter Figma files will be collected within the Early adopter project - in the Design system workspace to: - - -
    -
  • Facilitate learning from fellow early adopters and the design system team
  • -
  • Avoid confusion / chance encounters of experimental assets by practitioners who are not part of the early adopter program
  • -
+ Overview + + As a designer, you use the design system through Figma. +

In Figma, you can access:

+ + + +

+ The design system library in Figma aligns with coded components used by developers. Start with + design system components for common parts of your service. This helps developers use the matching + coded components and reduces custom work. +

+

+ Start with the design system. Validate your design through user testing. If usability issues arise, + or the problem cannot be solved within the system, consider creating a custom solution. +

+ Design with development in mind +

+ When selecting components, prioritize those with a "goa-" prefix, such as + goa-input. These components exist in both design and development. Using them reduces + the need for custom development. +

+

Choose shared components whenever possible to maintain consistency and efficiency.

+ + Design tokens +

Design system components in Figma and code are built using design tokens.

+

+ Use tokens to communicate design decisions clearly. Developers can reference the same tokens in code. +

+

Instead of sharing hex values or pixel adjustments, reference semantic tokens.

+

For example:

+
    +
  • Colour: --goa-color-info-default
  • +
  • Spacing: --goa-spacing-m
  • +
+

Using tokens reduces back-and-forth and keeps design and development aligned.

+ + Components +

All design system components are available in Figma and in code.

+

+ These components are designed to meet + WCAG 2.2 accessibility standards. +

+

Avoid detaching components. Instead:

+
    +
  • Use variants
  • +
  • Show or hide layers within the component
  • +
+

+ Use #figma for Figma-related issues, including library updates, missing components, + broken instances, or component behaviour in Figma. +

+

+ Use #design-system-support for design system guidance, component usage questions, + standards, and implementation support. +

+

Keep your components up to date. Figma will notify you when library updates are available.

+ + Figma file templates and helper components +

Each digital service project folder includes a starter Figma template.

+

Use this template to:

+
    +
  • Organize your design file
  • +
  • Support developer handoff
  • +
  • Help team members navigate files
  • +
+

+ Helper components are also available. Use them to clearly communicate intent when sharing designs + with developers and other team members. +

+
diff --git a/docs/src/pages/get-started/designers/designing-with-ds.astro b/docs/src/pages/get-started/designers/designing-with-ds.astro new file mode 100644 index 0000000000..a875429941 --- /dev/null +++ b/docs/src/pages/get-started/designers/designing-with-ds.astro @@ -0,0 +1,81 @@ +--- +/** + * Get Started - Designers - Designing with Design System 2.0 + * + * How to start new designs and update existing projects to DS 2.0. + * Content from Confluence (Brief 87). + */ +import DropInCallout from '../../../components/DropInCallout.astro'; +import DocumentationPageLayout from '../../../layouts/DocumentationPageLayout.astro'; +--- + + + Designing with Design System 2.0 + + What's new in DS 2.0 and how to start using it in your designs. + +

+ The Digital Design and Delivery (DDD) Design System has evolved to better support how service teams + design and build digital government services. Design System 2.0 includes an updated design + language, new tokens, refreshed components, and ready-to-use templates. +

+ Starting a new design +

+ Use DS 2.0 templates as your starting point. Templates package layout, navigation, spacing, and + example content that you can adapt to your service. Some templates are built for specific service types + (for example, public-facing forms and workspace applications), and others are more general-purpose + starting points you can use across many kinds of pages and flows. +

+ + Starting from an existing design + + Library swap +

+ Use a library swap if + your goal is to convert most of the file to DS 2.0 in one pass. +

+
    +
  • Make a copy of your file before you start.
  • +
  • Expect mixed results. Some screens may need cleanup after the swap.
  • +
+ + Manual rebuild +

Use a manual rebuild if you need more control.

+
    +
  • Rebuild your highest value screens first.
  • +
  • Consider using DS 2.0 templates as a base to speed things up.
  • +
+ Update an existing project to the new design library + + Approach 1: Developer-first +

Use this approach in most cases.

+
    +
  1. A developer creates a new branch and completes the upgrade steps.
  2. +
  3. The team runs the upgraded application to see what changed.
  4. +
  5. Designers review the upgraded screens and identify what needs design updates.
  6. +
+

When reviewing the upgraded branch, watch for:

+
    +
  • Spacing and layout rhythm
  • +
  • Typography scale and weight usage
  • +
  • Dense or constrained screens (these often have the highest risk during an update)
  • +
+ + Approach 2: Design-first +

Use this approach when you want design work to move ahead of development work.

+
    +
  1. Identify custom elements that support your users' needs.
  2. +
  3. Create an inventory and prioritize items by importance and effort.
  4. +
  5. Redesign the highest priority items using the visual design values in the Styles library.
  6. +
+ + + In most cases, start with the developer-first approach. It helps you quickly see what changed in your + real product, so you can focus design effort where it matters most. + + +
diff --git a/docs/src/pages/get-started/designers/ux-guidelines.astro b/docs/src/pages/get-started/designers/ux-guidelines.astro new file mode 100644 index 0000000000..b44c9c82e5 --- /dev/null +++ b/docs/src/pages/get-started/designers/ux-guidelines.astro @@ -0,0 +1,55 @@ +--- +/** + * Get Started - Designers - User Experience Guidelines + * + * UX guidelines for Government of Alberta digital products. + * Content from Confluence (Brief 87). + */ +import DropInCallout from '../../../components/DropInCallout.astro'; +import DocumentationPageLayout from '../../../layouts/DocumentationPageLayout.astro'; +--- + + + User experience guidelines + + Digital products built for the Government of Alberta should comply with these guidelines to ensure a + quality user experience for Albertans. + + +
    +
  • User-centered: Designed with a clear understanding of users, their goals, tasks, environments, and context of use, using user-centered design methods.
  • +
  • Usable: Interfaces will be easy to use, enabling users to find the information they need and complete tasks successfully.
  • +
  • Accessible: Digital products will be inclusive, ensuring usability for everyone, regardless of physical or cognitive ability.
  • +
  • Trustworthy: Experiences will feel familiar and recognizable as a Government of Alberta product, ensuring users' security and privacy.
  • +
  • Modern: Digital experiences will meet present-day user expectations and preferences for aesthetics and interaction.
  • +
+ +

+ For more details on the process of assessing compliance to each guideline, refer to our + User Experience Guidelines and Design System Checklist. +

+ Usability testing +

+ Usability testing is our preferred method to understand user needs as they relate to each guideline. +

+

Suitable usability testing includes:

+
    +
  • Diverse user group: Real users from different demographic, behavioural backgrounds, and geographical regions within Alberta that will experience the problem or benefit of the product.
  • +
  • Inclusive testing: Users with various physical and/or cognitive abilities, literacy levels, and tech savviness.
  • +
  • Device variety: A diverse range of devices that reflect users' preferred choice when interacting with government services.
  • +
  • Tasks: Activities that cover tasks and service process from end-to-end.
  • +
+

+ Frequent usability testing should be conducted to maintain product usability, effectiveness and + alignment to the user needs as they evolve over time. +

+

+ For guidance on the process of usability testing, refer to our + Understanding Usability documentation. +

+ +
diff --git a/docs/src/pages/get-started/developers.astro b/docs/src/pages/get-started/developers.astro index 507a5e47e7..7c7cc56977 100644 --- a/docs/src/pages/get-started/developers.astro +++ b/docs/src/pages/get-started/developers.astro @@ -1,256 +1,103 @@ --- /** - * Get Started - Developers (Early Adopters) + * Get Started - Developers Overview * - * Developer onboarding for the early adopters program. - * Package setup, template repo, branches, compatibility, custom components. - * Content from Confluence (Brief 65). + * Overview of design system resources for developers. + * Content from Confluence (Brief 87). */ +import DropInCallout from '../../components/DropInCallout.astro'; import DocumentationPageLayout from '../../layouts/DocumentationPageLayout.astro'; --- - Get started as a developer + Overview - Onboarding for the early adopters program. - - - -

Early adopters use the same design system packages you're already familiar with, but opt into - experimental DS v2 by:

-
    -
  • Importing Goabx components - -
  • -
  • Using the experimental prefix (goabgoabx) - -
  • -
  • Installing and applying tokens v2 (designtokens2) -
      -
    • Import @abgov/design-tokens/dist/tokens.css in the global CSS of your app, below where you import @abgov/web-components/index.css
    • -
    -
  • -
-
- - - Angular 21 has not been formally tested by the design system team. A couple of teams have - used it successfully, but we can't guarantee full compatibility. - - - - View setup walkthrough video - - - - -

Using design system v2

- -

A) Try it in your existing app

- - See what changes in your context before committing to a full upgrade. - - -
    -
  1. Create a branch in your repo
  2. -
  3. Apply the initial DS v2 setup changes (imports, prefix, tokens v2)
  4. -
  5. Run the app and review the changes
  6. -
  7. Start with one page and share back with your team — don't try to fix the entire app on day one
  8. -
-
- - Why this approach works well: - - -
    -
  • Quick feedback on impact and risk
  • -
  • Easy to abandon (don't merge the branch)
  • -
-
- -

B) Try the workspace template repo

- - Understand the workspace pattern and DS v2 structure before applying it to your product. - - - -
    -
  1. - Open the template repo for your framework: - -
  2. -
  3. Click Use this template
  4. -
  5. Choose Create a new repository
  6. -
  7. Select an owner + repo name
  8. -
  9. Choose Public or Private
  10. -
  11. Click Create repository from template
  12. -
  13. Clone the repo locally
  14. -
  15. - Install and run, go into the directory you created and run the following commands (in order): -
      -
    1. npm i
    2. -
    3. npm run build
    4. -
    5. npm run start (Angular) or npm run dev (React)
    6. -
    -
  16. -
  17. Go to the listed port number of your localhost
  18. -
-
- - - -

Choose how you receive updates

- - Consider your tolerance for changes. - - -

Next branch

- - Best balance of stability and the latest changes. You get changes once they have been reviewed - and tested. - - -

Dev branch

- - Fastest access to new fixes and improvements. Expect more churn and occasional breaking - changes. - - -

Production branch

- - Least change over time. Not ideal for early adopters, since fixes and improvements arrive later. - - - - If you're unsure, start on "Next." Move to Dev if you need fixes sooner, or to - Production if you need more stability. - - - - -

Compatibility and mixing rules

- - DS v2 experimental isn't "fully backward compatible" in practice because tokens v2 can - visually impact DS 1.0 components. - - -
    -
  • You'll get the best results when tokens and components are upgraded together.
  • -
  • Mixing experimental and production components in one app may be possible, but is not recommended.
  • -
-
- - - -

Plan your upgrade scope

- -
    -
  • If possible, start with a small/simple application while you're learning the new system.
  • -
  • For most teams with a monorepo setup, you will need to update the import statements and add the design tokens to the specific project you're upgrading.
  • -
-
- - - Monorepo setups can vary, which may affect the exact update steps. If you have - any questions, book a drop-in hours session. - - - - - -

Updating your custom components

- - Most DDD services have custom UI alongside design system components. Set aside time to - review and adjust custom elements to align with DS v2 styles. - - - -
    -
  • Start by identifying where you have custom UI (a quick inventory is enough to begin).
  • -
  • - Replace hard-coded values in your custom UI with the corresponding Tokens v2 - values, such as: -
      -
    • Spacing (padding, margin, gaps)
    • -
    • Typography (font, size, weight, line height)
    • -
    • Color (text, background, borders)
    • -
    • Elevation / shadow (surfaces)
    • -
    -
  • -
-
- -

When tokens v2 values don't cover what you need

- -
    -
  • Identify gaps where Tokens v2 don't cover what you need.
  • -
  • Where needed, create custom styles to bridge those gaps, while keeping them consistent with the DS v2 look and feel.
  • -
-
- - - -

Getting help and reporting issues

- - Use the #design-system-early-adopters Slack channel first so the cohort benefits - and the design system team can clarify details before a GitHub issue is created. - - - Avoid DMs to individual design system team members, and avoid the standard - #design-system-support channel. Use the early adopters channel so all - participants can benefit. - - - Drop-in hours are the best option for deeper troubleshooting, debugging, or - talking through bugs and features. - - - Book drop-in hours - (Tuesdays + Fridays, 1–3 PM MT) - - - - -

Rollback and branching strategy

- -
    -
  • The simplest rollback is to reverse the setup steps.
  • -
  • If you're working in a branch, rollback can be as simple as not merging the branch.
  • -
  • Rollback becomes harder once you've made many manual updates to custom components.
  • -
-
- - - -

End of program expectations

- -
    -
  • - Moving to production at the end of the early adopter program (end of March 2026) includes - switching goabxgoab. -
  • -
  • - Once the early adopter program ends: -
      -
    • The experimental library will no longer be updated
    • -
    • Design system team effort will shift to the production libraries and packages
    • -
    • Web components continue to be updated
    • -
    -
  • -
-
+ As a developer, you use the Design System through tokens, components, examples, and templates. + + +

+ The DDD Design System is built using Web Components. Web Components are framework-agnostic. + You can use them with Angular, React, or other front-end frameworks. +

+

The Design System includes:

+ +

+ Designers use equivalent resources in Figma. When they design with Design System components, you + can build with the matching coded components. This reduces custom development and rework. +

+

+ All Design System components are designed and built to meet + WCAG 2.2 accessibility standards. +

+ Tokens +

+ Access the tokens as an + NPM package. +

+

+ Import the SCSS or CSS file into your project. Replace hard-coded values with Design System token variables. +

+

+ Designers reference the same tokens in their tools. This keeps design and development aligned during handoff. +

+ + Components +

Components are reusable user interface elements built for use across services.

+

You can:

+
    +
  • Use components individually
  • +
  • Combine them into patterns
  • +
  • Apply them in different contexts
  • +
+

Components are available:

+ +

+ Refer to the Design System technologies documentation + for implementation details. +

+ + Examples +

+ Examples are multiple components assembled in realistic service contexts. They help you understand + how to apply Design System guidance in a working interface. +

+

You can use examples to:

+
    +
  • Understand how components work together
  • +
  • Use them as a starting point for building parts of your interface
  • +
  • Use proven approaches to meet user needs
  • +
+

+ Examples help you build with more consistency and less rework. Use them to guide implementation, + then adjust them to meet the needs of your product. +

+ + Templates +

+ Templates are opinionated starting points for common service types. They package layout, navigation, + spacing, and example content so you can start with a proven structure instead of building from scratch. +

+

You can use templates to:

+
    +
  • Start a new product with a proven structure
  • +
  • Learn how components work together in a real layout
  • +
  • Adapt a proven starting point to fit your service needs
  • +
+

+ Templates help teams move faster, reduce rework, and stay aligned with Design System guidance. +

+
diff --git a/docs/src/pages/get-started/developers/browsers.astro b/docs/src/pages/get-started/developers/browsers.astro new file mode 100644 index 0000000000..4c495d9c3f --- /dev/null +++ b/docs/src/pages/get-started/developers/browsers.astro @@ -0,0 +1,86 @@ +--- +/** + * Get Started - Developers - Supported browsers + * + * Browser and OS support matrix for Design System components. + * Content from Confluence (Brief 87). + */ +import DropInCallout from '../../../components/DropInCallout.astro'; +import DocumentationPageLayout from '../../../layouts/DocumentationPageLayout.astro'; +--- + + + Supported browsers + + Design System components are tested across supported browsers and devices. + + +

+ We support the latest version of each browser listed on this page. Support applies to the browser and + operating system combinations shown in the table below. On mobile, support is limited to the browser + and operating system combinations listed for Android and iOS. +

+ + Browser and operating system support + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BrowserWindowsMac OSAndroidiOS
Google ChromeYesYesYesYes
Microsoft EdgeYesYes
Mozilla FirefoxYesYesYes
Apple SafariN/AYesN/AYes
+
+ + Representative mobile OS used in testing +
    +
  • Android OS: 10+
  • +
  • iOS: 15+
  • +
+ Testing guidance +

+ Use supported browsers and operating system versions when developing and testing services. If you + encounter a browser-specific issue, follow the + Verify a bug process. +

+ +
diff --git a/docs/src/pages/get-started/developers/bug.astro b/docs/src/pages/get-started/developers/bug.astro new file mode 100644 index 0000000000..ffabd0fc5e --- /dev/null +++ b/docs/src/pages/get-started/developers/bug.astro @@ -0,0 +1,65 @@ +--- +/** + * Get Started - Developers - Verify a bug + * + * Process for verifying and reporting Design System component issues. + * Content from Confluence (Brief 87). + */ +import DropInCallout from '../../../components/DropInCallout.astro'; +import DocumentationPageLayout from '../../../layouts/DocumentationPageLayout.astro'; +--- + + + Verify a bug + + Follow this process when you encounter an issue with a Design System component. + + +

+ These steps help confirm whether the issue is caused by the Design System, your product setup, or + custom code. This process applies to Angular and React implementations. +

+ + 1. Check versions +

Confirm you are using the latest version of:

+
    +
  • Web Components
  • +
  • Angular or React
  • +
+

+ If you are not using the latest version, upgrade and retest. If the issue remains, continue to the next step. +

+ + 2. Test with product templates +

Use the official Angular or React product templates to isolate the issue.

+ +

This helps determine whether the issue exists outside your project configuration.

+ + 3. Recreate the issue +

Create a minimal test environment.

+
    +
  • Use only the code required for the example to function
  • +
  • Include only the component experiencing the issue
  • +
  • Remove unrelated dependencies or custom logic
  • +
+

Confirm whether the issue can be replicated.

+ + 4. Share and report +

If you can reproduce the issue:

+
    +
  • Share the template application link in the #design-system-support Slack channel
  • +
  • Provide a link to your repository so the team can review and replicate the issue
  • +
+

+ Following these steps will help to ensure efficient investigation and quicker resolution of + design system component issues. +

+ +
diff --git a/docs/src/pages/get-started/developers/setup.astro b/docs/src/pages/get-started/developers/setup.astro new file mode 100644 index 0000000000..3524f407dc --- /dev/null +++ b/docs/src/pages/get-started/developers/setup.astro @@ -0,0 +1,139 @@ +--- +/** + * Get Started - Developers - Setup + * + * Setup instructions for Angular, React, and Web Components. + * Based on the current website content with DS 2.0 token updates. + */ +import DocumentationPageLayout from "../../../layouts/DocumentationPageLayout.astro"; +import DropInCallout from "../../../components/DropInCallout.astro"; +--- + + + Developer setup + + Set up the Government of Alberta Design System in Angular, React, or directly with Web + Components. + + +

Angular UI components

+ + Supported versions: 18, 19, 20, 21 + + + This is the web component library and utilizes Angular's web component + integration. + + +

1. Add dependencies

+
npm i @abgov/web-components
+npm i @abgov/angular-components
+npm i @abgov/design-tokens
+ +

2. Link ionicons in app/index.html

+ + Add the following in the head element: + +
<script type="module" src="https://cdn.jsdelivr.net/npm/ionicons@latest/dist/ionicons/ionicons.esm.js"></script>
+<script nomodule src="https://cdn.jsdelivr.net/npm/ionicons@latest/dist/ionicons/ionicons.js"></script>
+ +

3. Update src/app/app.module.ts

+ + Update src/app/app.module.ts as per the four steps below: + +
// 1. Import the CUSTOM_ELEMENTS_SCHEMA
+import { CUSTOM_ELEMENTS_SCHEMA } from "@angular/core";
+
+// 2. Import the libs
+import "@abgov/web-components";
+import { AngularComponentsModule } from "@abgov/angular-components";
+
+@NgModule({
+	declarations: [AppComponent],
+	imports: [
+		// 3. Add the needed imports
+		BrowserModule,
+		AngularComponentsModule,
+	],
+	providers: [],
+	bootstrap: [AppComponent],
+	// 4. Add the CUSTOM_ELEMENTS_SCHEMA to the NgModule
+	schemas: [CUSTOM_ELEMENTS_SCHEMA],
+	})
+export class AppModule {}
+ +

4. Add the styles link in src/styles.css

+
@import "@abgov/web-components/index.css";
+@import "@abgov/design-tokens/dist/tokens.css";
+ + + +

React UI components

+ + Supported versions: 17, 18, 19 + + + This library contains React components which wrap the Government of Alberta Web + Components. + + +

1. Add dependencies

+
npm i @abgov/react-components
+npm i @abgov/web-components
+npm i @abgov/design-tokens
+ +

2. Link ionicons in app/index.html

+ + Add the following to the head element: + +
<script type="module" src="https://cdn.jsdelivr.net/npm/ionicons@latest/dist/ionicons/ionicons.esm.js"></script>
+<script nomodule src="https://cdn.jsdelivr.net/npm/ionicons@latest/dist/ionicons/ionicons.js"></script>
+ +

3. Import the web components in src/main.tsx

+
import "@abgov/web-components";
+ +

4. Import the styles in src/index.css

+
@import "@abgov/web-components/index.css";
+@import "@abgov/design-tokens/dist/tokens.css";
+ + + +

Web components

+ + This library contains web components from the Government of Alberta. + + +

1. Add dependencies

+
npm i @abgov/web-components
+npm i @abgov/design-tokens
+ +

2. Link ionicons in index.html

+ + Add the following in the head element: + +
<script type="module" src="https://cdn.jsdelivr.net/npm/ionicons@latest/dist/ionicons/ionicons.esm.js"></script>
+<script nomodule src="https://cdn.jsdelivr.net/npm/ionicons@latest/dist/ionicons/ionicons.js"></script>
+ +

3. Import the web components into src/main.js

+
import "@abgov/web-components";
+ +

4. Add the styles link in your main CSS file

+ + Add the following in src/assets/main.css or wherever your main CSS file is + located: + +
@import "@abgov/web-components/index.css";
+@import "@abgov/design-tokens/dist/tokens.css";
+ + + + +
diff --git a/docs/src/pages/get-started/developers/technologies.astro b/docs/src/pages/get-started/developers/technologies.astro new file mode 100644 index 0000000000..bff58c1150 --- /dev/null +++ b/docs/src/pages/get-started/developers/technologies.astro @@ -0,0 +1,110 @@ +--- +/** + * Get Started - Developers - Technologies + * + * Overview of Design System technologies: Web Components, Svelte, Angular, React. + * Content from Confluence (Brief 87). + */ +import DropInCallout from '../../../components/DropInCallout.astro'; +import DocumentationPageLayout from '../../../layouts/DocumentationPageLayout.astro'; +--- + + + Technologies + + An overview of the technologies used in the Design System. + + + How the technologies fit together +

+ The Design System is built on Web Components. Most component functionality lives in the core Web + Components layer. Angular and React wrappers sit on top of that layer to make the components easier + to use in those frameworks. +

+

+ We use Svelte to author the components that are compiled to custom elements. You can use the Design + System through the core Web Components or through Angular and React wrappers. +

+ Diagram showing the technology layers: Svelte compiles to Web Components, which are wrapped by Angular and React + Web Components +

+ Web Components + are a set of standard web technologies that allow you to create reusable custom elements. Each component + includes its own structure, styling, and behaviour. This keeps it independent from the rest of your code. +

+

+ In the Design System, Web Components are the core library. They are framework-agnostic, so teams + can use them in different front-end environments. +

+ + Benefits of using Web Components +
    +
  • Reuse: Build once and use across pages, applications, and frameworks
  • +
  • Browser support: Work in modern browsers without additional libraries
  • +
  • Maintenance: Modular and self-contained structure simplifies updates
  • +
  • Encapsulation: Structure, style, and behaviour remain isolated from other page elements
  • +
  • Reliability: Code is not spread across HTML and JS files, thereby avoiding inconsistencies
  • +
  • Flexibility: Use inline, import, or compile components as needed
  • +
  • Composability: Combine components or integrate them with other components
  • +
+ + + Do not use Web Components directly unless there is a specific reason to do so. Using wrappers provides + type checking and developer helpers that are not available when working with the core Web Components alone. + + Svelte +

+ Svelte is the framework used to generate the + Design System Web Components. Svelte combines JavaScript (logic), HTML (structure), and CSS (style) + within a single file. It compiles these into efficient, reusable components. +

+ Why Svelte +

We use Svelte to:

+
    +
  • Build reusable Web Components
  • +
  • Keep component logic, structure, and styling together
  • +
  • Support integration with multiple front-end frameworks
  • +
+ Angular + + + Supported versions: 18, 19, 20, 21 + + +

+ Angular is a TypeScript-based framework for building + web applications. The Design System supports Angular through Angular wrappers around the core Web Components. +

+ + How Web Components and Angular work together +

Angular wrappers are created around the Web Components. These wrappers:

+
    +
  • Manage component properties and events
  • +
  • Support form binding (Reactive and Template-driven)
  • +
  • Allow integration within Angular applications
  • +
+

The Angular application interacts with the wrapper, which renders the underlying Web Component.

+ React + + + Supported versions: 17, 18, 19 + + +

+ React is an open-source JavaScript library used to + build user interfaces from reusable components. +

+ + How Web Components and React work together +

React wrappers are created around the Web Components. These wrappers:

+
    +
  • Manage properties and events
  • +
  • Enable integration within React applications
  • +
+

The React application interacts with the wrapper, which renders the underlying Web Component.

+ +
diff --git a/docs/src/pages/get-started/index.astro b/docs/src/pages/get-started/index.astro index cf595e0647..1b542be742 100644 --- a/docs/src/pages/get-started/index.astro +++ b/docs/src/pages/get-started/index.astro @@ -1,102 +1,107 @@ --- /** - * Get Started - Landing Page (Early Adopters Program) + * Get Started - Landing Page * - * Helps early adopter teams start using the experimental (pre-production) - * version of the design system. Content from Confluence (Brief 65). + * Overview of the design system and how to use it in your service. + * Content from Confluence (Brief 87). */ +import DropInCallout from '../../components/DropInCallout.astro'; import DocumentationPageLayout from '../../layouts/DocumentationPageLayout.astro'; --- - Early adopters program: Get started - - This page helps early adopter teams start using the experimental (pre-production) version of - the design system. + Start with the design system + + Start with the design system to build on the research and experience of other service teams. + This helps you avoid repeating work that has already been done. - - DS 2.0 pre-production components and templates available for early adopters to use and test - before the production release. Properties and visual design may change as the library - receives feedback and matures. -

- Early adopters should expect more change (and occasional rough edges) than production assets. -
+ + The design system gives you a strong foundation for common service needs. It allows your team + to focus on the specific challenges of your product. + Build on it. Do not start from scratch. + - + Design system by role -

Choose your path

+ - - A: Upgrade an existing service - Best if your team wants to use DS 2.0 experimental components and templates to update an - existing product to the new look and feel. This gives you a head start on migration and - produces the most actionable feedback. - + Why start with the design system? - - B: Build a new service - Best if your team is starting a new product or major feature and wants to build with DS 2.0 - from the beginning. This is the cleanest path (no updating custom elements). - + Streamline collaboration +

+ Designers and developers work from shared components and guidance. This reduces rework and misalignment. +

- - C: Test in a sample project - Best if your team wants to get a high level understanding of how DS 2.0 works and test the - setup process. - + Improve accessibility +

Accessibility is built into both the design and coded components.

- + Reduce testing effort +

Components are tested across devices, browsers, and service contexts.

-

Before you start

+ Maintain consistency +

+ Components align with the broader system to create a cohesive user experience across government services. +

- - Be on the latest version of the current next branch of the design system before - attempting the experimental update. - - Minimum versions - - - + Spend more time on high-value work +

Using existing components saves time. You can focus on work that improves service quality, including:

+
    +
  • Usability testing
  • +
  • User research
  • +
  • Content design
  • +
  • Accessibility reviews
  • +
  • Design quality checks
  • +
  • Low-fidelity prototyping and testing
  • +
+

This leads to better outcomes for users.

+ How to use the design system in your service +

Follow these steps when designing and building your service.

- + Use system components first +

Start with existing components and patterns. These meet most user needs.

-

Getting help and reporting issues

- - Use the #design-system-early-adopters Slack channel first so the whole - cohort can learn from questions and answers, and so the design system team can ask - clarifying questions before a GitHub issue is created. - - - When reporting an issue, include any relevant screenshots, links, version details, or - reproduction steps. - - - Avoid DMs to individual design system team members, use the Slack channel so all - participants can benefit from the questions and answers. + Identify gaps through user testing +

Test your service with users. Identify needs that are not covered by current components.

+ + Before you design something new +

+ Check what's already available and what's in progress. The team can point you to existing components, + solutions other teams have built, and planned work that may meet your need. +

+ + Design and test new solutions when you need them +

+ If you still have a gap, design a new solution and test it with users. Move forward only when + testing shows clear user value. +

+ + Share what you learn +

+ Share your findings with the design system team. Your solution may become part of the design system. +

+ + + Do not create custom components without a clear user need. + Unnecessary customization: +
    +
  • Increases maintenance effort
  • +
  • Slows delivery
  • +
  • Reduces consistency
  • +
+ Always confirm the need through research and testing.
- - - - - Designers: Get started - Developers: Get started - Workspace template repo - Deployed workspace demo - Early adopter Slack channel - - Book Drop-in hours - (Tuesday and Friday 1-3 PM MST) - - + + View the design system governance process + +
diff --git a/docs/src/pages/get-started/migration-guide.astro b/docs/src/pages/get-started/migration-guide.astro new file mode 100644 index 0000000000..06fbbcbe91 --- /dev/null +++ b/docs/src/pages/get-started/migration-guide.astro @@ -0,0 +1,231 @@ +--- +/** + * Get Started - Developers - Migration guide + * + * Migration pathways and guidance for moving products from DS 1.x to DS 2.0. + * Content adapted from Confluence. + */ +import DocumentationPageLayout from "../../layouts/DocumentationPageLayout.astro"; +--- + + + Migration guide + + Design System 2.0 (DS 2.0) becomes the Government of Alberta standard in March 2026. + New products starting after launch should use DS 2.0. Existing active products should + plan their move to DS 2.0 during the recommended migration window, which runs from + March 2026 to September 2026. + + + + +

Migration pathways

+ + The right migration path depends on your product's context, including team + funding and capacity, other delivery obligations, product lifecycle, and the effort + required to update. The three pathways are standard migration, late migration, and no + migration. + + +

Starting a new product

+ + If your product starts after March 2026, start with DS 2.0. Migration pathways apply + to existing products moving from DS 1.x to DS 2.0. + + +

Compare the pathways

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
PathwayUse it whenRecommendation
+ Standard migration + + + Your product has an active funded team and can migrate by September 2026 + + + Recommended default +
+ Late migration + + + Your team cannot meet the standard window because of delivery timelines, + dependencies, or capacity constraints + + + Only when necessary +
+ No migration + + + Your product does not have an active funded team and/or is not in a + position to upgrade + + + Only in specific cases +
+
+
+ +

+ Standard migration + +

+ + Standard migration is the default pathway for active products. + + + Choose this path if your product has an active funded team and can schedule migration + work between March 2026 and September 2026. This is the recommended path for most + teams because it keeps your product aligned with the current standard and gives you + the best support. + + Use this pathway when: + +
    +
  • your product is actively maintained
  • +
  • your team can reserve time to migrate by September 2026
  • +
  • you want access to the latest templates, components, tokens, and guidance
  • +
+
+ + Plan for work across the product team. Typical upgrade tasks include the library + updates, adjusting spacing and typography, and updating custom code to align with the + DS 2.0 visual design. This is a significant update and will usually involve design, + development, and testing. + + +

Late migration

+ + Late migration is a last-resort pathway for active products. + + + Choose this path only when delivery deadlines, dependencies, or capacity constraints + make the standard migration window unrealistic. This path gives your team more time, + but it also increases risk and reduces your ongoing support. + + Use this pathway when: + +
    +
  • a major delivery deadline blocks migration work
  • +
  • critical dependencies prevent the upgrade during the standard window
  • +
  • capacity or funding makes the standard window unrealistic
  • +
+
+ + Delaying migration means your product will wait longer to benefit from DS 2.0 + improvements. Over time, unresolved issues will accumulate and your product will be + inconsistent with the new standard for longer. + + +

No migration

+ + No migration is an opt-out pathway for specific situations. + + + Choose this path only when your product does not have an active funded team and/or is + not in a position to upgrade. In these cases, the product may remain on DS 1.x. + + + Teams on this path should understand that the product will not receive DS 2.0 + improvements and will not align with the current standard. Support for DS 1.x is + limited from March to September and ends after September 2026. + + + + +

What changes after launch

+ + After the DS 2.0 launch in March 2026: + + +
    +
  • New products should use DS 2.0
  • +
  • Active products should aim to migrate by September 2026
  • +
  • + After launch, web components will move to version 2.x. Although this is a major + version update, it does not include breaking changes. +
  • +
  • + Angular 4.x and React 6.x receive limited fixes or features from March to + September +
  • +
  • Support for DS 1.0 ends after September 2026
  • +
  • Web components will update to a new major version after September 2026
  • +
+
+ +

How to choose a pathway

+ + Use these questions to guide your decision: + + +
    +
  • Is this a new product starting after March 2026?
  • +
  • Does the product have an active funded team?
  • +
  • Can the team schedule migration work before September 2026?
  • +
  • + Are there delivery deadlines or dependencies that block the standard window? +
  • +
  • + Is the team prepared to accept reduced support and higher maintenance risk if + migration is delayed? +
  • +
+
+ + + + Review the setup steps for developers + +
diff --git a/docs/src/pages/get-started/out-of-support.astro b/docs/src/pages/get-started/out-of-support.astro new file mode 100644 index 0000000000..c341fa8b9c --- /dev/null +++ b/docs/src/pages/get-started/out-of-support.astro @@ -0,0 +1,53 @@ +--- +/** + * Get Started - Out of Support Versions + * + * Information about unsupported Design System versions. + * Content from Confluence (Brief 87). + */ +import DropInCallout from '../../components/DropInCallout.astro'; +import DocumentationPageLayout from '../../layouts/DocumentationPageLayout.astro'; +--- + + + Out-of-support versions + + With the launch of the new Design System, support for Angular v4 and lower, and React v6 and lower + is significantly reduced. + + + What this means + + Fewer fixes or patches +

Bug fixes and security updates are no longer prioritized for these versions.

+ + No new features +

All new features and enhancements are released only in the current major version.

+ + Use at your own risk +

Existing projects may continue to run. However:

+
    +
  • Compatibility with new browsers or operating systems is not guaranteed
  • +
  • Compatibility with future framework updates is not guaranteed
  • +
  • Issues discovered in these versions will not be resolved
  • +
+ + + Projects using Angular v4 and lower, and React v6 and lower will continue to function. + New issues or defects identified in these versions may not be fixed. + + What to do next +

+ Upgrade to the latest supported version. Refer to the + version update guide. +

+

+ If you need support planning your upgrade, + book time in drop-in hours. +

+ +
diff --git a/docs/src/pages/get-started/qa-testing.astro b/docs/src/pages/get-started/qa-testing.astro new file mode 100644 index 0000000000..146cb12778 --- /dev/null +++ b/docs/src/pages/get-started/qa-testing.astro @@ -0,0 +1,77 @@ +--- +/** + * Get Started - QA Testing + * + * Testing process for Design System components. + * Content from Confluence (Brief 87). + */ +import DropInCallout from '../../components/DropInCallout.astro'; +import DocumentationPageLayout from '../../layouts/DocumentationPageLayout.astro'; +--- + + + QA testing + + This page outlines the testing process for the Design System. The process ensures components + function correctly and integrate within products. + + + Testing objectives +

QA testing ensures that:

+
    +
  • Coded components match the design specifications
  • +
  • Components work in both React and Angular implementations
  • +
  • Components are responsive across screen sizes
  • +
  • Components meet accessibility requirements
  • +
  • Mobile behaviour is validated
  • +
  • Documentation on the Design System website is accurate
  • +
+ Test cases + + Component testing +
    +
  • Confirm the rendered component matches design and styling guidelines
  • +
  • Confirm configured properties display correctly
  • +
  • Confirm the expected event triggers when interacting with the component
  • +
+ + Responsiveness testing +
    +
  • Test components on mobile, tablet, and desktop screen sizes
  • +
  • Use browser developer tools to simulate devices
  • +
+ + Accessibility testing +
    +
  • Run Lighthouse audits to review accessibility scores
  • +
  • Confirm appropriate ARIA (Accessible Rich Internet Applications) roles and labels
  • +
  • Test keyboard navigation
  • +
  • Test with NVDA screen reader
  • +
+ + Cross-browser testing +
    +
  • Test on the latest versions of Chrome, Firefox, Safari, and Edge
  • +
  • Use Chrome device mode to simulate mobile environments
  • +
  • Confirm consistent appearance and behaviour across browsers
  • +
+ + Bug testing +

When a bug is fixed:

+
    +
  1. Reproduce the issue using the main branch.
  2. +
  3. Verify the fix in the pull request branch.
  4. +
  5. Retest the component across all relevant areas.
  6. +
+

Confirm the issue no longer occurs.

+ Reporting +
    +
  • Document updated test results, findings, and screenshots in the pull request comments
  • +
  • Log newly discovered issues in GitHub
  • +
+ +
diff --git a/docs/src/pages/get-started/roadmap.astro b/docs/src/pages/get-started/roadmap.astro new file mode 100644 index 0000000000..070656eab6 --- /dev/null +++ b/docs/src/pages/get-started/roadmap.astro @@ -0,0 +1,347 @@ +--- +/** + * Get Started - Roadmap + * + * High-level roadmap for the design system team's 2026-27 fiscal year. + * Content adapted from Confluence. + */ +import DocumentationPageLayout from "../../layouts/DocumentationPageLayout.astro"; +--- + + + Roadmap + + A high-level summary of the work the design system team plans to focus on in the + 2026-27 Fiscal Year. + + + + The roadmap is subject to change as we gather new information. We will communicate + updates to ensure product teams can align and plan their work accordingly. + + + + For more details on our priorities and day-to-day activities, see our + + design system backlog. + + + + + +

Now

+ + Focus: Drive DS 2.0 adoption momentum, protect post-launch stability, and + prove DS 2.0 helps teams move faster through prescriptive guidance and examples. + + +

DS 2.0 adoption and satisfaction measurement

+ + Objective: Establish reliable DS 2.0 adoption tracking and reporting, and + pair it with satisfaction signals from designers, developers, and end users to understand + whether DS 2.0 is improving service outcomes as teams upgrade. + + + Benefit: Enables accurate progress reporting and provides evidence that + DS 2.0 is improving usability, accessibility, and experience quality, not only adoption. + + + Examples: + +
    +
  • + Create a mechanism to reliably collect and report adoption rate +
  • +
  • + Track upgrade progress against the adoption schedule +
  • +
  • + Capture qualitative signals from teams (developer and designer feedback themes) +
  • +
  • + Capture end-user feedback where available (citizen or worker satisfaction, + accessibility and usability feedback) +
  • +
+ +

Product acceleration enablement

+ + Objective: Provide prescriptive guidance and resources that help teams + get to screens, prototypes, and working experiences faster using DS 2.0. + + + Benefit: Reduces time to first screens and improves consistency by helping + teams start from proven patterns instead of building from scratch. + + + Examples: + +
    +
  • + Create resources that show how to quickly prototype with DS 2.0 components and + examples +
  • +
  • + Provide contextual starting points for teams using Public form and Workspace + templates +
  • +
  • + Pilot DS 2.0 with teams to generate strong examples to share +
  • +
  • + Create and publish migration success stories +
  • +
+ +

Design system MCP

+ + Objective: Stand up the design system Model Context Protocol (MCP) capability + so AI tools and platforms can reliably access design system guidance, components, patterns, + and standards. + + + Benefit: Helps teams generate more consistent, standards-aligned front-ends + by making trusted design system context available directly in AI-assisted workflows. + + + Examples: + +
    +
  • + Define the initial MCP scope and supported design system resources +
  • +
  • + Stand up the MCP server and validate the hosting and maintenance approach +
  • +
  • + Test the MCP use in real product workflows and capture gaps to address +
  • +
  • + Document recommended workflows for teams +
  • +
+ +

Vue support decision

+ + Objective: Explore and define the minimum work required to confidently + state DS 2.0 officially supports Vue, including scope, constraints, and support model. + + + Benefit: Prevents unclear commitments and reduces strategic risk by enabling + an informed investment decision aligned to organizational needs. + + + Examples: + +
    +
  • + Define what "official Vue support" means +
  • +
  • + Outline the minimum supportable scope +
  • +
  • + Identify implications for documentation, maintenance, testing, and support +
  • +
+ + + +

Next

+ + Focus: Improve the core Public form and Workspace experience, mature reusable + patterns and examples, reduce adoption friction through better packaging, and execute on + the chosen Vue direction. + + +

Public form and Workspace capability improvements

+ + Objective: Enhance key Public form and Workspace capabilities based on + adoption needs and workflow requirements. + + + Benefit: Improves feature sets and reduces the need for custom one-off + solutions by making common workflows easier to implement with DS 2.0. + + + Example: + +
    +
  • + Build the review, revise, resubmit feature +
  • +
+ +

Examples and pattern maturity

+ + Objective: Expand and refine examples and position them as adaptable reusable + patterns that teams can apply with confidence. + + + Benefit: Improves self-serve success and product consistency, reducing + implementation variance and support demand over time. + + + Examples: + +
    +
  • + Continue expanding and refining examples +
  • +
  • + Show how components and examples combine into larger contexts and workflows +
  • +
+ +

Library packaging and tech stack upgrades

+ + Objective: Reduce friction in how design system assets are bundled and + adopted across libraries and update important tech stacks. + + + Benefit: Lowers setup and upgrade complexity, and keeps the design system + up to date with the latest supported versions. + + + Examples: + +
    +
  • + Improve how code libraries are bundled together (React, web components, tokens) +
  • +
  • + Update to Svelte 5 +
  • +
+ +

Vue follow-through

+ + Objective: Based on Vue discovery, either implement formal Vue support + or clearly position Angular and React as the recommended approach for teams using AI-assisted + workflows. + + + Benefit: Provides clear direction to product teams and reduces uncertainty, + enabling progress on a supported path while keeping support sustainable for the design system + team. + + + Examples: + +
    +
  • + Publish Vue support guidance and expectations +
  • +
  • + Implement agreed scope if approved +
  • +
  • + Publish recommended alternatives if Vue support is not pursued +
  • +
+ + + +

Later

+ + Focus: Support DS 2.0 version updates and improve documentation and communications + quality to support scaling and sustainability. + + +

Documentation and communications improvements

+ + Objective: Improve how teams access and understand design system guidance, + and communicate design system value areas like accessibility more clearly. + + + Benefit: Increases trust, improves reuse, and supports self-serve adoption + by making guidance easier to consume and share. + + + Examples: + +
    +
  • + Add markdown file download to website documentation +
  • +
  • + Articulate accessibility work more clearly (what is covered and how it supports + teams) +
  • +
+ +

Targeted capacity support for DS 2.0 version updates

+ + Objective: Provide targeted design system team capacity to help remaining + DS 1.x product teams complete the DS 2.0 version update. + + + Benefit: Accelerates adoption progress and unblocks teams facing more difficult + migrations, supporting adoption targets while keeping support sustainable through a focus + on teams most in need. + + + Example: + + +
    +
  • + Focus migration support on late adopters facing systemic barriers to upgrading +
  • +
+
diff --git a/docs/src/pages/index.astro b/docs/src/pages/index.astro index 8355c1bf0a..2bf12f8dcf 100644 --- a/docs/src/pages/index.astro +++ b/docs/src/pages/index.astro @@ -21,6 +21,20 @@ import CardLite from '../components/CardLite.astro';

Build on the research and experience of other service teams by using shared components, examples, tokens, and templates.

+ +
@@ -35,12 +49,9 @@ import CardLite from '../components/CardLite.astro';

Our accessible, brand-compliant components and templates help you launch faster while staying aligned with the current standard.

- - Start using the design system - - - - + + Start using the design system +
@@ -54,13 +65,13 @@ import CardLite from '../components/CardLite.astro'; imageUrl="/images/home/public-form-thumb.png" title="Public form" description="A pattern optimized for clarity and error prevention for public-facing applications. It includes templates for page types: Start, Task list, Question, Review, and Result." - linkTo="/examples" + linkTo="/examples/public-form" />
@@ -71,22 +82,16 @@ import CardLite from '../components/CardLite.astro';

@@ -100,19 +105,19 @@ import CardLite from '../components/CardLite.astro'; imageUrl="/images/home/primary-users-thumb.png" title="Identify the primary users and their main tasks" description="Share the primary users and their main tasks in your digital service. Do you know your users?" - linkTo="/guidance" + linkTo="https://forms.cloud.microsoft/r/qz8XKnbcsE" />
@@ -168,9 +173,63 @@ import CardLite from '../components/CardLite.astro'; max-width: 550px; } + /* Hero Search Trigger */ + .hero-search-trigger { + display: inline-flex; + align-items: center; + gap: var(--goa-space-s); + width: 100%; + max-width: 500px; + margin-top: var(--goa-space-xl); + padding: var(--goa-space-s) var(--goa-space-m); + background: rgba(255, 255, 255, 0.85); + border: 1px solid var(--goa-color-greyscale-300); + border-radius: var(--goa-border-radius-m); + font: var(--goa-typography-body-m); + cursor: pointer; + color: var(--goa-color-text-secondary); + text-align: left; + transition: background 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease; + } + + .hero-search-trigger:hover { + background: rgba(255, 255, 255, 0.95); + border-color: var(--goa-color-greyscale-black); + box-shadow: inset 0 0 0 1px var(--goa-color-greyscale-black); + } + + .hero-search-trigger:focus-visible { + outline: 3px solid var(--goa-color-interactive-focus); + outline-offset: 2px; + } + + .hero-search-icon { + flex-shrink: 0; + color: var(--goa-color-text-secondary); + } + + .hero-search-trigger span { + flex: 1; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + + .hero-search-trigger kbd { + flex-shrink: 0; + font-family: inherit; + font-size: 0.75rem; + line-height: 1; + padding: var(--goa-space-2xs) var(--goa-space-xs); + background: var(--goa-color-greyscale-100); + border: 1px solid var(--goa-color-greyscale-200); + border-radius: var(--goa-border-radius-s); + color: var(--goa-color-greyscale-800); + } + /* Main Content - White background */ .ds-main-content { - background: white; + background: var(--goa-color-greyscale-white); padding: var(--goa-space-4xl) var(--goa-space-m); } @@ -206,19 +265,6 @@ import CardLite from '../components/CardLite.astro'; margin: 0 0 var(--goa-space-m); } - .cta-link { - display: inline-flex; - align-items: center; - gap: var(--goa-space-2xs); - color: var(--goa-color-interactive-default); - font: var(--goa-typography-body-m); - text-decoration: none; - } - - .cta-link:hover { - text-decoration: underline; - } - .cta-image { flex: 2; min-width: 0; @@ -288,6 +334,12 @@ import CardLite from '../components/CardLite.astro'; max-width: 100%; } + .hero-search-trigger { + max-width: 500px; + margin-left: auto; + margin-right: auto; + } + .ds-main-content { padding: var(--goa-space-3xl) var(--goa-space-m); } @@ -323,7 +375,7 @@ import CardLite from '../components/CardLite.astro'; min-height: 515px; display: flex; flex-direction: column; - border-radius: 0; + border-radius: var(--goa-border-radius-none); padding: 0 var(--goa-space-xs); /* Extra top padding to account for header overlay (~73px) */ padding-top: 73px; @@ -340,6 +392,17 @@ import CardLite from '../components/CardLite.astro'; max-width: 200px; } + .hero-search-trigger { + max-width: none; + margin-left: 0; + margin-right: 0; + margin-bottom: var(--goa-space-xl); + } + + .hero-search-trigger kbd { + display: none; + } + .ds-main-content { padding: var(--goa-space-2xl) var(--goa-space-xs); } diff --git a/docs/src/pages/search.astro b/docs/src/pages/search.astro new file mode 100644 index 0000000000..8e52c4b6c2 --- /dev/null +++ b/docs/src/pages/search.astro @@ -0,0 +1,163 @@ +--- +/** + * Search Page + * + * Standalone search page for direct URL access. + * - Provides fallback search access when modal isn't available + * - Supports URL parameters: /search?q=button + * - Good for mobile, SEO, and sharing search links + */ +import BaseLayout from '../layouts/BaseLayout.astro'; +import { SiteNav } from '../components/SiteNav'; +import { MobileHeader } from '../components/MobileHeader'; +import { SearchPage } from '../components/search'; +import { getNavCategories } from '../lib/nav-categories'; + +// Get query from URL parameters +const url = new URL(Astro.request.url); +const initialQuery = url.searchParams.get('q') || ''; +const navCategories = await getNavCategories(); +--- + + +
+
+ + + + +
+ +
+ +
+ +
+
+

Search

+

+ Find components, patterns, and examples in the GoA Design System. +

+
+ + +
+
+
+
+
+ + diff --git a/docs/src/pages/support.astro b/docs/src/pages/support.astro new file mode 100644 index 0000000000..fafdb36ec9 --- /dev/null +++ b/docs/src/pages/support.astro @@ -0,0 +1,86 @@ +--- +/** + * Get Support + * + * Contact info, issue reporting, Slack channels, drop-in hours, + * and design system team members. + */ +import DocumentationPageLayout from '../layouts/DocumentationPageLayout.astro'; +--- + + + Get support + + Get help from our team with using the design system, including components, guidelines, best + practices, and accessibility. + + +

Raise an issue

+ + Let us know if you find a problem in the design system or if you need a new component or + pattern. You can report a bug or request a new feature on GitHub. + + + Raise an issue on GitHub + + + + +

Talk to us

+ +

Slack

+ + #design-system-support + — Reach out to the design system directly to ask a question and get support. + + + #figma + — A place for any Figma discussion. Share tips, tricks, techniques, ask questions, report + issues. + + +

Drop-in hours

+ + Tuesday and Friday, 1:00 – 3:00 pm MST + + + For product teams to get feedback on their usage of the design system, propose new components or + changes to existing components, ask any questions, and give feedback to the design system. + + + Book a time + + + + +

Design system team

+ +
    +
  • Product owner: Mark Elamatha
  • +
  • Digital architect and Lead developer: Chris Olsen
  • +
  • Scrum master and DevOps: Dustin Nielsen
  • +
  • Developers: Vanessa Tran, Eric Hoff
  • +
  • Designer and Developer: Thomas Jeffery, Benji Franck
  • +
+
+ + + + + Join design system drop-in hours to: +
    +
  • Get feedback on your service
  • +
  • Propose new components or patterns
  • +
  • Suggest updates to existing resources
  • +
  • Ask questions
  • +
  • Share feedback
  • +
+ Drop-in sessions are available to Government of Alberta product teams. +

+ Book time in drop-in hours +
+
diff --git a/docs/src/pages/tokens/index.astro b/docs/src/pages/tokens/index.astro index f22b4505a0..02e92b0d9b 100644 --- a/docs/src/pages/tokens/index.astro +++ b/docs/src/pages/tokens/index.astro @@ -29,7 +29,7 @@ const description = 'Browse all GoA design tokens including colors, spacing, typ diff --git a/docs/src/scripts/build-search-index.ts b/docs/src/scripts/build-search-index.ts new file mode 100644 index 0000000000..3b2258ff69 --- /dev/null +++ b/docs/src/scripts/build-search-index.ts @@ -0,0 +1,306 @@ +/** + * Build Search Index Script + * + * Extracts searchable content from MDX files and outputs a JSON index. + * Run with: npm run build:search-index + * + * The index is consumed by useSearch.ts at runtime for client-side search. + */ + +import { readFileSync, writeFileSync, readdirSync, statSync, existsSync, mkdirSync } from 'node:fs'; +import { join, basename, dirname } from 'node:path'; +import { fileURLToPath } from 'node:url'; + +// Get directory paths relative to this script +// Script is in docs/src/scripts/, so go up two levels to docs/ +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); +const ROOT = join(__dirname, '../..'); + +// Content directories +const COMPONENTS_DIR = join(ROOT, 'src/content/components'); +const EXAMPLES_DIR = join(ROOT, 'src/content/examples'); +const OUTPUT_FILE = join(ROOT, 'public/search-index.json'); + +// ============================================================================ +// Types +// ============================================================================ + +interface ComponentEntry { + type: 'component'; + id: string; // filename without .mdx + name: string; + description?: string; + status: string; + category: string; + tags: string[]; + slug: string; +} + +interface ExampleEntry { + type: 'example'; + id: string; + title: string; + description?: string; + status: string; + categories: string[]; + tags: string[]; + components: string[]; // What components this example uses + scale: string; + userType: string; + slug: string; +} + +type SearchEntry = ComponentEntry | ExampleEntry; + +// ============================================================================ +// Frontmatter Parsing +// ============================================================================ + +/** + * Extract YAML frontmatter from MDX content. + * + * MDX files have frontmatter between --- delimiters at the top: + * --- + * name: Button + * status: stable + * --- + * + * This is a simple parser that handles the common cases without + * pulling in a full YAML library. + */ +function parseFrontmatter(content: string): { frontmatter: Record; body: string } { + const frontmatterRegex = /^---\r?\n([\s\S]*?)\r?\n---/; + const match = content.match(frontmatterRegex); + + if (!match) { + return { frontmatter: {}, body: content }; + } + + const yamlContent = match[1]; + const body = content.slice(match[0].length).trim(); + + // Simple YAML parser for our use case + const frontmatter: Record = {}; + let currentKey: string | null = null; + let currentArray: string[] | null = null; + + for (const line of yamlContent.split('\n')) { + // Array item (starts with " - ") + if (line.match(/^\s+-\s+/)) { + const value = line.replace(/^\s+-\s+/, '').trim(); + if (currentArray) { + currentArray.push(value); + } + continue; + } + + // Key-value pair + const kvMatch = line.match(/^(\w+):\s*(.*)/); + if (kvMatch) { + // Save previous array if any + if (currentKey && currentArray) { + frontmatter[currentKey] = currentArray; + } + + currentKey = kvMatch[1]; + const value = kvMatch[2].trim(); + + // Check if this starts an array (empty value followed by array items) + if (value === '' || value === '|') { + currentArray = []; + } else { + currentArray = null; + // Remove quotes if present + frontmatter[currentKey] = value.replace(/^["']|["']$/g, ''); + } + } + } + + // Don't forget the last array + if (currentKey && currentArray) { + frontmatter[currentKey] = currentArray; + } + + return { frontmatter, body }; +} + +/** + * Extract the first paragraph from MDX body content. + * Used as description for examples when not explicitly provided. + */ +function extractFirstParagraph(body: string): string | undefined { + // Skip headings and empty lines, find first paragraph + const lines = body.split('\n'); + let paragraph = ''; + + for (const line of lines) { + const trimmed = line.trim(); + + // Skip empty lines at start + if (!paragraph && !trimmed) continue; + + // Skip headings + if (trimmed.startsWith('#')) continue; + + // Found content + if (trimmed) { + paragraph += (paragraph ? ' ' : '') + trimmed; + } else if (paragraph) { + // Empty line after content = end of paragraph + break; + } + } + + return paragraph || undefined; +} + +// ============================================================================ +// File Processing +// ============================================================================ + +/** + * Process a component MDX file into a search entry. + */ +function processComponent(filePath: string): ComponentEntry | null { + try { + const content = readFileSync(filePath, 'utf-8'); + const { frontmatter } = parseFrontmatter(content); + + const id = basename(filePath, '.mdx'); + + // Skip hidden components + if (frontmatter.hidden === true || frontmatter.hidden === 'true') { + return null; + } + + return { + type: 'component', + id, + name: String(frontmatter.name || id), + description: frontmatter.description ? String(frontmatter.description) : undefined, + status: String(frontmatter.status || 'stable'), + category: String(frontmatter.category || 'utilities'), + tags: Array.isArray(frontmatter.tags) ? frontmatter.tags.map(String) : [], + slug: String(frontmatter.slug || id), + }; + } catch (error) { + console.error(`Error processing component ${filePath}:`, error); + return null; + } +} + +/** + * Process an example MDX file into a search entry. + * Examples live in subdirectories: examples/[name]/index.mdx + */ +function processExample(filePath: string): ExampleEntry | null { + try { + const content = readFileSync(filePath, 'utf-8'); + const { frontmatter, body } = parseFrontmatter(content); + + // Get ID from directory name + const dirName = basename(dirname(filePath)); + const id = String(frontmatter.id || dirName); + + // Extract description from body if not in frontmatter + const description = frontmatter.description + ? String(frontmatter.description) + : extractFirstParagraph(body); + + return { + type: 'example', + id, + title: String(frontmatter.title || id), + description, + status: String(frontmatter.status || 'published'), + categories: Array.isArray(frontmatter.categories) + ? frontmatter.categories.map(String) + : [], + tags: Array.isArray(frontmatter.tags) ? frontmatter.tags.map(String) : [], + components: Array.isArray(frontmatter.components) + ? frontmatter.components.map(String) + : [], + scale: String(frontmatter.scale || 'interaction'), + userType: String(frontmatter.userType || 'both'), + slug: String(frontmatter.slug || id), + }; + } catch (error) { + console.error(`Error processing example ${filePath}:`, error); + return null; + } +} + +/** + * Recursively find all MDX files in a directory. + */ +function findMdxFiles(dir: string): string[] { + const files: string[] = []; + + if (!existsSync(dir)) { + console.warn(`Directory not found: ${dir}`); + return files; + } + + for (const entry of readdirSync(dir)) { + const fullPath = join(dir, entry); + const stat = statSync(fullPath); + + if (stat.isDirectory()) { + files.push(...findMdxFiles(fullPath)); + } else if (entry.endsWith('.mdx')) { + files.push(fullPath); + } + } + + return files; +} + +// ============================================================================ +// Main +// ============================================================================ + +function main() { + console.log('Building search index...\n'); + + const entries: SearchEntry[] = []; + + // Process components + console.log('Processing components...'); + const componentFiles = findMdxFiles(COMPONENTS_DIR); + for (const file of componentFiles) { + const entry = processComponent(file); + if (entry) { + entries.push(entry); + } + } + console.log(` Found ${componentFiles.length} files, indexed ${entries.filter(e => e.type === 'component').length} components`); + + // Process examples + console.log('Processing examples...'); + const exampleFiles = findMdxFiles(EXAMPLES_DIR); + const exampleCount = entries.length; + for (const file of exampleFiles) { + const entry = processExample(file); + if (entry) { + entries.push(entry); + } + } + console.log(` Found ${exampleFiles.length} files, indexed ${entries.length - exampleCount} examples`); + + // Ensure public directory exists + const publicDir = dirname(OUTPUT_FILE); + if (!existsSync(publicDir)) { + mkdirSync(publicDir, { recursive: true }); + } + + // Write output + writeFileSync(OUTPUT_FILE, JSON.stringify(entries, null, 2)); + console.log(`\nWrote ${entries.length} entries to ${OUTPUT_FILE}`); + + // Show sample + console.log('\nSample entries:'); + console.log(JSON.stringify(entries.slice(0, 2), null, 2)); +} + +main(); diff --git a/docs/src/scripts/extract-api.ts b/docs/src/scripts/extract-api.ts new file mode 100644 index 0000000000..2c7f7cadee --- /dev/null +++ b/docs/src/scripts/extract-api.ts @@ -0,0 +1,755 @@ +/** + * Component API Extraction Script + * + * Extracts props, events, and slots from Svelte component files and outputs + * structured JSON matching the content model spec defined in Brief 1. + * + * Usage: + * npx tsx src/scripts/extract-api.ts button # Extract single component + * npx tsx src/scripts/extract-api.ts button input # Extract multiple components + * npx tsx src/scripts/extract-api.ts --all # Extract all components + * + * Output: JSON files in docs/generated/component-apis/ + */ + +import * as fs from "fs"; +import * as path from "path"; +import { fileURLToPath } from "url"; + +// ============================================================================= +// Configuration +// ============================================================================= + +// Resolve paths relative to the workspace root (ui-components/) +// This script lives at docs/src/scripts/ — three levels below the workspace root +const WORKSPACE_ROOT = path.resolve( + path.dirname(fileURLToPath(import.meta.url)), + "../../..", +); +const UI_COMPONENTS_PATH = path.join( + WORKSPACE_ROOT, + "libs/web-components/src/components", +); +const OUTPUT_PATH = path.join(WORKSPACE_ROOT, "docs/generated/component-apis"); + +// ============================================================================= +// Output Types (matching content model spec) +// ============================================================================= + +interface ExtractedProp { + name: string; + type: string; + typeLabel?: string; // TypeScript type name (e.g., "GoabButtonType") + values?: string[]; // Allowed values for union types + required: boolean; + default: string | null; + description: string; // From JSDoc comments in source (empty if not documented) + deprecated?: boolean; // True if JSDoc has @deprecated tag +} + +interface ExtractedEvent { + name: string; + type: string; + description: string; // Empty - filled by human content + frameworks: ("react" | "angular" | "web-component")[]; +} + +interface ExtractedSlot { + name: string; + description: string; // Empty - filled by human content +} + +interface ExtractedComponentAPI { + componentSlug: string; + extractedFrom: string; + props: ExtractedProp[]; + events: ExtractedEvent[]; + slots: ExtractedSlot[]; +} + +// ============================================================================= +// Internal Parsing Types +// ============================================================================= + +interface ValidatorInfo { + values: string[]; + deprecated?: string[]; + typeName?: string; +} + +interface ParsedPropRaw { + name: string; + rawName: string; + type: string; + typeLabel?: string; + values?: string[]; + required: boolean; + default: string | null; + isBooleanProp: boolean; + description: string; + deprecated: boolean; +} + +// ============================================================================= +// JSDoc Parser +// ============================================================================= + +interface JSDocInfo { + description: string; + required: boolean; + internal: boolean; + deprecated: boolean; +} + +/** + * Builds a map of prop names to their JSDoc info (description + required flag). + * Scans through content looking for JSDoc comments immediately preceding export let statements. + */ +function buildJSDocMap(content: string): Map { + const jsDocMap = new Map(); + + // Pattern matches a single JSDoc comment followed directly by export let statement. + // Uses [^*] and \*[^/] to match content within /** ... */ without crossing + // into the next comment block (prevents file-level JSDoc from leaking into props). + // Group 1: JSDoc content (between /** and */) + // Group 2: prop name + const pattern = /\/\*\*\s*((?:[^*]|\*(?!\/))*?)\s*\*\/\s*\n\s*export\s+let\s+(\w+)/g; + + let match; + while ((match = pattern.exec(content)) !== null) { + const rawComment = match[1]; + const propName = match[2]; + const { description, required, internal, deprecated } = parseJSDocContent(rawComment); + jsDocMap.set(propName, { description, required, internal, deprecated }); + } + + return jsDocMap; +} + +/** + * Parses JSDoc comment content, extracting description and @required tag. + */ +function parseJSDocContent(rawComment: string): { + description: string; + required: boolean; + internal: boolean; + deprecated: boolean; +} { + const cleaned = rawComment + // Remove leading asterisks and whitespace from each line + .split("\n") + .map((line) => line.replace(/^\s*\*\s?/, "").trim()) + .join(" ") + // Collapse multiple spaces + .replace(/\s+/g, " ") + .trim(); + + // Check for JSDoc tags + const required = /@required\b/i.test(cleaned); + const internal = /@internal\b/i.test(cleaned); + const deprecated = /@deprecated\b/i.test(cleaned); + + // Remove tags from description + const description = cleaned + .replace(/@required\s*/gi, "") + .replace(/@internal\s*/gi, "") + .trim(); + + return { description, required, internal, deprecated }; +} + +// ============================================================================= +// Svelte Parser +// ============================================================================= + +function extractTagName(content: string): string | null { + // Pattern 1: customElement="goa-tag" + const simpleMatch = content.match(/customElement\s*=\s*["']([^"']+)["']/); + if (simpleMatch) return simpleMatch[1]; + + // Pattern 2: customElement={{ tag: "goa-tag", ... }} + const objectMatch = content.match(/customElement\s*=\s*\{\{\s*tag:\s*["']([^"']+)["']/); + if (objectMatch) return objectMatch[1]; + + return null; +} + +/** + * Extracts type aliases from the Svelte file (both module and instance scripts). + * Resolves composite aliases like `type Size = HeadingSize | BodySize` by + * recursively expanding references until all values are string literals. + */ +function extractTypeAliases(content: string): Map { + const aliases = new Map(); + + // Match: type Name = "value1" | "value2" | OtherType; + const typeMatches = content.matchAll(/\btype\s+(\w+)\s*=\s*([^;]+);/g); + + for (const match of typeMatches) { + const name = match[1]; + const definition = match[2].trim(); + + const members = definition + .split("|") + .map((v) => v.trim()) + .filter((v) => v.length > 0); + + aliases.set(name, members); + } + + // Resolve composite aliases (expand references to other aliases) + // Iterate until stable — handles chained aliases + let changed = true; + while (changed) { + changed = false; + for (const [name, members] of aliases) { + const expanded: string[] = []; + for (const member of members) { + const clean = member.replace(/["']/g, ""); + if (aliases.has(clean) && clean !== name) { + expanded.push(...aliases.get(clean)!); + changed = true; + } else { + expanded.push(member); + } + } + aliases.set(name, expanded); + } + } + + return aliases; +} + +function extractValidators(content: string): Map { + const validators = new Map(); + + // Pattern: const [Name, validateName] = typeValidator("description", ["value1", "value2"], { options }); + const validatorMatches = content.matchAll( + /const\s+\[(\w+),\s*validate\w+\]\s*=\s*typeValidator\s*\([\s\S]*?\[([\s\S]*?)\][\s\S]*?\);/g, + ); + + for (const match of validatorMatches) { + const name = match[1]; + const valuesStr = match[2]; + + const values = valuesStr + .split(",") + .map((v) => v.trim().replace(/["']/g, "")) + .filter((v) => v.length > 0); + + // Check for deprecated values + const fullMatch = match[0]; + let deprecated: string[] | undefined; + const deprecatedMatch = fullMatch.match(/deprecated:\s*\[([\s\S]*?)\]/); + if (deprecatedMatch) { + deprecated = deprecatedMatch[1] + .split(",") + .map((v) => v.trim().replace(/["']/g, "")) + .filter((v) => v.length > 0); + } + + validators.set(name, { values, deprecated }); + } + + // Map type aliases to validators: type TypeName = (typeof ValidatorName)[number]; + const typeAliasMatches = content.matchAll( + /type\s+(\w+)\s*=\s*\(\s*typeof\s+(\w+)\s*\)\s*\[\s*number\s*\]/g, + ); + for (const match of typeAliasMatches) { + const typeName = match[1]; + const validatorName = match[2]; + const validatorData = validators.get(validatorName); + if (validatorData) { + validators.set(typeName, { ...validatorData, typeName }); + } + } + + return validators; +} + +function extractProps( + content: string, + validators: Map, + componentName: string, + typeAliases: Map, +): ParsedPropRaw[] { + const props: ParsedPropRaw[] = []; + + // Build JSDoc map for descriptions + const jsDocMap = buildJSDocMap(content); + + // Internal props to skip (used by public forms system, not useful for devs) + const internalProps = new Set([ + "publicformsummaryorder", + "action", + "actionarg", + "actionargs", + ]); + + // Match: export let propName: Type = defaultValue; + const propMatches = content.matchAll( + /export\s+let\s+(\w+)(?:\s*:\s*([^=;]+?))?(?:\s*=\s*([^;]+?))?;/g, + ); + + for (const match of propMatches) { + const rawName = match[1]; + let type = match[2]?.trim() || "any"; + const defaultStr = match[3]?.trim(); + + // Skip private props (starting with _) + if (rawName.startsWith("_")) continue; + + // Skip internal props + if (internalProps.has(rawName.toLowerCase())) continue; + + const name = toReactPropName(rawName); + let typeLabel: string | undefined; + let values: string[] | undefined; + + // Check if this prop has a validator for allowed values + if (validators.has(type)) { + const validatorData = validators.get(type)!; + values = validatorData.values; + // Generate typeLabel based on component name and prop type + typeLabel = generateTypeLabel(componentName, type, validatorData); + type = values.map((v) => `"${v}"`).join(" | "); + } + + // Handle special types + if (type.includes("GoAIconType") || type.includes("GoaIconType")) { + typeLabel = "GoAIconType"; + type = "GoAIconType"; + } else if (type === "Spacing" || type.includes("Spacing")) { + typeLabel = "Spacing"; + type = "Spacing"; + } + + // Parse default value + let defaultValue: string | null = parseDefaultValue(defaultStr); + + // Detect boolean props serialized as strings + let isBooleanProp = false; + if (type === "string" && (defaultValue === "true" || defaultValue === "false")) { + type = "boolean"; + isBooleanProp = true; + } + + // Resolve type aliases (e.g., Size -> "heading-xl" | "heading-l" | ...) + // Split type into union members, expand any alias references, filter undefined/null + { + const members = type + .split("|") + .map((v) => v.trim()) + .filter((v) => v.length > 0); + const expanded: string[] = []; + let didResolve = false; + + for (const member of members) { + const clean = member.replace(/["']/g, ""); + // Skip undefined/null — they just mean the prop is optional + if (clean === "undefined" || clean === "null") { + didResolve = true; + continue; + } + if (typeAliases.has(clean)) { + expanded.push(...typeAliases.get(clean)!); + didResolve = true; + } else { + expanded.push(member); + } + } + + if (didResolve && expanded.length > 0) { + const primitives = new Set(["string", "boolean", "number", "any", "object"]); + type = expanded + .map((v) => { + const c = v.replace(/["']/g, ""); + if (primitives.has(c)) return c; + return `"${c}"`; + }) + .join(" | "); + } + } + + // Handle inline union types + if (!values && type.includes("|") && !type.includes("typeof")) { + values = type + .split("|") + .map((v) => v.trim().replace(/["']/g, "")) + .filter((v) => v.length > 0 && !v.includes("(")); + } + + // Get JSDoc info from map (description + required flag) + const jsDocInfo = jsDocMap.get(rawName); + + // Skip @internal props — not for public API docs + if (jsDocInfo?.internal) continue; + + const description = jsDocInfo?.description || ""; + // Use @required from JSDoc if present, otherwise fall back to checking if no default value + const isRequired = jsDocInfo?.required || defaultStr === undefined; + + props.push({ + name, + rawName, + type: cleanType(type), + typeLabel, + values, + required: isRequired, + default: defaultValue, + isBooleanProp, + description, + deprecated: jsDocInfo?.deprecated || false, + }); + } + + return props; +} + +// Known limitation: only scans the top-level Svelte file, so components that +// delegate event dispatching to child Svelte files will have missing events. +// Affected: push-drawer (_close), file-upload-card (_cancel, _delete), +// form (_complete, _continue, _stateChange). +// This will be resolved when #3361 (JSDoc in wrappers) lands and the extractor +// can read events from the React/Angular wrappers instead. +function extractEvents(content: string): string[] { + const eventNames = new Set(); + + // Pattern 1: dispatch(element, "_eventName", ...) + const dispatchMatches = content.matchAll(/dispatch\s*\(\s*[^,]+,\s*["']([^"']+)["']/g); + for (const match of dispatchMatches) { + const eventName = match[1]; + // Skip internal events (like "help-text::announce") + if (eventName.includes("::")) continue; + eventNames.add(eventName); + } + + // Pattern 2: dispatchEvent(new CustomEvent("_eventName", ...)) + const customEventMatches = content.matchAll( + /dispatchEvent\s*\(\s*new\s+CustomEvent\s*\(\s*["']([^"']+)["']/g, + ); + for (const match of customEventMatches) { + const eventName = match[1]; + if (!eventName.includes("::")) { + eventNames.add(eventName); + } + } + + // Pattern 3: _rootEl?.dispatchEvent(new CustomEvent("_eventName", ...)) + const rootElMatches = content.matchAll( + /_rootEl\??\s*\.?\s*dispatchEvent\s*\(\s*new\s+CustomEvent\s*\(\s*["']([^"']+)["']/g, + ); + for (const match of rootElMatches) { + const eventName = match[1]; + if (!eventName.includes("::")) { + eventNames.add(eventName); + } + } + + return Array.from(eventNames); +} + +function extractSlots(content: string): string[] { + const slotNames: string[] = []; + const seenNames = new Set(); + + // Named slots: + const namedSlotMatches = content.matchAll(/ or + const hasDefaultSlot = /|>[^<]*<\/slot>)/.test(content); + if (hasDefaultSlot && !seenNames.has("default")) { + slotNames.unshift("default"); + } + + return slotNames; +} + +// ============================================================================= +// Type Label Generation +// ============================================================================= + +function generateTypeLabel( + componentName: string, + typeName: string, + _validatorData: ValidatorInfo, +): string { + // Generate TypeScript type name: Goab{Component}{Type} + const componentPart = capitalize(toCamelCase(componentName)); + // Remove trailing 's' from Types, Sizes, etc. + let typePart = typeName.replace(/s$/, ""); + + // Avoid duplication if type already includes component name + // e.g., ButtonType for button component should become GoabButtonType, not GoabButtonButtonType + const lowerComponent = componentPart.toLowerCase(); + const lowerType = typePart.toLowerCase(); + if (lowerType.startsWith(lowerComponent)) { + // Type already includes component name, just use the type part + return `Goab${typePart}`; + } + + return `Goab${componentPart}${typePart}`; +} + +// ============================================================================= +// Event Transformation +// ============================================================================= + +function transformEvents(rawEventNames: string[]): ExtractedEvent[] { + const events: ExtractedEvent[] = []; + + for (const rawName of rawEventNames) { + // Skip internal events + if (rawName.includes("::") || rawName.includes(":")) continue; + + // Raw event name (e.g., "_click") -> base name (e.g., "click") + const baseName = rawName.replace(/^_/, ""); + + // React event name: onClick, onChange, etc. + const reactName = `on${capitalize(baseName)}`; + + // Add React event + events.push({ + name: reactName, + type: "(event: Event) => void", + description: "", + frameworks: ["react"], + }); + + // Add Angular event (uses the raw name with underscore) + events.push({ + name: rawName, + type: "CustomEvent", + description: "", + frameworks: ["angular"], + }); + } + + return events; +} + +// ============================================================================= +// Utilities +// ============================================================================= + +function capitalize(str: string): string { + return str.charAt(0).toUpperCase() + str.slice(1); +} + +function toCamelCase(str: string): string { + return str + .split("-") + .map((part, index) => (index === 0 ? part : capitalize(part))) + .join(""); +} + +function toKebabCase(str: string): string { + return str.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase(); +} + +function toReactPropName(name: string): string { + const mappings: Record = { + leadingicon: "leadingIcon", + trailingicon: "trailingIcon", + arialabel: "ariaLabel", + arialabelledby: "ariaLabelledBy", + testid: "testId", + maxwidth: "maxWidth", + maxheight: "maxHeight", + maxlength: "maxLength", + minlength: "minLength", + autocomplete: "autoComplete", + autocapitalize: "autoCapitalize", + textalign: "textAlign", + calloutvariant: "calloutVariant", + handletrailingiconclick: "handleTrailingIconClick", + trailingiconarialabel: "trailingIconAriaLabel", + disableglobalclosepopover: "disableGlobalClosePopover", + labelsize: "labelSize", + helptext: "helpText", + errormessage: "errorMessage", + inputmode: "inputMode", + readonly: "readOnly", + tabindex: "tabIndex", + steppertext: "stepperText", + counterstep: "counterStep", + relativecontent: "relativeContent", + mindate: "minDate", + maxdate: "maxDate", + headingsize: "headingSize", + maxcount: "maxCount", + relativeto: "relativeTo", + }; + + return mappings[name.toLowerCase()] || name; +} + +function cleanType(type: string): string { + return type + .replace(/\s+/g, " ") + .replace(/\(\s*typeof\s+\w+\s*\)\s*\[\s*number\s*\]/g, "") + .trim(); +} + +function parseDefaultValue(str: string | undefined): string | null { + if (str === undefined) return null; + if (str === "null" || str === "undefined") return null; + if (str.startsWith('"') || str.startsWith("'")) { + return str.replace(/["']/g, ""); + } + if (str === "true" || str === "false") return str; + if (!isNaN(Number(str))) return str; + if (str === "{}") return "{}"; + if (str === "[]") return "[]"; + return str; +} + +// ============================================================================= +// Main Extraction +// ============================================================================= + +function extractComponentAPI(componentName: string): ExtractedComponentAPI | null { + const componentPath = path.join(UI_COMPONENTS_PATH, componentName); + if (!fs.existsSync(componentPath) || !fs.statSync(componentPath).isDirectory()) { + console.error(`Component directory not found: ${componentName}`); + return null; + } + + // Find the main Svelte file + const svelteFileName = `${capitalize(toCamelCase(componentName))}.svelte`; + let svelteFilePath = path.join(componentPath, svelteFileName); + + if (!fs.existsSync(svelteFilePath)) { + // Try to find any .svelte file + const files = fs.readdirSync(componentPath); + const svelteFile = files.find((f) => f.endsWith(".svelte")); + if (!svelteFile) { + console.error(`No Svelte file found in: ${componentName}`); + return null; + } + svelteFilePath = path.join(componentPath, svelteFile); + } + + const content = fs.readFileSync(svelteFilePath, "utf-8"); + + // Check if it's a custom element + const tagName = extractTagName(content); + if (!tagName) { + console.error(`Not a custom element: ${componentName}`); + return null; + } + + // Extract data + const typeAliases = extractTypeAliases(content); + const validators = extractValidators(content); + const rawProps = extractProps(content, validators, componentName, typeAliases); + const rawEventNames = extractEvents(content); + const slotNames = extractSlots(content); + + // Transform to output format + const props: ExtractedProp[] = rawProps.map((p) => ({ + name: p.name, + type: p.type, + typeLabel: p.typeLabel, + values: p.values, + required: p.required, + default: p.default, + description: p.description, // From JSDoc comments in source + ...(p.deprecated && { deprecated: true }), + })); + + const events = transformEvents(rawEventNames); + + const slots: ExtractedSlot[] = slotNames.map((name) => ({ + name, + description: "", // Filled by human content + })); + + // Relative path from workspace root + const relativePath = path.relative(WORKSPACE_ROOT, svelteFilePath); + + return { + componentSlug: toKebabCase(componentName), + extractedFrom: relativePath, + props, + events, + slots, + }; +} + +function saveComponentAPI(api: ExtractedComponentAPI): void { + // Ensure output directory exists + if (!fs.existsSync(OUTPUT_PATH)) { + fs.mkdirSync(OUTPUT_PATH, { recursive: true }); + } + + const filePath = path.join(OUTPUT_PATH, `${api.componentSlug}.json`); + fs.writeFileSync(filePath, JSON.stringify(api, null, 2)); + console.log(` Created: ${filePath}`); +} + +// ============================================================================= +// CLI +// ============================================================================= + +function main() { + const args = process.argv.slice(2); + + if (args.length === 0) { + console.log("Usage:"); + console.log(" npx tsx extract-api.ts button # Extract single component"); + console.log( + " npx tsx extract-api.ts button input # Extract multiple components", + ); + console.log(" npx tsx extract-api.ts --all # Extract all components"); + process.exit(1); + } + + let componentNames: string[]; + + if (args.includes("--all")) { + // Get all component directories + componentNames = fs.readdirSync(UI_COMPONENTS_PATH).filter((name) => { + const componentPath = path.join(UI_COMPONENTS_PATH, name); + return fs.statSync(componentPath).isDirectory(); + }); + } else { + componentNames = args; + } + + console.log("\n Component API Extraction"); + console.log("═".repeat(50)); + console.log(`\nExtracting ${componentNames.length} component(s)...\n`); + + let successCount = 0; + let failCount = 0; + + for (const componentName of componentNames) { + console.log(`Processing: ${componentName}`); + try { + const api = extractComponentAPI(componentName); + if (api) { + saveComponentAPI(api); + successCount++; + } else { + failCount++; + } + } catch (error) { + console.error(` Error: ${error}`); + failCount++; + } + } + + console.log("\n" + "═".repeat(50)); + console.log(`Complete: ${successCount} succeeded, ${failCount} failed`); + console.log(`Output: ${OUTPUT_PATH}\n`); +} + +main(); diff --git a/docs/src/scripts/generate-preview-images.ts b/docs/src/scripts/generate-preview-images.ts new file mode 100644 index 0000000000..863b6538d8 --- /dev/null +++ b/docs/src/scripts/generate-preview-images.ts @@ -0,0 +1,256 @@ +/** + * Generate preview images for all examples. + * + * Uses Playwright to screenshot the live preview area of each example page. + * Assumes the site is already built — run `npm run build` first, then: + * + * npm run generate-previews + * + * Or against a running dev server: + * + * npm run generate-previews -- --url http://localhost:4203 + */ + +import { chromium } from "playwright"; +import sharp from "sharp"; +import fs from "node:fs"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import { exec, type ChildProcess } from "node:child_process"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const DOCS_ROOT = path.resolve(__dirname, "../.."); +const EXAMPLES_DIR = path.resolve(DOCS_ROOT, "src/content/examples"); +const OUTPUT_DIR = path.resolve(DOCS_ROOT, "public/images/examples"); + +// Parse CLI args +const args = process.argv.slice(2); +const urlFlag = args.indexOf("--url"); +const externalUrl = urlFlag !== -1 ? args[urlFlag + 1] : null; +const filterArg = args.find( + (a) => !a.startsWith("--") && args.indexOf(a) !== urlFlag + 1, +); +const dryRun = args.includes("--dry-run"); +const updateFrontmatter = args.includes("--update-frontmatter"); + +// Examples with manual screenshots — skip these during generation. +// These are interactive examples (modals, drawers, notifications, progress indicators) +// that don't screenshot well with automation. +// +// To add a manual screenshot: +// 1. Set browser to 1280x800, take a screenshot showing the open/active state +// 2. Convert to WebP: node -e "require('sharp')('input.png').webp({quality:70}).toFile('output.webp')" +// 3. Save to public/images/examples/{slug}.webp +// 4. Add the slug to this list +const SKIP_EXAMPLES = new Set([ + "add-a-record-using-a-drawer", + "add-and-edit-lots-of-filters", + "add-another-item-in-a-modal", + "confirm-a-change", + "confirm-a-destructive-action", + "confirm-before-navigating-away", + "filter-a-list-using-a-push-drawer", + "require-user-action-before-continuing", + "show-a-notification", + "show-a-notification-with-an-action", + "show-a-user-progress", + "show-a-user-progress-when-the-time-is-unknown", + "warn-a-user-of-a-deadline", +]); + +async function getExampleSlugs(): Promise { + const entries = fs.readdirSync(EXAMPLES_DIR, { withFileTypes: true }); + return entries + .filter((e) => e.isDirectory()) + .map((e) => e.name) + .sort(); +} + +function startPreviewServer(): Promise<{ url: string; process: ChildProcess }> { + return new Promise((resolve, reject) => { + const server = exec("npx astro preview", { cwd: DOCS_ROOT }); + const timeout = setTimeout( + () => reject(new Error("Preview server timed out")), + 30_000, + ); + + server.stdout?.on("data", (data: string) => { + const match = data.match(/http:\/\/[\w.:]+/); + if (match) { + clearTimeout(timeout); + resolve({ url: match[0], process: server }); + } + }); + + server.stderr?.on("data", (data: string) => { + // Astro sometimes logs to stderr + const match = data.match(/http:\/\/[\w.:]+/); + if (match) { + clearTimeout(timeout); + resolve({ url: match[0], process: server }); + } + }); + + server.on("error", (err) => { + clearTimeout(timeout); + reject(err); + }); + }); +} + +function addPreviewImageToFrontmatter(slug: string, imagePath: string): void { + const mdxPath = path.join(EXAMPLES_DIR, slug, "index.mdx"); + if (!fs.existsSync(mdxPath)) return; + + let content = fs.readFileSync(mdxPath, "utf-8"); + + // Check if previewImage already exists in frontmatter + if (content.match(/^previewImage:/m)) { + // Update existing + content = content.replace(/^previewImage:.*$/m, `previewImage: ${imagePath}`); + } else { + // Add before the closing --- of frontmatter + const endOfFrontmatter = content.indexOf("---", 3); + if (endOfFrontmatter !== -1) { + content = + content.slice(0, endOfFrontmatter) + + `previewImage: ${imagePath}\n` + + content.slice(endOfFrontmatter); + } + } + + fs.writeFileSync(mdxPath, content); +} + +async function main() { + const slugs = await getExampleSlugs(); + const filtered = filterArg ? slugs.filter((s) => s.includes(filterArg)) : slugs; + + console.log(`Found ${slugs.length} examples, generating ${filtered.length} previews`); + + if (dryRun) { + console.log("Dry run — would generate:"); + filtered.forEach((s) => console.log(` ${s}.webp`)); + return; + } + + // Ensure output directory exists + fs.mkdirSync(OUTPUT_DIR, { recursive: true }); + + // Start server if no external URL provided + let baseUrl: string; + let serverProcess: ChildProcess | null = null; + + if (externalUrl) { + baseUrl = externalUrl.replace(/\/$/, ""); + console.log(`Using external server: ${baseUrl}`); + } else { + console.log("Starting preview server..."); + const server = await startPreviewServer(); + baseUrl = server.url.replace(/\/$/, ""); + serverProcess = server.process; + console.log(`Preview server running at ${baseUrl}`); + } + + // Launch browser + const browser = await chromium.launch(); + const context = await browser.newContext({ + viewport: { width: 1200, height: 900 }, + deviceScaleFactor: 2, + }); + + let succeeded = 0; + let failed = 0; + const failures: string[] = []; + + try { + for (const slug of filtered) { + if (SKIP_EXAMPLES.has(slug)) { + process.stdout.write(` ⊘ ${slug} (manual)\n`); + continue; + } + const outputPath = path.join(OUTPUT_DIR, `${slug}.webp`); + const page = await context.newPage(); + + try { + const url = `${baseUrl}/examples/${slug}`; + await page.goto(url, { waitUntil: "networkidle", timeout: 30_000 }); + + // Hide dev toolbars that overlap the preview area + await page.addStyleTag({ + content: + "astro-dev-toolbar, [id*='netlify'], [class*='netlify'] { display: none !important; }", + }); + + // Wait for the preview container (inner content, no border) + const previewArea = await page.waitForSelector(".preview-container", { + timeout: 10_000, + }); + if (!previewArea) { + throw new Error("No .preview-container found"); + } + + // Wait for web components to render — check for child elements in the preview container + await page.waitForFunction( + () => { + const container = document.querySelector(".preview-container"); + if (!container) return false; + // Has visible children (not just the "Preview not available" span) + return ( + container.children.length > 0 && + !container.querySelector(".preview-placeholder") + ); + }, + { timeout: 10_000 }, + ); + + // Brief pause for shadow DOM rendering + await page.waitForTimeout(500); + + // Hide the preview border + await page.evaluate(() => { + const area = document.querySelector(".preview-area") as HTMLElement; + if (area) { + area.style.border = "none"; + area.style.borderRadius = "0"; + } + }); + + const pngBuffer = await previewArea.screenshot({ type: "png" }); + + await sharp(pngBuffer).webp({ quality: 70 }).toFile(outputPath); + + // Update frontmatter if requested + if (updateFrontmatter) { + addPreviewImageToFrontmatter(slug, `/images/examples/${slug}.webp`); + } + + succeeded++; + process.stdout.write(` ✓ ${slug}\n`); + } catch (err) { + failed++; + const msg = err instanceof Error ? err.message : String(err); + failures.push(`${slug}: ${msg}`); + process.stdout.write(` ✗ ${slug} — ${msg}\n`); + } finally { + await page.close(); + } + } + } finally { + await browser.close(); + if (serverProcess) { + serverProcess.kill(); + } + } + + console.log(`\nDone: ${succeeded} succeeded, ${failed} failed`); + if (failures.length > 0) { + console.log("\nFailed examples:"); + failures.forEach((f) => console.log(` ${f}`)); + } +} + +main().catch((err) => { + console.error(err); + process.exit(1); +}); diff --git a/jest.preset.js b/jest.preset.js index e6c8ebea00..0640263d2c 100644 --- a/jest.preset.js +++ b/jest.preset.js @@ -1,3 +1,3 @@ -const nxPreset = require('@nrwl/jest/preset').default; +const nxPreset = require("@nx/jest/preset").default; module.exports = { ...nxPreset }; diff --git a/libs/angular-components/jest.config.ts b/libs/angular-components/jest.config.ts index c9d3f7c02c..af4a49e0c4 100644 --- a/libs/angular-components/jest.config.ts +++ b/libs/angular-components/jest.config.ts @@ -19,4 +19,8 @@ export default { "jest-preset-angular/build/serializers/ng-snapshot", "jest-preset-angular/build/serializers/html-comment", ], + testEnvironmentOptions: { + errorOnUnknownElements: true, + errorOnUnknownProperties: true, + }, }; diff --git a/libs/angular-components/package.json b/libs/angular-components/package.json index 628343f127..b6d2402945 100644 --- a/libs/angular-components/package.json +++ b/libs/angular-components/package.json @@ -18,9 +18,9 @@ }, "peerDependencies": { "@abgov/ui-components-common": "^0.0.0 || ^1.0.0", - "@angular/forms": "^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0", - "@angular/common": "^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0", - "@angular/core": "^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0" + "@angular/forms": "^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0", + "@angular/common": "^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0", + "@angular/core": "^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0" }, "sideEffects": false } diff --git a/libs/angular-components/src/experimental/.eslintrc.json b/libs/angular-components/src/experimental/.eslintrc.json deleted file mode 100644 index 11f5d77431..0000000000 --- a/libs/angular-components/src/experimental/.eslintrc.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "overrides": [ - { - "files": ["*.ts"], - "rules": { - "@angular-eslint/directive-selector": [ - "error", - { - "type": "attribute", - "prefix": "goabx", - "style": "camelCase" - } - ], - "@angular-eslint/component-selector": [ - "error", - { - "type": "element", - "prefix": "goabx", - "style": "kebab-case" - } - ] - } - } - ] -} diff --git a/libs/angular-components/src/experimental/badge/badge.spec.ts b/libs/angular-components/src/experimental/badge/badge.spec.ts deleted file mode 100644 index 1ea71e751a..0000000000 --- a/libs/angular-components/src/experimental/badge/badge.spec.ts +++ /dev/null @@ -1,111 +0,0 @@ -import { ComponentFixture, TestBed, fakeAsync, tick } from "@angular/core/testing"; -import { GoabxBadge } from "./badge"; -import { Component, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; -import { GoabBadgeType, Spacing } from "@abgov/ui-components-common"; -import { By } from "@angular/platform-browser"; - -@Component({ - standalone: true, - imports: [GoabxBadge], - template: ` - - `, -}) -class TestBadgeComponent { - type?: GoabBadgeType; - content?: string; - testId?: string; - icon?: boolean; - ariaLabel?: string; - mt?: Spacing; - mb?: Spacing; - ml?: Spacing; - mr?: Spacing; -} - -@Component({ - standalone: true, - imports: [GoabxBadge], - template: ` `, -}) -class TestBadgeNoIconComponent { - type?: GoabBadgeType; - content?: string; -} - -describe("GoABBadge", () => { - let fixture: ComponentFixture; - let component: TestBadgeComponent; - - beforeEach(fakeAsync(() => { - TestBed.configureTestingModule({ - imports: [GoabxBadge, TestBadgeComponent, TestBadgeNoIconComponent], - schemas: [CUSTOM_ELEMENTS_SCHEMA], - }).compileComponents(); - })); - - it("should render and set the props correctly", fakeAsync(() => { - fixture = TestBed.createComponent(TestBadgeComponent); - component = fixture.componentInstance; - component.type = "information"; - component.content = "Information"; - component.icon = true; - component.ariaLabel = "123"; - component.testId = "test-id"; - component.mt = "xs" as Spacing; - component.mb = "m" as Spacing; - component.ml = "l" as Spacing; - component.mr = "xl" as Spacing; - - fixture.detectChanges(); - tick(); - fixture.detectChanges(); - const badgeElement = fixture.debugElement.query(By.css("goa-badge")).nativeElement; - expect(badgeElement.getAttribute("type")).toBe("information"); - expect(badgeElement.getAttribute("content")).toBe("Information"); - expect(badgeElement.getAttribute("icon")).toBe("true"); - expect(badgeElement.getAttribute("arialabel")).toBe("123"); - expect(badgeElement.getAttribute("testid")).toBe("test-id"); - expect(badgeElement.getAttribute("mt")).toBe(component.mt); - expect(badgeElement.getAttribute("mb")).toBe(component.mb); - expect(badgeElement.getAttribute("ml")).toBe(component.ml); - expect(badgeElement.getAttribute("mr")).toBe(component.mr); - })); - - it("should not set icon attribute by default (icon undefined)", fakeAsync(() => { - const noIconFixture = TestBed.createComponent(TestBadgeNoIconComponent); - const noIconComponent = noIconFixture.componentInstance; - noIconComponent.type = "information"; - noIconComponent.content = "Information"; - noIconFixture.detectChanges(); - tick(); - noIconFixture.detectChanges(); - const badgeElement = noIconFixture.debugElement.query( - By.css("goa-badge"), - ).nativeElement; - expect(badgeElement.getAttribute("icon")).toBe("false"); - })); - - it("should not render icon when icon is false", fakeAsync(() => { - fixture = TestBed.createComponent(TestBadgeComponent); - component = fixture.componentInstance; - component.type = "information"; - component.content = "Information"; - component.icon = false; - fixture.detectChanges(); - tick(); - fixture.detectChanges(); - const badgeElement = fixture.debugElement.query(By.css("goa-badge")).nativeElement; - expect(badgeElement.getAttribute("icon")).toBe("false"); - })); -}); diff --git a/libs/angular-components/src/experimental/badge/badge.ts b/libs/angular-components/src/experimental/badge/badge.ts deleted file mode 100644 index ea69ec5dab..0000000000 --- a/libs/angular-components/src/experimental/badge/badge.ts +++ /dev/null @@ -1,75 +0,0 @@ -import { - GoabxBadgeType, - GoabIconType, - GoabBadgeSize, - GoabBadgeEmphasis, -} from "@abgov/ui-components-common"; -import { - CUSTOM_ELEMENTS_SCHEMA, - Component, - Input, - booleanAttribute, - OnInit, - ChangeDetectorRef, -} from "@angular/core"; -import { CommonModule } from "@angular/common"; -import { GoabBaseComponent } from "../base.component"; - -@Component({ - standalone: true, - selector: "goabx-badge", - template: ` - - - `, - schemas: [CUSTOM_ELEMENTS_SCHEMA], - imports: [CommonModule], - styles: [ - ` - :host { - display: contents; - } - `, - ], -}) -export class GoabxBadge extends GoabBaseComponent implements OnInit { - @Input() type?: GoabxBadgeType; - @Input() content?: string; - // Ensure boolean input; attribute only set when true so default behaviour is false - @Input({ transform: booleanAttribute }) icon?: boolean; - @Input() iconType?: GoabIconType; - @Input() size?: GoabBadgeSize = "medium"; - @Input() emphasis?: GoabBadgeEmphasis = "strong"; - @Input() ariaLabel?: string; - - isReady = false; - version = "2"; - - constructor(private cdr: ChangeDetectorRef) { - super(); - } - - ngOnInit(): void { - // For Angular 20, we need to delay rendering the web component - // to ensure all attributes are properly bound before the component initializes - setTimeout(() => { - this.isReady = true; - this.cdr.detectChanges(); - }, 0); - } -} diff --git a/libs/angular-components/src/experimental/base.component.ts b/libs/angular-components/src/experimental/base.component.ts deleted file mode 100644 index 74768456f3..0000000000 --- a/libs/angular-components/src/experimental/base.component.ts +++ /dev/null @@ -1,176 +0,0 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -import { Spacing } from "@abgov/ui-components-common"; -import { - booleanAttribute, - Component, - Input, - ElementRef, - ViewChild, - Renderer2, -} from "@angular/core"; -import { ControlValueAccessor } from "@angular/forms"; - -@Component({ - standalone: true, - template: ``, //** IMPLEMENT IN SUBCLASS -}) -export abstract class GoabBaseComponent { - @Input() mt?: Spacing; - @Input() mb?: Spacing; - @Input() ml?: Spacing; - @Input() mr?: Spacing; - @Input() testId?: string; -} - -@Component({ - standalone: true, - template: ``, //** IMPLEMENT IN SUBCLASS -}) -/** - * An abstract base class that extends `GoabBaseComponent` and implements the `ControlValueAccessor` interface. - * This class provides a foundation for creating custom form controls in Angular, enabling them to integrate - * seamlessly with Angular forms. It includes support for handling value changes, touch events, and disabled states. - * - * ## Features - * - Supports `disabled="true"` and `error="true` attribute bindings for convenience. - * - Handles form control value changes and touch events via `ControlValueAccessor` methods. - * - Allows for flexible value types (`unknown`), making it suitable for various data types like integers, dates, or booleans. - * - Uses ViewChild to capture a reference to the native GOA web component element via `#goaComponentRef`. - * - Uses Renderer2 for safe DOM manipulation (compatible with SSR and security best practices). - * - * ## Usage - * Extend this class to create custom form controls. Child components must: - * 1. Add `#goaComponentRef` template reference to their `goa-*` element in the template - * 2. Inject `Renderer2` in their constructor and pass it to `super(renderer)` - * - * ### Example: - * ```typescript - * @Component({ - * template: `` - * }) - * export class GoabInput extends GoabControlValueAccessor { - * constructor(private cdr: ChangeDetectorRef, renderer: Renderer2) { - * super(renderer); // Required: pass Renderer2 to base class - * } - * } - * ``` - * - * ## Properties - * - `id?`: An optional identifier for the component. - * - `disabled?`: A boolean indicating whether the component is disabled. - * - `error?`: A boolean indicating whether the component is in an error state. - * - `value?`: The current value of the component, which can be of any type. - * - * ## Methods - * - `markAsTouched()`: Marks the component as touched and triggers the `fcTouched` callback if defined. - * - `writeValue(value: unknown)`: Writes a new value to the form control (can be overridden for special behavior like checkbox). - * - `registerOnChange(fn: any)`: Registers a function to handle changes in the form control value. - * - `registerOnTouched(fn: any)`: Registers a function to handle touch events on the form control. - * - `setDisabledState?(isDisabled: boolean)`: Sets the disabled state of the component. - * - `convertValueToString(value: unknown)`: Converts a value to a string for DOM attribute assignment (can be overridden). - * - * ## Callbacks - * - `fcChange?`: A function to handle changes in the form control value. - * - `fcTouched?`: A function to handle touch events on the form control. - */ -export abstract class GoabControlValueAccessor - extends GoabBaseComponent - implements ControlValueAccessor -{ - @Input() id?: string; - // supports disabled="true" instead of [disabled]="true" - @Input({ transform: booleanAttribute }) public disabled?: boolean; - // supports error="true" instead of [error]="true" - @Input({ transform: booleanAttribute }) public error?: boolean; - // this should be unknown (not string) as it might be an integer or a date or a boolean - @Input() value?: unknown | null | undefined; - - // implement ControlValueAccessor - - /** - * Function to handle changes in the form control value. - * @param {unknown} value - The new value. - */ - public fcChange?: (value: unknown) => void; - - /** - * Function to handle touch events on the form control. - */ - public fcTouched?: () => unknown; - - private touched = false; - - /** - * Marks the component as touched. If the component is not already marked as touched, - * it triggers the `fcTouched` callback (if defined) and sets the `touched` property to `true`. - */ - public markAsTouched() { - if (!this.touched) { - this.fcTouched?.(); - this.touched = true; - } - } - - /** - * Reference to the native GOA web component element. - * Child templates should declare `#goaComponentRef` on the `goa-*` element. - * The base class captures it here so children don't need their own ViewChild. - */ - @ViewChild("goaComponentRef", { static: false, read: ElementRef }) - protected goaComponentRef?: ElementRef; - - constructor(protected renderer: Renderer2) { - super(); - } - - /** - * Convert an arbitrary value into a string for DOM attribute assignment. - * Child classes can override when they need special formatting. - * @param value The value to convert - * @returns string representation or empty string for nullish/empty - */ - protected convertValueToString(value: unknown): string { - if (value === null || value === undefined || value === "") { - return ""; - } - return String(value); - } - - /** - * Writes a new value to the form control. - * @param {unknown} value - The value to write. - */ - public writeValue(value: unknown): void { - this.value = value; - const el = this.goaComponentRef?.nativeElement as HTMLElement | undefined; - if (el) { - const stringValue = this.convertValueToString(value); - this.renderer.setAttribute(el, "value", stringValue); - } - } - - /** - * Registers a function to call when the form control value changes. - * @param {function} fn - The function to call. - */ - public registerOnChange(fn: any): void { - this.fcChange = fn; - } - - /** - * Registers a function to call when the form control is touched. - * @param {function} fn - The function to call. - */ - public registerOnTouched(fn: any): void { - this.fcTouched = fn; - } - - /** - * Sets the disabled state of the component. - * - * @param isDisabled - A boolean indicating whether the component should be disabled. - */ - public setDisabledState?(isDisabled: boolean): void { - this.disabled = isDisabled; - } -} diff --git a/libs/angular-components/src/experimental/button/button.spec.ts b/libs/angular-components/src/experimental/button/button.spec.ts deleted file mode 100644 index c8cecded41..0000000000 --- a/libs/angular-components/src/experimental/button/button.spec.ts +++ /dev/null @@ -1,98 +0,0 @@ -import { ComponentFixture, TestBed, fakeAsync, tick } from "@angular/core/testing"; -import { GoabxButton } from "./button"; -import { Component, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; -import { GoabButtonSize, GoabButtonVariant, GoabIconType, Spacing, GoabButtonType } from "@abgov/ui-components-common"; -import { By } from "@angular/platform-browser"; -import { fireEvent } from "@testing-library/dom"; - -@Component({ - standalone: true, - imports: [GoabxButton], - template: ` - - {{buttonText}} - - ` -}) -class TestButtonComponent{ - type?: GoabButtonType; - size?: GoabButtonSize; - variant?: GoabButtonVariant; - disabled?: boolean; - leadingIcon?: GoabIconType; - trailingIcon?: GoabIconType; - testId?: string; - mt?: Spacing; - mb?: Spacing; - ml?: Spacing; - mr?: Spacing; - buttonText?: string; - - onClick() { - /* do nothing */ - } - -} - -describe("GoABButton", () => { - let fixture: ComponentFixture; - let component: TestButtonComponent; - - beforeEach(fakeAsync(() => { - TestBed.configureTestingModule({ - imports: [GoabxButton, TestButtonComponent], - schemas: [CUSTOM_ELEMENTS_SCHEMA], - }).compileComponents(); - - fixture = TestBed.createComponent(TestButtonComponent); - component = fixture.componentInstance; - component.buttonText = "Click me"; - component.type = "primary"; - component.size = "compact"; - component.variant = "destructive"; - component.leadingIcon = "car"; - component.trailingIcon = "bag"; - component.mt = "s"; - component.mr = "m"; - component.mb = "l"; - component.ml = "xl"; - fixture.detectChanges(); - tick(); - fixture.detectChanges(); - })); - - it("should render the properties", () => { - const buttonElement = fixture.debugElement.query(By.css("goa-button")).nativeElement; - expect(buttonElement.getAttribute("type")).toBe("primary"); - expect(buttonElement.getAttribute("size")).toBe("compact"); - expect(buttonElement.getAttribute("variant")).toBe("destructive"); - expect(buttonElement.getAttribute("leadingicon")).toBe("car"); - expect(buttonElement.getAttribute("trailingicon")).toBe("bag"); - expect(buttonElement.getAttribute("mt")).toBe("s"); - expect(buttonElement.getAttribute("mr")).toBe("m"); - expect(buttonElement.getAttribute("mb")).toBe("l"); - expect(buttonElement.getAttribute("ml")).toBe("xl"); - // it should render the content - expect(buttonElement.textContent).toContain("Click me"); - }); - - it("should respond to click event", fakeAsync(() => { - const onClick = jest.spyOn(component, "onClick"); - const buttonElement = fixture.debugElement.query(By.css("goa-button")).nativeElement; - - fireEvent(buttonElement, new CustomEvent("_click")); - expect(onClick).toHaveBeenCalled(); - })) -}) diff --git a/libs/angular-components/src/experimental/button/button.ts b/libs/angular-components/src/experimental/button/button.ts deleted file mode 100644 index 02bfaf735c..0000000000 --- a/libs/angular-components/src/experimental/button/button.ts +++ /dev/null @@ -1,85 +0,0 @@ -import { - GoabButtonSize, - GoabButtonType, - GoabButtonVariant, - GoabIconType, -} from "@abgov/ui-components-common"; -import { - CUSTOM_ELEMENTS_SCHEMA, - Component, - EventEmitter, - Input, - Output, - booleanAttribute, - OnInit, - ChangeDetectorRef, -} from "@angular/core"; -import { CommonModule } from "@angular/common"; -import { GoabBaseComponent } from "../base.component"; - -@Component({ - standalone: true, - selector: "goabx-button", - imports: [CommonModule], - template: ` - - - - `, - schemas: [CUSTOM_ELEMENTS_SCHEMA], -}) -export class GoabxButton extends GoabBaseComponent implements OnInit { - @Input() type?: GoabButtonType = "primary"; - @Input() size?: GoabButtonSize; - @Input() variant?: GoabButtonVariant; - @Input({ transform: booleanAttribute }) disabled?: boolean; - @Input() leadingIcon?: GoabIconType; - @Input() trailingIcon?: GoabIconType; - @Input() width?: string; - @Input() action?: string; - @Input() actionArg?: string; - @Input() actionArgs?: Record; - - @Output() onClick = new EventEmitter(); - - isReady = false; - version = "2"; - - constructor(private cdr: ChangeDetectorRef) { - super(); - } - - ngOnInit(): void { - // For Angular 20, we need to delay rendering the web component - // to ensure all attributes are properly bound before the component initializes - setTimeout(() => { - this.isReady = true; - this.cdr.detectChanges(); - }, 0); - } - - _onClick() { - this.onClick.emit(); - } - - protected readonly JSON = JSON; -} diff --git a/libs/angular-components/src/experimental/calendar/calendar.spec.ts b/libs/angular-components/src/experimental/calendar/calendar.spec.ts deleted file mode 100644 index 5666f2881e..0000000000 --- a/libs/angular-components/src/experimental/calendar/calendar.spec.ts +++ /dev/null @@ -1,96 +0,0 @@ -import { ComponentFixture, TestBed, fakeAsync, tick } from "@angular/core/testing"; -import { GoabxCalendar } from "./calendar"; -import { Component, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; -import { fireEvent } from "@testing-library/dom"; -import { GoabCalendarOnChangeDetail, Spacing } from "@abgov/ui-components-common"; - -@Component({ - standalone: true, - imports: [GoabxCalendar], - template: ` - - - `, -}) -class TestCalendarComponent { - name?: string; - value?: Date; - min?: Date; - max?: Date; - testId?: string; - mt?: Spacing; - mb?: Spacing; - ml?: Spacing; - mr?: Spacing; - - onChange(event: GoabCalendarOnChangeDetail) { - /* do nothing */ - } -} - -describe("GoABCalendar", () => { - let fixture: ComponentFixture; - let component: TestCalendarComponent; - beforeEach(fakeAsync(() => { - TestBed.configureTestingModule({ - imports: [GoabxCalendar, TestCalendarComponent], - schemas: [CUSTOM_ELEMENTS_SCHEMA], - }).compileComponents(); - - fixture = TestBed.createComponent(TestCalendarComponent); - component = fixture.componentInstance; - - component.name = "calendar"; - component.value = new Date(); - component.min = new Date(); - component.max = new Date(); - component.testId = "test-calendar"; - component.mt = "m"; - component.mb = "xl"; - component.ml = "s"; - component.mr = "l"; - fixture.detectChanges(); - tick(); - fixture.detectChanges(); - })); - - it("should render properties", () => { - const calendar = fixture.nativeElement.querySelector("goa-calendar"); - expect(calendar.getAttribute("name")).toBe(component.name); - expect(calendar.getAttribute("min")).toBe(component.min?.toString()); - expect(calendar.getAttribute("max")).toBe(component.max?.toString()); - expect(calendar.getAttribute("testid")).toBe(component.testId); - expect(calendar.getAttribute("mt")).toBe(component.mt); - expect(calendar.getAttribute("mb")).toBe(component.mb); - expect(calendar.getAttribute("ml")).toBe(component.ml); - expect(calendar.getAttribute("mr")).toBe(component.mr); - }); - - it("should handle the event", () => { - const onChange = jest.spyOn(component, "onChange"); - const calendar = fixture.nativeElement.querySelector("goa-calendar"); - - fireEvent( - calendar, - new CustomEvent("_change", { - detail: { - type: "date", - value: new Date(), - name: component.name, - }, - }), - ); - expect(onChange).toHaveBeenCalled(); - }); -}); diff --git a/libs/angular-components/src/experimental/calendar/calendar.ts b/libs/angular-components/src/experimental/calendar/calendar.ts deleted file mode 100644 index a2b3ab4646..0000000000 --- a/libs/angular-components/src/experimental/calendar/calendar.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { GoabCalendarOnChangeDetail } from "@abgov/ui-components-common"; -import { - CUSTOM_ELEMENTS_SCHEMA, - Component, - EventEmitter, - Input, - Output, - OnInit, - ChangeDetectorRef, -} from "@angular/core"; -import { CommonModule } from "@angular/common"; -import { GoabBaseComponent } from "../base.component"; - -@Component({ - standalone: true, - selector: "goabx-calendar", - imports: [CommonModule], - template: ` - - - - `, - schemas: [CUSTOM_ELEMENTS_SCHEMA], -}) -export class GoabxCalendar extends GoabBaseComponent implements OnInit { - version = 2; - - @Input() name?: string; - @Input() value?: Date | string; - @Input() min?: Date; - @Input() max?: Date; - - @Output() onChange = new EventEmitter(); - - isReady = false; - - constructor(private cdr: ChangeDetectorRef) { - super(); - } - - ngOnInit(): void { - // For Angular 20, we need to delay rendering the web component - // to ensure all attributes are properly bound before the component initializes - setTimeout(() => { - this.isReady = true; - this.cdr.detectChanges(); - }, 0); - } - - _onChange(e: Event) { - const details = (e as CustomEvent).detail; - this.onChange.emit(details); - } -} diff --git a/libs/angular-components/src/experimental/callout/callout.spec.ts b/libs/angular-components/src/experimental/callout/callout.spec.ts deleted file mode 100644 index 1ad7bb3201..0000000000 --- a/libs/angular-components/src/experimental/callout/callout.spec.ts +++ /dev/null @@ -1,80 +0,0 @@ -import { ComponentFixture, TestBed, fakeAsync, tick } from "@angular/core/testing"; -import { GoabxCallout } from "./callout"; -import { Component, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; -import { GoabCalloutSize, GoabCalloutType, Spacing } from "@abgov/ui-components-common"; - -@Component({ - standalone: true, - imports: [GoabxCallout], - template: ` - - Information to the user goes in the content. Information can include markup as - desired. - - `, -}) -class TestCalloutComponent { - type?: GoabCalloutType; - heading?: string; - size?: GoabCalloutSize; - testId?: string; - mt?: Spacing; - mb?: Spacing; - ml?: Spacing; - mr?: Spacing; -} - -describe("GoABCallout", () => { - let fixture: ComponentFixture; - let component: TestCalloutComponent; - - beforeEach(fakeAsync(() => { - TestBed.configureTestingModule({ - imports: [GoabxCallout, TestCalloutComponent], - schemas: [CUSTOM_ELEMENTS_SCHEMA], - }).compileComponents(); - - fixture = TestBed.createComponent(TestCalloutComponent); - component = fixture.componentInstance; - - component.type = "information"; - component.heading = "Callout Title"; - component.size = "medium"; - component.testId = "test-callout"; - component.mt = "s"; - component.mr = "m"; - component.mb = "l"; - component.ml = "xl"; - fixture.detectChanges(); - tick(); - fixture.detectChanges(); - })); - - it("should render properties", () => { - const el = fixture.nativeElement.querySelector("goa-callout"); - expect(el.getAttribute("heading")).toContain(component.heading); - expect(el.getAttribute("type")).toContain(component.type); - expect(el.getAttribute("size")).toContain(component.size); - expect(el.getAttribute("testid")).toContain(component.testId); - expect(el.getAttribute("maxwidth")).toContain("480px"); - expect(el.getAttribute("mt")).toBe(component.mt); - expect(el.getAttribute("mr")).toBe(component.mr); - expect(el.getAttribute("mb")).toBe(component.mb); - expect(el.getAttribute("ml")).toBe(component.ml); - - // render children - expect(el.textContent).toContain( - "Information to the user goes in the content. Information can include markup as desired.", - ); - }); -}); diff --git a/libs/angular-components/src/experimental/callout/callout.ts b/libs/angular-components/src/experimental/callout/callout.ts deleted file mode 100644 index ea2855d53f..0000000000 --- a/libs/angular-components/src/experimental/callout/callout.ts +++ /dev/null @@ -1,68 +0,0 @@ -import { - GoabCalloutAriaLive, - GoabCalloutSize, - GoabCalloutType, - GoabCalloutIconTheme, - GoabCalloutEmphasis, -} from "@abgov/ui-components-common"; -import { - CUSTOM_ELEMENTS_SCHEMA, - Component, - Input, - OnInit, - ChangeDetectorRef, -} from "@angular/core"; -import { CommonModule } from "@angular/common"; -import { GoabBaseComponent } from "../base.component"; - -@Component({ - standalone: true, - selector: "goabx-callout", - imports: [CommonModule], - template: ` - - - - `, - schemas: [CUSTOM_ELEMENTS_SCHEMA], -}) -export class GoabxCallout extends GoabBaseComponent implements OnInit { - isReady = false; - version = "2"; - - constructor(private cdr: ChangeDetectorRef) { - super(); - } - - ngOnInit(): void { - // For Angular 20, we need to delay rendering the web component - // to ensure all attributes are properly bound before the component initializes - setTimeout(() => { - this.isReady = true; - this.cdr.detectChanges(); - }, 0); - } - - @Input() type?: GoabCalloutType = "information"; - @Input() heading?: string = ""; - @Input() size?: GoabCalloutSize = "large"; - @Input() maxWidth?: string; - @Input() ariaLive?: GoabCalloutAriaLive = "off"; - @Input() iconTheme?: GoabCalloutIconTheme = "outline"; - @Input() emphasis?: GoabCalloutEmphasis = "medium"; -} diff --git a/libs/angular-components/src/experimental/checkbox/checkbox.spec.ts b/libs/angular-components/src/experimental/checkbox/checkbox.spec.ts deleted file mode 100644 index 2949ac63d5..0000000000 --- a/libs/angular-components/src/experimental/checkbox/checkbox.spec.ts +++ /dev/null @@ -1,263 +0,0 @@ -import { ComponentFixture, TestBed, fakeAsync, tick } from "@angular/core/testing"; -import { GoabxCheckbox } from "./checkbox"; -import { Component, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; -import { ReactiveFormsModule } from "@angular/forms"; -import { fireEvent } from "@testing-library/dom"; -import { By } from "@angular/platform-browser"; -import { Spacing } from "@abgov/ui-components-common"; - -@Component({ - standalone: true, - imports: [GoabxCheckbox], - template: ` - - - `, -}) -class TestCheckboxComponent { - name?: string; - checked?: boolean; - text?: string; - value?: string | number | boolean; - disabled?: boolean; - error?: boolean; - ariaLabel?: string; - testId?: string; - mt?: Spacing; - mb?: Spacing; - ml?: Spacing; - mr?: Spacing; - - onChange() { - /* do nothing */ - } -} - -describe("GoabxCheckbox", () => { - let fixture: ComponentFixture; - let component: TestCheckboxComponent; - - beforeEach(fakeAsync(() => { - TestBed.configureTestingModule({ - imports: [TestCheckboxComponent, GoabxCheckbox, ReactiveFormsModule], - schemas: [CUSTOM_ELEMENTS_SCHEMA], - }).compileComponents(); - - fixture = TestBed.createComponent(TestCheckboxComponent); - component = fixture.componentInstance; - - component.name = "foo"; - component.value = "bar"; - component.text = "to display"; - component.disabled = false; - component.checked = true; - component.error = false; - component.testId = "testId"; - component.mt = "s"; - component.mr = "m"; - component.mb = "l"; - component.ml = "xl"; - fixture.detectChanges(); - tick(); - fixture.detectChanges(); - })); - - it("should render properties", () => { - const checkboxElement = fixture.debugElement.query( - By.css("goa-checkbox"), - ).nativeElement; - expect(checkboxElement.getAttribute("name")).toBe(component.name); - expect(checkboxElement.getAttribute("text")).toBe(component.text); - expect(checkboxElement.getAttribute("testid")).toBe(component.testId); - expect(checkboxElement.getAttribute("mt")).toBe(component.mt); - expect(checkboxElement.getAttribute("mr")).toBe(component.mr); - expect(checkboxElement.getAttribute("mb")).toBe(component.mb); - expect(checkboxElement.getAttribute("ml")).toBe(component.ml); - expect(checkboxElement.getAttribute("description")).toBe("Description text"); - expect(checkboxElement.getAttribute("maxwidth")).toBe("480px"); - }); - - it("should handle onChange event", async () => { - const onChange = jest.spyOn(component, "onChange"); - - const checkboxElement = fixture.debugElement.query( - By.css("goa-checkbox"), - ).nativeElement; - - fireEvent( - checkboxElement, - new CustomEvent("_change", { - detail: { name: "foo", value: "bar", checked: true }, - }), - ); - - expect(onChange).toHaveBeenCalled(); - }); - - describe("writeValue", () => { - it("should set checked attribute to true when value is truthy", () => { - const checkboxComponent = fixture.debugElement.query( - By.css("goabx-checkbox"), - ).componentInstance; - const checkboxElement = fixture.debugElement.query( - By.css("goa-checkbox"), - ).nativeElement; - - checkboxComponent.writeValue(true); - expect(checkboxElement.getAttribute("checked")).toBe("true"); - - checkboxComponent.writeValue("some value"); - expect(checkboxElement.getAttribute("checked")).toBe("true"); - - checkboxComponent.writeValue(1); - expect(checkboxElement.getAttribute("checked")).toBe("true"); - }); - - it("should set checked attribute to false when value is falsy", () => { - const checkboxComponent = fixture.debugElement.query( - By.css("goabx-checkbox"), - ).componentInstance; - const checkboxElement = fixture.debugElement.query( - By.css("goa-checkbox"), - ).nativeElement; - - checkboxComponent.writeValue(false); - expect(checkboxElement.getAttribute("checked")).toBe("false"); - - checkboxComponent.writeValue(null); - expect(checkboxElement.getAttribute("checked")).toBe("false"); - - checkboxComponent.writeValue(undefined); - expect(checkboxElement.getAttribute("checked")).toBe("false"); - - checkboxComponent.writeValue(""); - expect(checkboxElement.getAttribute("checked")).toBe("false"); - }); - - it("should update component value property", () => { - const checkboxComponent = fixture.debugElement.query( - By.css("goabx-checkbox"), - ).componentInstance; - - checkboxComponent.writeValue(true); - expect(checkboxComponent.value).toBe(true); - - checkboxComponent.writeValue(null); - expect(checkboxComponent.value).toBe(null); - }); - }); -}); - -@Component({ - standalone: true, - imports: [GoabxCheckbox], - template: ` - - - A description slot - - - `, -}) -class TestCheckboxWithDescriptionSlotComponent { - /** do nothing **/ -} - -describe("Checkbox with description slot", () => { - let fixture: ComponentFixture; - - it("should render with slot description", fakeAsync(() => { - TestBed.configureTestingModule({ - imports: [ - TestCheckboxWithDescriptionSlotComponent, - GoabxCheckbox, - ReactiveFormsModule, - ], - schemas: [CUSTOM_ELEMENTS_SCHEMA], - }).compileComponents(); - - fixture = TestBed.createComponent(TestCheckboxWithDescriptionSlotComponent); - - fixture.detectChanges(); - tick(); - fixture.detectChanges(); - const checkboxElement = fixture.debugElement.query( - By.css("goa-checkbox"), - ).nativeElement; - const slotDescription = checkboxElement.querySelector("[slot='description']"); - expect(slotDescription.textContent).toContain("A description slot"); - })); -}); - -@Component({ - standalone: true, - imports: [GoabxCheckbox], - template: ` - - - A reveal slot - - - `, -}) -class TestCheckboxWithRevealSlotComponent {} - -describe("Checkbox with reveal slot", () => { - let fixture: ComponentFixture; - - beforeEach(fakeAsync(() => { - TestBed.configureTestingModule({ - imports: [TestCheckboxWithRevealSlotComponent, GoabxCheckbox, ReactiveFormsModule], - schemas: [CUSTOM_ELEMENTS_SCHEMA], - }).compileComponents(); - - fixture = TestBed.createComponent(TestCheckboxWithRevealSlotComponent); - fixture.detectChanges(); - tick(); - fixture.detectChanges(); - })); - - it("should render with slot reveal", () => { - const checkboxElement = fixture.debugElement.query( - By.css("goa-checkbox"), - ).nativeElement; - const slotReveal = checkboxElement.querySelector("[slot='reveal']"); - expect(slotReveal.textContent).toContain("A reveal slot"); - }); - - it("should pass the revealAriaLabel property to the web component", () => { - const checkboxElement = fixture.debugElement.query( - By.css("goa-checkbox"), - ).nativeElement; - expect(checkboxElement.getAttribute("revealarialabel")).toBe( - "Screen reader announcement for reveal content", - ); - }); -}); diff --git a/libs/angular-components/src/experimental/checkbox/checkbox.ts b/libs/angular-components/src/experimental/checkbox/checkbox.ts deleted file mode 100644 index 72dbe2c89f..0000000000 --- a/libs/angular-components/src/experimental/checkbox/checkbox.ts +++ /dev/null @@ -1,130 +0,0 @@ -import { - GoabCheckboxOnChangeDetail, - GoabCheckboxSize, -} from "@abgov/ui-components-common"; -import { - CUSTOM_ELEMENTS_SCHEMA, - Component, - EventEmitter, - Input, - Output, - forwardRef, - TemplateRef, - booleanAttribute, - OnInit, - ChangeDetectorRef, - Renderer2, -} from "@angular/core"; -import { NG_VALUE_ACCESSOR } from "@angular/forms"; -import { NgTemplateOutlet, CommonModule } from "@angular/common"; -import { GoabControlValueAccessor } from "../base.component"; - -@Component({ - standalone: true, - selector: "goabx-checkbox", - template: ` - -
- -
-
- -
-
`, - schemas: [CUSTOM_ELEMENTS_SCHEMA], - providers: [ - { - provide: NG_VALUE_ACCESSOR, - multi: true, - useExisting: forwardRef(() => GoabxCheckbox), - }, - ], - imports: [NgTemplateOutlet, CommonModule], -}) -export class GoabxCheckbox extends GoabControlValueAccessor implements OnInit { - isReady = false; - version = "2"; - - constructor( - private cdr: ChangeDetectorRef, - renderer: Renderer2, - ) { - super(renderer); - } - - ngOnInit(): void { - // For Angular 20, we need to delay rendering the web component - // to ensure all attributes are properly bound before the component initializes - setTimeout(() => { - this.isReady = true; - this.cdr.detectChanges(); - }, 0); - } - - @Input() name?: string; - @Input({ transform: booleanAttribute }) checked?: boolean; - @Input({ transform: booleanAttribute }) indeterminate?: boolean; - @Input() text?: string; - // ** NOTE: can we just use the base component for this? - @Input() override value?: string | number | boolean | null; - @Input() ariaLabel?: string; - @Input() description!: string | TemplateRef; - @Input() reveal?: TemplateRef; - @Input() revealArialLabel?: string; - @Input() maxWidth?: string; - @Input() size?: GoabCheckboxSize = "default"; - - @Output() onChange = new EventEmitter(); - - getDescriptionAsString(): string { - return typeof this.description === "string" ? this.description : ""; - } - - getDescriptionAsTemplate(): TemplateRef | null { - if (this.description) { - return typeof this.description === "string" ? null : this.description; - } - return null; - } - - _onChange(e: Event) { - const detail = { ...(e as CustomEvent).detail, event: e }; - this.onChange.emit(detail); - this.markAsTouched(); - this.fcChange?.(detail.binding === "check" ? detail.checked : detail.value || ""); - } - - // Checkbox is a special case: it uses `checked` instead of `value`. - override writeValue(value: string | number | boolean | null): void { - this.value = value; - this.checked = !!value; - - const el = this.goaComponentRef?.nativeElement as HTMLElement | undefined; - if (el) { - this.renderer.setAttribute(el, "checked", this.checked ? "true" : "false"); - } - } -} diff --git a/libs/angular-components/src/experimental/date-picker/date-picker.spec.ts b/libs/angular-components/src/experimental/date-picker/date-picker.spec.ts deleted file mode 100644 index d326767f9f..0000000000 --- a/libs/angular-components/src/experimental/date-picker/date-picker.spec.ts +++ /dev/null @@ -1,102 +0,0 @@ -import { ComponentFixture, TestBed, fakeAsync, tick } from "@angular/core/testing"; -import { GoabxDatePicker } from "./date-picker"; -import { Component, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; -import { Spacing } from "@abgov/ui-components-common"; -import { ReactiveFormsModule } from "@angular/forms"; -import { addMonths } from "date-fns"; -import { By } from "@angular/platform-browser"; -import { fireEvent } from "@testing-library/dom"; - -@Component({ - standalone: true, - imports: [GoabxDatePicker], - template: ` - - `, -}) -class TestDatePickerComponent { - name?: string; - value?: Date | string; - min?: Date | string; - max?: Date | string; - error?: boolean; - mt?: Spacing; - mb?: Spacing; - ml?: Spacing; - mr?: Spacing; - - onChange() { - /* do nothing */ - } -} - -describe("GoABDatePicker", () => { - let fixture: ComponentFixture; - let component: TestDatePickerComponent; - - beforeEach(fakeAsync(() => { - TestBed.configureTestingModule({ - imports: [GoabxDatePicker, ReactiveFormsModule, TestDatePickerComponent], - schemas: [CUSTOM_ELEMENTS_SCHEMA], - }).compileComponents(); - - fixture = TestBed.createComponent(TestDatePickerComponent); - component = fixture.componentInstance; - // Assign values - const value = new Date(); - component.name = "foo"; - component.min = addMonths(value, -1); - component.max = addMonths(value, 1); - component.value = value; - component.error = true; - component.mt = "l"; - component.mb = "m"; - component.ml = "s"; - component.mr = "xs"; - fixture.detectChanges(); - tick(); - fixture.detectChanges(); - })); - - it("should render successfully", () => { - const el = fixture.debugElement.query(By.css("goa-date-picker")).nativeElement; - expect(el).toBeTruthy(); - - expect(el?.getAttribute("name")).toBe(component.name); - expect(el?.getAttribute("value")).toBe((component.value as Date)?.toISOString()); - expect(el?.getAttribute("error")).toBe(`${component.error}`); - expect(el?.getAttribute("min")).toBe(component.min?.toString()); - expect(el?.getAttribute("max")).toBe(component.max?.toString()); - expect(el?.getAttribute("mt")).toBe(component.mt); - expect(el?.getAttribute("mb")).toBe(component.mb); - expect(el?.getAttribute("ml")).toBe(component.ml); - expect(el?.getAttribute("mr")).toBe(component.mr); - expect(el?.getAttribute("type")).toBe("input"); - }); - - it("should handle event", fakeAsync(() => { - const onChange = jest.spyOn(component, "onChange"); - const el = fixture.debugElement.query(By.css("goa-date-picker")).nativeElement; - - fireEvent( - el, - new CustomEvent("_change", { - detail: { name: component.name, value: new Date() }, - }), - ); - - expect(onChange).toHaveBeenCalled(); - })); -}); diff --git a/libs/angular-components/src/experimental/date-picker/date-picker.ts b/libs/angular-components/src/experimental/date-picker/date-picker.ts deleted file mode 100644 index edd92c0056..0000000000 --- a/libs/angular-components/src/experimental/date-picker/date-picker.ts +++ /dev/null @@ -1,139 +0,0 @@ -import { - GoabDatePickerInputType, - GoabDatePickerOnChangeDetail, -} from "@abgov/ui-components-common"; -import { - CUSTOM_ELEMENTS_SCHEMA, - Component, - EventEmitter, - Input, - Output, - forwardRef, - ElementRef, - HostListener, - OnInit, - ChangeDetectorRef, - Renderer2, -} from "@angular/core"; -import { NG_VALUE_ACCESSOR } from "@angular/forms"; -import { CommonModule } from "@angular/common"; -import { GoabControlValueAccessor } from "../base.component"; - -@Component({ - standalone: true, - selector: "goabx-date-picker", - imports: [CommonModule], - template: ` - `, - schemas: [CUSTOM_ELEMENTS_SCHEMA], - providers: [ - { - provide: NG_VALUE_ACCESSOR, - multi: true, - useExisting: forwardRef(() => GoabxDatePicker), - }, - ], -}) -export class GoabxDatePicker extends GoabControlValueAccessor implements OnInit { - isReady = false; - version = 2; - - @Input() name?: string; - @Input() override value?: Date | string | null | undefined; - @Input() min?: Date | string; - @Input() max?: Date | string; - @Input() type?: GoabDatePickerInputType; - /*** - * @deprecated This property has no effect and will be removed in a future version - */ - @Input() relative?: boolean; - @Input() width?: string; - - @Output() onChange = new EventEmitter(); - - formatValue(val: Date | string | null | undefined): string { - if (!val) return ""; - - if (val instanceof Date) { - return val.toISOString(); - } - - return val; - } - - _onChange(e: Event) { - const detail = { ...(e as CustomEvent).detail, event: e }; - this.onChange.emit(detail); - this.markAsTouched(); - this.fcChange?.(detail.value); - } - - constructor( - protected elementRef: ElementRef, - private cdr: ChangeDetectorRef, - renderer: Renderer2, - ) { - super(renderer); - } - - ngOnInit(): void { - // For Angular 20, we need to delay rendering the web component - // to ensure all attributes are properly bound before the component initializes - setTimeout(() => { - this.isReady = true; - this.cdr.detectChanges(); - }, 0); - - if (this.value && typeof this.value !== "string") { - console.warn( - "Using a `Date` type for value is deprecated. Instead use a string of the format `yyyy-mm-dd`", - ); - } - } - - override setDisabledState(isDisabled: boolean) { - this.disabled = isDisabled; - this.elementRef.nativeElement.disabled = isDisabled; - } - - @HostListener("disabledChange", ["$event.detail.disabled"]) - listenDisabledChange(isDisabled: boolean) { - this.setDisabledState(isDisabled); - } - - override writeValue(value: Date | null): void { - this.value = value; - - const datePickerEl = this.goaComponentRef?.nativeElement as HTMLElement | undefined; - if (datePickerEl) { - if (!value) { - this.renderer.setAttribute(datePickerEl, "value", ""); - } else { - this.renderer.setAttribute( - datePickerEl, - "value", - value instanceof Date ? value.toISOString() : value, - ); - } - } - } -} diff --git a/libs/angular-components/src/experimental/drawer/drawer.spec.ts b/libs/angular-components/src/experimental/drawer/drawer.spec.ts deleted file mode 100644 index 5af42fd2b0..0000000000 --- a/libs/angular-components/src/experimental/drawer/drawer.spec.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { ComponentFixture, TestBed, fakeAsync, tick } from "@angular/core/testing"; -import { GoabxDrawer } from "./drawer"; -import { Component } from "@angular/core"; -import { GoabDrawerPosition, GoabDrawerSize } from "@abgov/ui-components-common"; - -@Component({ - standalone: true, - imports: [GoabxDrawer], - template: ` - - {{ content }} - -

Heading

-
- - - -
- `, -}) -class TestDrawerComponent { - open = false; - position: GoabDrawerPosition = "bottom"; - maxSize = "50ch" as GoabDrawerSize; - testId = "test-drawer"; - content = "Test Content"; - - // Empty method for testing close event emission - onClose() { - /* empty */ - } -} - -describe("GoabxDrawer", () => { - let component: TestDrawerComponent; - let fixture: ComponentFixture; - - beforeEach(fakeAsync(() => { - TestBed.configureTestingModule({ - imports: [TestDrawerComponent], - }).compileComponents(); - - fixture = TestBed.createComponent(TestDrawerComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - tick(); - fixture.detectChanges(); - })); - - it("renders with string heading", fakeAsync(() => { - const drawerElement = fixture.nativeElement.querySelector("goa-drawer"); - expect(drawerElement).toBeTruthy(); - - expect(drawerElement.getAttribute("position")).toBe("bottom"); - const headingContent = drawerElement.querySelector("[slot='heading']"); - expect(headingContent?.textContent).toContain("Heading"); - expect(drawerElement.getAttribute("maxsize")).toBe("50ch"); - expect(drawerElement.getAttribute("testid")).toBe("test-drawer"); - expect(drawerElement.textContent).toContain("Test Content"); - const actionsContent = drawerElement.querySelector("[slot='actions']"); - expect(actionsContent?.textContent).toContain("Close"); - })); -}); diff --git a/libs/angular-components/src/experimental/drawer/drawer.ts b/libs/angular-components/src/experimental/drawer/drawer.ts deleted file mode 100644 index b64341aa49..0000000000 --- a/libs/angular-components/src/experimental/drawer/drawer.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { NgTemplateOutlet, CommonModule } from "@angular/common"; -import { - booleanAttribute, - Component, - CUSTOM_ELEMENTS_SCHEMA, - EventEmitter, - Input, - Output, - TemplateRef, - OnInit, - ChangeDetectorRef, -} from "@angular/core"; -import { GoabDrawerPosition, GoabDrawerSize } from "@abgov/ui-components-common"; - -@Component({ - standalone: true, - selector: "goabx-drawer", - imports: [NgTemplateOutlet, CommonModule], - template: ` - - -
- -
-
- -
-
- `, - schemas: [CUSTOM_ELEMENTS_SCHEMA], -}) -export class GoabxDrawer implements OnInit { - version = "2"; - - @Input({ required: true, transform: booleanAttribute }) open!: boolean; - @Input({ required: true }) position!: GoabDrawerPosition; - @Input() heading!: string | TemplateRef; - @Input() maxSize?: GoabDrawerSize; - @Input() testId?: string; - @Input() actions!: TemplateRef; - @Output() onClose = new EventEmitter(); - - isReady = false; - - constructor(private cdr: ChangeDetectorRef) {} - - ngOnInit(): void { - // For Angular 20, we need to delay rendering the web component - // to ensure all attributes are properly bound before the component initializes - setTimeout(() => { - this.isReady = true; - this.cdr.detectChanges(); - }, 0); - } - - _onClose() { - this.onClose.emit(); - } - - getHeadingAsString(): string { - return this.heading instanceof TemplateRef ? "" : this.heading; - } - - getHeadingAsTemplate(): TemplateRef | null { - if (!this.heading) return null; - return this.heading instanceof TemplateRef ? this.heading : null; - } -} diff --git a/libs/angular-components/src/experimental/dropdown-item/dropdown-item.spec.ts b/libs/angular-components/src/experimental/dropdown-item/dropdown-item.spec.ts deleted file mode 100644 index 15b4371adf..0000000000 --- a/libs/angular-components/src/experimental/dropdown-item/dropdown-item.spec.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { ComponentFixture, TestBed } from "@angular/core/testing"; -import { GoabxDropdownItem } from "./dropdown-item"; - -let component: GoabxDropdownItem; -let fixture: ComponentFixture; - -beforeEach(() => { - TestBed.configureTestingModule({ - imports: [GoabxDropdownItem], - }); - fixture = TestBed.createComponent(GoabxDropdownItem); - component = fixture.componentInstance; -}); - -it("should render", () => { - expect(component).toBeTruthy(); -}); diff --git a/libs/angular-components/src/experimental/dropdown-item/dropdown-item.ts b/libs/angular-components/src/experimental/dropdown-item/dropdown-item.ts deleted file mode 100644 index 98a6d58f32..0000000000 --- a/libs/angular-components/src/experimental/dropdown-item/dropdown-item.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { - CUSTOM_ELEMENTS_SCHEMA, - Component, - Input, - OnInit, - ChangeDetectorRef, -} from "@angular/core"; -import { CommonModule } from "@angular/common"; -import { GoabDropdownItemMountType } from "@abgov/ui-components-common"; - -@Component({ - standalone: true, - selector: "goabx-dropdown-item", - template: ` - - - `, - schemas: [CUSTOM_ELEMENTS_SCHEMA], - imports: [CommonModule], -}) -export class GoabxDropdownItem implements OnInit { - @Input() value?: string; - @Input() filter?: string; - @Input() label?: string; - @Input() name?: string; - @Input() mountType?: GoabDropdownItemMountType; - - isReady = false; - - constructor(private cdr: ChangeDetectorRef) {} - - ngOnInit(): void { - // For Angular 20, we need to delay rendering the web component - // to ensure all attributes are properly bound before the component initializes - setTimeout(() => { - this.isReady = true; - this.cdr.detectChanges(); - }, 0); - } -} diff --git a/libs/angular-components/src/experimental/dropdown/dropdown.spec.ts b/libs/angular-components/src/experimental/dropdown/dropdown.spec.ts deleted file mode 100644 index 2b67220097..0000000000 --- a/libs/angular-components/src/experimental/dropdown/dropdown.spec.ts +++ /dev/null @@ -1,256 +0,0 @@ -import { ComponentFixture, TestBed, fakeAsync, tick } from "@angular/core/testing"; -import { GoabxDropdown } from "./dropdown"; -import { Component, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; -import { GoabIconType, Spacing } from "@abgov/ui-components-common"; -import { GoabxDropdownItem } from "../dropdown-item/dropdown-item"; -import { ReactiveFormsModule } from "@angular/forms"; -import { By } from "@angular/platform-browser"; -import { fireEvent } from "@testing-library/dom"; - -@Component({ - standalone: true, - imports: [GoabxDropdown, GoabxDropdownItem], - schemas: [CUSTOM_ELEMENTS_SCHEMA], - template: ` - - - - - - `, -}) -class TestDropdownComponent { - name?: string; - value?: string; - ariaLabel?: string; - ariaLabelledBy?: string; - id?: string; - disabled?: boolean; - error?: boolean; - filterable?: boolean; - leadingIcon?: GoabIconType; - maxHeight?: string; - multiselect?: boolean; - native?: boolean; - placeholder?: string; - testId?: string; - width?: string; - maxWidth?: string; - mt?: Spacing; - mb?: Spacing; - ml?: Spacing; - mr?: Spacing; - autoComplete?: string; - - onChange() { - /** do nothing **/ - } -} - -describe("GoABDropdown", () => { - let fixture: ComponentFixture; - let component: TestDropdownComponent; - - beforeEach(fakeAsync(() => { - TestBed.configureTestingModule({ - imports: [ - TestDropdownComponent, - GoabxDropdown, - GoabxDropdownItem, - ReactiveFormsModule, - ], - schemas: [CUSTOM_ELEMENTS_SCHEMA], - }).compileComponents(); - - fixture = TestBed.createComponent(TestDropdownComponent); - component = fixture.componentInstance; - - // Assign values - component.leadingIcon = "color-wand"; - component.name = "favColor"; - component.value = "blue"; - component.maxHeight = "100px"; - component.placeholder = "Select..."; - component.filterable = true; - component.disabled = true; - component.error = true; - component.testId = "foo"; - component.id = "foo-dropdown"; - component.width = "200px"; - component.maxWidth = "400px"; - component.mt = "s"; - component.mr = "m"; - component.mb = "l"; - component.ml = "xl"; - component.ariaLabel = "Label"; - component.ariaLabelledBy = "foo-dropdown-label"; - component.autoComplete = "off"; - fixture.detectChanges(); - tick(); - fixture.detectChanges(); - })); - - it("should bind all web-components attribute", () => { - const el = fixture.debugElement.query(By.css("goa-dropdown")).nativeElement; - expect(el?.getAttribute("leadingicon")).toBe("color-wand"); - expect(el?.getAttribute("mt")).toBe("s"); - expect(el?.getAttribute("mr")).toBe("m"); - expect(el?.getAttribute("mb")).toBe("l"); - expect(el?.getAttribute("ml")).toBe("xl"); - expect(el?.getAttribute("id")).toBe("foo-dropdown"); - expect(el?.getAttribute("filterable")).toBe("true"); - expect(el?.getAttribute("arialabel")).toBe("Label"); - expect(el?.getAttribute("arialabelledby")).toBe("foo-dropdown-label"); - expect(el?.getAttribute("autocomplete")).toBe("off"); - expect(el?.getAttribute("maxwidth")).toBe("400px"); - - // Check options - const dropdownItems = el.querySelectorAll("goa-dropdown-item"); - expect(dropdownItems.length).toBe(3); - const expectedOptions = [ - { label: "Red", value: "red" }, - { label: "Blue", value: "blue" }, - { label: "Yellow", value: "yellow" }, - ]; - expectedOptions.forEach((option, index) => { - expect(dropdownItems[index].getAttribute("name")).toBe(component.name); - }); - }); - - it("should allow for a single selection", fakeAsync(() => { - const onChangeMock = jest.spyOn(component, "onChange"); - component.native = true; - fixture.detectChanges(); - tick(); - fixture.detectChanges(); - - const el = fixture.debugElement.query(By.css("goa-dropdown")).nativeElement; - expect(el).toBeTruthy(); - - fireEvent( - el, - new CustomEvent("_change", { - detail: { name: component.name, value: "yellow" }, - }), - ); - expect(onChangeMock).toHaveBeenCalled(); - })); - - describe("writeValue", () => { - it("should set value attribute when writeValue is called with a value", () => { - const dropdownComponent = fixture.debugElement.query( - By.css("goabx-dropdown"), - ).componentInstance; - const dropdownElement = fixture.debugElement.query( - By.css("goa-dropdown"), - ).nativeElement; - - dropdownComponent.writeValue("red"); - expect(dropdownElement.getAttribute("value")).toBe("red"); - - dropdownComponent.writeValue("blue"); - expect(dropdownElement.getAttribute("value")).toBe("blue"); - }); - - it("should set value attribute to empty string when writeValue is called with null", () => { - const dropdownComponent = fixture.debugElement.query( - By.css("goabx-dropdown"), - ).componentInstance; - const dropdownElement = fixture.debugElement.query( - By.css("goa-dropdown"), - ).nativeElement; - - // First set a value - dropdownComponent.writeValue("red"); - expect(dropdownElement.getAttribute("value")).toBe("red"); - - // Then clear it - dropdownComponent.writeValue(null); - expect(dropdownElement.getAttribute("value")).toBe(""); - }); - - it("should update component value property", () => { - const dropdownComponent = fixture.debugElement.query( - By.css("goabx-dropdown"), - ).componentInstance; - - dropdownComponent.writeValue("yellow"); - expect(dropdownComponent.value).toBe("yellow"); - - dropdownComponent.writeValue(null); - expect(dropdownComponent.value).toBe(null); - }); - }); - - describe("_onChange", () => { - it("should update component value when user selects an option", () => { - const dropdownComponent = fixture.debugElement.query( - By.css("goabx-dropdown"), - ).componentInstance; - const dropdownElement = fixture.debugElement.query( - By.css("goa-dropdown"), - ).nativeElement; - - fireEvent( - dropdownElement, - new CustomEvent("_change", { - detail: { name: component.name, value: "yellow" }, - }), - ); - - expect(dropdownComponent.value).toBe("yellow"); - }); - - it("should update value to null when cleared", () => { - const dropdownComponent = fixture.debugElement.query( - By.css("goabx-dropdown"), - ).componentInstance; - const dropdownElement = fixture.debugElement.query( - By.css("goa-dropdown"), - ).nativeElement; - - // Set initial value - fireEvent( - dropdownElement, - new CustomEvent("_change", { - detail: { name: component.name, value: "red" }, - }), - ); - expect(dropdownComponent.value).toBe("red"); - - // Clear value - fireEvent( - dropdownElement, - new CustomEvent("_change", { - detail: { name: component.name, value: "" }, - }), - ); - expect(dropdownComponent.value).toBe(null); - }); - }); -}); diff --git a/libs/angular-components/src/experimental/dropdown/dropdown.ts b/libs/angular-components/src/experimental/dropdown/dropdown.ts deleted file mode 100644 index e59151c5be..0000000000 --- a/libs/angular-components/src/experimental/dropdown/dropdown.ts +++ /dev/null @@ -1,117 +0,0 @@ -import { - GoabDropdownOnChangeDetail, - GoabDropdownSize, - GoabIconType, -} from "@abgov/ui-components-common"; -import { - CUSTOM_ELEMENTS_SCHEMA, - Component, - EventEmitter, - Input, - Output, - booleanAttribute, - forwardRef, - OnInit, - ChangeDetectorRef, - Renderer2, -} from "@angular/core"; -import { NG_VALUE_ACCESSOR } from "@angular/forms"; -import { CommonModule } from "@angular/common"; -import { GoabControlValueAccessor } from "../base.component"; - -// "disabled", "value", "id" is an exposed property of HTMLInputElement, no need to bind with attr -@Component({ - standalone: true, - selector: "goabx-dropdown", - imports: [CommonModule], - template: ` - - - - `, - schemas: [CUSTOM_ELEMENTS_SCHEMA], - providers: [ - { - provide: NG_VALUE_ACCESSOR, - multi: true, - useExisting: forwardRef(() => GoabxDropdown), - }, - ], -}) -export class GoabxDropdown extends GoabControlValueAccessor implements OnInit { - @Input() name?: string; - @Input() ariaLabel?: string; - @Input() ariaLabelledBy?: string; - @Input({ transform: booleanAttribute }) filterable?: boolean; - @Input() leadingIcon?: GoabIconType; - @Input() maxHeight?: string; - @Input({ transform: booleanAttribute }) multiselect?: boolean; - @Input({ transform: booleanAttribute }) native?: boolean; - @Input() placeholder?: string; - @Input() width?: string; - @Input() maxWidth?: string; - @Input() autoComplete?: string; - @Input() size?: GoabDropdownSize = "default"; - /*** - * @deprecated This property has no effect and will be removed in a future version - */ - @Input() relative?: boolean; - @Output() onChange = new EventEmitter(); - - isReady = false; - version = "2"; - - constructor( - private cdr: ChangeDetectorRef, - renderer: Renderer2, - ) { - super(renderer); - } - - ngOnInit(): void { - // For Angular 20, we need to delay rendering the web component - // to ensure all attributes are properly bound before the component initializes - setTimeout(() => { - this.isReady = true; - this.cdr.detectChanges(); - }, 0); - } - - _onChange(e: Event) { - const detail = { ...(e as CustomEvent).detail, event: e }; - // Keep local value in sync with emitted detail - this.value = detail.value || null; - this.onChange.emit(detail); - - this.markAsTouched(); - this.fcChange?.(detail.value || ""); - } -} diff --git a/libs/angular-components/src/experimental/file-upload-card/file-upload-card.spec.ts b/libs/angular-components/src/experimental/file-upload-card/file-upload-card.spec.ts deleted file mode 100644 index e50d27f97d..0000000000 --- a/libs/angular-components/src/experimental/file-upload-card/file-upload-card.spec.ts +++ /dev/null @@ -1,127 +0,0 @@ -import { ComponentFixture, TestBed, fakeAsync, tick } from "@angular/core/testing"; -import { GoabxFileUploadCard } from "./file-upload-card"; -import { Component, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; -import { Spacing } from "@abgov/ui-components-common"; -import { By } from "@angular/platform-browser"; -import { fireEvent } from "@testing-library/dom"; - -@Component({ - standalone: true, - imports: [GoabxFileUploadCard], - schemas: [CUSTOM_ELEMENTS_SCHEMA], - template: ` - - `, -}) -class TestGoABFileUploadComponent { - filename = ""; - mt?: Spacing; - mb?: Spacing; - mr?: Spacing; - ml?: Spacing; - size?: number; - type?: string; - progress?: number; - error?: string; - testId?: string; - - onCancel() { - /** do nothing **/ - } - - onDelete() { - /** do nothing **/ - } -} - -describe("GoABFileUploadCard", () => { - let fixture: ComponentFixture; - let component: TestGoABFileUploadComponent; - - beforeEach(fakeAsync(() => { - TestBed.configureTestingModule({ - imports: [GoabxFileUploadCard, TestGoABFileUploadComponent], - schemas: [CUSTOM_ELEMENTS_SCHEMA], - }).compileComponents(); - - fixture = TestBed.createComponent(TestGoABFileUploadComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - tick(); - fixture.detectChanges(); - })); - it("should render with base params", fakeAsync(() => { - component.filename = "foo.png"; - component.size = 1e3; - fixture.detectChanges(); - tick(); - fixture.detectChanges(); - - const el = fixture.debugElement.query(By.css("goa-file-upload-card")).nativeElement; - expect(el?.getAttribute("filename")).toBe(component.filename); - expect(el?.getAttribute("size")).toBe("1000"); - })); - it("should render with additional params", fakeAsync(() => { - component.filename = "foo.png"; - component.size = 1e3; - component.type = "image/png"; - component.progress = 23; - component.error = "true"; - component.testId = "foo"; - fixture.detectChanges(); - tick(); - fixture.detectChanges(); - - const el = fixture.debugElement.query(By.css("goa-file-upload-card")).nativeElement; - expect(el?.getAttribute("filename")).toBe("foo.png"); - expect(el?.getAttribute("size")).toBe("1000"); - expect(el?.getAttribute("type")).toBe("image/png"); - expect(el?.getAttribute("progress")).toBe("23"); - expect(el?.getAttribute("error")).toBe("true"); - expect(el?.getAttribute("testid")).toBe("foo"); - })); - - it("should dispatch an even when delete is clicked and upload is complete", fakeAsync(() => { - const onCancel = jest.spyOn(component, "onCancel"); - component.filename = "foo.png"; - component.size = 1e3; - component.progress = 23; - - fixture.detectChanges(); - tick(); - fixture.detectChanges(); - - const el = fixture.debugElement.query(By.css("goa-file-upload-card")).nativeElement; - fireEvent(el, new CustomEvent("_cancel")); - - expect(onCancel).toHaveBeenCalledTimes(1); - })); - it("should dispatch an event when an error occurs", fakeAsync(() => { - const onDelete = jest.spyOn(component, "onDelete"); - component.filename = "foo.png"; - component.size = 1e3; - component.error = "fail"; - - fixture.detectChanges(); - tick(); - fixture.detectChanges(); - - const el = fixture.debugElement.query(By.css("goa-file-upload-card")).nativeElement; - fireEvent(el, new CustomEvent("_delete")); - - expect(onDelete).toHaveBeenCalledTimes(1); - })); -}); diff --git a/libs/angular-components/src/experimental/file-upload-card/file-upload-card.ts b/libs/angular-components/src/experimental/file-upload-card/file-upload-card.ts deleted file mode 100644 index 15efa2af0a..0000000000 --- a/libs/angular-components/src/experimental/file-upload-card/file-upload-card.ts +++ /dev/null @@ -1,68 +0,0 @@ -import { - GoabFileUploadOnCancelDetail, - GoabFileUploadOnDeleteDetail, -} from "@abgov/ui-components-common"; -import { - CUSTOM_ELEMENTS_SCHEMA, - Component, - EventEmitter, - Input, - Output, - numberAttribute, - OnInit, - ChangeDetectorRef, -} from "@angular/core"; -import { CommonModule } from "@angular/common"; - -@Component({ - standalone: true, - selector: "goabx-file-upload-card", - template: ` - `, - schemas: [CUSTOM_ELEMENTS_SCHEMA], - imports: [CommonModule], -}) -export class GoabxFileUploadCard implements OnInit { - @Input({ required: true }) filename!: string; - @Input({ transform: numberAttribute }) size?: number; - @Input() type?: string; - @Input({ transform: numberAttribute }) progress?: number; - @Input() error?: string; - @Input() testId?: string; - - @Output() onCancel = new EventEmitter(); - @Output() onDelete = new EventEmitter(); - - isReady = false; - version = "2"; - - constructor(private cdr: ChangeDetectorRef) {} - - ngOnInit(): void { - // For Angular 20, we need to delay rendering the web component - // to ensure all attributes are properly bound before the component initializes - setTimeout(() => { - this.isReady = true; - this.cdr.detectChanges(); - }, 0); - } - - _onCancel(event: Event) { - this.onCancel.emit({ filename: this.filename, event }); - } - - _onDelete(event: Event) { - this.onDelete.emit({ filename: this.filename, event }); - } -} diff --git a/libs/angular-components/src/experimental/file-upload-input/file-upload-input.spec.ts b/libs/angular-components/src/experimental/file-upload-input/file-upload-input.spec.ts deleted file mode 100644 index 79f58c1564..0000000000 --- a/libs/angular-components/src/experimental/file-upload-input/file-upload-input.spec.ts +++ /dev/null @@ -1,87 +0,0 @@ -import { ComponentFixture, TestBed, fakeAsync, tick } from "@angular/core/testing"; -import { GoabxFileUploadInput } from "./file-upload-input"; -import { Component, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; -import { GoabFileUploadInputVariant, Spacing } from "@abgov/ui-components-common"; -import { By } from "@angular/platform-browser"; -import { fireEvent } from "@testing-library/dom"; - -@Component({ - standalone: true, - imports: [GoabxFileUploadInput], - template: ` - - `, -}) -class TestFileUploadInputComponent { - maxFileSize?: string; - accept?: string; - variant: GoabFileUploadInputVariant = "button"; - testId?: string; - mt?: Spacing; - mb?: Spacing; - ml?: Spacing; - mr?: Spacing; - - onSelectFile() { - /** do nothing **/ - } -} - -describe("GoABFileUploadInput", () => { - let fixture: ComponentFixture; - let component: TestFileUploadInputComponent; - - beforeEach(fakeAsync(() => { - TestBed.configureTestingModule({ - imports: [GoabxFileUploadInput, TestFileUploadInputComponent], - schemas: [CUSTOM_ELEMENTS_SCHEMA], - }).compileComponents(); - - fixture = TestBed.createComponent(TestFileUploadInputComponent); - component = fixture.componentInstance; - - component.maxFileSize = "10MB"; - component.accept = "image/*"; - component.variant = "dragdrop"; - component.testId = "foo"; - component.mt = "s"; - component.mb = "xs"; - component.mr = "xl"; - component.ml = "l"; - - fixture.detectChanges(); - tick(); - fixture.detectChanges(); - })); - - it("should render successfully", () => { - const el = fixture.debugElement.query(By.css("goa-file-upload-input")).nativeElement; - - expect(el?.getAttribute("maxfilesize")).toBe(component.maxFileSize); - expect(el?.getAttribute("accept")).toBe(component.accept); - expect(el?.getAttribute("variant")).toBe(component.variant); - expect(el?.getAttribute("testid")).toBe(component.testId); - expect(el?.getAttribute("mt")).toBe(component.mt); - expect(el?.getAttribute("mb")).toBe(component.mb); - expect(el?.getAttribute("mr")).toBe(component.mr); - expect(el?.getAttribute("ml")).toBe(component.ml); - }); - - it("should handle onSelectFile event", () => { - const onSelectFile = jest.spyOn(component, "onSelectFile"); - const el = fixture.debugElement.query(By.css("goa-file-upload-input")).nativeElement; - fireEvent(el, new CustomEvent("_selectFile", { detail: {} })); - - expect(onSelectFile).toHaveBeenCalledTimes(1); - }); -}); diff --git a/libs/angular-components/src/experimental/file-upload-input/file-upload-input.ts b/libs/angular-components/src/experimental/file-upload-input/file-upload-input.ts deleted file mode 100644 index 74f5ff8fcd..0000000000 --- a/libs/angular-components/src/experimental/file-upload-input/file-upload-input.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { - GoabFileUploadInputOnSelectFileDetail, - GoabFileUploadInputVariant, -} from "@abgov/ui-components-common"; -import { - CUSTOM_ELEMENTS_SCHEMA, - Component, - EventEmitter, - Input, - Output, - OnInit, - ChangeDetectorRef, -} from "@angular/core"; -import { CommonModule } from "@angular/common"; -import { GoabBaseComponent } from "../base.component"; - -@Component({ - standalone: true, - selector: "goabx-file-upload-input", - template: ` - `, - schemas: [CUSTOM_ELEMENTS_SCHEMA], - imports: [CommonModule], -}) -export class GoabxFileUploadInput extends GoabBaseComponent implements OnInit { - @Input() id?: string = ""; - @Input({ required: true }) variant!: GoabFileUploadInputVariant; - @Input() maxFileSize?: string = "5MB"; - @Input() accept?: string; - - @Output() onSelectFile = new EventEmitter(); - - isReady = false; - version = "2"; - - constructor(private cdr: ChangeDetectorRef) { - super(); - } - - ngOnInit(): void { - // For Angular 20, we need to delay rendering the web component - // to ensure all attributes are properly bound before the component initializes - setTimeout(() => { - this.isReady = true; - this.cdr.detectChanges(); - }, 0); - } - - _onSelectFile(e: Event) { - const detail = { ...(e as CustomEvent).detail, event: e }; - this.onSelectFile.emit(detail); - } -} diff --git a/libs/angular-components/src/experimental/filter-chip/filter-chip.spec.ts b/libs/angular-components/src/experimental/filter-chip/filter-chip.spec.ts deleted file mode 100644 index 6d64ce4afd..0000000000 --- a/libs/angular-components/src/experimental/filter-chip/filter-chip.spec.ts +++ /dev/null @@ -1,85 +0,0 @@ -import { ComponentFixture, TestBed, fakeAsync, tick } from "@angular/core/testing"; -import { Component, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; -import { GoabChipTheme, Spacing } from "@abgov/ui-components-common"; -import { By } from "@angular/platform-browser"; -import { fireEvent } from "@testing-library/dom"; -import { GoabxFilterChip } from "./filter-chip"; - -@Component({ - standalone: true, - imports: [GoabxFilterChip], - template: ` - - - `, -}) -class TestFilterChipComponent { - error?: boolean; - content?: string; - iconTheme?: GoabChipTheme; - testId?: string; - mt?: Spacing; - mb?: Spacing; - ml?: Spacing; - mr?: Spacing; - - onClick() { - /* do nothing */ - } -} - -describe("GoabxFilterChip", () => { - let fixture: ComponentFixture; - let component: TestFilterChipComponent; - beforeEach(fakeAsync(() => { - TestBed.configureTestingModule({ - imports: [GoabxFilterChip, TestFilterChipComponent], - schemas: [CUSTOM_ELEMENTS_SCHEMA], - }).compileComponents(); - - fixture = TestBed.createComponent(TestFilterChipComponent); - component = fixture.componentInstance; - - component.error = true; - component.content = "some chip"; - component.testId = "chip-test"; - component.iconTheme = "filled"; - component.mt = "s"; - component.mr = "m"; - component.mb = "l"; - component.ml = "xl"; - fixture.detectChanges(); - tick(); - fixture.detectChanges(); - })); - - it("should render properties", () => { - const chipElement = fixture.debugElement.query(By.css("goa-filter-chip")).nativeElement; - expect(chipElement.getAttribute("error")).toBe(`${component.error}`); - expect(chipElement.getAttribute("content")).toBe(component.content); - expect(chipElement.getAttribute("icontheme")).toBe(`${component.iconTheme}`); - expect(chipElement.getAttribute("testid")).toBe(component.testId); - expect(chipElement.getAttribute("mt")).toBe(component.mt); - expect(chipElement.getAttribute("mr")).toBe(component.mr); - expect(chipElement.getAttribute("mb")).toBe(component.mb); - expect(chipElement.getAttribute("ml")).toBe(component.ml); - }); - - it("should allow to handle delete event", fakeAsync(() => { - const onClick = jest.spyOn(component, "onClick"); - const chipElement = fixture.debugElement.query(By.css("goa-filter-chip")).nativeElement; - fireEvent(chipElement, new CustomEvent("_click")); - - expect(onClick).toHaveBeenCalled(); - })); -}); diff --git a/libs/angular-components/src/experimental/filter-chip/filter-chip.ts b/libs/angular-components/src/experimental/filter-chip/filter-chip.ts deleted file mode 100644 index 809ae03263..0000000000 --- a/libs/angular-components/src/experimental/filter-chip/filter-chip.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { GoabChipTheme, GoabIconType } from "@abgov/ui-components-common"; -import { - CUSTOM_ELEMENTS_SCHEMA, - Component, - Input, - Output, - EventEmitter, - booleanAttribute, - OnInit, - ChangeDetectorRef, -} from "@angular/core"; -import { CommonModule } from "@angular/common"; -import { GoabBaseComponent } from "../base.component"; - -@Component({ - standalone: true, - selector: "goabx-filter-chip", - template: ` - - `, - schemas: [CUSTOM_ELEMENTS_SCHEMA], - imports: [CommonModule], -}) -export class GoabxFilterChip extends GoabBaseComponent implements OnInit { - @Input({ transform: booleanAttribute }) error?: boolean; - @Input({ transform: booleanAttribute }) deletable?: boolean; - @Input() content?: string = ""; - @Input() iconTheme?: GoabChipTheme; - @Input() secondaryText?: string = ""; - @Input() leadingIcon?: GoabIconType | null = null; - - @Output() onClick = new EventEmitter(); - - isReady = false; - version = "2"; - - constructor(private cdr: ChangeDetectorRef) { - super(); - } - - ngOnInit(): void { - // For Angular 20, we need to delay rendering the web component - // to ensure all attributes are properly bound before the component initializes - setTimeout(() => { - this.isReady = true; - this.cdr.detectChanges(); - }, 0); - } - - _onClick() { - this.onClick.emit(); - } -} diff --git a/libs/angular-components/src/experimental/footer-meta-section/footer-meta-section.spec.ts b/libs/angular-components/src/experimental/footer-meta-section/footer-meta-section.spec.ts deleted file mode 100644 index 81377354a2..0000000000 --- a/libs/angular-components/src/experimental/footer-meta-section/footer-meta-section.spec.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { ComponentFixture, TestBed, fakeAsync, tick } from "@angular/core/testing"; -import { GoabxAppFooterMetaSection } from "./footer-meta-section"; -import { Component, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; -import { By } from "@angular/platform-browser"; - -@Component({ - standalone: true, - imports: [GoabxAppFooterMetaSection], - template: ` - - Home - - `, -}) -class TestFooterMetaSectionComponent { - /** do nothing **/ -} - -describe("GoABFooterMetaSection", () => { - let fixture: ComponentFixture; - let component: TestFooterMetaSectionComponent; - - beforeEach(fakeAsync(() => { - TestBed.configureTestingModule({ - imports: [GoabxAppFooterMetaSection, TestFooterMetaSectionComponent], - schemas: [CUSTOM_ELEMENTS_SCHEMA], - }).compileComponents(); - - fixture = TestBed.createComponent(TestFooterMetaSectionComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - tick(); - fixture.detectChanges(); - })); - - it("should render", () => { - const el = fixture.debugElement.query( - By.css("goa-app-footer-meta-section"), - ).nativeElement; - expect(el?.getAttribute("testid")).toBe("foo"); - expect(el?.querySelector("a")).toBeTruthy(); - expect(el?.innerHTML).toContain("Home"); - }); -}); diff --git a/libs/angular-components/src/experimental/footer-meta-section/footer-meta-section.ts b/libs/angular-components/src/experimental/footer-meta-section/footer-meta-section.ts deleted file mode 100644 index 2997cf66e8..0000000000 --- a/libs/angular-components/src/experimental/footer-meta-section/footer-meta-section.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { - CUSTOM_ELEMENTS_SCHEMA, - Component, - Input, - OnInit, - ChangeDetectorRef, -} from "@angular/core"; -import { CommonModule } from "@angular/common"; - -@Component({ - standalone: true, - selector: "goabx-app-footer-meta-section", - template: ` - - - - `, - styles: [":host { width: 100%; }"], - schemas: [CUSTOM_ELEMENTS_SCHEMA], - imports: [CommonModule], -}) -export class GoabxAppFooterMetaSection implements OnInit { - @Input() testId?: string; - /** "slot" is required and must equal to "meta" so it can be rendered in the correct position **/ - @Input({ required: true }) slot!: "meta"; - - isReady = false; - - constructor(private cdr: ChangeDetectorRef) {} - - ngOnInit(): void { - // For Angular 20, we need to delay rendering the web component - // to ensure all attributes are properly bound before the component initializes - setTimeout(() => { - this.isReady = true; - this.cdr.detectChanges(); - }, 0); - } -} diff --git a/libs/angular-components/src/experimental/footer-nav-section/footer-nav-section.spec.ts b/libs/angular-components/src/experimental/footer-nav-section/footer-nav-section.spec.ts deleted file mode 100644 index 0c4398d64e..0000000000 --- a/libs/angular-components/src/experimental/footer-nav-section/footer-nav-section.spec.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { ComponentFixture, TestBed, fakeAsync, tick } from "@angular/core/testing"; -import { GoabxAppFooterNavSection } from "./footer-nav-section"; -import { Component, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; -import { By } from "@angular/platform-browser"; - -@Component({ - standalone: true, - imports: [GoabxAppFooterNavSection], - template: ` - -

Testing footer

-
- `, -}) -class TestFooterNavSectionComponent { - testId?: string; - heading?: string; - maxColumnCount?: number; -} - -describe("GoABAppFooterNavSection", () => { - let fixture: ComponentFixture; - let component: TestFooterNavSectionComponent; - - beforeEach(fakeAsync(() => { - TestBed.configureTestingModule({ - imports: [GoabxAppFooterNavSection, TestFooterNavSectionComponent], - schemas: [CUSTOM_ELEMENTS_SCHEMA], - }).compileComponents(); - - fixture = TestBed.createComponent(TestFooterNavSectionComponent); - component = fixture.componentInstance; - - component.testId = "foo"; - component.heading = "Footer heading"; - component.maxColumnCount = 3; - - fixture.detectChanges(); - tick(); - fixture.detectChanges(); - })); - - it("should render properties", () => { - const el = fixture.debugElement.query( - By.css("goa-app-footer-nav-section"), - ).nativeElement; - expect(el?.getAttribute("testid")).toBe(component.testId); - expect(el?.getAttribute("heading")).toBe(component.heading); - expect(el?.getAttribute("maxcolumncount")).toBe(`${component.maxColumnCount}`); - }); -}); diff --git a/libs/angular-components/src/experimental/footer-nav-section/footer-nav-section.ts b/libs/angular-components/src/experimental/footer-nav-section/footer-nav-section.ts deleted file mode 100644 index 57486667ff..0000000000 --- a/libs/angular-components/src/experimental/footer-nav-section/footer-nav-section.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { - CUSTOM_ELEMENTS_SCHEMA, - Component, - Input, - OnInit, - ChangeDetectorRef, -} from "@angular/core"; -import { CommonModule } from "@angular/common"; - -@Component({ - standalone: true, - selector: "goabx-app-footer-nav-section", - template: ` - - - - `, - styles: [":host { width: 100%; }"], - schemas: [CUSTOM_ELEMENTS_SCHEMA], - imports: [CommonModule], -}) -export class GoabxAppFooterNavSection implements OnInit { - @Input() heading?: string; - @Input() maxColumnCount? = 1; - @Input() testId?: string; - /** "slot" is required and must equal to "nav" so it can be rendered in the correct position **/ - @Input({ required: true }) slot!: "nav"; - - isReady = false; - - constructor(private cdr: ChangeDetectorRef) {} - - ngOnInit(): void { - // For Angular 20, we need to delay rendering the web component - // to ensure all attributes are properly bound before the component initializes - setTimeout(() => { - this.isReady = true; - this.cdr.detectChanges(); - }, 0); - } -} diff --git a/libs/angular-components/src/experimental/footer/footer.spec.ts b/libs/angular-components/src/experimental/footer/footer.spec.ts deleted file mode 100644 index 8870c9ce29..0000000000 --- a/libs/angular-components/src/experimental/footer/footer.spec.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { ComponentFixture, TestBed, fakeAsync, tick } from "@angular/core/testing"; -import { Component, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; -import { GoabxAppFooter } from "../footer/footer"; -import { By } from "@angular/platform-browser"; - -@Component({ - standalone: true, - imports: [GoabxAppFooter], - template: ` -
This is the nav content
-
This is the meta content
-
`, -}) -class TestFooterComponent { - maxContentWidth?: string; -} - -describe("GoABFooter", () => { - let fixture: ComponentFixture; - let component: TestFooterComponent; - - beforeEach(fakeAsync(() => { - TestBed.configureTestingModule({ - imports: [GoabxAppFooter, TestFooterComponent], - schemas: [CUSTOM_ELEMENTS_SCHEMA], - }).compileComponents(); - - fixture = TestBed.createComponent(TestFooterComponent); - component = fixture.componentInstance; - component.maxContentWidth = "100%"; - - fixture.detectChanges(); - tick(); - fixture.detectChanges(); - })); - - it("should render and set the props correctly", () => { - const footerElement = fixture.debugElement.query( - By.css("goa-app-footer"), - ).nativeElement; - expect(footerElement.getAttribute("maxcontentwidth")).toBe("100%"); - const navContent = footerElement.querySelector("[slot='nav']"); - expect(navContent.textContent).toContain("This is the nav content"); - const metaContent = footerElement.querySelector("[slot='meta']"); - expect(metaContent.textContent).toContain("This is the meta content"); - }); -}); diff --git a/libs/angular-components/src/experimental/footer/footer.ts b/libs/angular-components/src/experimental/footer/footer.ts deleted file mode 100644 index a7aebd5425..0000000000 --- a/libs/angular-components/src/experimental/footer/footer.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { - CUSTOM_ELEMENTS_SCHEMA, - Component, - Input, - OnInit, - ChangeDetectorRef, -} from "@angular/core"; -import { CommonModule } from "@angular/common"; - -@Component({ - standalone: true, - selector: "goabx-app-footer", - template: ` - - - - - - `, - schemas: [CUSTOM_ELEMENTS_SCHEMA], - imports: [CommonModule], -}) -export class GoabxAppFooter implements OnInit { - @Input() maxContentWidth?: string; - @Input() testId?: string; - @Input() url?: string; - - isReady = false; - version = 2; - - constructor(private cdr: ChangeDetectorRef) {} - - ngOnInit(): void { - // For Angular 20, we need to delay rendering the web component - // to ensure all attributes are properly bound before the component initializes - setTimeout(() => { - this.isReady = true; - this.cdr.detectChanges(); - }, 0); - } -} diff --git a/libs/angular-components/src/experimental/form-item/form-item-slot.ts b/libs/angular-components/src/experimental/form-item/form-item-slot.ts deleted file mode 100644 index 3ac193156a..0000000000 --- a/libs/angular-components/src/experimental/form-item/form-item-slot.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Component, Input } from "@angular/core"; - -@Component({ - standalone: true, - selector: "goabx-form-item-slot", - template: ``, -}) -/** - * This component is used to define the slot for the form item component. - * We need to use a separate component with a required attribute `slot` because - * svelte component renders based on the `slot` of the wrapper component (which is `div` before) - * // similar to app-footer-meta-section & app-footer-nav-section - */ -export class GoabxFormItemSlot { - @Input({ required: true }) slot!: "helptext" | "error"; -} diff --git a/libs/angular-components/src/experimental/form-item/form-item.spec.ts b/libs/angular-components/src/experimental/form-item/form-item.spec.ts deleted file mode 100644 index 94ff893f76..0000000000 --- a/libs/angular-components/src/experimental/form-item/form-item.spec.ts +++ /dev/null @@ -1,109 +0,0 @@ -import { ComponentFixture, TestBed, fakeAsync, tick } from "@angular/core/testing"; -import { GoabxFormItem } from "./form-item"; -import { Component, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; -import { GoabFormItemRequirement, Spacing } from "@abgov/ui-components-common"; -import { By } from "@angular/platform-browser"; -import { GoabxFormItemSlot } from "./form-item-slot"; -import { CommonModule } from "@angular/common"; - -@Component({ - standalone: true, - imports: [GoabxFormItem, GoabxFormItemSlot, CommonModule], - schemas: [CUSTOM_ELEMENTS_SCHEMA], - template: ` - - - This is an error slot - This is a helpText slot - - `, -}) -class TestFormItemComponent { - label?: string; - requirement?: GoabFormItemRequirement; - error?: string; - helpText?: string; - id?: string; - testId?: string; - errorSlot?: boolean; - helpTextSlot?: boolean; - mt?: Spacing; - mb?: Spacing; - mr?: Spacing; - ml?: Spacing; -} - -describe("GoABFormItem", () => { - let fixture: ComponentFixture; - let component: TestFormItemComponent; - - beforeEach(fakeAsync(() => { - TestBed.configureTestingModule({ - imports: [GoabxFormItem, TestFormItemComponent], - schemas: [CUSTOM_ELEMENTS_SCHEMA], - }).compileComponents(); - - fixture = TestBed.createComponent(TestFormItemComponent); - component = fixture.componentInstance; - - component.label = "First name"; - component.requirement = "optional"; - component.id = "firstName"; - component.testId = "foo"; - component.mt = "s"; - component.mb = "l"; - component.ml = "xl"; - component.mr = "m"; - fixture.detectChanges(); - tick(); - fixture.detectChanges(); - })); - - it("should render with properties", () => { - component.error = "This is an error"; - component.helpText = "this is some helptext"; - fixture.detectChanges(); - - const el = fixture.debugElement.query(By.css("goa-form-item")).nativeElement; - - expect(el?.getAttribute("label")).toBe(component.label); - expect(el?.getAttribute("requirement")).toBe(component.requirement); - expect(el?.getAttribute("error")).toBe(component.error); - expect(el?.getAttribute("helptext")).toBe(component.helpText); - expect(el?.getAttribute("id")).toBe(component.id); - expect(el?.getAttribute("testid")).toBe(component.testId); - expect(el?.getAttribute("maxwidth")).toBe("480px"); - expect(el?.getAttribute("mt")).toBe(component.mt); - expect(el?.getAttribute("mb")).toBe(component.mb); - expect(el?.getAttribute("mr")).toBe(component.mr); - expect(el?.getAttribute("ml")).toBe(component.ml); - - // Children is rendered - expect(el?.querySelector("input[data-testid='foo']")).toBeTruthy(); - }); - - it("should render error and helpText slot", () => { - component.errorSlot = true; - component.helpTextSlot = true; - fixture.detectChanges(); - - const el = fixture.debugElement.query(By.css("goa-form-item")).nativeElement; - expect(el?.querySelector("[slot='error']")).toBeTruthy(); - expect(el?.innerHTML).toContain("This is an error slot"); - expect(el?.querySelector("[slot='helptext']")).toBeTruthy(); - expect(el?.innerHTML).toContain("This is a helpText slot"); - expect(el?.querySelector("input[data-testid='foo']")).toBeTruthy(); - }); -}); diff --git a/libs/angular-components/src/experimental/form-item/form-item.ts b/libs/angular-components/src/experimental/form-item/form-item.ts deleted file mode 100644 index acf0feb4b2..0000000000 --- a/libs/angular-components/src/experimental/form-item/form-item.ts +++ /dev/null @@ -1,79 +0,0 @@ -import { - GoabFormItemLabelSize, - GoabFormItemRequirement, -} from "@abgov/ui-components-common"; -import { - Component, - CUSTOM_ELEMENTS_SCHEMA, - Input, - OnInit, - ChangeDetectorRef, -} from "@angular/core"; -import { CommonModule } from "@angular/common"; -import { GoabBaseComponent } from "../base.component"; -import { GoabFormItemType } from "@abgov/ui-components-common"; - -@Component({ - standalone: true, - selector: "goabx-form-item", - template: ` - - - - - `, - schemas: [CUSTOM_ELEMENTS_SCHEMA], - imports: [CommonModule], -}) -export class GoabxFormItem extends GoabBaseComponent implements OnInit { - @Input() label?: string; - @Input() labelSize?: GoabFormItemLabelSize; - @Input() helpText?: string; - @Input() error?: string; - @Input() requirement?: GoabFormItemRequirement; - @Input() maxWidth?: string; - @Input() id?: string; - @Input() type?: GoabFormItemType = ""; - /** - * Public form: to arrange fields in the summary - */ - @Input() publicFormSummaryOrder?: number; - /** - * Public form: allow to override the label value within the form-summary to provide a shorter description of the value - */ - @Input() name?: string; - - isReady = false; - version = "2"; - - constructor(private cdr: ChangeDetectorRef) { - super(); - } - - ngOnInit(): void { - // For Angular 20, we need to delay rendering the web component - // to ensure all attributes are properly bound before the component initializes - setTimeout(() => { - this.isReady = true; - this.cdr.detectChanges(); - }, 0); - } -} diff --git a/libs/angular-components/src/experimental/index.ts b/libs/angular-components/src/experimental/index.ts deleted file mode 100644 index 6eb66e4b35..0000000000 --- a/libs/angular-components/src/experimental/index.ts +++ /dev/null @@ -1,33 +0,0 @@ -export * from "./badge/badge"; -export * from "./button/button"; -export * from "./calendar/calendar"; -export * from "./callout/callout"; -export * from "./checkbox/checkbox"; -export * from "./date-picker/date-picker"; -export * from "./drawer/drawer"; -export * from "./dropdown/dropdown"; -export * from "./dropdown-item/dropdown-item"; -export * from "./file-upload-card/file-upload-card"; -export * from "./file-upload-input/file-upload-input"; -export * from "./filter-chip/filter-chip"; -export * from "./form-item/form-item"; -export * from "./footer/footer"; -export * from "./footer-meta-section/footer-meta-section"; -export * from "./footer-nav-section/footer-nav-section"; -export * from "./input/input"; -export * from "./link/link"; -export * from "./modal/modal"; -export * from "./notification/notification"; -export * from "./pagination/pagination"; -export * from "./radio-group/radio-group"; -export * from "./radio-item/radio-item"; -export * from "./side-menu/side-menu"; -export * from "./side-menu-group/side-menu-group"; -export * from "./side-menu-heading/side-menu-heading"; -export * from "./table/table"; -export * from "./table-sort-header/table-sort-header"; -export * from "./textarea/textarea"; -export * from "./tabs/tabs"; -export * from "./work-side-menu/work-side-menu"; -export * from "./work-side-menu-item/work-side-menu-item"; -export * from "./work-side-menu-group/work-side-menu-group"; diff --git a/libs/angular-components/src/experimental/input/input.spec.ts b/libs/angular-components/src/experimental/input/input.spec.ts deleted file mode 100644 index 304761937a..0000000000 --- a/libs/angular-components/src/experimental/input/input.spec.ts +++ /dev/null @@ -1,370 +0,0 @@ -import { ComponentFixture, TestBed, fakeAsync, tick } from "@angular/core/testing"; -import { GoabxInput } from "./input"; -import { Component, CUSTOM_ELEMENTS_SCHEMA, TemplateRef } from "@angular/core"; -import { - GoabIconType, - GoabInputAutoCapitalize, - GoabInputOnChangeDetail, - GoabInputType, - Spacing, -} from "@abgov/ui-components-common"; -import { By } from "@angular/platform-browser"; -import { fireEvent } from "@testing-library/dom"; - -@Component({ - standalone: true, - imports: [GoabxInput], - template: ` - - -
Leading Content
-
- -
Trailing Content
-
-
- `, -}) -class TestInputComponent { - name = "foo"; - id?: string; - debounce?: number; - disabled?: boolean; - autoCapitalize?: GoabInputAutoCapitalize; - autoComplete?: string; - placeholder?: string; - leadingIcon?: GoabIconType; - trailingIcon?: GoabIconType; - variant?: string; - focused?: boolean; - readonly?: boolean; - error?: boolean; - width?: string; - prefix?: string; - suffix?: string; - testId?: string; - ariaLabel?: string; - maxLength?: number; - value?: string | null = ""; - min?: number; - max?: number; - step?: number; - type?: GoabInputType = "text"; - ariaLabelledBy?: string; - textAlign?: "left" | "right"; - mt?: Spacing; - mr?: Spacing; - mb?: Spacing; - ml?: Spacing; - leadingContent!: string | TemplateRef; - trailingContent!: string | TemplateRef; - - onTrailingIconClick() { - /** do nothing **/ - } - - onFocus() { - /** do nothing **/ - } - - onBlur() { - /** do nothing **/ - } - - onKeyPress() { - /** do nothing **/ - } - - onChange(event: GoabInputOnChangeDetail) { - /** do nothing **/ - } -} - -describe("GoABInput", () => { - let fixture: ComponentFixture; - let component: TestInputComponent; - - beforeEach(fakeAsync(() => { - TestBed.configureTestingModule({ - imports: [TestInputComponent, GoabxInput], - schemas: [CUSTOM_ELEMENTS_SCHEMA], - }).compileComponents(); - - fixture = TestBed.createComponent(TestInputComponent); - component = fixture.componentInstance; - - // assign values - component.value = "bar"; - component.id = "foo"; - component.leadingIcon = "search"; - component.trailingIcon = "close"; - component.autoCapitalize = "on"; - component.autoComplete = "off"; - component.variant = "bare"; - component.disabled = true; - component.readonly = true; - component.focused = true; - component.placeholder = "placeholder"; - component.prefix = "foo"; - component.suffix = "bar"; - component.testId = "test-id"; - component.debounce = 1000; - component.mt = "s"; - component.mr = "m"; - component.mb = "l"; - component.ml = "xl"; - component.maxLength = 10; - component.prefix = "$"; - component.suffix = "items"; - component.ariaLabel = "foo input"; - component.ariaLabelledBy = "foo"; - component.min = 0; - component.max = 100; - - fixture.detectChanges(); - tick(); - fixture.detectChanges(); - })); - - it("should render", () => { - const input = fixture.debugElement.query(By.css("goa-input")).nativeElement; - expect(input?.getAttribute("name")).toBe(component.name); - expect(input?.getAttribute("value")).toBe(component.value); - expect(input?.getAttribute("type")).toBe(component.type); - expect(input?.getAttribute("id")).toBe(component.id); - expect(input?.getAttribute("leadingicon")).toBe(component.leadingIcon); - expect(input?.getAttribute("trailingicon")).toBe(component.trailingIcon); - expect(input?.getAttribute("autocapitalize")).toBe(component.autoCapitalize); - expect(input?.getAttribute("autocomplete")).toBe(component.autoComplete); - expect(input?.getAttribute("variant")).toBe(component.variant); - expect(input?.getAttribute("focused")).toBe(`${component.focused}`); - expect(input?.getAttribute("placeholder")).toBe(component.placeholder); - expect(input?.getAttribute("prefix")).toBe(component.prefix); - expect(input?.getAttribute("suffix")).toBe(component.suffix); - expect(input?.getAttribute("data-testid")).toBe(component.testId); - expect(input?.getAttribute("debounce")).toBe(`${component.debounce}`); - expect(input?.getAttribute("mt")).toBe(component.mt); - expect(input?.getAttribute("mr")).toBe(component.mr); - expect(input?.getAttribute("mb")).toBe(component.mb); - expect(input?.getAttribute("ml")).toBe(component.ml); - expect(input?.getAttribute("maxlength")).toBe(`${component.maxLength}`); - expect(input?.getAttribute("arialabel")).toBe(component.ariaLabel); - expect(input?.getAttribute("arialabelledby")).toBe(component.ariaLabelledBy); - expect(input?.getAttribute("min")).toBe(`${component.min}`); - expect(input?.getAttribute("max")).toBe(`${component.max}`); - }); - - describe("Text Alignment", () => { - it("passes textAlign prop through to web component", fakeAsync(() => { - const testFixture = TestBed.createComponent(TestInputComponent); - const testComponent = testFixture.componentInstance; - testComponent.name = "test"; - testComponent.textAlign = "right"; - testFixture.detectChanges(); - tick(); - testFixture.detectChanges(); - - const input = testFixture.debugElement.query(By.css("goa-input")).nativeElement; - expect(input?.getAttribute("textalign")).toBe("right"); - - testComponent.textAlign = "left"; - testFixture.detectChanges(); - - expect(input?.getAttribute("textalign")).toBe("left"); - })); - }); - - it("should handle onChange event", () => { - const validateOnChange = jest.spyOn(component, "onChange"); - - const input = fixture.debugElement.query(By.css("goa-input")).nativeElement; - - fireEvent( - input, - new CustomEvent("_change", { detail: { name: "foo", value: "new value" } }), - ); - - expect(validateOnChange).toBeCalledWith( - expect.objectContaining({ - name: "foo", - value: "new value", - event: expect.any(Event), - }), - ); - }); - - it("should handle onFocus event", () => { - const validateOnFocus = jest.spyOn(component, "onFocus"); - - const input = fixture.debugElement.query(By.css("goa-input")).nativeElement; - - fireEvent(input, new CustomEvent("_focus")); - - expect(validateOnFocus).toBeCalled(); - }); - - it("should handle onBlur event", () => { - const validateOnBlur = jest.spyOn(component, "onBlur"); - - const input = fixture.debugElement.query(By.css("goa-input")).nativeElement; - - fireEvent(input, new CustomEvent("_blur")); - - expect(validateOnBlur).toBeCalled(); - }); - - it("should handle onKeyPress event", () => { - const validateOnKeyPress = jest.spyOn(component, "onKeyPress"); - - const input = fixture.debugElement.query(By.css("goa-input")).nativeElement; - - fireEvent(input, new CustomEvent("_keyPress")); - - expect(validateOnKeyPress).toBeCalled(); - }); - - it("should render leading and trailing content", () => { - const input = fixture.debugElement.query(By.css("goa-input")); - const leadingContent = input.nativeElement.querySelector("[slot='leadingContent']"); - const trailingContent = input.nativeElement.querySelector("[slot='trailingContent']"); - - expect(leadingContent).toBeTruthy(); - expect(leadingContent.textContent).toContain("Leading Content"); - - expect(trailingContent).toBeTruthy(); - expect(trailingContent.textContent).toContain("Trailing Content"); - }); - - describe("writeValue", () => { - it("should set value attribute when writeValue is called", () => { - const inputComponent = fixture.debugElement.query( - By.css("goabx-input"), - ).componentInstance; - const inputElement = fixture.debugElement.query(By.css("goa-input")).nativeElement; - - inputComponent.writeValue("new value"); - expect(inputElement.getAttribute("value")).toBe("new value"); - - inputComponent.writeValue("another value"); - expect(inputElement.getAttribute("value")).toBe("another value"); - }); - - it("should set value attribute to empty string when writeValue is called with null or empty", () => { - const inputComponent = fixture.debugElement.query( - By.css("goabx-input"), - ).componentInstance; - const inputElement = fixture.debugElement.query(By.css("goa-input")).nativeElement; - - // First set a value - inputComponent.writeValue("some value"); - expect(inputElement.getAttribute("value")).toBe("some value"); - - // Then clear it with null - inputComponent.writeValue(null); - expect(inputElement.getAttribute("value")).toBe(""); - - // Set again and clear with undefined - inputComponent.writeValue("test"); - inputComponent.writeValue(undefined); - expect(inputElement.getAttribute("value")).toBe(""); - - // Set again and clear with empty string - inputComponent.writeValue("test2"); - inputComponent.writeValue(""); - expect(inputElement.getAttribute("value")).toBe(""); - }); - - it("should update component value property", () => { - const inputComponent = fixture.debugElement.query( - By.css("goabx-input"), - ).componentInstance; - - inputComponent.writeValue("updated"); - expect(inputComponent.value).toBe("updated"); - - inputComponent.writeValue(null); - expect(inputComponent.value).toBe(null); - }); - }); -}); - -@Component({ - standalone: true, - imports: [GoabxInput], - template: ` - - `, -}) -class TestStringContentComponent { - leadingContent = "String Leading Content"; - trailingContent = "String Trailing Content"; -} - -describe("GoabxInput with string content", () => { - let fixture: ComponentFixture; - - beforeEach(fakeAsync(() => { - TestBed.configureTestingModule({ - imports: [TestStringContentComponent, GoabxInput], - schemas: [CUSTOM_ELEMENTS_SCHEMA], - }).compileComponents(); - - fixture = TestBed.createComponent(TestStringContentComponent); - fixture.detectChanges(); - tick(); - fixture.detectChanges(); - })); - - it("should render string leadingContent and trailingContent", () => { - const input = fixture.debugElement.query(By.css("goa-input")); - const leadingContent = input.nativeElement.querySelector("[slot='leadingContent']"); - const trailingContent = input.nativeElement.querySelector("[slot='trailingContent']"); - - expect(leadingContent).toBeTruthy(); - expect(leadingContent.textContent).toContain("String Leading Content"); - - expect(trailingContent).toBeTruthy(); - expect(trailingContent.textContent).toContain("String Trailing Content"); - }); -}); diff --git a/libs/angular-components/src/experimental/input/input.ts b/libs/angular-components/src/experimental/input/input.ts deleted file mode 100644 index 1a352983e5..0000000000 --- a/libs/angular-components/src/experimental/input/input.ts +++ /dev/null @@ -1,218 +0,0 @@ -import { - GoabIconType, - GoabInputAutoCapitalize, - GoabInputOnBlurDetail, - GoabInputOnChangeDetail, - GoabInputOnFocusDetail, - GoabInputOnKeyPressDetail, - GoabInputSize, - GoabInputType, -} from "@abgov/ui-components-common"; -import { - CUSTOM_ELEMENTS_SCHEMA, - Component, - EventEmitter, - Input, - Output, - forwardRef, - OnInit, - booleanAttribute, - numberAttribute, - TemplateRef, - ChangeDetectorRef, - Renderer2, -} from "@angular/core"; -import { NG_VALUE_ACCESSOR } from "@angular/forms"; -import { GoabControlValueAccessor } from "../base.component"; -import { NgIf, NgTemplateOutlet, CommonModule } from "@angular/common"; - -@Component({ - standalone: true, - selector: "goabx-input", - imports: [NgIf, NgTemplateOutlet, CommonModule], - template: ` - -
- - - - - {{ getLeadingContentAsString() }} - -
- - - -
- - - - - {{ getTrailingContentAsString() }} - -
-
- `, - schemas: [CUSTOM_ELEMENTS_SCHEMA], - providers: [ - { - provide: NG_VALUE_ACCESSOR, - multi: true, - useExisting: forwardRef(() => GoabxInput), - }, - ], -}) -export class GoabxInput extends GoabControlValueAccessor implements OnInit { - @Input() type?: GoabInputType = "text"; - @Input() name?: string; - @Input({ transform: numberAttribute }) debounce?: number; - @Input() autoCapitalize?: GoabInputAutoCapitalize; - @Input() autoComplete?: string; - @Input() placeholder?: string; - @Input() leadingIcon?: GoabIconType; - @Input() trailingIcon?: GoabIconType; - @Input() variant?: string; - @Input({ transform: booleanAttribute }) focused?: boolean; - @Input({ transform: booleanAttribute }) readonly?: boolean; - @Input() width?: string; - @Input() prefix?: string; - @Input() suffix?: string; - @Input() ariaLabel?: string; - @Input({ transform: numberAttribute }) maxLength?: number; - @Input() min?: string | number; - @Input() max?: string | number; - @Input({ transform: numberAttribute }) step?: number; - @Input() ariaLabelledBy?: string; - @Input() trailingIconAriaLabel?: string; - @Input() textAlign?: "left" | "right" = "left"; - @Input() leadingContent!: string | TemplateRef; - @Input() trailingContent!: string | TemplateRef; - @Input() size?: GoabInputSize = "default"; - - @Output() onTrailingIconClick = new EventEmitter(); - @Output() onFocus = new EventEmitter(); - @Output() onBlur = new EventEmitter(); - @Output() onKeyPress = new EventEmitter(); - @Output() onChange = new EventEmitter(); - - isReady = false; - version = "2"; - handleTrailingIconClick = false; - - constructor( - private cdr: ChangeDetectorRef, - renderer: Renderer2, - ) { - super(renderer); - } - ngOnInit() { - // For Angular 20, we need to delay rendering the web component - // to ensure all attributes are properly bound before the component initializes - setTimeout(() => { - this.isReady = true; - this.cdr.detectChanges(); - }, 0); - - this.handleTrailingIconClick = this.onTrailingIconClick.observed; - if (typeof this.value === "number") { - console.warn("For numeric values use goab-input-number."); - } - } - - _onTrailingIconClick(_: Event) { - if (this.handleTrailingIconClick) { - this.onTrailingIconClick.emit(); - } - } - - _onChange(e: Event) { - this.markAsTouched(); - const detail = { ...(e as CustomEvent).detail, event: e }; - this.onChange.emit(detail); - - this.fcChange?.(detail.value); - } - - _onKeyPress(e: Event) { - this.markAsTouched(); - const detail = { ...(e as CustomEvent).detail, event: e }; - this.onKeyPress.emit(detail); - - this.fcTouched?.(); - } - - _onFocus(e: Event) { - this.markAsTouched(); - const detail = { ...(e as CustomEvent).detail, event: e }; - this.onFocus.emit(detail); - } - - _onBlur(e: Event) { - const detail = { ...(e as CustomEvent).detail, event: e }; - this.onBlur.emit(detail); - } - - getLeadingContentAsString(): string { - return this.leadingContent instanceof TemplateRef ? "" : this.leadingContent; - } - - getLeadingContentAsTemplate(): TemplateRef | null { - if (!this.leadingContent) return null; - return this.leadingContent instanceof TemplateRef ? this.leadingContent : null; - } - - getTrailingContentAsString(): string { - return this.trailingContent instanceof TemplateRef ? "" : this.trailingContent; - } - - getTrailingContentAsTemplate(): TemplateRef | null { - if (!this.trailingContent) return null; - return this.trailingContent instanceof TemplateRef ? this.trailingContent : null; - } -} diff --git a/libs/angular-components/src/experimental/link/link.spec.ts b/libs/angular-components/src/experimental/link/link.spec.ts deleted file mode 100644 index faa4de55fb..0000000000 --- a/libs/angular-components/src/experimental/link/link.spec.ts +++ /dev/null @@ -1,69 +0,0 @@ -import { ComponentFixture, TestBed, fakeAsync, tick } from "@angular/core/testing"; -import { GoabxLink } from "./link"; -import { Component, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; -import { GoabIconType, Spacing } from "@abgov/ui-components-common"; -import { By } from "@angular/platform-browser"; - -@Component({ - standalone: true, - imports: [GoabxLink], - template: ` - - Test Link - - `, -}) -class TestLinkComponent { - leadingIcon?: GoabIconType; - trailingIcon?: GoabIconType; - testId?: string; - mt?: Spacing; - mb?: Spacing; - ml?: Spacing; - mr?: Spacing; -} - -describe("GoABLink", () => { - let fixture: ComponentFixture; - let component: TestLinkComponent; - - beforeEach(fakeAsync(() => { - TestBed.configureTestingModule({ - imports: [GoabxLink, TestLinkComponent], - schemas: [CUSTOM_ELEMENTS_SCHEMA], - }).compileComponents(); - - fixture = TestBed.createComponent(TestLinkComponent); - component = fixture.componentInstance; - component.leadingIcon = "add"; - component.trailingIcon = "archive"; - component.testId = "test-id"; - component.mt = "xs" as Spacing; - component.mb = "m" as Spacing; - component.ml = "l" as Spacing; - component.mr = "xl" as Spacing; - - fixture.detectChanges(); - tick(); - fixture.detectChanges(); - })); - - it("should render and set the props correctly", () => { - const linkElement = fixture.debugElement.query(By.css("goa-link")).nativeElement; - expect(linkElement.getAttribute("leadingicon")).toBe("add"); - expect(linkElement.getAttribute("trailingicon")).toBe("archive"); - expect(linkElement.getAttribute("testid")).toBe("test-id"); - expect(linkElement.getAttribute("mt")).toBe("xs"); - expect(linkElement.getAttribute("mb")).toBe("m"); - expect(linkElement.getAttribute("ml")).toBe("l"); - expect(linkElement.getAttribute("mr")).toBe("xl"); - }); -}); diff --git a/libs/angular-components/src/experimental/link/link.ts b/libs/angular-components/src/experimental/link/link.ts deleted file mode 100644 index 76cffb9441..0000000000 --- a/libs/angular-components/src/experimental/link/link.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { - GoabIconType, - GoabLinkColor, - GoabLinkSize, - Spacing, -} from "@abgov/ui-components-common"; -import { - CUSTOM_ELEMENTS_SCHEMA, - Component, - Input, - OnInit, - ChangeDetectorRef, -} from "@angular/core"; -import { CommonModule } from "@angular/common"; - -@Component({ - standalone: true, - selector: "goabx-link", - template: ` - - - - `, - imports: [CommonModule], - schemas: [CUSTOM_ELEMENTS_SCHEMA], -}) -export class GoabxLink implements OnInit { - isReady = false; - @Input() leadingIcon?: GoabIconType; - @Input() trailingIcon?: GoabIconType; - @Input() testId?: string; - @Input() action?: string; - @Input() color?: GoabLinkColor = "interactive"; - @Input() size?: GoabLinkSize = "medium"; - @Input() actionArg?: string; - @Input() actionArgs?: Record; - @Input() mt?: Spacing; - @Input() mb?: Spacing; - @Input() ml?: Spacing; - @Input() mr?: Spacing; - - constructor(private cdr: ChangeDetectorRef) {} - - ngOnInit(): void { - setTimeout(() => { - this.isReady = true; - this.cdr.detectChanges(); - }); - } - - protected readonly JSON = JSON; -} diff --git a/libs/angular-components/src/experimental/modal/modal.spec.ts b/libs/angular-components/src/experimental/modal/modal.spec.ts deleted file mode 100644 index 8877c89c62..0000000000 --- a/libs/angular-components/src/experimental/modal/modal.spec.ts +++ /dev/null @@ -1,87 +0,0 @@ -import { ComponentFixture, TestBed, fakeAsync, tick } from "@angular/core/testing"; -import { GoabxModal } from "./modal"; -import { Component, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; -import { - GoabModalCalloutVariant, - GoabModalRole, - GoabModalTransition, -} from "@abgov/ui-components-common"; -import { By } from "@angular/platform-browser"; - -@Component({ - standalone: true, - imports: [GoabxModal], - template: ` - - -

Heading

-
- - - - {{ content }} -
- `, -}) -class TestModalComponent { - open = true; - maxWidth = "500px"; - callOutVariant = "information" as GoabModalCalloutVariant; - role = "alertdialog" as GoabModalRole; - testId = "testId"; - closable = true; - transition = "fast" as GoabModalTransition; - heading = "Modal Heading"; - actions = "Close"; - content = "Modal Content"; - - onClose() { - /* do nothing */ - } -} - -describe("GoABModal", () => { - let fixture: ComponentFixture; - let component: TestModalComponent; - - beforeEach(fakeAsync(() => { - TestBed.configureTestingModule({ - imports: [TestModalComponent, GoabxModal], - schemas: [CUSTOM_ELEMENTS_SCHEMA], - }).compileComponents(); - - fixture = TestBed.createComponent(TestModalComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - tick(); - fixture.detectChanges(); - })); - - it("should render", () => { - const modal = fixture.debugElement.query(By.css("goa-modal")).nativeElement; - - const actionContent = modal?.querySelector("[slot='actions']"); - expect(actionContent?.querySelector("button")?.textContent).toContain("Close"); - const headingContent = modal?.querySelector("[slot='heading']"); - expect(headingContent?.textContent).toContain("Heading"); - expect(modal?.getAttribute("open")).toBe(`${component.open}`); - expect(modal?.getAttribute("maxwidth")).toBe(component.maxWidth); - expect(modal?.getAttribute("closable")).toBe(`${component.closable}`); - expect(modal?.textContent).toContain(component.content); - expect(modal?.getAttribute("calloutvariant")).toBe(component.callOutVariant); - expect(modal?.getAttribute("testid")).toBe(component.testId); - expect(modal?.getAttribute("transition")).toBe(component.transition); - expect(modal?.getAttribute("role")).toBe(component.role); - }); -}); diff --git a/libs/angular-components/src/experimental/modal/modal.ts b/libs/angular-components/src/experimental/modal/modal.ts deleted file mode 100644 index 565711a289..0000000000 --- a/libs/angular-components/src/experimental/modal/modal.ts +++ /dev/null @@ -1,92 +0,0 @@ -import { - GoabModalCalloutVariant, - GoabModalTransition, -} from "@abgov/ui-components-common"; -import { - CUSTOM_ELEMENTS_SCHEMA, - Component, - EventEmitter, - Input, - Output, - TemplateRef, - booleanAttribute, - OnInit, - ChangeDetectorRef, -} from "@angular/core"; -import { NgTemplateOutlet, CommonModule } from "@angular/common"; - -@Component({ - standalone: true, - selector: "goabx-modal", - imports: [NgTemplateOutlet, CommonModule], - template: ` - -
- -
- - - -
- -
-
- `, - schemas: [CUSTOM_ELEMENTS_SCHEMA], -}) -export class GoabxModal implements OnInit { - isReady = false; - version = "2"; - - constructor(private cdr: ChangeDetectorRef) {} - - ngOnInit(): void { - // For Angular 20, we need to delay rendering the web component - // to ensure all attributes are properly bound before the component initializes - setTimeout(() => { - this.isReady = true; - this.cdr.detectChanges(); - }, 0); - } - - @Input() calloutVariant?: GoabModalCalloutVariant; - @Input({ transform: booleanAttribute }) open?: boolean; - @Input() maxWidth?: string; - @Input() closable = false; - @Input() transition?: GoabModalTransition; - @Input() testId?: string; - /** - * @deprecated The role property is deprecated and will be removed in a future version. - * The modal will always use role="dialog". - */ - @Input() role?: string; - @Input() heading!: string | TemplateRef; - @Input() actions!: TemplateRef; - - @Output() onClose = new EventEmitter(); - - getHeadingAsString(): string { - return this.heading instanceof TemplateRef ? "" : this.heading; - } - - getHeadingAsTemplate(): TemplateRef | null { - if (!this.heading) return null; - return this.heading instanceof TemplateRef ? this.heading : null; - } - - _onClose() { - this.onClose.emit(); - } -} diff --git a/libs/angular-components/src/experimental/notification/notification.spec.ts b/libs/angular-components/src/experimental/notification/notification.spec.ts deleted file mode 100644 index 1fd89d3cf8..0000000000 --- a/libs/angular-components/src/experimental/notification/notification.spec.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { ComponentFixture, TestBed, fakeAsync, tick } from "@angular/core/testing"; -import { GoabxNotification } from "./notification"; -import { Component, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; -import { fireEvent } from "@testing-library/dom"; -import { GoabAriaLiveType, GoabNotificationType } from "@abgov/ui-components-common"; - -@Component({ - standalone: true, - imports: [GoabxNotification], - template: ` - - Information to the user goes in the content - - `, -}) -class TestNotificationComponent { - type = "information" as GoabNotificationType; - ariaLive = "assertive" as GoabAriaLiveType; - maxContentWidth = "100px"; - testId = "testId"; - onDismiss = () => { - /** do something */ - }; -} - -describe("GoABNotification", () => { - let fixture: ComponentFixture; - let component: TestNotificationComponent; - - beforeEach(fakeAsync(() => { - TestBed.configureTestingModule({ - imports: [TestNotificationComponent, GoabxNotification], - schemas: [CUSTOM_ELEMENTS_SCHEMA], - }).compileComponents(); - - fixture = TestBed.createComponent(TestNotificationComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - tick(); - fixture.detectChanges(); - })); - - it("should render notification banner", () => { - const el = fixture.nativeElement.querySelector("goa-notification"); - expect(el).toBeTruthy(); - - expect(el?.getAttribute("type")).toEqual(component.type); - expect(el?.getAttribute("arialive")).toEqual(component.ariaLive); - expect(el?.getAttribute("maxcontentwidth")).toEqual(component.maxContentWidth); - expect(el?.getAttribute("testid")).toEqual(component.testId); - expect(el?.textContent).toContain("Information to the user goes in the content"); - }); - - it("should trigger on notification banner dismiss", () => { - const onDismissSpy = jest.spyOn(component, "onDismiss"); - const el = fixture.nativeElement.querySelector("goa-notification"); - fireEvent(el, new CustomEvent("_dismiss")); - - expect(onDismissSpy).toHaveBeenCalled(); - }); -}); diff --git a/libs/angular-components/src/experimental/notification/notification.ts b/libs/angular-components/src/experimental/notification/notification.ts deleted file mode 100644 index 7ab3380484..0000000000 --- a/libs/angular-components/src/experimental/notification/notification.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { - GoabAriaLiveType, - GoabNotificationEmphasis, - GoabNotificationType, -} from "@abgov/ui-components-common"; -import { - CUSTOM_ELEMENTS_SCHEMA, - Component, - EventEmitter, - Input, - Output, - OnInit, - ChangeDetectorRef, - booleanAttribute, -} from "@angular/core"; -import { CommonModule } from "@angular/common"; - -@Component({ - standalone: true, - selector: "goabx-notification", - template: ` - - - - `, - imports: [CommonModule], - schemas: [CUSTOM_ELEMENTS_SCHEMA], -}) -export class GoabxNotification implements OnInit { - isReady = false; - version = "2"; - @Input() type?: GoabNotificationType = "information"; - @Input() ariaLive?: GoabAriaLiveType; - @Input() maxContentWidth?: string; - @Input() emphasis?: GoabNotificationEmphasis = "high"; - @Input({ transform: booleanAttribute }) compact?: boolean; - @Input() testId?: string; - - constructor(private cdr: ChangeDetectorRef) {} - - ngOnInit(): void { - setTimeout(() => { - this.isReady = true; - this.cdr.detectChanges(); - }); - } - - @Output() onDismiss = new EventEmitter(); - - _onDismiss() { - this.onDismiss.emit(); - } -} diff --git a/libs/angular-components/src/experimental/pagination/pagination.spec.ts b/libs/angular-components/src/experimental/pagination/pagination.spec.ts deleted file mode 100644 index 78a782b9f2..0000000000 --- a/libs/angular-components/src/experimental/pagination/pagination.spec.ts +++ /dev/null @@ -1,73 +0,0 @@ -import { ComponentFixture, TestBed, fakeAsync, tick } from "@angular/core/testing"; -import { GoabxPagination } from "./pagination"; -import { Component, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; -import { GoabPaginationOnChangeDetail, GoabPaginationVariant, Spacing } from "@abgov/ui-components-common"; - -@Component({ - standalone: true, - imports: [GoabxPagination], - template: ` - - - ` -}) -class TestPaginationComponent { - itemCount = 100; - pageNumber = 1; - perPageCount = 20; - variant = "all" as GoabPaginationVariant; - mt = "s" as Spacing; - mb = "m" as Spacing; - ml = "l" as Spacing; - mr = "xl" as Spacing; - - onChange = (event: GoabPaginationOnChangeDetail) => {/** do nothing **/}; -} - -describe("GoABPagination", () => { - let fixture: ComponentFixture; - let component: TestPaginationComponent; - - beforeEach(fakeAsync(() => { - TestBed.configureTestingModule({ - imports: [GoabxPagination, TestPaginationComponent], - schemas: [CUSTOM_ELEMENTS_SCHEMA] - }).compileComponents(); - - fixture = TestBed.createComponent(TestPaginationComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - tick(); - fixture.detectChanges(); - })); - - it("should render successfully", () => { - const el = fixture.nativeElement.querySelector("goa-pagination"); - - expect(el.getAttribute("itemcount")).toBe(`${component.itemCount}`); - expect(el.getAttribute("pagenumber")).toBe(`${component.pageNumber}`); - expect(el.getAttribute("perpagecount")).toBe(`${component.perPageCount}`); - expect(el.getAttribute("variant")).toBe(component.variant); - expect(el.getAttribute("mt")).toBe(component.mt); - expect(el.getAttribute("mb")).toBe(component.mb); - expect(el.getAttribute("ml")).toBe(component.ml); - expect(el.getAttribute("mr")).toBe( component.mr); - }); - - it("should handle the onChange event", () => { - const onChangeSpy = jest.spyOn(component, "onChange"); - - const el = fixture.nativeElement.querySelector("goa-pagination"); - el.dispatchEvent(new CustomEvent("_change", { detail: { page: 2 } })); - - expect(onChangeSpy).toHaveBeenCalledWith({ page: 2 }); - }); -}); diff --git a/libs/angular-components/src/experimental/pagination/pagination.ts b/libs/angular-components/src/experimental/pagination/pagination.ts deleted file mode 100644 index 372622aa1c..0000000000 --- a/libs/angular-components/src/experimental/pagination/pagination.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { - GoabPaginationOnChangeDetail, - GoabPaginationVariant, - Spacing, -} from "@abgov/ui-components-common"; -import { - CUSTOM_ELEMENTS_SCHEMA, - Component, - EventEmitter, - Input, - Output, - OnInit, - ChangeDetectorRef, -} from "@angular/core"; -import { CommonModule } from "@angular/common"; -import { GoabBaseComponent } from "../base.component"; - -@Component({ - standalone: true, - selector: "goabx-pagination", - template: ` - - - `, - imports: [CommonModule], - schemas: [CUSTOM_ELEMENTS_SCHEMA], -}) -export class GoabxPagination extends GoabBaseComponent implements OnInit { - isReady = false; - version = "2"; - @Input({ required: true }) itemCount!: number; - @Input({ required: true }) pageNumber!: number; - @Input() perPageCount?: number = 10; - @Input() variant?: GoabPaginationVariant = "all"; - - constructor(private cdr: ChangeDetectorRef) { - super(); - } - - ngOnInit(): void { - setTimeout(() => { - this.isReady = true; - this.cdr.detectChanges(); - }); - } - - @Output() onChange = new EventEmitter(); - - _onChange(e: Event) { - const detail = (e as CustomEvent).detail; - this.onChange.emit(detail); - } -} diff --git a/libs/angular-components/src/experimental/radio-group/radio-group.spec.ts b/libs/angular-components/src/experimental/radio-group/radio-group.spec.ts deleted file mode 100644 index 9fc7169f2b..0000000000 --- a/libs/angular-components/src/experimental/radio-group/radio-group.spec.ts +++ /dev/null @@ -1,243 +0,0 @@ -import { ComponentFixture, TestBed, fakeAsync, tick } from "@angular/core/testing"; -import { GoabxRadioGroup } from "./radio-group"; -import { Component, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; -import { - GoabRadioGroupOnChangeDetail, - GoabRadioGroupOrientation, - Spacing, -} from "@abgov/ui-components-common"; -import { GoabxRadioItem } from "../radio-item/radio-item"; -import { fireEvent } from "@testing-library/dom"; -import { By } from "@angular/platform-browser"; -import { CommonModule } from "@angular/common"; - -interface RadioOption { - text: string; - value: string; - description?: string; - isDescriptionSlot?: boolean; -} - -@Component({ - standalone: true, - imports: [GoabxRadioGroup, GoabxRadioItem, CommonModule], - template: ` - - - {{ option.text }} -
- {{ option.description }} -
-
-
- `, -}) -class TestRadioGroupComponent { - name?: string; - value?: string; - disabled?: boolean; - orientation?: GoabRadioGroupOrientation; - error?: boolean; - ariaLabel?: string; - testId?: string; - mt?: Spacing; - mb?: Spacing; - ml?: Spacing; - mr?: Spacing; - - options: RadioOption[] = []; - - onChange(event: GoabRadioGroupOnChangeDetail) { - /** do nothing **/ - } -} - -describe("GoABRadioGroup", () => { - let fixture: ComponentFixture; - let component: TestRadioGroupComponent; - - beforeEach(fakeAsync(() => { - TestBed.configureTestingModule({ - imports: [TestRadioGroupComponent, GoabxRadioGroup, GoabxRadioItem], - schemas: [CUSTOM_ELEMENTS_SCHEMA], - }).compileComponents(); - - fixture = TestBed.createComponent(TestRadioGroupComponent); - component = fixture.componentInstance; - - // Assign values - component.name = "fruits"; - component.ariaLabel = "Fruit Radio Group"; - component.testId = "foo"; - component.value = "bananas"; - component.orientation = "horizontal"; - component.disabled = true; - component.error = true; - component.mt = "m"; - component.mb = "s"; - component.mr = "xl"; - component.ml = "2xl"; - - // Basic options - component.options = [ - { text: "Apples", value: "apples" }, - { text: "Oranges", value: "oranges", description: "Oranges are orange" }, - { text: "Bananas", value: "bananas" }, - ]; - - fixture.detectChanges(); - tick(); - fixture.detectChanges(); - })); - - it("should render", () => { - const el = fixture.nativeElement.querySelector("goa-radio-group"); - expect(el).toBeTruthy(); - - expect(el?.getAttribute("arialabel")).toBe(component.ariaLabel); - expect(el?.getAttribute("testid")).toBe(component.testId); - expect(el?.getAttribute("error")).toBe(`${component.error}`); - expect(el?.getAttribute("mb")).toBe(component.mb); - expect(el?.getAttribute("ml")).toBe(component.ml); - expect(el?.getAttribute("mr")).toBe(component.mr); - expect(el?.getAttribute("mt")).toBe(component.mt); - expect(el?.getAttribute("orientation")).toBe(component.orientation); - expect(el?.getAttribute("value")).toBe(component.value); - - const radioItems = el?.querySelectorAll("goa-radio-item"); - expect(radioItems.length).toBe(component.options?.length); - component.options?.forEach((option, index) => { - expect(radioItems[index].getAttribute("checked")).toBe( - `${option.value === component.value}`, - ); - expect(radioItems[index].getAttribute("label")).toBe(option.text); - expect(radioItems[index].getAttribute("name")).toBe(component.name); - expect(radioItems[index].getAttribute("value")).toBe(option.value); - }); - }); - - it("should render description", () => { - component.options.forEach((option, index) => { - component.options[index].description = - `Description for ${component.options[index].text}`; - }); - component.options[0].isDescriptionSlot = true; - fixture.detectChanges(); - - const radioGroup = fixture.nativeElement.querySelector("goa-radio-group"); - expect(radioGroup).toBeTruthy(); - const radioItems = radioGroup?.querySelectorAll("goa-radio-item"); - expect(radioItems.length).toBe(component.options.length); - - // Slot description - expect(radioItems[0].querySelector("div[slot='description']")?.innerHTML).toContain( - `Description for ${component.options[0].text}`, - ); - - // attribute description - expect(radioItems[1].getAttribute("description")).toBe( - `Description for ${component.options[1].text}`, - ); - expect(radioItems[2].getAttribute("description")).toBe( - `Description for ${component.options[2].text}`, - ); - }); - - it("should dispatch onChange", () => { - const onChange = jest.spyOn(component, "onChange"); - const changeEvent = new Event("change"); - - const radioGroup = fixture.nativeElement.querySelector("goa-radio-group"); - fireEvent( - radioGroup, - new CustomEvent("_change", { - detail: { - name: component.name, - value: component.options[0].value, - event: changeEvent, - }, - }), - ); - - expect(onChange).toBeCalledWith( - expect.objectContaining({ - name: component.name, - value: component.options[0].value, - event: expect.any(Event), - }), - ); - }); - - describe("writeValue", () => { - it("should set value attribute when writeValue is called", () => { - const radioGroupComponent = fixture.debugElement.query( - By.css("goabx-radio-group"), - ).componentInstance; - const radioGroupElement = fixture.nativeElement.querySelector("goa-radio-group"); - - radioGroupComponent.writeValue("apples"); - expect(radioGroupElement.getAttribute("value")).toBe("apples"); - - radioGroupComponent.writeValue("oranges"); - expect(radioGroupElement.getAttribute("value")).toBe("oranges"); - }); - - it("should set value attribute to empty string when writeValue is called with null or empty", () => { - const radioGroupComponent = fixture.debugElement.query( - By.css("goabx-radio-group"), - ).componentInstance; - const radioGroupElement = fixture.nativeElement.querySelector("goa-radio-group"); - - // First set a value - radioGroupComponent.writeValue("bananas"); - expect(radioGroupElement.getAttribute("value")).toBe("bananas"); - - // Then clear it with null - radioGroupComponent.writeValue(null); - expect(radioGroupElement.getAttribute("value")).toBe(""); - - // Set again and clear with undefined - radioGroupComponent.writeValue("apples"); - radioGroupComponent.writeValue(undefined); - expect(radioGroupElement.getAttribute("value")).toBe(""); - - // Set again and clear with empty string - radioGroupComponent.writeValue("oranges"); - radioGroupComponent.writeValue(""); - expect(radioGroupElement.getAttribute("value")).toBe(""); - }); - - it("should update component value property", () => { - const radioGroupComponent = fixture.debugElement.query( - By.css("goabx-radio-group"), - ).componentInstance; - - radioGroupComponent.writeValue("apples"); - expect(radioGroupComponent.value).toBe("apples"); - - radioGroupComponent.writeValue(null); - expect(radioGroupComponent.value).toBe(null); - }); - }); -}); diff --git a/libs/angular-components/src/experimental/radio-group/radio-group.ts b/libs/angular-components/src/experimental/radio-group/radio-group.ts deleted file mode 100644 index ccd3e95181..0000000000 --- a/libs/angular-components/src/experimental/radio-group/radio-group.ts +++ /dev/null @@ -1,88 +0,0 @@ -import { - GoabRadioGroupOnChangeDetail, - GoabRadioGroupOrientation, - GoabRadioGroupSize, -} from "@abgov/ui-components-common"; -import { - CUSTOM_ELEMENTS_SCHEMA, - Component, - EventEmitter, - Input, - Output, - forwardRef, - OnInit, - ChangeDetectorRef, - Renderer2, -} from "@angular/core"; -import { NG_VALUE_ACCESSOR } from "@angular/forms"; -import { CommonModule } from "@angular/common"; -import { GoabControlValueAccessor } from "../base.component"; - -@Component({ - standalone: true, - selector: "goabx-radio-group", - template: ` - - - - `, - imports: [CommonModule], - schemas: [CUSTOM_ELEMENTS_SCHEMA], - providers: [ - { - provide: NG_VALUE_ACCESSOR, - multi: true, - useExisting: forwardRef(() => GoabxRadioGroup), - }, - ], -}) -export class GoabxRadioGroup extends GoabControlValueAccessor implements OnInit { - isReady = false; - version = "2"; - @Input() name?: string; - @Input() orientation?: GoabRadioGroupOrientation; - @Input() ariaLabel?: string; - @Input() size?: GoabRadioGroupSize = "default"; - - constructor( - private cdr: ChangeDetectorRef, - renderer: Renderer2, - ) { - super(renderer); - } - - ngOnInit(): void { - setTimeout(() => { - this.isReady = true; - this.cdr.detectChanges(); - }); - } - - @Output() onChange = new EventEmitter(); - - _onChange(e: Event) { - const detail = { ...(e as CustomEvent).detail, event: e }; - this.markAsTouched(); - this.onChange.emit(detail); - - this.fcChange?.(detail.value); - } -} diff --git a/libs/angular-components/src/experimental/radio-item/radio-item.spec.ts b/libs/angular-components/src/experimental/radio-item/radio-item.spec.ts deleted file mode 100644 index 3189d88ff6..0000000000 --- a/libs/angular-components/src/experimental/radio-item/radio-item.spec.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { ComponentFixture, TestBed, fakeAsync, tick } from "@angular/core/testing"; -import { Component, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; -import { GoabxRadioItem } from "./radio-item"; - -@Component({ - standalone: true, - imports: [GoabxRadioItem], - template: ` - - - A reveal slot - - - `, -}) -class TestRadioItemWithRevealSlotComponent { } - -describe("Radio item with reveal slot", () => { - let fixture: ComponentFixture; - - beforeEach(fakeAsync(() => { - TestBed.configureTestingModule({ - imports: [GoabxRadioItem, TestRadioItemWithRevealSlotComponent], - schemas: [CUSTOM_ELEMENTS_SCHEMA], - }).compileComponents(); - - fixture = TestBed.createComponent(TestRadioItemWithRevealSlotComponent); - fixture.detectChanges(); - tick(); - fixture.detectChanges(); - })); - - it("should render with slot reveal", () => { - const radioItemElement = fixture.debugElement.nativeElement.querySelector("goa-radio-item"); - const slotReveal = radioItemElement.querySelector("[slot='reveal']"); - expect(slotReveal.textContent).toContain("A reveal slot"); - }); - - it("should pass the revealAriaLabel property to the web component", () => { - const radioItemElement = fixture.debugElement.nativeElement.querySelector("goa-radio-item"); - expect(radioItemElement.getAttribute("revealarialabel")).toBe("Screen reader announcement for radio reveal content"); - }); -}); diff --git a/libs/angular-components/src/experimental/radio-item/radio-item.ts b/libs/angular-components/src/experimental/radio-item/radio-item.ts deleted file mode 100644 index b288f3ed6a..0000000000 --- a/libs/angular-components/src/experimental/radio-item/radio-item.ts +++ /dev/null @@ -1,88 +0,0 @@ -import { - CUSTOM_ELEMENTS_SCHEMA, - Component, - Input, - TemplateRef, - booleanAttribute, - OnInit, - ChangeDetectorRef, -} from "@angular/core"; -import { NgTemplateOutlet, CommonModule } from "@angular/common"; -import { GoabBaseComponent } from "../base.component"; - -@Component({ - standalone: true, - selector: "goabx-radio-item", - template: ` - - -
- -
-
- -
-
- `, - imports: [NgTemplateOutlet, CommonModule], - schemas: [CUSTOM_ELEMENTS_SCHEMA], -}) -export class GoabxRadioItem extends GoabBaseComponent { - @Input() value?: string; - @Input() label?: string; - @Input() name?: string; - @Input() description!: string | TemplateRef; - @Input() reveal?: TemplateRef; - @Input() ariaLabel?: string; - @Input() revealAriaLabel?: string; - @Input({ transform: booleanAttribute }) disabled?: boolean; - @Input({ transform: booleanAttribute }) checked?: boolean; - @Input({ transform: booleanAttribute }) error?: boolean; - @Input() maxWidth?: string; - @Input({ transform: booleanAttribute }) compact?: boolean; - - isReady = false; - version = "2"; - - constructor(private cdr: ChangeDetectorRef) { - super(); - } - - ngOnInit(): void { - // For Angular 20, we need to delay rendering the web component - // to ensure all attributes are properly bound before the component initializes - setTimeout(() => { - this.isReady = true; - this.cdr.detectChanges(); - }, 0); - } - - getDescriptionAsString(): string { - return !this.description || this.description instanceof TemplateRef - ? "" - : this.description; - } - - getDescriptionAsTemplate(): TemplateRef | null { - if (!this.description) return null; - return this.description instanceof TemplateRef ? this.description : null; - } -} diff --git a/libs/angular-components/src/experimental/side-menu-group/side-menu-group.spec.ts b/libs/angular-components/src/experimental/side-menu-group/side-menu-group.spec.ts deleted file mode 100644 index a24c187787..0000000000 --- a/libs/angular-components/src/experimental/side-menu-group/side-menu-group.spec.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { ComponentFixture, TestBed, fakeAsync, tick } from "@angular/core/testing"; -import { GoabxSideMenuGroup } from "./side-menu-group"; -import { Component } from "@angular/core"; - -@Component({ - standalone: true, - imports: [GoabxSideMenuGroup], - template: ` - - Link - - `, -}) -class TestSideMenuGroupComponent { - heading = "some header"; - testId = "foo"; -} - -describe("GoABSideMenuGroup", () => { - let fixture: ComponentFixture; - let component: TestSideMenuGroupComponent; - - beforeEach(fakeAsync(() => { - TestBed.configureTestingModule({ - imports: [GoabxSideMenuGroup, TestSideMenuGroupComponent], - }).compileComponents(); - - fixture = TestBed.createComponent(TestSideMenuGroupComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - tick(); - fixture.detectChanges(); - })); - - it("should render", () => { - const el = fixture.nativeElement.querySelector("goa-side-menu-group"); - expect(el?.getAttribute("heading")).toBe(component.heading); - expect(el?.getAttribute("testid")).toBe(component.testId); - expect(el?.querySelector("a")?.textContent).toContain("Link"); - }); -}); diff --git a/libs/angular-components/src/experimental/side-menu-group/side-menu-group.ts b/libs/angular-components/src/experimental/side-menu-group/side-menu-group.ts deleted file mode 100644 index 467d891ae8..0000000000 --- a/libs/angular-components/src/experimental/side-menu-group/side-menu-group.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { CUSTOM_ELEMENTS_SCHEMA, Component, Input, OnInit, ChangeDetectorRef } from "@angular/core"; -import { CommonModule } from "@angular/common"; -import { GoabIconType } from "@abgov/ui-components-common"; -import { GoabBaseComponent } from "../base.component"; - -@Component({ - standalone: true, - selector: "goabx-side-menu-group", - template: ` - - - - `, - imports: [CommonModule], - schemas: [CUSTOM_ELEMENTS_SCHEMA], -}) -export class GoabxSideMenuGroup extends GoabBaseComponent implements OnInit { - isReady = false; - version = "2"; - @Input({ required: true }) heading!: string; - @Input() icon?: GoabIconType; - - constructor(private cdr: ChangeDetectorRef) { - super(); - } - - ngOnInit(): void { - setTimeout(() => { - this.isReady = true; - this.cdr.detectChanges(); - }); - } -} diff --git a/libs/angular-components/src/experimental/side-menu-heading/side-menu-heading.spec.ts b/libs/angular-components/src/experimental/side-menu-heading/side-menu-heading.spec.ts deleted file mode 100644 index 080ccdc96e..0000000000 --- a/libs/angular-components/src/experimental/side-menu-heading/side-menu-heading.spec.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { ComponentFixture, TestBed, fakeAsync, tick } from "@angular/core/testing"; -import { GoabxSideMenuHeading } from "./side-menu-heading"; -import { Component, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; -import { GoabxBadge } from "../badge/badge"; - -@Component({ - standalone: true, - imports: [GoabxSideMenuHeading, GoabxBadge], - template: ` - Heading - - - `, -}) -class TestSideMenuHeadingComponent { - /** do nothing **/ -} - -describe("GoABSideMenuHeading", () => { - let fixture: ComponentFixture; - beforeEach(fakeAsync(() => { - TestBed.configureTestingModule({ - imports: [GoabxSideMenuHeading, GoabxBadge, TestSideMenuHeadingComponent], - schemas: [CUSTOM_ELEMENTS_SCHEMA] - }).compileComponents(); - - fixture = TestBed.createComponent(TestSideMenuHeadingComponent); - fixture.detectChanges(); - tick(); - fixture.detectChanges(); - })); - - it("should render", () => { - const el = fixture.nativeElement.querySelector("goa-side-menu-heading"); - expect(el?.getAttribute("icon")).toBe("home"); - expect(el?.getAttribute("testid")).toBe("foo"); - expect(el?.textContent).toContain("Heading"); - expect(el?.querySelector("[slot='meta']")?.innerHTML).toContain("details"); - }) -}) diff --git a/libs/angular-components/src/experimental/side-menu-heading/side-menu-heading.ts b/libs/angular-components/src/experimental/side-menu-heading/side-menu-heading.ts deleted file mode 100644 index b7120d1303..0000000000 --- a/libs/angular-components/src/experimental/side-menu-heading/side-menu-heading.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { GoabIconType } from "@abgov/ui-components-common"; -import { CUSTOM_ELEMENTS_SCHEMA, Component, Input, TemplateRef, OnInit, ChangeDetectorRef } from "@angular/core"; -import { NgTemplateOutlet, CommonModule } from "@angular/common"; - -@Component({ - standalone: true, - selector: "goabx-side-menu-heading", - imports: [NgTemplateOutlet, CommonModule], - template: ` - - - - - - - `, - schemas: [CUSTOM_ELEMENTS_SCHEMA], -}) -export class GoabxSideMenuHeading implements OnInit { - isReady = false; - version = "2"; - @Input() icon!: GoabIconType; - @Input() testId?: string; - @Input() meta!: TemplateRef; - - constructor(private cdr: ChangeDetectorRef) {} - - ngOnInit(): void { - setTimeout(() => { - this.isReady = true; - this.cdr.detectChanges(); - }); - } -} diff --git a/libs/angular-components/src/experimental/side-menu/side-menu.spec.ts b/libs/angular-components/src/experimental/side-menu/side-menu.spec.ts deleted file mode 100644 index db3b8e61e5..0000000000 --- a/libs/angular-components/src/experimental/side-menu/side-menu.spec.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { ComponentFixture, TestBed, fakeAsync, tick } from "@angular/core/testing"; -import { GoabxSideMenu } from "./side-menu"; -import { Component, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; - -@Component({ - standalone: true, - imports: [GoabxSideMenu], - template: ` - - Link - - `, -}) -class TestSideMenuComponent { - /** do nothing **/ -} - -describe("GoABSideMenu", () => { - let fixture: ComponentFixture; - - beforeEach(fakeAsync(() => { - TestBed.configureTestingModule({ - imports: [GoabxSideMenu, TestSideMenuComponent], - schemas: [CUSTOM_ELEMENTS_SCHEMA], - }).compileComponents(); - - fixture = TestBed.createComponent(TestSideMenuComponent); - - fixture.detectChanges(); - tick(); - fixture.detectChanges(); - })); - - it("should render", () => { - const el = fixture.nativeElement.querySelector("goa-side-menu"); - expect(el?.getAttribute("testid")).toBe("foo"); - expect(el?.querySelector("a")?.textContent).toBe("Link"); - }); -}); diff --git a/libs/angular-components/src/experimental/side-menu/side-menu.ts b/libs/angular-components/src/experimental/side-menu/side-menu.ts deleted file mode 100644 index 350f4f7908..0000000000 --- a/libs/angular-components/src/experimental/side-menu/side-menu.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { CUSTOM_ELEMENTS_SCHEMA, Component, Input, OnInit, ChangeDetectorRef } from "@angular/core"; -import { CommonModule } from "@angular/common"; - -@Component({ - standalone: true, - selector: "goabx-side-menu", - template: ` - - - - `, - imports: [CommonModule], - schemas: [CUSTOM_ELEMENTS_SCHEMA] -}) -export class GoabxSideMenu implements OnInit { - isReady = false; - version = "2"; - @Input() testId?: string; - - constructor(private cdr: ChangeDetectorRef) {} - - ngOnInit(): void { - setTimeout(() => { - this.isReady = true; - this.cdr.detectChanges(); - }); - } -} diff --git a/libs/angular-components/src/experimental/table-sort-header/table-sort-header.spec.ts b/libs/angular-components/src/experimental/table-sort-header/table-sort-header.spec.ts deleted file mode 100644 index 91463dee52..0000000000 --- a/libs/angular-components/src/experimental/table-sort-header/table-sort-header.spec.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { Component, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; -import { ComponentFixture, TestBed, fakeAsync, tick } from "@angular/core/testing"; -import { GoabxTableSortHeader } from "./table-sort-header"; - -@Component({ - standalone: true, - imports: [GoabxTableSortHeader], - template: ` - - - First name and really long header - - - `, -}) -class TestTableSortHeaderComponent { - /** do nothing **/ -} - -describe("GoABTableSortHeader", () => { - let fixture: ComponentFixture; - - beforeEach(fakeAsync(() => { - TestBed.configureTestingModule({ - imports: [GoabxTableSortHeader, TestTableSortHeaderComponent], - schemas: [CUSTOM_ELEMENTS_SCHEMA], - }).compileComponents(); - - fixture = TestBed.createComponent(TestTableSortHeaderComponent); - fixture.detectChanges(); - tick(); - fixture.detectChanges(); - })); - - it("should render", () => { - const el = fixture.nativeElement.querySelector("goa-table-sort-header"); - expect(el?.getAttribute("direction")).toBe("asc"); - expect(el?.getAttribute("name")).toBe("firstName"); - expect(el?.textContent).toContain("First name and really long header"); - }); -}); diff --git a/libs/angular-components/src/experimental/table-sort-header/table-sort-header.ts b/libs/angular-components/src/experimental/table-sort-header/table-sort-header.ts deleted file mode 100644 index 70b4a83a31..0000000000 --- a/libs/angular-components/src/experimental/table-sort-header/table-sort-header.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { GoabTableSortDirection } from "@abgov/ui-components-common"; -import { - CUSTOM_ELEMENTS_SCHEMA, - Component, - Input, - OnInit, - ChangeDetectorRef, -} from "@angular/core"; -import { CommonModule } from "@angular/common"; - -@Component({ - standalone: true, - selector: "goabx-table-sort-header", - template: ` - - - - `, - imports: [CommonModule], - schemas: [CUSTOM_ELEMENTS_SCHEMA], -}) -export class GoabxTableSortHeader implements OnInit { - isReady = false; - @Input() name?: string; - @Input() direction?: GoabTableSortDirection = "none"; - - constructor(private cdr: ChangeDetectorRef) {} - - ngOnInit(): void { - setTimeout(() => { - this.isReady = true; - this.cdr.detectChanges(); - }); - } -} diff --git a/libs/angular-components/src/experimental/table/table.spec.ts b/libs/angular-components/src/experimental/table/table.spec.ts deleted file mode 100644 index 11ce0650b3..0000000000 --- a/libs/angular-components/src/experimental/table/table.spec.ts +++ /dev/null @@ -1,107 +0,0 @@ -import { ComponentFixture, TestBed, fakeAsync, tick } from "@angular/core/testing"; -import { GoabxTable } from "./table"; -import { Component, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; -import { - GoabTableOnSortDetail, - GoabTableVariant, - Spacing, -} from "@abgov/ui-components-common"; -import { fireEvent } from "@testing-library/dom"; - -@Component({ - standalone: true, - imports: [GoabxTable], - template: ` - - - - Column 1 - - - - - Row 1 - - - - `, -}) -class TestTableComponent { - width?: string; - variant?: GoabTableVariant; - testId?: string; - mt?: Spacing; - mb?: Spacing; - mr?: Spacing; - ml?: Spacing; - - onSort(event: GoabTableOnSortDetail) { - /** do nothing **/ - } -} - -describe("GoabxTable", () => { - let fixture: ComponentFixture; - let component: TestTableComponent; - - beforeEach(fakeAsync(() => { - TestBed.configureTestingModule({ - imports: [GoabxTable, TestTableComponent], - schemas: [CUSTOM_ELEMENTS_SCHEMA], - }).compileComponents(); - - fixture = TestBed.createComponent(TestTableComponent); - component = fixture.componentInstance; - - component.width = "200px"; - component.variant = "relaxed"; - component.testId = "foo"; - component.mt = "s" as Spacing; - component.mb = "xl" as Spacing; - component.ml = "m" as Spacing; - component.mr = "2xl" as Spacing; - - fixture.detectChanges(); - tick(); - fixture.detectChanges(); - })); - - it("should render", () => { - const el = fixture.nativeElement.querySelector("goa-table"); - expect(el?.getAttribute("width")).toBe(component.width); - expect(el?.getAttribute("variant")).toBe(component.variant); - expect(el?.getAttribute("testid")).toBe(component.testId); - expect(el?.getAttribute("mt")).toBe(component.mt); - expect(el?.getAttribute("mb")).toBe(component.mb); - expect(el?.getAttribute("mr")).toBe(component.mr); - expect(el?.getAttribute("ml")).toBe(component.ml); - // Check table - const table = el?.querySelector("table"); - expect(table).toBeTruthy(); - expect(table.getAttribute("style")).toContain("width: 100%"); - expect(table.querySelector("thead")?.textContent).toContain("Column 1"); - expect(table.querySelector("tbody")?.textContent).toContain("Row 1"); - }); - - it("should dispatch _sort", () => { - const onSort = jest.spyOn(component, "onSort"); - const el = fixture.nativeElement.querySelector("goa-table"); - fireEvent( - el, - new CustomEvent("_sort", { - detail: { sortBy: "column1", sortDir: 1 }, - }), - ); - - expect(onSort).toHaveBeenCalledWith({ sortBy: "column1", sortDir: 1 }); - }); -}); diff --git a/libs/angular-components/src/experimental/table/table.ts b/libs/angular-components/src/experimental/table/table.ts deleted file mode 100644 index e57e05cb10..0000000000 --- a/libs/angular-components/src/experimental/table/table.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { GoabTableOnSortDetail, GoabTableVariant } from "@abgov/ui-components-common"; -import { - CUSTOM_ELEMENTS_SCHEMA, - Component, - EventEmitter, - Input, - Output, - OnInit, - ChangeDetectorRef, - booleanAttribute, -} from "@angular/core"; -import { CommonModule } from "@angular/common"; -import { GoabBaseComponent } from "../base.component"; - -@Component({ - standalone: true, - selector: "goabx-table", - template: ` - - - -
-
- `, - imports: [CommonModule], - schemas: [CUSTOM_ELEMENTS_SCHEMA], -}) -export class GoabxTable extends GoabBaseComponent implements OnInit { - isReady = false; - version = "2"; - @Input() width?: string; - @Input() variant?: GoabTableVariant; - @Input({ transform: booleanAttribute }) striped?: boolean; - - constructor(private cdr: ChangeDetectorRef) { - super(); - } - - ngOnInit(): void { - setTimeout(() => { - this.isReady = true; - this.cdr.detectChanges(); - }); - } - - @Output() onSort = new EventEmitter(); - - _onSort(e: Event) { - const detail = (e as CustomEvent).detail; - this.onSort.emit(detail); - } -} diff --git a/libs/angular-components/src/experimental/tabs/tabs.spec.ts b/libs/angular-components/src/experimental/tabs/tabs.spec.ts deleted file mode 100644 index 2351c05491..0000000000 --- a/libs/angular-components/src/experimental/tabs/tabs.spec.ts +++ /dev/null @@ -1,62 +0,0 @@ -import { ComponentFixture, TestBed, fakeAsync, tick } from "@angular/core/testing"; -import { GoabxTabs } from "./tabs"; -import { GoabTab } from "../../lib/components/tab/tab"; -import { Component, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; -import { GoabTabsOnChangeDetail } from "@abgov/ui-components-common"; -import { fireEvent } from "@testing-library/dom"; - -@Component({ - standalone: true, - imports: [GoabxTabs, GoabTab], - template: ` - - Tab content - - `, -}) -class TestTabsComponent { - /** do nothing **/ - onChange(event: GoabTabsOnChangeDetail) { - /** do nothing **/ - } -} - -describe("GoABTabs", () => { - let fixture: ComponentFixture; - let component: TestTabsComponent; - - beforeEach(fakeAsync(() => { - TestBed.configureTestingModule({ - imports: [GoabxTabs, TestTabsComponent], - schemas: [CUSTOM_ELEMENTS_SCHEMA], - }).compileComponents(); - - fixture = TestBed.createComponent(TestTabsComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - tick(); - fixture.detectChanges(); - })); - - it("should render", () => { - const el = fixture.nativeElement.querySelector("goa-tabs"); - expect(el?.getAttribute("initialtab")).toBe("1"); - expect(el?.getAttribute("testid")).toBe("foo"); - expect(el?.innerHTML).toContain("Profile"); - expect(el?.textContent).toContain("Tab content"); - }); - - it("should dispatch _onChange", () => { - const onChange = jest.spyOn(component, "onChange"); - - const el = fixture.nativeElement.querySelector("goa-tabs"); - fireEvent( - el, - new CustomEvent("_change", { - detail: { tab: 2 }, - }), - ); - - expect(onChange).toHaveBeenCalledWith({ tab: 2 }); - }); -}); diff --git a/libs/angular-components/src/experimental/tabs/tabs.ts b/libs/angular-components/src/experimental/tabs/tabs.ts deleted file mode 100644 index 3e491c83a3..0000000000 --- a/libs/angular-components/src/experimental/tabs/tabs.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { - CUSTOM_ELEMENTS_SCHEMA, - Component, - Input, - Output, - EventEmitter, - numberAttribute, - OnInit, - ChangeDetectorRef, -} from "@angular/core"; -import { CommonModule } from "@angular/common"; -import { GoabTabsOnChangeDetail, GoabTabsVariant } from "@abgov/ui-components-common"; - -@Component({ - standalone: true, - selector: "goabx-tabs", - template: ` - - - - `, - imports: [CommonModule], - schemas: [CUSTOM_ELEMENTS_SCHEMA], -}) -export class GoabxTabs implements OnInit { - isReady = false; - version = "2"; - @Input({ transform: numberAttribute }) initialTab?: number; - @Input() testId?: string; - @Input() variant?: GoabTabsVariant; - - constructor(private cdr: ChangeDetectorRef) {} - - ngOnInit(): void { - setTimeout(() => { - this.isReady = true; - this.cdr.detectChanges(); - }); - } - - @Output() onChange = new EventEmitter(); - - _onChange(e: Event) { - const detail = (e as CustomEvent).detail; - this.onChange.emit(detail); - } -} diff --git a/libs/angular-components/src/experimental/textarea/textarea.spec.ts b/libs/angular-components/src/experimental/textarea/textarea.spec.ts deleted file mode 100644 index f79f3c5f95..0000000000 --- a/libs/angular-components/src/experimental/textarea/textarea.spec.ts +++ /dev/null @@ -1,182 +0,0 @@ -import { ComponentFixture, TestBed, fakeAsync, tick } from "@angular/core/testing"; -import { GoabxTextArea } from "./textarea"; -import { Component, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; -import { GoabTextAreaCountBy, Spacing } from "@abgov/ui-components-common"; -import { fireEvent } from "@testing-library/dom"; -import { By } from "@angular/platform-browser"; - -@Component({ - standalone: true, - imports: [GoabxTextArea], - template: ` - - `, -}) -class TestTextareaComponent { - name = "textarea-name"; - value?: string; - id?: string; - placeholder?: string; - rows?: number; - error?: boolean; - disabled?: boolean; - width?: string; - testId?: string; - ariaLabel?: string; - countBy?: GoabTextAreaCountBy; - maxCount?: number; - mt?: Spacing; - mb?: Spacing; - mr?: Spacing; - ml?: Spacing; - - onChange() { - /** do nothing **/ - } - - onBlur() { - /** do nothing **/ - } -} - -describe("GoABTextArea", () => { - let fixture: ComponentFixture; - let component: TestTextareaComponent; - - beforeEach(fakeAsync(() => { - TestBed.configureTestingModule({ - imports: [TestTextareaComponent, GoabxTextArea], - schemas: [CUSTOM_ELEMENTS_SCHEMA], - }).compileComponents(); - fixture = TestBed.createComponent(TestTextareaComponent); - component = fixture.componentInstance; - - component.testId = "textarea-testid"; - component.value = "textarea-value"; - component.rows = 10; - component.placeholder = "textarea-placeholder"; - component.disabled = true; - component.countBy = "word"; - component.maxCount = 50; - component.mt = "s" as Spacing; - component.mr = "m" as Spacing; - component.mb = "l" as Spacing; - component.ml = "xl" as Spacing; - fixture.detectChanges(); - tick(); - fixture.detectChanges(); - })); - - it("should render", () => { - const el = fixture.nativeElement.querySelector("goa-textarea"); - expect(el?.getAttribute("name")).toBe(component.name); - expect(el?.getAttribute("value")).toBe(component.value); - expect(el?.getAttribute("rows")).toBe(`${component.rows}`); - expect(el?.getAttribute("placeholder")).toBe(component.placeholder); - expect(el?.getAttribute("countby")).toBe(component.countBy); - expect(el?.getAttribute("maxcount")).toBe(`${component.maxCount}`); - expect(el?.getAttribute("maxwidth")).toBe("480px"); - expect(el?.getAttribute("mt")).toBe(component.mt); - expect(el?.getAttribute("mr")).toBe(component.mr); - expect(el?.getAttribute("mb")).toBe(component.mb); - expect(el?.getAttribute("ml")).toBe(component.ml); - expect(el?.getAttribute("autocomplete")).toBe("off"); - }); - - it("should dispatch onChange", () => { - const onChange = jest.spyOn(component, "onChange"); - - const el = fixture.nativeElement.querySelector("goa-textarea"); - fireEvent( - el, - new CustomEvent("_change", { - detail: { name: "textarea-name", value: "test" }, - }), - ); - - expect(onChange).toBeCalledTimes(1); - }); - - it("should dispatch onBlur", () => { - const onBlur = jest.spyOn(component, "onBlur"); - - const el = fixture.nativeElement.querySelector("goa-textarea"); - fireEvent( - el, - new CustomEvent("_blur", { - detail: { name: "textarea-name", value: "test value" }, - }), - ); - - expect(onBlur).toBeCalledTimes(1); - }); - - describe("writeValue", () => { - it("should set value attribute when writeValue is called", () => { - const textareaComponent = fixture.debugElement.query( - By.css("goabx-textarea"), - ).componentInstance; - const textareaElement = fixture.nativeElement.querySelector("goa-textarea"); - - textareaComponent.writeValue("new content"); - expect(textareaElement.getAttribute("value")).toBe("new content"); - - textareaComponent.writeValue("updated content"); - expect(textareaElement.getAttribute("value")).toBe("updated content"); - }); - - it("should set value attribute to empty string when writeValue is called with null or empty", () => { - const textareaComponent = fixture.debugElement.query( - By.css("goabx-textarea"), - ).componentInstance; - const textareaElement = fixture.nativeElement.querySelector("goa-textarea"); - - // First set a value - textareaComponent.writeValue("some content"); - expect(textareaElement.getAttribute("value")).toBe("some content"); - - // Then clear it with null - textareaComponent.writeValue(null); - expect(textareaElement.getAttribute("value")).toBe(""); - - // Set again and clear with undefined - textareaComponent.writeValue("test content"); - textareaComponent.writeValue(undefined); - expect(textareaElement.getAttribute("value")).toBe(""); - - // Set again and clear with empty string - textareaComponent.writeValue("more content"); - textareaComponent.writeValue(""); - expect(textareaElement.getAttribute("value")).toBe(""); - }); - - it("should update component value property", () => { - const textareaComponent = fixture.debugElement.query( - By.css("goabx-textarea"), - ).componentInstance; - - textareaComponent.writeValue("updated value"); - expect(textareaComponent.value).toBe("updated value"); - - textareaComponent.writeValue(null); - expect(textareaComponent.value).toBe(null); - }); - }); -}); diff --git a/libs/angular-components/src/experimental/textarea/textarea.ts b/libs/angular-components/src/experimental/textarea/textarea.ts deleted file mode 100644 index e274e94cbf..0000000000 --- a/libs/angular-components/src/experimental/textarea/textarea.ts +++ /dev/null @@ -1,122 +0,0 @@ -import { - GoabTextAreaCountBy, - GoabTextAreaOnChangeDetail, - GoabTextAreaOnKeyPressDetail, - GoabTextAreaOnBlurDetail, - GoabTextAreaSize, -} from "@abgov/ui-components-common"; -import { - CUSTOM_ELEMENTS_SCHEMA, - Component, - EventEmitter, - Input, - Output, - booleanAttribute, - forwardRef, - numberAttribute, - OnInit, - ChangeDetectorRef, - Renderer2, -} from "@angular/core"; -import { NG_VALUE_ACCESSOR } from "@angular/forms"; -import { CommonModule } from "@angular/common"; -import { GoabControlValueAccessor } from "../base.component"; - -@Component({ - standalone: true, - selector: "goabx-textarea", - imports: [CommonModule], - template: ` - - - `, - schemas: [CUSTOM_ELEMENTS_SCHEMA], - providers: [ - { - provide: NG_VALUE_ACCESSOR, - multi: true, - useExisting: forwardRef(() => GoabxTextArea), - }, - ], -}) -export class GoabxTextArea extends GoabControlValueAccessor implements OnInit { - @Input() name?: string; - @Input() placeholder?: string; - @Input({ transform: numberAttribute }) rows?: number; - @Input({ transform: booleanAttribute }) readOnly?: boolean; - @Input() width?: string; - @Input() ariaLabel?: string; - @Input() countBy?: GoabTextAreaCountBy = ""; - @Input() maxCount?: number = -1; - @Input() maxWidth?: string; - @Input() autoComplete?: string = "on"; - @Input() size?: GoabTextAreaSize = "default"; - - @Output() onChange = new EventEmitter(); - @Output() onKeyPress = new EventEmitter(); - @Output() onBlur = new EventEmitter(); - - isReady = false; - version = "2"; - - constructor( - private cdr: ChangeDetectorRef, - renderer: Renderer2, - ) { - super(renderer); - } - - ngOnInit(): void { - // For Angular 20, we need to delay rendering the web component - // to ensure all attributes are properly bound before the component initializes - setTimeout(() => { - this.isReady = true; - this.cdr.detectChanges(); - }, 0); - } - - _onChange(e: Event) { - const detail = { ...(e as CustomEvent).detail, event: e }; - this.onChange.emit(detail); - this.markAsTouched(); - this.fcChange?.(detail.value); - } - - _onKeyPress(e: Event) { - const detail = { ...(e as CustomEvent).detail, event: e }; - this.markAsTouched(); - this.onKeyPress.emit(detail); - } - - _onBlur(e: Event) { - const detail = { ...(e as CustomEvent).detail, event: e }; - this.markAsTouched(); - this.onBlur.emit(detail); - } -} diff --git a/libs/angular-components/src/experimental/work-side-menu-item/work-side-menu-item.spec.ts b/libs/angular-components/src/experimental/work-side-menu-item/work-side-menu-item.spec.ts deleted file mode 100644 index 84292ec945..0000000000 --- a/libs/angular-components/src/experimental/work-side-menu-item/work-side-menu-item.spec.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { ComponentFixture, TestBed, fakeAsync, tick } from "@angular/core/testing"; -import { GoabxWorkSideMenuItem } from "./work-side-menu-item"; -import { Component } from "@angular/core"; -import { By } from "@angular/platform-browser"; - -@Component({ - standalone: true, - imports: [GoabxWorkSideMenuItem], - template: ` - - - `, -}) -class TestWorkSideMenuItemComponent { - label = "Test label"; - url = "/test"; - badge = "Test badge"; - current = true; - divider = true; - icon = "triangle"; - testId = "test-id"; - type = "normal"; -} - -describe("GoabxWorkSideMenuItem", () => { - let fixture: ComponentFixture; - let component: TestWorkSideMenuItemComponent; - - beforeEach(fakeAsync(() => { - TestBed.configureTestingModule({ - imports: [TestWorkSideMenuItemComponent], - }).compileComponents(); - - fixture = TestBed.createComponent(TestWorkSideMenuItemComponent); - component = fixture.componentInstance; - - fixture.detectChanges(); - tick(); // Wait for setTimeout in ngOnInit - fixture.detectChanges(); - })); - - it("should render and set the props correctly", () => { - const menuItemElement = fixture.debugElement.query( - By.css("goa-work-side-menu-item"), - ).nativeElement; - expect(menuItemElement.getAttribute("label")).toBe("Test label"); - expect(menuItemElement.getAttribute("url")).toBe("/test"); - expect(menuItemElement.getAttribute("badge")).toBe("Test badge"); - expect(menuItemElement.getAttribute("current")).toBe("true"); - expect(menuItemElement.getAttribute("divider")).toBe("true"); - expect(menuItemElement.getAttribute("icon")).toBe("triangle"); - expect(menuItemElement.getAttribute("testid")).toBe("test-id"); - expect(menuItemElement.getAttribute("type")).toBe("normal"); - }); -}); diff --git a/libs/angular-components/src/index.ts b/libs/angular-components/src/index.ts index ddf40f76ec..55aebfe4b6 100644 --- a/libs/angular-components/src/index.ts +++ b/libs/angular-components/src/index.ts @@ -1,4 +1,3 @@ export * from "./lib/angular-components.module"; export * from "./lib/components"; -export * from "./experimental"; export * from "@abgov/ui-components-common"; diff --git a/libs/angular-components/src/lib/angular-components.module.ts b/libs/angular-components/src/lib/angular-components.module.ts index 3de17f5719..0adde75025 100644 --- a/libs/angular-components/src/lib/angular-components.module.ts +++ b/libs/angular-components/src/lib/angular-components.module.ts @@ -1,10 +1,10 @@ import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from "@angular/core"; -import { CommonModule } from "@angular/common"; + import { ValueDirective, ValueListDirective } from "./value-directive"; import { CheckedDirective } from "./checked-directive"; @NgModule({ - imports: [CommonModule, ValueDirective, ValueListDirective, CheckedDirective], + imports: [ValueDirective, ValueListDirective, CheckedDirective], exports: [ValueDirective, ValueListDirective, CheckedDirective], schemas: [CUSTOM_ELEMENTS_SCHEMA], }) diff --git a/libs/angular-components/src/lib/angular-components/angular-components.component.html b/libs/angular-components/src/lib/angular-components/angular-components.component.html index ab41ab3bc4..5072787fac 100644 --- a/libs/angular-components/src/lib/angular-components/angular-components.component.html +++ b/libs/angular-components/src/lib/angular-components/angular-components.component.html @@ -1 +1 @@ -

angular-components works!

\ No newline at end of file +

angular-components works!

diff --git a/libs/angular-components/src/lib/angular-components/angular-components.component.ts b/libs/angular-components/src/lib/angular-components/angular-components.component.ts index f6dedcdac7..efdbae7cf5 100644 --- a/libs/angular-components/src/lib/angular-components/angular-components.component.ts +++ b/libs/angular-components/src/lib/angular-components/angular-components.component.ts @@ -1,11 +1,10 @@ import { Component } from "@angular/core"; - @Component({ selector: "goab-lib-angular-components", standalone: true, - imports: [], + templateUrl: "./angular-components.component.html", styleUrl: "./angular-components.component.css", }) -export class AngularComponentsComponent { } +export class AngularComponentsComponent {} diff --git a/libs/angular-components/src/lib/checked-directive.ts b/libs/angular-components/src/lib/checked-directive.ts index aab9de4604..a4cd415373 100644 --- a/libs/angular-components/src/lib/checked-directive.ts +++ b/libs/angular-components/src/lib/checked-directive.ts @@ -5,10 +5,7 @@ import { HostListener, Renderer2, } from "@angular/core"; -import { - CheckboxControlValueAccessor, - NG_VALUE_ACCESSOR, -} from "@angular/forms"; +import { CheckboxControlValueAccessor, NG_VALUE_ACCESSOR } from "@angular/forms"; // @deprecated: Use the new component @Directive({ @@ -26,10 +23,17 @@ export class CheckedDirective extends CheckboxControlValueAccessor { private _checked = false; /* eslint-disable @typescript-eslint/no-explicit-any */ - override onChange: any = () => {/** No implementation **/ }; - override onTouched: any = () => {/** No implementation **/ }; + override onChange: any = () => { + /** No implementation **/ + }; + override onTouched: any = () => { + /** No implementation **/ + }; - constructor(protected renderer: Renderer2, protected elementRef: ElementRef) { + constructor( + protected renderer: Renderer2, + protected elementRef: ElementRef, + ) { super(renderer, elementRef); } @@ -56,8 +60,9 @@ export class CheckedDirective extends CheckboxControlValueAccessor { this.onTouched = fn; } - @HostListener("_change", ["$event.detail.checked"]) - listenForValueChange(checked: any) { + @HostListener("_change", ["$event"]) + listenForValueChange(event: Event) { + const checked = (event as CustomEvent<{ checked: boolean }>).detail.checked; this.value = checked; } } diff --git a/libs/angular-components/src/lib/components/accordion/accordion.spec.ts b/libs/angular-components/src/lib/components/accordion/accordion.spec.ts index 8322b86e4a..d91a1205e1 100644 --- a/libs/angular-components/src/lib/components/accordion/accordion.spec.ts +++ b/libs/angular-components/src/lib/components/accordion/accordion.spec.ts @@ -2,13 +2,15 @@ import { GoabAccordion } from "./accordion"; import { ComponentFixture, TestBed, fakeAsync, tick } from "@angular/core/testing"; import { CUSTOM_ELEMENTS_SCHEMA, Component } from "@angular/core"; import { By } from "@angular/platform-browser"; -import { GoabAccordionHeadingSize, GoabAccordionIconPosition } from "@abgov/ui-components-common"; +import { + GoabAccordionHeadingSize, + GoabAccordionIconPosition, +} from "@abgov/ui-components-common"; @Component({ standalone: true, imports: [GoabAccordion], - template: ` - test content - This is the headingcontent + This is the headingcontent `, }) class TestAccordionComponent { diff --git a/libs/angular-components/src/lib/components/accordion/accordion.ts b/libs/angular-components/src/lib/components/accordion/accordion.ts index b17dc93459..da7f0027ec 100644 --- a/libs/angular-components/src/lib/components/accordion/accordion.ts +++ b/libs/angular-components/src/lib/components/accordion/accordion.ts @@ -13,34 +13,35 @@ import { OnInit, ChangeDetectorRef, } from "@angular/core"; -import { NgTemplateOutlet, CommonModule } from "@angular/common"; +import { NgTemplateOutlet } from "@angular/common"; import { GoabBaseComponent } from "../base.component"; @Component({ standalone: true, selector: "goab-accordion", - imports: [NgTemplateOutlet, CommonModule], + imports: [NgTemplateOutlet], template: ` - -
- -
- -
+ @if (isReady) { + +
+ +
+ +
+ } `, schemas: [CUSTOM_ELEMENTS_SCHEMA], }) diff --git a/libs/angular-components/src/lib/components/badge/badge.ts b/libs/angular-components/src/lib/components/badge/badge.ts index b52bbb3e4a..609a6cc5ae 100644 --- a/libs/angular-components/src/lib/components/badge/badge.ts +++ b/libs/angular-components/src/lib/components/badge/badge.ts @@ -1,4 +1,9 @@ -import { GoabBadgeType, GoabIconType } from "@abgov/ui-components-common"; +import { + GoabBadgeType, + GoabIconType, + GoabBadgeSize, + GoabBadgeEmphasis, +} from "@abgov/ui-components-common"; import { CUSTOM_ELEMENTS_SCHEMA, Component, @@ -7,30 +12,34 @@ import { OnInit, ChangeDetectorRef, } from "@angular/core"; -import { CommonModule } from "@angular/common"; + import { GoabBaseComponent } from "../base.component"; @Component({ standalone: true, selector: "goab-badge", template: ` - - + @if (isReady) { + + + } `, schemas: [CUSTOM_ELEMENTS_SCHEMA], - imports: [CommonModule], + styles: [ ` :host { @@ -45,9 +54,12 @@ export class GoabBadge extends GoabBaseComponent implements OnInit { // Ensure boolean input; attribute only set when true so default behaviour is false @Input({ transform: booleanAttribute }) icon?: boolean; @Input() iconType?: GoabIconType; + @Input() size?: GoabBadgeSize = "medium"; + @Input() emphasis?: GoabBadgeEmphasis = "strong"; @Input() ariaLabel?: string; isReady = false; + version = "2"; constructor(private cdr: ChangeDetectorRef) { super(); diff --git a/libs/angular-components/src/lib/components/block/block.ts b/libs/angular-components/src/lib/components/block/block.ts index 51823fd1b6..cd40672bb9 100644 --- a/libs/angular-components/src/lib/components/block/block.ts +++ b/libs/angular-components/src/lib/components/block/block.ts @@ -10,30 +10,31 @@ import { OnInit, ChangeDetectorRef, } from "@angular/core"; -import { CommonModule } from "@angular/common"; + import { GoabBaseComponent } from "../base.component"; @Component({ standalone: true, selector: "goab-block", - imports: [CommonModule], + template: ` - - - + @if (isReady) { + + + + } `, schemas: [CUSTOM_ELEMENTS_SCHEMA], }) diff --git a/libs/angular-components/src/lib/components/button-group/button-group.spec.ts b/libs/angular-components/src/lib/components/button-group/button-group.spec.ts index ecb9d67345..322d5d4f15 100644 --- a/libs/angular-components/src/lib/components/button-group/button-group.spec.ts +++ b/libs/angular-components/src/lib/components/button-group/button-group.spec.ts @@ -3,7 +3,8 @@ import { GoabButtonGroup } from "./button-group"; import { Component, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; import { GoabButtonGroupAlignment, - GoabButtonGroupGap, Spacing, + GoabButtonGroupGap, + Spacing, } from "@abgov/ui-components-common"; import { By } from "@angular/platform-browser"; import { GoabButton } from "../button/button"; diff --git a/libs/angular-components/src/lib/components/button-group/button-group.ts b/libs/angular-components/src/lib/components/button-group/button-group.ts index 14a53cb911..b52d1cb426 100644 --- a/libs/angular-components/src/lib/components/button-group/button-group.ts +++ b/libs/angular-components/src/lib/components/button-group/button-group.ts @@ -9,26 +9,27 @@ import { OnInit, ChangeDetectorRef, } from "@angular/core"; -import { CommonModule } from "@angular/common"; + import { GoabBaseComponent } from "../base.component"; @Component({ standalone: true, selector: "goab-button-group", - imports: [CommonModule], + template: ` - - - + @if (isReady) { + + + + } `, schemas: [CUSTOM_ELEMENTS_SCHEMA], }) diff --git a/libs/angular-components/src/lib/components/button/button.spec.ts b/libs/angular-components/src/lib/components/button/button.spec.ts index 234aff5056..d538c3ed0b 100644 --- a/libs/angular-components/src/lib/components/button/button.spec.ts +++ b/libs/angular-components/src/lib/components/button/button.spec.ts @@ -1,7 +1,13 @@ import { ComponentFixture, TestBed, fakeAsync, tick } from "@angular/core/testing"; import { GoabButton } from "./button"; import { Component, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; -import { GoabButtonSize, GoabButtonVariant, GoabIconType, Spacing, GoabButtonType } from "@abgov/ui-components-common"; +import { + GoabButtonSize, + GoabButtonVariant, + GoabIconType, + Spacing, + GoabButtonType, +} from "@abgov/ui-components-common"; import { By } from "@angular/platform-browser"; import { fireEvent } from "@testing-library/dom"; @@ -21,12 +27,13 @@ import { fireEvent } from "@testing-library/dom"; [mb]="mb" [ml]="ml" [mr]="mr" - (onClick)="onClick()"> - {{buttonText}} + (onClick)="onClick()" + > + {{ buttonText }} - ` + `, }) -class TestButtonComponent{ +class TestButtonComponent { type?: GoabButtonType; size?: GoabButtonSize; variant?: GoabButtonVariant; @@ -43,7 +50,6 @@ class TestButtonComponent{ onClick() { /* do nothing */ } - } describe("GoABButton", () => { @@ -94,5 +100,5 @@ describe("GoABButton", () => { fireEvent(buttonElement, new CustomEvent("_click")); expect(onClick).toHaveBeenCalled(); - })) -}) + })); +}); diff --git a/libs/angular-components/src/lib/components/button/button.ts b/libs/angular-components/src/lib/components/button/button.ts index 629aef7ad0..c1810a268c 100644 --- a/libs/angular-components/src/lib/components/button/button.ts +++ b/libs/angular-components/src/lib/components/button/button.ts @@ -14,35 +14,37 @@ import { OnInit, ChangeDetectorRef, } from "@angular/core"; -import { CommonModule } from "@angular/common"; + import { GoabBaseComponent } from "../base.component"; @Component({ standalone: true, selector: "goab-button", - imports: [CommonModule], + template: ` - - - + @if (isReady) { + + + + } `, schemas: [CUSTOM_ELEMENTS_SCHEMA], }) @@ -61,6 +63,7 @@ export class GoabButton extends GoabBaseComponent implements OnInit { @Output() onClick = new EventEmitter(); isReady = false; + version = "2"; constructor(private cdr: ChangeDetectorRef) { super(); diff --git a/libs/angular-components/src/lib/components/calendar/calendar.spec.ts b/libs/angular-components/src/lib/components/calendar/calendar.spec.ts index 86fa657a47..bbf8b0b9e7 100644 --- a/libs/angular-components/src/lib/components/calendar/calendar.spec.ts +++ b/libs/angular-components/src/lib/components/calendar/calendar.spec.ts @@ -2,7 +2,7 @@ import { ComponentFixture, TestBed, fakeAsync, tick } from "@angular/core/testin import { GoabCalendar } from "./calendar"; import { Component, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; import { fireEvent } from "@testing-library/dom"; -import { GoabCalendarOnChangeDetail, Spacing } from "@abgov/ui-components-common"; +import { GoabCalendarOnChangeDetail, Spacing, CalendarDate } from "@abgov/ui-components-common"; @Component({ standalone: true, @@ -68,13 +68,15 @@ describe("GoABCalendar", () => { it("should render properties", () => { const calendar = fixture.nativeElement.querySelector("goa-calendar"); expect(calendar.getAttribute("name")).toBe(component.name); - expect(calendar.getAttribute("min")).toBe(component.min?.toString()); - expect(calendar.getAttribute("max")).toBe(component.max?.toString()); + expect(calendar.getAttribute("min")).toBe(new CalendarDate(component.min!).toString()); + expect(calendar.getAttribute("max")).toBe(new CalendarDate(component.max!).toString()); expect(calendar.getAttribute("testid")).toBe(component.testId); expect(calendar.getAttribute("mt")).toBe(component.mt); expect(calendar.getAttribute("mb")).toBe(component.mb); expect(calendar.getAttribute("ml")).toBe(component.ml); expect(calendar.getAttribute("mr")).toBe(component.mr); + expect(calendar.getAttribute("value")).toBe(new CalendarDate(component.value!).toString()); + expect(calendar.getAttribute("version")).toBe("2"); }); it("should handle the event", () => { diff --git a/libs/angular-components/src/lib/components/calendar/calendar.ts b/libs/angular-components/src/lib/components/calendar/calendar.ts index b962fef660..eae5de6a5a 100644 --- a/libs/angular-components/src/lib/components/calendar/calendar.ts +++ b/libs/angular-components/src/lib/components/calendar/calendar.ts @@ -1,4 +1,8 @@ -import { GoabCalendarOnChangeDetail } from "@abgov/ui-components-common"; +import { + CalendarDate, + GoabCalendarOnChangeDetail, + Once, +} from "@abgov/ui-components-common"; import { CUSTOM_ELEMENTS_SCHEMA, Component, @@ -8,42 +12,71 @@ import { OnInit, ChangeDetectorRef, } from "@angular/core"; -import { CommonModule } from "@angular/common"; import { GoabBaseComponent } from "../base.component"; @Component({ standalone: true, selector: "goab-calendar", - imports: [CommonModule], + template: ` - - - + @if (isReady) { + + + + } `, schemas: [CUSTOM_ELEMENTS_SCHEMA], }) export class GoabCalendar extends GoabBaseComponent implements OnInit { + version = "2"; + @Input() name?: string; @Input() value?: Date | string; - @Input() min?: Date; - @Input() max?: Date; + @Input() min?: Date | string | undefined; + @Input() max?: Date | string | undefined; @Output() onChange = new EventEmitter(); isReady = false; + private once: Once = new Once(); + + private formatValue(param: string, val: Date | string | null | undefined): string { + if (!val) return ""; + + this.once.when(val instanceof Date).do(param, () => { + console.warn( + `GoabCalendar: Using Date for '${param}' is deprecated. Use a string in YYYY-MM-DD format instead.`, + ); + }); + + return new CalendarDate(val).toString(); + } + + valueString(): string { + return this.formatValue("value", this.value); + } + + minString(): string { + return this.formatValue("min", this.min); + } + + maxString(): string { + return this.formatValue("max", this.max); + } + constructor(private cdr: ChangeDetectorRef) { super(); } diff --git a/libs/angular-components/src/lib/components/callout/callout.ts b/libs/angular-components/src/lib/components/callout/callout.ts index 04b06f3d12..a0cb6a77be 100644 --- a/libs/angular-components/src/lib/components/callout/callout.ts +++ b/libs/angular-components/src/lib/components/callout/callout.ts @@ -3,6 +3,7 @@ import { GoabCalloutSize, GoabCalloutType, GoabCalloutIconTheme, + GoabCalloutEmphasis, } from "@abgov/ui-components-common"; import { CUSTOM_ELEMENTS_SCHEMA, @@ -11,35 +12,39 @@ import { OnInit, ChangeDetectorRef, } from "@angular/core"; -import { CommonModule } from "@angular/common"; + import { GoabBaseComponent } from "../base.component"; @Component({ standalone: true, selector: "goab-callout", - imports: [CommonModule], + template: ` - - - + @if (isReady) { + + + + } `, schemas: [CUSTOM_ELEMENTS_SCHEMA], }) export class GoabCallout extends GoabBaseComponent implements OnInit { isReady = false; + version = "2"; constructor(private cdr: ChangeDetectorRef) { super(); @@ -60,4 +65,5 @@ export class GoabCallout extends GoabBaseComponent implements OnInit { @Input() maxWidth?: string; @Input() ariaLive?: GoabCalloutAriaLive = "off"; @Input() iconTheme?: GoabCalloutIconTheme = "outline"; + @Input() emphasis?: GoabCalloutEmphasis = "medium"; } diff --git a/libs/angular-components/src/lib/components/card-actions/card-actions.ts b/libs/angular-components/src/lib/components/card-actions/card-actions.ts index c3fa9048b4..6d31631295 100644 --- a/libs/angular-components/src/lib/components/card-actions/card-actions.ts +++ b/libs/angular-components/src/lib/components/card-actions/card-actions.ts @@ -4,18 +4,18 @@ import { OnInit, ChangeDetectorRef, } from "@angular/core"; -import { CommonModule } from "@angular/common"; @Component({ standalone: true, selector: "goab-card-actions", template: ` - - - + @if (isReady) { + + + + } `, schemas: [CUSTOM_ELEMENTS_SCHEMA], - imports: [CommonModule], }) export class GoabCardActions implements OnInit { isReady = false; diff --git a/libs/angular-components/src/lib/components/card-content/card-content.ts b/libs/angular-components/src/lib/components/card-content/card-content.ts index 10cf5e09f0..933b6ff23c 100644 --- a/libs/angular-components/src/lib/components/card-content/card-content.ts +++ b/libs/angular-components/src/lib/components/card-content/card-content.ts @@ -4,18 +4,18 @@ import { OnInit, ChangeDetectorRef, } from "@angular/core"; -import { CommonModule } from "@angular/common"; @Component({ standalone: true, selector: "goab-card-content", template: ` - - - + @if (isReady) { + + + + } `, schemas: [CUSTOM_ELEMENTS_SCHEMA], - imports: [CommonModule], }) export class GoabCardContent implements OnInit { isReady = false; diff --git a/libs/angular-components/src/lib/components/card-image/card-image.ts b/libs/angular-components/src/lib/components/card-image/card-image.ts index cea0ad32fc..482bcb211f 100644 --- a/libs/angular-components/src/lib/components/card-image/card-image.ts +++ b/libs/angular-components/src/lib/components/card-image/card-image.ts @@ -5,22 +5,18 @@ import { OnInit, ChangeDetectorRef, } from "@angular/core"; -import { CommonModule } from "@angular/common"; @Component({ standalone: true, selector: "goab-card-image", template: ` - - - + @if (isReady) { + + + + } `, schemas: [CUSTOM_ELEMENTS_SCHEMA], - imports: [CommonModule], }) export class GoabCardImage implements OnInit { @Input({ required: true }) src!: string; diff --git a/libs/angular-components/src/lib/components/card/card.ts b/libs/angular-components/src/lib/components/card/card.ts index 0245209a30..724ab09666 100644 --- a/libs/angular-components/src/lib/components/card/card.ts +++ b/libs/angular-components/src/lib/components/card/card.ts @@ -6,26 +6,27 @@ import { OnInit, ChangeDetectorRef, } from "@angular/core"; -import { CommonModule } from "@angular/common"; + import { GoabBaseComponent } from "../base.component"; @Component({ standalone: true, selector: "goab-card", - imports: [CommonModule], + template: ` - - - + @if (isReady) { + + + + } `, schemas: [CUSTOM_ELEMENTS_SCHEMA], }) diff --git a/libs/angular-components/src/lib/components/checkbox-list/checkbox-list.spec.ts b/libs/angular-components/src/lib/components/checkbox-list/checkbox-list.spec.ts index dcc6d7c82d..098d67b1fd 100644 --- a/libs/angular-components/src/lib/components/checkbox-list/checkbox-list.spec.ts +++ b/libs/angular-components/src/lib/components/checkbox-list/checkbox-list.spec.ts @@ -1,15 +1,14 @@ -import { Component, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; import { ComponentFixture, TestBed, fakeAsync, tick } from "@angular/core/testing"; +import { GoabCheckboxList } from "./checkbox-list"; +import { Component, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; import { ReactiveFormsModule } from "@angular/forms"; -import { By } from "@angular/platform-browser"; import { fireEvent } from "@testing-library/dom"; -import { GoabCheckboxListOnChangeDetail, Spacing } from "@abgov/ui-components-common"; -import { GoabCheckboxList } from "./checkbox-list"; -import { GoabCheckbox } from "../checkbox/checkbox"; +import { By } from "@angular/platform-browser"; +import { Spacing } from "@abgov/ui-components-common"; @Component({ standalone: true, - imports: [GoabCheckboxList, GoabCheckbox], + imports: [GoabCheckboxList], template: ` - - - `, }) -class TestCheckboxListHostComponent { - name = ""; +class TestCheckboxListComponent { + name?: string; value?: string[]; disabled?: boolean; error?: boolean; testId?: string; - id?: string; maxWidth?: string; + size?: "default" | "compact"; mt?: Spacing; - mr?: Spacing; mb?: Spacing; ml?: Spacing; + mr?: Spacing; - lastChange?: GoabCheckboxListOnChangeDetail; - onChange(event: GoabCheckboxListOnChangeDetail) { - this.lastChange = event; // keep a reference so the param isn't unused + onChange() { + /* do nothing */ } } describe("GoabCheckboxList", () => { - let fixture: ComponentFixture; - let host: TestCheckboxListHostComponent; + let fixture: ComponentFixture; + let component: TestCheckboxListComponent; beforeEach(fakeAsync(() => { TestBed.configureTestingModule({ - imports: [TestCheckboxListHostComponent, GoabCheckboxList, GoabCheckbox, ReactiveFormsModule], + imports: [TestCheckboxListComponent, GoabCheckboxList, ReactiveFormsModule], schemas: [CUSTOM_ELEMENTS_SCHEMA], }).compileComponents(); - fixture = TestBed.createComponent(TestCheckboxListHostComponent); - host = fixture.componentInstance; - - host.name = "fruits"; - host.value = ["apples", "oranges"]; - host.disabled = false; - host.error = true; - host.testId = "checkbox-list"; - host.id = "checkbox-list-id"; - host.maxWidth = "480px"; - host.mt = "s"; - host.mr = "m"; - host.mb = "l"; - host.ml = "xl"; - + fixture = TestBed.createComponent(TestCheckboxListComponent); + component = fixture.componentInstance; + + component.name = "foo"; + component.value = ["option1"]; + component.disabled = false; + component.error = false; + component.testId = "testId"; + component.maxWidth = "480px"; + component.size = "compact"; + component.mt = "s"; + component.mr = "m"; + component.mb = "l"; + component.ml = "xl"; fixture.detectChanges(); tick(); fixture.detectChanges(); })); - it("should render and bind attributes", () => { - const el: HTMLElement = fixture.debugElement.query( - By.css("goa-checkbox-list"), - ).nativeElement; - - expect(el.getAttribute("name")).toBe(host.name); - expect(el.getAttribute("error")).toBe("true"); - expect(el.getAttribute("testid")).toBe(host.testId); - expect(el.getAttribute("id")).toBe(host.id); - expect(el.getAttribute("maxwidth")).toBe(host.maxWidth); - expect(el.getAttribute("mt")).toBe(host.mt); - expect(el.getAttribute("mr")).toBe(host.mr); - expect(el.getAttribute("mb")).toBe(host.mb); - expect(el.getAttribute("ml")).toBe(host.ml); - - // projected checkbox children exist and are configured - const checkboxes = el.querySelectorAll("goa-checkbox"); - expect(checkboxes.length).toBeGreaterThan(0); - const first = checkboxes[0] as HTMLElement & { value?: string }; - expect(first.getAttribute("name")).toBe("basic1"); - expect(first.getAttribute("text")).toBe("Basic 1"); - // value is bound as a property, not an attribute - expect(first.value).toBe("basic1"); - }); - - it("should work with reactive forms", () => { - const comp = fixture.debugElement.query(By.directive(GoabCheckboxList)) - .componentInstance as GoabCheckboxList; - - // Simulate form control registration - const fcChangeSpy = jest.fn(); - const fcTouchedSpy = jest.fn(); - comp.registerOnChange(fcChangeSpy); - comp.registerOnTouched(fcTouchedSpy); - - // Test writeValue integration - comp.writeValue(["option1", "option2"]); - expect(comp.value).toEqual(["option1", "option2"]); - - // Test change event integration - const el: HTMLElement = fixture.debugElement.query( - By.css("goa-checkbox-list"), - ).nativeElement; - - const changeEvent = new Event("change"); - const detail: GoabCheckboxListOnChangeDetail = { - name: "fruits", - value: ["apple", "banana"], - event: changeEvent, - }; - - fireEvent( - el, - new CustomEvent("_change", { - detail, - }) as Event, - ); - - expect(fcChangeSpy).toHaveBeenCalledWith(["apple", "banana"]); - expect(fcTouchedSpy).toHaveBeenCalledTimes(1); - }); - - it("should handle disabled state correctly", () => { - host.disabled = true; - fixture.detectChanges(); - - const el: HTMLElement = fixture.debugElement.query( + it("should render properties", () => { + const el = fixture.debugElement.query( By.css("goa-checkbox-list"), ).nativeElement; - - // The disabled property is bound directly, not as an attribute - // Check the property instead of attribute - expect((el as HTMLElement & { disabled: boolean }).disabled).toBe(true); - - // Change to false - host.disabled = false; - fixture.detectChanges(); - - expect((el as HTMLElement & { disabled: boolean }).disabled).toBe(false); + expect(el.getAttribute("name")).toBe(component.name); + expect(el.getAttribute("version")).toBe("2"); + expect(el.getAttribute("size")).toBe("compact"); + expect(el.getAttribute("testid")).toBe(component.testId); + expect(el.getAttribute("maxwidth")).toBe(component.maxWidth); + expect(el.getAttribute("mt")).toBe(component.mt); + expect(el.getAttribute("mr")).toBe(component.mr); + expect(el.getAttribute("mb")).toBe(component.mb); + expect(el.getAttribute("ml")).toBe(component.ml); }); - it("should handle undefined/null props gracefully", () => { - // leave name undefined by not setting it explicitly; verify attributes absent - host.name = undefined as unknown as string; - host.value = undefined; - host.testId = undefined; - host.maxWidth = undefined; - - expect(() => { - fixture.detectChanges(); - }).not.toThrow(); - - const el: HTMLElement = fixture.debugElement.query( + it("should default version to 2", () => { + const el = fixture.debugElement.query( By.css("goa-checkbox-list"), ).nativeElement; - - expect(el.getAttribute("name")).toBeNull(); - expect(el.getAttribute("testid")).toBeNull(); + expect(el.getAttribute("version")).toBe("2"); }); - it("should handle spacing props correctly", () => { - host.mt = "xs"; - host.mr = "none"; - host.mb = "3xl"; - host.ml = "4xl"; - fixture.detectChanges(); - - const el: HTMLElement = fixture.debugElement.query( - By.css("goa-checkbox-list"), - ).nativeElement; - - expect(el.getAttribute("mt")).toBe("xs"); - expect(el.getAttribute("mr")).toBe("none"); - expect(el.getAttribute("mb")).toBe("3xl"); - expect(el.getAttribute("ml")).toBe("4xl"); - }); - - it("should emit multiple change events correctly", () => { - const comp = fixture.debugElement.query(By.directive(GoabCheckboxList)) - .componentInstance as GoabCheckboxList; - const onChangeSpy = jest.spyOn(comp.onChange, "emit"); + it("should handle onChange event", async () => { + const onChange = jest.spyOn(component, "onChange"); - const el: HTMLElement = fixture.debugElement.query( + const el = fixture.debugElement.query( By.css("goa-checkbox-list"), ).nativeElement; - // First change - const changeEvent1 = new Event("change"); - const detail1: GoabCheckboxListOnChangeDetail = { - name: "fruits", - value: ["apple"], - event: changeEvent1, - }; - - fireEvent(el, new CustomEvent("_change", { detail: detail1 })); - expect(onChangeSpy).toHaveBeenCalledWith( - expect.objectContaining({ ...detail1, event: expect.any(Event) }), + fireEvent( + el, + new CustomEvent("_change", { + detail: { name: "foo", value: ["option1", "option2"] }, + }), ); - // Second change - const changeEvent2 = new Event("change"); - const detail2: GoabCheckboxListOnChangeDetail = { - name: "fruits", - value: ["apple", "banana"], - event: changeEvent2, - }; - - fireEvent(el, new CustomEvent("_change", { detail: detail2 })); - expect(onChangeSpy).toHaveBeenCalledWith( - expect.objectContaining({ ...detail2, event: expect.any(Event) }), - ); - expect(onChangeSpy).toHaveBeenCalledTimes(2); + expect(onChange).toHaveBeenCalled(); }); }); diff --git a/libs/angular-components/src/lib/components/checkbox-list/checkbox-list.ts b/libs/angular-components/src/lib/components/checkbox-list/checkbox-list.ts index b9b2dc1fad..25773fe9e1 100644 --- a/libs/angular-components/src/lib/components/checkbox-list/checkbox-list.ts +++ b/libs/angular-components/src/lib/components/checkbox-list/checkbox-list.ts @@ -1,4 +1,4 @@ -import { GoabCheckboxListOnChangeDetail } from "@abgov/ui-components-common"; +import { GoabCheckboxListOnChangeDetail, GoabCheckboxSize } from "@abgov/ui-components-common"; import { CUSTOM_ELEMENTS_SCHEMA, Component, @@ -11,31 +11,34 @@ import { Renderer2, } from "@angular/core"; import { NG_VALUE_ACCESSOR } from "@angular/forms"; -import { CommonModule } from "@angular/common"; + import { GoabControlValueAccessor } from "../base.component"; @Component({ standalone: true, selector: "goab-checkbox-list", - template: ` - - `, + template: `@if (isReady) { + + + + }`, schemas: [CUSTOM_ELEMENTS_SCHEMA], - imports: [CommonModule], + providers: [ { provide: NG_VALUE_ACCESSOR, @@ -46,8 +49,10 @@ import { GoabControlValueAccessor } from "../base.component"; }) export class GoabCheckboxList extends GoabControlValueAccessor implements OnInit { isReady = false; + version = "2"; @Input() name!: string; @Input() maxWidth?: string; + @Input() size?: GoabCheckboxSize = "default"; // Override value to handle string arrays consistently @Input() override value?: string[]; @@ -69,29 +74,23 @@ export class GoabCheckboxList extends GoabControlValueAccessor implements OnInit @Output() onChange = new EventEmitter(); _onChange(e: Event) { - try { - const detail = { ...(e as CustomEvent).detail, event: e }; - this.onChange.emit(detail); - this.markAsTouched(); + const detail = { + ...(e as CustomEvent).detail, + event: e, + }; + this.onChange.emit(detail); + this.markAsTouched(); - // Update the form control with the selected values - const selectedValues = detail.value || []; - // clone to ensure a new reference so the underlying web component updates - this.value = [...selectedValues]; - this.fcChange?.([...selectedValues]); - } catch (error) { - console.error("Error handling checkbox list change:", error); - } + // Update the form control with the selected values + const selectedValues = detail.value || []; + // clone to ensure a new reference so the underlying web component updates + this.value = [...selectedValues]; + this.fcChange?.([...selectedValues]); } // Simplified writeValue - expects array input directly override writeValue(value: string[] | null): void { - try { - // clone to ensure a new reference and trigger downstream updates - this.value = Array.isArray(value) ? [...value] : []; - } catch (error) { - console.error("Error setting checkbox list value:", error); - this.value = []; - } + // clone to ensure a new reference and trigger downstream updates + this.value = Array.isArray(value) ? [...value] : []; } } diff --git a/libs/angular-components/src/lib/components/checkbox/checkbox.spec.ts b/libs/angular-components/src/lib/components/checkbox/checkbox.spec.ts index 35e21f225c..6d8488e627 100644 --- a/libs/angular-components/src/lib/components/checkbox/checkbox.spec.ts +++ b/libs/angular-components/src/lib/components/checkbox/checkbox.spec.ts @@ -112,8 +112,12 @@ describe("GoabCheckbox", () => { describe("writeValue", () => { it("should set checked attribute to true when value is truthy", () => { - const checkboxComponent = fixture.debugElement.query(By.css("goab-checkbox")).componentInstance; - const checkboxElement = fixture.debugElement.query(By.css("goa-checkbox")).nativeElement; + const checkboxComponent = fixture.debugElement.query( + By.css("goab-checkbox"), + ).componentInstance; + const checkboxElement = fixture.debugElement.query( + By.css("goa-checkbox"), + ).nativeElement; checkboxComponent.writeValue(true); expect(checkboxElement.getAttribute("checked")).toBe("true"); @@ -126,8 +130,12 @@ describe("GoabCheckbox", () => { }); it("should set checked attribute to false when value is falsy", () => { - const checkboxComponent = fixture.debugElement.query(By.css("goab-checkbox")).componentInstance; - const checkboxElement = fixture.debugElement.query(By.css("goa-checkbox")).nativeElement; + const checkboxComponent = fixture.debugElement.query( + By.css("goab-checkbox"), + ).componentInstance; + const checkboxElement = fixture.debugElement.query( + By.css("goa-checkbox"), + ).nativeElement; checkboxComponent.writeValue(false); expect(checkboxElement.getAttribute("checked")).toBe("false"); @@ -143,7 +151,9 @@ describe("GoabCheckbox", () => { }); it("should update component value property", () => { - const checkboxComponent = fixture.debugElement.query(By.css("goab-checkbox")).componentInstance; + const checkboxComponent = fixture.debugElement.query( + By.css("goab-checkbox"), + ).componentInstance; checkboxComponent.writeValue(true); expect(checkboxComponent.value).toBe(true); @@ -179,7 +189,11 @@ describe("Checkbox with description slot", () => { it("should render with slot description", fakeAsync(() => { TestBed.configureTestingModule({ - imports: [TestCheckboxWithDescriptionSlotComponent, GoabCheckbox, ReactiveFormsModule], + imports: [ + TestCheckboxWithDescriptionSlotComponent, + GoabCheckbox, + ReactiveFormsModule, + ], schemas: [CUSTOM_ELEMENTS_SCHEMA], }).compileComponents(); @@ -242,6 +256,8 @@ describe("Checkbox with reveal slot", () => { const checkboxElement = fixture.debugElement.query( By.css("goa-checkbox"), ).nativeElement; - expect(checkboxElement.getAttribute("revealarialabel")).toBe("Screen reader announcement for reveal content"); + expect(checkboxElement.getAttribute("revealarialabel")).toBe( + "Screen reader announcement for reveal content", + ); }); }); diff --git a/libs/angular-components/src/lib/components/checkbox/checkbox.ts b/libs/angular-components/src/lib/components/checkbox/checkbox.ts index b7e42ca624..ea760319d3 100644 --- a/libs/angular-components/src/lib/components/checkbox/checkbox.ts +++ b/libs/angular-components/src/lib/components/checkbox/checkbox.ts @@ -1,4 +1,7 @@ -import { GoabCheckboxOnChangeDetail } from "@abgov/ui-components-common"; +import { + GoabCheckboxOnChangeDetail, + GoabCheckboxSize, +} from "@abgov/ui-components-common"; import { CUSTOM_ELEMENTS_SCHEMA, Component, @@ -13,42 +16,47 @@ import { Renderer2, } from "@angular/core"; import { NG_VALUE_ACCESSOR } from "@angular/forms"; -import { NgTemplateOutlet, CommonModule } from "@angular/common"; +import { NgTemplateOutlet } from "@angular/common"; import { GoabControlValueAccessor } from "../base.component"; @Component({ standalone: true, selector: "goab-checkbox", - template: ` - -
- -
-
- -
-
`, + template: `@if (isReady) { + + +
+ +
+ @if (reveal) { +
+ +
+ } +
+ }`, schemas: [CUSTOM_ELEMENTS_SCHEMA], providers: [ { @@ -57,10 +65,11 @@ import { GoabControlValueAccessor } from "../base.component"; useExisting: forwardRef(() => GoabCheckbox), }, ], - imports: [NgTemplateOutlet, CommonModule], + imports: [NgTemplateOutlet], }) export class GoabCheckbox extends GoabControlValueAccessor implements OnInit { isReady = false; + version = "2"; constructor( private cdr: ChangeDetectorRef, @@ -89,6 +98,7 @@ export class GoabCheckbox extends GoabControlValueAccessor implements OnInit { @Input() reveal?: TemplateRef; @Input() revealArialLabel?: string; @Input() maxWidth?: string; + @Input() size?: GoabCheckboxSize = "default"; @Output() onChange = new EventEmitter(); diff --git a/libs/angular-components/src/lib/components/chip/chip.spec.ts b/libs/angular-components/src/lib/components/chip/chip.spec.ts index d878fa94bb..78ea1e4ad9 100644 --- a/libs/angular-components/src/lib/components/chip/chip.spec.ts +++ b/libs/angular-components/src/lib/components/chip/chip.spec.ts @@ -1,7 +1,12 @@ import { ComponentFixture, TestBed, fakeAsync, tick } from "@angular/core/testing"; import { GoabChip } from "./chip"; import { Component, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; -import { GoabChipTheme, GoabChipVariant, GoabIconType, Spacing } from "@abgov/ui-components-common"; +import { + GoabChipTheme, + GoabChipVariant, + GoabIconType, + Spacing, +} from "@abgov/ui-components-common"; import { By } from "@angular/platform-browser"; import { fireEvent } from "@testing-library/dom"; diff --git a/libs/angular-components/src/lib/components/chip/chip.ts b/libs/angular-components/src/lib/components/chip/chip.ts index 3ea1c242b9..ce862647d7 100644 --- a/libs/angular-components/src/lib/components/chip/chip.ts +++ b/libs/angular-components/src/lib/components/chip/chip.ts @@ -13,30 +13,31 @@ import { OnInit, ChangeDetectorRef, } from "@angular/core"; -import { CommonModule } from "@angular/common"; + import { GoabBaseComponent } from "../base.component"; @Component({ standalone: true, selector: "goab-chip", - imports: [CommonModule], - template: ` - - `, + + template: `@if (isReady) { + + + + }`, schemas: [CUSTOM_ELEMENTS_SCHEMA], }) export class GoabChip extends GoabBaseComponent implements OnInit { diff --git a/libs/angular-components/src/lib/components/circular-progress/circular-progress.ts b/libs/angular-components/src/lib/components/circular-progress/circular-progress.ts index c0602cca75..f4abc5b1ee 100644 --- a/libs/angular-components/src/lib/components/circular-progress/circular-progress.ts +++ b/libs/angular-components/src/lib/components/circular-progress/circular-progress.ts @@ -7,7 +7,6 @@ import { OnInit, ChangeDetectorRef, } from "@angular/core"; -import { CommonModule } from "@angular/common"; import { GoabCircularProgressSize, @@ -18,19 +17,19 @@ import { standalone: true, selector: "goab-circular-progress", template: ` - - + @if (isReady) { + + + } `, schemas: [CUSTOM_ELEMENTS_SCHEMA], - imports: [CommonModule], }) export class GoabCircularProgress implements OnInit { @Input() variant?: GoabCircularProgressVariant; diff --git a/libs/angular-components/src/lib/components/column-layout/column-layout.ts b/libs/angular-components/src/lib/components/column-layout/column-layout.ts index d654822299..ae6bbb8958 100644 --- a/libs/angular-components/src/lib/components/column-layout/column-layout.ts +++ b/libs/angular-components/src/lib/components/column-layout/column-layout.ts @@ -4,18 +4,18 @@ import { OnInit, ChangeDetectorRef, } from "@angular/core"; -import { CommonModule } from "@angular/common"; @Component({ standalone: true, selector: "goab-column-layout", template: ` - - - + @if (isReady) { + + + + } `, schemas: [CUSTOM_ELEMENTS_SCHEMA], - imports: [CommonModule], }) export class GoabColumnLayout implements OnInit { /** no props **/ diff --git a/libs/angular-components/src/lib/components/container/container.ts b/libs/angular-components/src/lib/components/container/container.ts index 214519f81e..e77173a1cb 100644 --- a/libs/angular-components/src/lib/components/container/container.ts +++ b/libs/angular-components/src/lib/components/container/container.ts @@ -12,40 +12,41 @@ import { OnInit, ChangeDetectorRef, } from "@angular/core"; -import { NgTemplateOutlet, CommonModule } from "@angular/common"; +import { NgTemplateOutlet } from "@angular/common"; import { GoabBaseComponent } from "../base.component"; @Component({ standalone: true, selector: "goab-container", - imports: [NgTemplateOutlet, CommonModule], - template: ` - @if (title) { -
- -
- } - - @if (actions) { -
- -
- } -
`, + imports: [NgTemplateOutlet], + template: `@if (isReady) { + + @if (title) { +
+ +
+ } + + @if (actions) { +
+ +
+ } +
+ }`, schemas: [CUSTOM_ELEMENTS_SCHEMA], }) export class GoabContainer extends GoabBaseComponent implements OnInit { diff --git a/libs/angular-components/src/lib/components/data-grid/data-grid.spec.ts b/libs/angular-components/src/lib/components/data-grid/data-grid.spec.ts index 8cad59b3e5..b709da6072 100644 --- a/libs/angular-components/src/lib/components/data-grid/data-grid.spec.ts +++ b/libs/angular-components/src/lib/components/data-grid/data-grid.spec.ts @@ -10,10 +10,11 @@ import { By } from "@angular/platform-browser"; + [keyboardNav]="keyboardNav" + >
Test content
- ` + `, }) class TestDataGridComponent { keyboardIconVisibility: "visible" | "hidden" = "visible"; @@ -42,7 +43,9 @@ describe("GoabDataGrid", () => { expect(component).toBeTruthy(); - const dataGridElement = fixture.debugElement.query(By.css("goa-data-grid"))?.nativeElement; + const dataGridElement = fixture.debugElement.query( + By.css("goa-data-grid"), + )?.nativeElement; expect(dataGridElement).toBeTruthy(); expect(dataGridElement.textContent).toContain("Test content"); expect(dataGridElement.getAttribute("keyboard-icon-visibility")).toBe("visible"); @@ -55,7 +58,9 @@ describe("GoabDataGrid", () => { tick(); fixture.detectChanges(); - const dataGridElement = fixture.debugElement.query(By.css("goa-data-grid"))?.nativeElement; + const dataGridElement = fixture.debugElement.query( + By.css("goa-data-grid"), + )?.nativeElement; expect(dataGridElement).toBeTruthy(); expect(dataGridElement.getAttribute("keyboard-icon-visibility")).toBe("hidden"); })); @@ -66,7 +71,9 @@ describe("GoabDataGrid", () => { tick(); fixture.detectChanges(); - const dataGridElement = fixture.debugElement.query(By.css("goa-data-grid"))?.nativeElement; + const dataGridElement = fixture.debugElement.query( + By.css("goa-data-grid"), + )?.nativeElement; expect(dataGridElement).toBeTruthy(); expect(dataGridElement.getAttribute("keyboard-icon-position")).toBe("right"); })); @@ -77,7 +84,9 @@ describe("GoabDataGrid", () => { tick(); fixture.detectChanges(); - const dataGridElement = fixture.debugElement.query(By.css("goa-data-grid"))?.nativeElement; + const dataGridElement = fixture.debugElement.query( + By.css("goa-data-grid"), + )?.nativeElement; expect(dataGridElement).toBeTruthy(); expect(dataGridElement.getAttribute("keyboard-nav")).toBe("table"); })); @@ -88,7 +97,9 @@ describe("GoabDataGrid", () => { tick(); fixture.detectChanges(); - const dataGridElement = fixture.debugElement.query(By.css("goa-data-grid"))?.nativeElement; + const dataGridElement = fixture.debugElement.query( + By.css("goa-data-grid"), + )?.nativeElement; expect(dataGridElement).toBeTruthy(); expect(dataGridElement.getAttribute("keyboard-nav")).toBe("layout"); })); diff --git a/libs/angular-components/src/lib/components/data-grid/data-grid.ts b/libs/angular-components/src/lib/components/data-grid/data-grid.ts index 00f391a133..0f1b8fd7a4 100644 --- a/libs/angular-components/src/lib/components/data-grid/data-grid.ts +++ b/libs/angular-components/src/lib/components/data-grid/data-grid.ts @@ -1,19 +1,25 @@ -import { CUSTOM_ELEMENTS_SCHEMA, Component, Input, ChangeDetectorRef, OnInit } from "@angular/core"; -import { CommonModule } from "@angular/common"; +import { + CUSTOM_ELEMENTS_SCHEMA, + Component, + Input, + ChangeDetectorRef, + OnInit, +} from "@angular/core"; @Component({ standalone: true, selector: "goab-data-grid", - imports: [CommonModule], + template: ` - - - + @if (isReady) { + + + + } `, schemas: [CUSTOM_ELEMENTS_SCHEMA], }) diff --git a/libs/angular-components/src/lib/components/date-picker/date-picker.spec.ts b/libs/angular-components/src/lib/components/date-picker/date-picker.spec.ts index 8cb9b80f18..487599dddd 100644 --- a/libs/angular-components/src/lib/components/date-picker/date-picker.spec.ts +++ b/libs/angular-components/src/lib/components/date-picker/date-picker.spec.ts @@ -1,7 +1,7 @@ import { ComponentFixture, TestBed, fakeAsync, tick } from "@angular/core/testing"; import { GoabDatePicker } from "./date-picker"; import { Component, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; -import { Spacing } from "@abgov/ui-components-common"; +import { CalendarDate, Spacing } from "@abgov/ui-components-common"; import { ReactiveFormsModule } from "@angular/forms"; import { addMonths } from "date-fns"; import { By } from "@angular/platform-browser"; @@ -75,10 +75,16 @@ describe("GoABDatePicker", () => { expect(el).toBeTruthy(); expect(el?.getAttribute("name")).toBe(component.name); - expect(el?.getAttribute("value")).toBe((component.value as Date)?.toISOString()); + expect(el?.getAttribute("value")).toBe( + new CalendarDate(component.value as Date).toString(), + ); expect(el?.getAttribute("error")).toBe(`${component.error}`); - expect(el?.getAttribute("min")).toBe(component.min?.toString()); - expect(el?.getAttribute("max")).toBe(component.max?.toString()); + expect(el?.getAttribute("min")).toBe( + new CalendarDate(component.min as Date).toString(), + ); + expect(el?.getAttribute("max")).toBe( + new CalendarDate(component.max as Date).toString(), + ); expect(el?.getAttribute("mt")).toBe(component.mt); expect(el?.getAttribute("mb")).toBe(component.mb); expect(el?.getAttribute("ml")).toBe(component.ml); @@ -93,7 +99,7 @@ describe("GoABDatePicker", () => { fireEvent( el, new CustomEvent("_change", { - detail: { name: component.name, value: new Date() }, + detail: { name: component.name, value: new CalendarDate(new Date()).toString() }, }), ); diff --git a/libs/angular-components/src/lib/components/date-picker/date-picker.ts b/libs/angular-components/src/lib/components/date-picker/date-picker.ts index b31539ca5f..32ccbac7eb 100644 --- a/libs/angular-components/src/lib/components/date-picker/date-picker.ts +++ b/libs/angular-components/src/lib/components/date-picker/date-picker.ts @@ -1,6 +1,8 @@ import { + CalendarDate, GoabDatePickerInputType, GoabDatePickerOnChangeDetail, + Once, } from "@abgov/ui-components-common"; import { CUSTOM_ELEMENTS_SCHEMA, @@ -16,33 +18,34 @@ import { Renderer2, } from "@angular/core"; import { NG_VALUE_ACCESSOR } from "@angular/forms"; -import { CommonModule } from "@angular/common"; import { GoabControlValueAccessor } from "../base.component"; @Component({ standalone: true, selector: "goab-date-picker", - imports: [CommonModule], - template: ` - `, + + template: `@if (isReady) { + + + }`, schemas: [CUSTOM_ELEMENTS_SCHEMA], providers: [ { @@ -54,6 +57,8 @@ import { GoabControlValueAccessor } from "../base.component"; }) export class GoabDatePicker extends GoabControlValueAccessor implements OnInit { isReady = false; + version = "2"; + @Input() name?: string; @Input() override value?: Date | string | null | undefined; @Input() min?: Date | string; @@ -67,18 +72,37 @@ export class GoabDatePicker extends GoabControlValueAccessor implements OnInit { @Output() onChange = new EventEmitter(); - formatValue(val: Date | string | null | undefined): string { + private once: Once = new Once(); + + private formatValue(param: string, val: Date | string | null | undefined): string { if (!val) return ""; - if (val instanceof Date) { - return val.toISOString(); - } + this.once.when(val instanceof Date).do(param, () => { + console.warn( + `GoabDatePicker: Using Date for '${param}' is deprecated. Use a string in YYYY-MM-DD format instead.`, + ); + }); + + return new CalendarDate(val).toString(); + } + + valueString(): string { + return this.formatValue("value", this.value); + } + + minString(): string { + return this.formatValue("min", this.min); + } - return val; + maxString(): string { + return this.formatValue("max", this.max); } _onChange(e: Event) { - const detail = { ...(e as CustomEvent).detail, event: e }; + const detail = { + ...(e as CustomEvent).detail, + event: e, + }; this.onChange.emit(detail); this.markAsTouched(); this.fcChange?.(detail.value); @@ -112,8 +136,9 @@ export class GoabDatePicker extends GoabControlValueAccessor implements OnInit { this.elementRef.nativeElement.disabled = isDisabled; } - @HostListener("disabledChange", ["$event.detail.disabled"]) - listenDisabledChange(isDisabled: boolean) { + @HostListener("disabledChange", ["$event"]) + listenDisabledChange(event: Event) { + const isDisabled = (event as CustomEvent<{ disabled: boolean }>).detail.disabled; this.setDisabledState(isDisabled); } @@ -128,7 +153,7 @@ export class GoabDatePicker extends GoabControlValueAccessor implements OnInit { this.renderer.setAttribute( datePickerEl, "value", - value instanceof Date ? value.toISOString() : value, + value instanceof Date ? new CalendarDate(value).toString() : value, ); } } diff --git a/libs/angular-components/src/lib/components/details/details.ts b/libs/angular-components/src/lib/components/details/details.ts index 337e898218..be9f68b5cd 100644 --- a/libs/angular-components/src/lib/components/details/details.ts +++ b/libs/angular-components/src/lib/components/details/details.ts @@ -6,27 +6,28 @@ import { OnInit, ChangeDetectorRef, } from "@angular/core"; -import { CommonModule } from "@angular/common"; + import { GoabBaseComponent } from "../base.component"; @Component({ standalone: true, selector: "goab-details", - imports: [CommonModule], + template: ` - - - + @if (isReady) { + + + + } `, schemas: [CUSTOM_ELEMENTS_SCHEMA], }) diff --git a/libs/angular-components/src/lib/components/divider/divider.ts b/libs/angular-components/src/lib/components/divider/divider.ts index 46c3f7820e..3b0ad3df10 100644 --- a/libs/angular-components/src/lib/components/divider/divider.ts +++ b/libs/angular-components/src/lib/components/divider/divider.ts @@ -4,23 +4,24 @@ import { OnInit, ChangeDetectorRef, } from "@angular/core"; -import { CommonModule } from "@angular/common"; + import { GoabBaseComponent } from "../base.component"; @Component({ standalone: true, selector: "goab-divider", - imports: [CommonModule], + template: ` - - + @if (isReady) { + + + } `, schemas: [CUSTOM_ELEMENTS_SCHEMA], }) diff --git a/libs/angular-components/src/lib/components/drawer/drawer.ts b/libs/angular-components/src/lib/components/drawer/drawer.ts index 7061bc0922..d068f5132b 100644 --- a/libs/angular-components/src/lib/components/drawer/drawer.ts +++ b/libs/angular-components/src/lib/components/drawer/drawer.ts @@ -1,4 +1,4 @@ -import { NgTemplateOutlet, CommonModule } from "@angular/common"; +import { NgTemplateOutlet } from "@angular/common"; import { booleanAttribute, Component, @@ -15,15 +15,15 @@ import { GoabDrawerPosition, GoabDrawerSize } from "@abgov/ui-components-common" @Component({ standalone: true, selector: "goab-drawer", - imports: [NgTemplateOutlet, CommonModule], - template: ` + imports: [NgTemplateOutlet], + template: `@if (isReady) { @@ -34,10 +34,12 @@ import { GoabDrawerPosition, GoabDrawerSize } from "@abgov/ui-components-common"
- `, + } `, schemas: [CUSTOM_ELEMENTS_SCHEMA], }) export class GoabDrawer implements OnInit { + version = "2"; + @Input({ required: true, transform: booleanAttribute }) open!: boolean; @Input({ required: true }) position!: GoabDrawerPosition; @Input() heading!: string | TemplateRef; diff --git a/libs/angular-components/src/lib/components/dropdown-item/dropdown-item.ts b/libs/angular-components/src/lib/components/dropdown-item/dropdown-item.ts index 4fc60b46cb..f31c874b50 100644 --- a/libs/angular-components/src/lib/components/dropdown-item/dropdown-item.ts +++ b/libs/angular-components/src/lib/components/dropdown-item/dropdown-item.ts @@ -5,15 +5,14 @@ import { OnInit, ChangeDetectorRef, } from "@angular/core"; -import { CommonModule } from "@angular/common"; + import { GoabDropdownItemMountType } from "@abgov/ui-components-common"; @Component({ standalone: true, selector: "goab-dropdown-item", - template: ` + template: ` @if (isReady) { - `, + }`, schemas: [CUSTOM_ELEMENTS_SCHEMA], - imports: [CommonModule], }) export class GoabDropdownItem implements OnInit { @Input() value?: string; diff --git a/libs/angular-components/src/lib/components/dropdown/dropdown.spec.ts b/libs/angular-components/src/lib/components/dropdown/dropdown.spec.ts index c9e58d824c..f19b085a2e 100644 --- a/libs/angular-components/src/lib/components/dropdown/dropdown.spec.ts +++ b/libs/angular-components/src/lib/components/dropdown/dropdown.spec.ts @@ -78,7 +78,12 @@ describe("GoABDropdown", () => { beforeEach(fakeAsync(() => { TestBed.configureTestingModule({ - imports: [TestDropdownComponent, GoabDropdown, GoabDropdownItem, ReactiveFormsModule], + imports: [ + TestDropdownComponent, + GoabDropdown, + GoabDropdownItem, + ReactiveFormsModule, + ], schemas: [CUSTOM_ELEMENTS_SCHEMA], }).compileComponents(); @@ -158,8 +163,12 @@ describe("GoABDropdown", () => { describe("writeValue", () => { it("should set value attribute when writeValue is called with a value", () => { - const dropdownComponent = fixture.debugElement.query(By.css("goab-dropdown")).componentInstance; - const dropdownElement = fixture.debugElement.query(By.css("goa-dropdown")).nativeElement; + const dropdownComponent = fixture.debugElement.query( + By.css("goab-dropdown"), + ).componentInstance; + const dropdownElement = fixture.debugElement.query( + By.css("goa-dropdown"), + ).nativeElement; dropdownComponent.writeValue("red"); expect(dropdownElement.getAttribute("value")).toBe("red"); @@ -169,8 +178,12 @@ describe("GoABDropdown", () => { }); it("should set value attribute to empty string when writeValue is called with null", () => { - const dropdownComponent = fixture.debugElement.query(By.css("goab-dropdown")).componentInstance; - const dropdownElement = fixture.debugElement.query(By.css("goa-dropdown")).nativeElement; + const dropdownComponent = fixture.debugElement.query( + By.css("goab-dropdown"), + ).componentInstance; + const dropdownElement = fixture.debugElement.query( + By.css("goa-dropdown"), + ).nativeElement; // First set a value dropdownComponent.writeValue("red"); @@ -182,7 +195,9 @@ describe("GoABDropdown", () => { }); it("should update component value property", () => { - const dropdownComponent = fixture.debugElement.query(By.css("goab-dropdown")).componentInstance; + const dropdownComponent = fixture.debugElement.query( + By.css("goab-dropdown"), + ).componentInstance; dropdownComponent.writeValue("yellow"); expect(dropdownComponent.value).toBe("yellow"); @@ -194,8 +209,12 @@ describe("GoABDropdown", () => { describe("_onChange", () => { it("should update component value when user selects an option", () => { - const dropdownComponent = fixture.debugElement.query(By.css("goab-dropdown")).componentInstance; - const dropdownElement = fixture.debugElement.query(By.css("goa-dropdown")).nativeElement; + const dropdownComponent = fixture.debugElement.query( + By.css("goab-dropdown"), + ).componentInstance; + const dropdownElement = fixture.debugElement.query( + By.css("goa-dropdown"), + ).nativeElement; fireEvent( dropdownElement, @@ -208,8 +227,12 @@ describe("GoABDropdown", () => { }); it("should update value to null when cleared", () => { - const dropdownComponent = fixture.debugElement.query(By.css("goab-dropdown")).componentInstance; - const dropdownElement = fixture.debugElement.query(By.css("goa-dropdown")).nativeElement; + const dropdownComponent = fixture.debugElement.query( + By.css("goab-dropdown"), + ).componentInstance; + const dropdownElement = fixture.debugElement.query( + By.css("goa-dropdown"), + ).nativeElement; // Set initial value fireEvent( @@ -230,4 +253,4 @@ describe("GoABDropdown", () => { expect(dropdownComponent.value).toBe(null); }); }); -}); \ No newline at end of file +}); diff --git a/libs/angular-components/src/lib/components/dropdown/dropdown.ts b/libs/angular-components/src/lib/components/dropdown/dropdown.ts index a2edf0c1de..dbfb2c31ab 100644 --- a/libs/angular-components/src/lib/components/dropdown/dropdown.ts +++ b/libs/angular-components/src/lib/components/dropdown/dropdown.ts @@ -1,4 +1,8 @@ -import { GoabDropdownOnChangeDetail, GoabIconType } from "@abgov/ui-components-common"; +import { + GoabDropdownOnChangeDetail, + GoabDropdownSize, + GoabIconType, +} from "@abgov/ui-components-common"; import { CUSTOM_ELEMENTS_SCHEMA, Component, @@ -12,44 +16,47 @@ import { Renderer2, } from "@angular/core"; import { NG_VALUE_ACCESSOR } from "@angular/forms"; -import { CommonModule } from "@angular/common"; + import { GoabControlValueAccessor } from "../base.component"; // "disabled", "value", "id" is an exposed property of HTMLInputElement, no need to bind with attr @Component({ standalone: true, selector: "goab-dropdown", - imports: [CommonModule], + template: ` - - - + @if (isReady) { + + + + } `, schemas: [CUSTOM_ELEMENTS_SCHEMA], providers: [ @@ -73,6 +80,7 @@ export class GoabDropdown extends GoabControlValueAccessor implements OnInit { @Input() width?: string; @Input() maxWidth?: string; @Input() autoComplete?: string; + @Input() size?: GoabDropdownSize = "default"; /*** * @deprecated This property has no effect and will be removed in a future version */ @@ -80,6 +88,7 @@ export class GoabDropdown extends GoabControlValueAccessor implements OnInit { @Output() onChange = new EventEmitter(); isReady = false; + version = "2"; constructor( private cdr: ChangeDetectorRef, diff --git a/libs/angular-components/src/lib/components/file-upload-card/file-upload-card.ts b/libs/angular-components/src/lib/components/file-upload-card/file-upload-card.ts index 81f1e18443..173673412c 100644 --- a/libs/angular-components/src/lib/components/file-upload-card/file-upload-card.ts +++ b/libs/angular-components/src/lib/components/file-upload-card/file-upload-card.ts @@ -12,25 +12,25 @@ import { OnInit, ChangeDetectorRef, } from "@angular/core"; -import { CommonModule } from "@angular/common"; @Component({ standalone: true, selector: "goab-file-upload-card", - template: ` - `, + template: ` @if (isReady) { + + + }`, schemas: [CUSTOM_ELEMENTS_SCHEMA], - imports: [CommonModule], }) export class GoabFileUploadCard implements OnInit { @Input({ required: true }) filename!: string; @@ -44,6 +44,7 @@ export class GoabFileUploadCard implements OnInit { @Output() onDelete = new EventEmitter(); isReady = false; + version = "2"; constructor(private cdr: ChangeDetectorRef) {} diff --git a/libs/angular-components/src/lib/components/file-upload-input/file-upload-input.ts b/libs/angular-components/src/lib/components/file-upload-input/file-upload-input.ts index a3af7b4d78..d3e23f545f 100644 --- a/libs/angular-components/src/lib/components/file-upload-input/file-upload-input.ts +++ b/libs/angular-components/src/lib/components/file-upload-input/file-upload-input.ts @@ -11,28 +11,29 @@ import { OnInit, ChangeDetectorRef, } from "@angular/core"; -import { CommonModule } from "@angular/common"; + import { GoabBaseComponent } from "../base.component"; @Component({ standalone: true, selector: "goab-file-upload-input", - template: ` - `, + template: `@if (isReady) { + + + }`, schemas: [CUSTOM_ELEMENTS_SCHEMA], - imports: [CommonModule], }) export class GoabFileUploadInput extends GoabBaseComponent implements OnInit { @Input() id?: string = ""; @@ -43,6 +44,7 @@ export class GoabFileUploadInput extends GoabBaseComponent implements OnInit { @Output() onSelectFile = new EventEmitter(); isReady = false; + version = "2"; constructor(private cdr: ChangeDetectorRef) { super(); @@ -58,7 +60,10 @@ export class GoabFileUploadInput extends GoabBaseComponent implements OnInit { } _onSelectFile(e: Event) { - const detail = { ...(e as CustomEvent).detail, event: e }; + const detail = { + ...(e as CustomEvent).detail, + event: e, + }; this.onSelectFile.emit(detail); } } diff --git a/libs/angular-components/src/lib/components/filter-chip/filter-chip.spec.ts b/libs/angular-components/src/lib/components/filter-chip/filter-chip.spec.ts index 24f650f86a..a0dc09f1bc 100644 --- a/libs/angular-components/src/lib/components/filter-chip/filter-chip.spec.ts +++ b/libs/angular-components/src/lib/components/filter-chip/filter-chip.spec.ts @@ -64,7 +64,9 @@ describe("GoabFilterChip", () => { })); it("should render properties", () => { - const chipElement = fixture.debugElement.query(By.css("goa-filter-chip")).nativeElement; + const chipElement = fixture.debugElement.query( + By.css("goa-filter-chip"), + ).nativeElement; expect(chipElement.getAttribute("error")).toBe(`${component.error}`); expect(chipElement.getAttribute("content")).toBe(component.content); expect(chipElement.getAttribute("icontheme")).toBe(`${component.iconTheme}`); @@ -77,7 +79,9 @@ describe("GoabFilterChip", () => { it("should allow to handle delete event", fakeAsync(() => { const onClick = jest.spyOn(component, "onClick"); - const chipElement = fixture.debugElement.query(By.css("goa-filter-chip")).nativeElement; + const chipElement = fixture.debugElement.query( + By.css("goa-filter-chip"), + ).nativeElement; fireEvent(chipElement, new CustomEvent("_click")); expect(onClick).toHaveBeenCalled(); diff --git a/libs/angular-components/src/lib/components/filter-chip/filter-chip.ts b/libs/angular-components/src/lib/components/filter-chip/filter-chip.ts index f0b97cafbd..85b77b5b15 100644 --- a/libs/angular-components/src/lib/components/filter-chip/filter-chip.ts +++ b/libs/angular-components/src/lib/components/filter-chip/filter-chip.ts @@ -1,4 +1,4 @@ -import { GoabChipTheme } from "@abgov/ui-components-common"; +import { GoabChipTheme, GoabIconType } from "@abgov/ui-components-common"; import { CUSTOM_ELEMENTS_SCHEMA, Component, @@ -9,38 +9,44 @@ import { OnInit, ChangeDetectorRef, } from "@angular/core"; -import { CommonModule } from "@angular/common"; + import { GoabBaseComponent } from "../base.component"; @Component({ standalone: true, selector: "goab-filter-chip", - template: ` - - `, + template: `@if (isReady) { + + + + }`, schemas: [CUSTOM_ELEMENTS_SCHEMA], - imports: [CommonModule], }) export class GoabFilterChip extends GoabBaseComponent implements OnInit { @Input({ transform: booleanAttribute }) error?: boolean; @Input({ transform: booleanAttribute }) deletable?: boolean; @Input() content?: string = ""; @Input() iconTheme?: GoabChipTheme; + @Input() secondaryText?: string = ""; + @Input() leadingIcon?: GoabIconType | null = null; @Output() onClick = new EventEmitter(); isReady = false; + version = "2"; constructor(private cdr: ChangeDetectorRef) { super(); diff --git a/libs/angular-components/src/lib/components/footer-meta-section/footer-meta-section.ts b/libs/angular-components/src/lib/components/footer-meta-section/footer-meta-section.ts index 4452d7f9de..5250b47823 100644 --- a/libs/angular-components/src/lib/components/footer-meta-section/footer-meta-section.ts +++ b/libs/angular-components/src/lib/components/footer-meta-section/footer-meta-section.ts @@ -5,19 +5,17 @@ import { OnInit, ChangeDetectorRef, } from "@angular/core"; -import { CommonModule } from "@angular/common"; @Component({ standalone: true, selector: "goab-app-footer-meta-section", - template: ` - + template: `@if (isReady) { + - `, + }`, styles: [":host { width: 100%; }"], schemas: [CUSTOM_ELEMENTS_SCHEMA], - imports: [CommonModule], }) export class GoabAppFooterMetaSection implements OnInit { @Input() testId?: string; diff --git a/libs/angular-components/src/lib/components/footer-nav-section/footer-nav-section.ts b/libs/angular-components/src/lib/components/footer-nav-section/footer-nav-section.ts index a6874f399f..79f8ffc242 100644 --- a/libs/angular-components/src/lib/components/footer-nav-section/footer-nav-section.ts +++ b/libs/angular-components/src/lib/components/footer-nav-section/footer-nav-section.ts @@ -5,24 +5,21 @@ import { OnInit, ChangeDetectorRef, } from "@angular/core"; -import { CommonModule } from "@angular/common"; @Component({ standalone: true, selector: "goab-app-footer-nav-section", - template: ` + template: `@if (isReady) { - `, + }`, styles: [":host { width: 100%; }"], schemas: [CUSTOM_ELEMENTS_SCHEMA], - imports: [CommonModule], }) export class GoabAppFooterNavSection implements OnInit { @Input() heading?: string; diff --git a/libs/angular-components/src/lib/components/footer/footer.ts b/libs/angular-components/src/lib/components/footer/footer.ts index 753e2f49da..fc545157a1 100644 --- a/libs/angular-components/src/lib/components/footer/footer.ts +++ b/libs/angular-components/src/lib/components/footer/footer.ts @@ -5,25 +5,23 @@ import { OnInit, ChangeDetectorRef, } from "@angular/core"; -import { CommonModule } from "@angular/common"; @Component({ standalone: true, selector: "goab-app-footer", - template: ` + template: `@if (isReady) { - `, + }`, schemas: [CUSTOM_ELEMENTS_SCHEMA], - imports: [CommonModule], }) export class GoabAppFooter implements OnInit { @Input() maxContentWidth?: string; @@ -31,6 +29,7 @@ export class GoabAppFooter implements OnInit { @Input() url?: string; isReady = false; + version = "2"; constructor(private cdr: ChangeDetectorRef) {} diff --git a/libs/angular-components/src/lib/components/form-item/form-item.spec.ts b/libs/angular-components/src/lib/components/form-item/form-item.spec.ts index fe2dc283da..b45299d120 100644 --- a/libs/angular-components/src/lib/components/form-item/form-item.spec.ts +++ b/libs/angular-components/src/lib/components/form-item/form-item.spec.ts @@ -4,11 +4,10 @@ import { Component, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; import { GoabFormItemRequirement, Spacing } from "@abgov/ui-components-common"; import { By } from "@angular/platform-browser"; import { GoabFormItemSlot } from "./form-item-slot"; -import { CommonModule } from "@angular/common"; @Component({ standalone: true, - imports: [GoabFormItem, GoabFormItemSlot, CommonModule], + imports: [GoabFormItem, GoabFormItemSlot], schemas: [CUSTOM_ELEMENTS_SCHEMA], template: ` - This is an error slot - This is a helpText slot + @if (errorSlot) { + This is an error slot + } + @if (helpTextSlot) { + + This is a helpText slot + + } `, }) @@ -89,6 +94,8 @@ describe("GoABFormItem", () => { expect(el?.getAttribute("mb")).toBe(component.mb); expect(el?.getAttribute("mr")).toBe(component.mr); expect(el?.getAttribute("ml")).toBe(component.ml); + expect(el?.getAttribute("version")).toBe("2"); + expect(el?.getAttribute("type")).toBe(""); // Children is rendered expect(el?.querySelector("input[data-testid='foo']")).toBeTruthy(); diff --git a/libs/angular-components/src/lib/components/form-item/form-item.ts b/libs/angular-components/src/lib/components/form-item/form-item.ts index fbe0a3a1fe..3c71eba206 100644 --- a/libs/angular-components/src/lib/components/form-item/form-item.ts +++ b/libs/angular-components/src/lib/components/form-item/form-item.ts @@ -9,20 +9,22 @@ import { OnInit, ChangeDetectorRef, } from "@angular/core"; -import { CommonModule } from "@angular/common"; + import { GoabBaseComponent } from "../base.component"; +import { GoabFormItemType } from "@abgov/ui-components-common"; @Component({ standalone: true, selector: "goab-form-item", - template: ` + template: `@if (isReady) { - `, + }`, schemas: [CUSTOM_ELEMENTS_SCHEMA], - imports: [CommonModule], }) export class GoabFormItem extends GoabBaseComponent implements OnInit { @Input() label?: string; @@ -48,6 +49,7 @@ export class GoabFormItem extends GoabBaseComponent implements OnInit { @Input() requirement?: GoabFormItemRequirement; @Input() maxWidth?: string; @Input() id?: string; + @Input() type?: GoabFormItemType = ""; /** * Public form: to arrange fields in the summary */ @@ -58,6 +60,7 @@ export class GoabFormItem extends GoabBaseComponent implements OnInit { @Input() name?: string; isReady = false; + version = "2"; constructor(private cdr: ChangeDetectorRef) { super(); diff --git a/libs/angular-components/src/lib/components/form-step/form-step.ts b/libs/angular-components/src/lib/components/form-step/form-step.ts index 4696442e83..4abf80e266 100644 --- a/libs/angular-components/src/lib/components/form-step/form-step.ts +++ b/libs/angular-components/src/lib/components/form-step/form-step.ts @@ -1,17 +1,21 @@ import { GoabFormStepStatus } from "@abgov/ui-components-common"; -import { CUSTOM_ELEMENTS_SCHEMA, Component, Input, OnInit, ChangeDetectorRef } from "@angular/core"; -import { CommonModule } from "@angular/common"; +import { + CUSTOM_ELEMENTS_SCHEMA, + Component, + Input, + OnInit, + ChangeDetectorRef, +} from "@angular/core"; @Component({ standalone: true, selector: "goab-form-step", template: ` - `, - imports: [CommonModule], + @if (isReady) { + + } + `, + schemas: [CUSTOM_ELEMENTS_SCHEMA], }) export class GoabFormStep implements OnInit { diff --git a/libs/angular-components/src/lib/components/form-stepper/form-stepper.spec.ts b/libs/angular-components/src/lib/components/form-stepper/form-stepper.spec.ts index f7fd35ad39..0ae51a7574 100644 --- a/libs/angular-components/src/lib/components/form-stepper/form-stepper.spec.ts +++ b/libs/angular-components/src/lib/components/form-stepper/form-stepper.spec.ts @@ -76,6 +76,6 @@ describe("GoABFormStepper", () => { fireEvent(el, new CustomEvent("_change")); - expect(onChange).toBeCalledTimes(1); + expect(onChange).toHaveBeenCalledTimes(1); }); }); diff --git a/libs/angular-components/src/lib/components/form-stepper/form-stepper.ts b/libs/angular-components/src/lib/components/form-stepper/form-stepper.ts index 0349fef45a..54dbcf9b30 100644 --- a/libs/angular-components/src/lib/components/form-stepper/form-stepper.ts +++ b/libs/angular-components/src/lib/components/form-stepper/form-stepper.ts @@ -8,27 +8,27 @@ import { OnInit, ChangeDetectorRef, } from "@angular/core"; -import { CommonModule } from "@angular/common"; import { GoabBaseComponent } from "../base.component"; @Component({ standalone: true, selector: "goab-form-stepper", template: ` - - - + @if (isReady) { + + + + } `, - imports: [CommonModule], + schemas: [CUSTOM_ELEMENTS_SCHEMA], }) export class GoabFormStepper extends GoabBaseComponent implements OnInit { diff --git a/libs/angular-components/src/lib/components/form/fieldset.spec.ts b/libs/angular-components/src/lib/components/form/fieldset.spec.ts index fa23cf9605..8e329e2eb5 100644 --- a/libs/angular-components/src/lib/components/form/fieldset.spec.ts +++ b/libs/angular-components/src/lib/components/form/fieldset.spec.ts @@ -23,7 +23,9 @@ class TestFieldsetComponent { dispatchOn: "change" | "continue" = "continue"; id?: string; - handleContinue(event: GoabFieldsetOnContinueDetail): void {/** do nothing **/} + handleContinue(event: GoabFieldsetOnContinueDetail): void { + /** do nothing **/ + } } describe("GoabFieldSet", () => { diff --git a/libs/angular-components/src/lib/components/form/fieldset.ts b/libs/angular-components/src/lib/components/form/fieldset.ts index 5428e87c7d..aca147131e 100644 --- a/libs/angular-components/src/lib/components/form/fieldset.ts +++ b/libs/angular-components/src/lib/components/form/fieldset.ts @@ -1,17 +1,25 @@ -import { Component, CUSTOM_ELEMENTS_SCHEMA, Input, Output, EventEmitter } from "@angular/core"; -import { GoabFormDispatchOn, GoabFieldsetOnContinueDetail } from "@abgov/ui-components-common"; +import { + Component, + CUSTOM_ELEMENTS_SCHEMA, + Input, + Output, + EventEmitter, +} from "@angular/core"; +import { + GoabFormDispatchOn, + GoabFieldsetOnContinueDetail, +} from "@abgov/ui-components-common"; @Component({ - selector: 'goab-fieldset', - template: ` - - - `, + selector: "goab-fieldset", + template: ` + + `, standalone: true, schemas: [CUSTOM_ELEMENTS_SCHEMA], }) diff --git a/libs/angular-components/src/lib/components/form/public-form-page.spec.ts b/libs/angular-components/src/lib/components/form/public-form-page.spec.ts index 805f87e8de..48a7c01761 100644 --- a/libs/angular-components/src/lib/components/form/public-form-page.spec.ts +++ b/libs/angular-components/src/lib/components/form/public-form-page.spec.ts @@ -47,7 +47,9 @@ class TestPublicFormPageComponent { mb = "l" as Spacing; ml = "xl" as Spacing; - handleContinue(event: Event): void {/** do nothing **/} + handleContinue(event: Event): void { + /** do nothing **/ + } } describe("GoabPublicFormPage", () => { @@ -94,14 +96,14 @@ describe("GoabPublicFormPage", () => { const detail = { el: document.createElement("form"), state: { - "field1": { + field1: { name: "field1", label: "Field 1", value: "test", - order: 1 - } + order: 1, + }, }, - cancelled: false + cancelled: false, }; el.dispatchEvent(new CustomEvent("_continue", { detail })); diff --git a/libs/angular-components/src/lib/components/form/public-form-page.ts b/libs/angular-components/src/lib/components/form/public-form-page.ts index bc3b6623f1..52c47c3ecb 100644 --- a/libs/angular-components/src/lib/components/form/public-form-page.ts +++ b/libs/angular-components/src/lib/components/form/public-form-page.ts @@ -12,29 +12,29 @@ import { } from "@abgov/ui-components-common"; @Component({ - selector: "goab-public-form-page", - standalone: true, - template: ` - - - - `, - schemas: [CUSTOM_ELEMENTS_SCHEMA] + selector: "goab-public-form-page", + standalone: true, + template: ` + + + + `, + schemas: [CUSTOM_ELEMENTS_SCHEMA], }) export class GoabPublicFormPage extends GoabBaseComponent { @Input() id = ""; @@ -45,7 +45,7 @@ export class GoabPublicFormPage extends GoabBaseComponent { @Input() backUrl = ""; @Input() type: GoabPublicFormPageStep = "step"; @Input() buttonText = ""; - @Input() buttonVisibility : GoabPublicFormPageButtonVisibility = "visible"; + @Input() buttonVisibility: GoabPublicFormPageButtonVisibility = "visible"; /** * triggers when the form page continues to the next step diff --git a/libs/angular-components/src/lib/components/form/public-form-summary.spec.ts b/libs/angular-components/src/lib/components/form/public-form-summary.spec.ts index 4518b473e0..553e32397d 100644 --- a/libs/angular-components/src/lib/components/form/public-form-summary.spec.ts +++ b/libs/angular-components/src/lib/components/form/public-form-summary.spec.ts @@ -7,9 +7,7 @@ import { By } from "@angular/platform-browser"; standalone: true, imports: [GoabPublicFormSummary], template: ` - +
Test content
`, @@ -35,7 +33,9 @@ describe("GoabPublicFormSummary", () => { it("should render with properties", () => { fixture.detectChanges(); - const el = fixture.debugElement.query(By.css("goa-public-form-summary")).nativeElement; + const el = fixture.debugElement.query( + By.css("goa-public-form-summary"), + ).nativeElement; expect(el?.getAttribute("heading")).toBe(component.heading); diff --git a/libs/angular-components/src/lib/components/form/public-form-summary.ts b/libs/angular-components/src/lib/components/form/public-form-summary.ts index dfc281b27d..be2aa640fa 100644 --- a/libs/angular-components/src/lib/components/form/public-form-summary.ts +++ b/libs/angular-components/src/lib/components/form/public-form-summary.ts @@ -4,13 +4,11 @@ import { Component, CUSTOM_ELEMENTS_SCHEMA, Input } from "@angular/core"; selector: "goab-public-form-summary", standalone: true, template: ` - - - + + + `, - schemas: [CUSTOM_ELEMENTS_SCHEMA] + schemas: [CUSTOM_ELEMENTS_SCHEMA], }) export class GoabPublicFormSummary { @Input() heading?: string; diff --git a/libs/angular-components/src/lib/components/form/public-form.spec.ts b/libs/angular-components/src/lib/components/form/public-form.spec.ts index ce4696f37c..00645040c4 100644 --- a/libs/angular-components/src/lib/components/form/public-form.spec.ts +++ b/libs/angular-components/src/lib/components/form/public-form.spec.ts @@ -23,9 +23,15 @@ class TestPublicFormComponent { status: GoabPublicFormStatus = "complete"; name = "test-form"; - handleInit(event: Event): void {/** do nothing **/} - handleComplete(event: GoabFormState): void {/** do nothing **/} - handleStateChange(event: GoabFormState): void {/** do nothing **/} + handleInit(event: Event): void { + /** do nothing **/ + } + handleComplete(event: GoabFormState): void { + /** do nothing **/ + } + handleStateChange(event: GoabFormState): void { + /** do nothing **/ + } } describe("GoabPublicForm", () => { @@ -60,7 +66,7 @@ describe("GoabPublicForm", () => { const el = fixture.debugElement.query(By.css("goa-public-form")).nativeElement; const detail = { - el: document.createElement("form") + el: document.createElement("form"), }; el.dispatchEvent(new CustomEvent("_init", { detail })); @@ -77,7 +83,7 @@ describe("GoabPublicForm", () => { form: {}, history: [], editting: "", - status: "complete" + status: "complete", }; el.dispatchEvent(new CustomEvent("_complete", { detail })); @@ -94,7 +100,7 @@ describe("GoabPublicForm", () => { form: {}, history: [], editting: "", - status: "complete" + status: "complete", }; const detail = { data: formState }; diff --git a/libs/angular-components/src/lib/components/form/public-form.ts b/libs/angular-components/src/lib/components/form/public-form.ts index f07e3127a9..7038516075 100644 --- a/libs/angular-components/src/lib/components/form/public-form.ts +++ b/libs/angular-components/src/lib/components/form/public-form.ts @@ -1,21 +1,27 @@ -import { Component, CUSTOM_ELEMENTS_SCHEMA, EventEmitter, Input, Output } from "@angular/core"; +import { + Component, + CUSTOM_ELEMENTS_SCHEMA, + EventEmitter, + Input, + Output, +} from "@angular/core"; import { GoabFormState, GoabPublicFormStatus } from "@abgov/ui-components-common"; @Component({ selector: "goab-public-form", standalone: true, template: ` - - - + + + `, - schemas: [CUSTOM_ELEMENTS_SCHEMA] + schemas: [CUSTOM_ELEMENTS_SCHEMA], }) export class GoabPublicForm { @Input() status?: GoabPublicFormStatus = "complete"; @@ -25,7 +31,6 @@ export class GoabPublicForm { @Output() onComplete = new EventEmitter(); @Output() onStateChange = new EventEmitter(); - _onInit(e: Event) { this.onInit.emit(e); } diff --git a/libs/angular-components/src/lib/components/form/public-subform-index.spec.ts b/libs/angular-components/src/lib/components/form/public-subform-index.spec.ts index 7f6a995a5b..4a21df103a 100644 --- a/libs/angular-components/src/lib/components/form/public-subform-index.spec.ts +++ b/libs/angular-components/src/lib/components/form/public-subform-index.spec.ts @@ -50,7 +50,9 @@ describe("GoabPublicSubformIndex", () => { it("should render with properties", () => { fixture.detectChanges(); - const el = fixture.debugElement.query(By.css("goa-public-subform-index")).nativeElement; + const el = fixture.debugElement.query( + By.css("goa-public-subform-index"), + ).nativeElement; expect(el?.getAttribute("heading")).toBe(component.heading); expect(el?.getAttribute("section-title")).toBe(component.sectionTitle); @@ -76,7 +78,9 @@ describe("GoabPublicSubformIndex", () => { it("should have the correct slot attribute on host element", () => { fixture.detectChanges(); - const hostElement = fixture.debugElement.query(By.css("goab-public-subform-index")).nativeElement; + const hostElement = fixture.debugElement.query( + By.css("goab-public-subform-index"), + ).nativeElement; expect(hostElement.getAttribute("slot")).toBe("subform-index"); }); @@ -92,7 +96,9 @@ describe("GoabPublicSubformIndex", () => { fixture.detectChanges(); - const el = fixture.debugElement.query(By.css("goa-public-subform-index")).nativeElement; + const el = fixture.debugElement.query( + By.css("goa-public-subform-index"), + ).nativeElement; expect(el?.getAttribute("heading")).toBe("Updated Heading"); expect(el?.getAttribute("section-title")).toBe("Updated Section"); diff --git a/libs/angular-components/src/lib/components/form/public-subform-index.ts b/libs/angular-components/src/lib/components/form/public-subform-index.ts index fc973427ef..fb8ac421ff 100644 --- a/libs/angular-components/src/lib/components/form/public-subform-index.ts +++ b/libs/angular-components/src/lib/components/form/public-subform-index.ts @@ -5,21 +5,21 @@ import { GoabBaseComponent } from "../base.component"; selector: "goab-public-subform-index", standalone: true, host: { - 'slot': 'subform-index' + slot: "subform-index", }, template: ` - - - + + + `, schemas: [CUSTOM_ELEMENTS_SCHEMA], }) diff --git a/libs/angular-components/src/lib/components/form/public-subform.ts b/libs/angular-components/src/lib/components/form/public-subform.ts index db51ceaba2..e5ae600534 100644 --- a/libs/angular-components/src/lib/components/form/public-subform.ts +++ b/libs/angular-components/src/lib/components/form/public-subform.ts @@ -1,25 +1,31 @@ -import { Component, CUSTOM_ELEMENTS_SCHEMA, EventEmitter, Input, Output } from "@angular/core"; +import { + Component, + CUSTOM_ELEMENTS_SCHEMA, + EventEmitter, + Input, + Output, +} from "@angular/core"; import { GoabBaseComponent } from "../base.component"; @Component({ selector: "goab-public-subform", standalone: true, template: ` - - - + + + `, - schemas: [CUSTOM_ELEMENTS_SCHEMA] + schemas: [CUSTOM_ELEMENTS_SCHEMA], }) export class GoabPublicSubform extends GoabBaseComponent { @Input() id?: string = ""; diff --git a/libs/angular-components/src/lib/components/form/task-list.spec.ts b/libs/angular-components/src/lib/components/form/task-list.spec.ts index d2737519ef..a780678e8e 100644 --- a/libs/angular-components/src/lib/components/form/task-list.spec.ts +++ b/libs/angular-components/src/lib/components/form/task-list.spec.ts @@ -7,9 +7,7 @@ import { By } from "@angular/platform-browser"; standalone: true, imports: [GoabPublicFormTaskList], template: ` - +
Task 1
Task 2
@@ -36,7 +34,9 @@ describe("GoabPublicFormTaskList", () => { it("should render with heading property", () => { fixture.detectChanges(); - const el = fixture.debugElement.query(By.css("goa-public-form-task-list")).nativeElement; + const el = fixture.debugElement.query( + By.css("goa-public-form-task-list"), + ).nativeElement; expect(el?.getAttribute("heading")).toBe(component.heading); @@ -54,7 +54,9 @@ describe("GoabPublicFormTaskList", () => { // Initial heading fixture.detectChanges(); - let el = fixture.debugElement.query(By.css("goa-public-form-task-list")).nativeElement; + let el = fixture.debugElement.query( + By.css("goa-public-form-task-list"), + ).nativeElement; expect(el?.getAttribute("heading")).toBe("Required Tasks"); // Change heading @@ -76,14 +78,18 @@ describe("GoabPublicFormTaskList", () => { component.heading = undefined as any; fixture.detectChanges(); - const el = fixture.debugElement.query(By.css("goa-public-form-task-list")).nativeElement; + const el = fixture.debugElement.query( + By.css("goa-public-form-task-list"), + ).nativeElement; expect(el?.hasAttribute("heading")).toBeFalsy(); }); it("should handle multiple nested elements", () => { fixture.detectChanges(); - const el = fixture.debugElement.query(By.css("goa-public-form-task-list")).nativeElement; + const el = fixture.debugElement.query( + By.css("goa-public-form-task-list"), + ).nativeElement; const taskItems = el?.querySelectorAll("[data-testid^='task-item']"); expect(taskItems?.length).toBe(2); @@ -96,15 +102,17 @@ describe("GoabPublicFormTaskList", () => { "Tasks & Requirements", "Tasks > 5", "Tasks < 10", - "Tasks with \"quotes\"", + 'Tasks with "quotes"', "Tasks with 'apostrophes'", ]; - specialHeadings.forEach(heading => { + specialHeadings.forEach((heading) => { component.heading = heading; fixture.detectChanges(); - const el = fixture.debugElement.query(By.css("goa-public-form-task-list")).nativeElement; + const el = fixture.debugElement.query( + By.css("goa-public-form-task-list"), + ).nativeElement; expect(el?.getAttribute("heading")).toBe(heading); }); }); diff --git a/libs/angular-components/src/lib/components/form/task-list.ts b/libs/angular-components/src/lib/components/form/task-list.ts index e57402ac5d..9cd79cdd8e 100644 --- a/libs/angular-components/src/lib/components/form/task-list.ts +++ b/libs/angular-components/src/lib/components/form/task-list.ts @@ -5,18 +5,18 @@ import { GoabBaseComponent } from "../base.component"; selector: "goab-public-form-task-list", standalone: true, template: ` - - - + + + `, - schemas: [CUSTOM_ELEMENTS_SCHEMA] + schemas: [CUSTOM_ELEMENTS_SCHEMA], }) export class GoabPublicFormTaskList extends GoabBaseComponent { @Input() heading?: string; -} \ No newline at end of file +} diff --git a/libs/angular-components/src/lib/components/form/task.spec.ts b/libs/angular-components/src/lib/components/form/task.spec.ts index 45541fec83..979458ce34 100644 --- a/libs/angular-components/src/lib/components/form/task.spec.ts +++ b/libs/angular-components/src/lib/components/form/task.spec.ts @@ -8,9 +8,7 @@ import { GoabPublicFormTaskStatus } from "@abgov/ui-components-common"; standalone: true, imports: [GoabPublicFormTask], template: ` - +
Task content
`, @@ -50,9 +48,13 @@ describe("GoabPublicFormTask", () => { }); it("should handle all valid status values", () => { - const statuses: GoabPublicFormTaskStatus[] = ["completed", "not-started", "cannot-start"]; + const statuses: GoabPublicFormTaskStatus[] = [ + "completed", + "not-started", + "cannot-start", + ]; - statuses.forEach(status => { + statuses.forEach((status) => { component.status = status; fixture.detectChanges(); diff --git a/libs/angular-components/src/lib/components/form/task.ts b/libs/angular-components/src/lib/components/form/task.ts index 7f610db363..d1140559b8 100644 --- a/libs/angular-components/src/lib/components/form/task.ts +++ b/libs/angular-components/src/lib/components/form/task.ts @@ -5,14 +5,12 @@ import { GoabPublicFormTaskStatus } from "@abgov/ui-components-common"; selector: "goab-public-form-task", standalone: true, template: ` - - - + + + `, - schemas: [CUSTOM_ELEMENTS_SCHEMA] + schemas: [CUSTOM_ELEMENTS_SCHEMA], }) export class GoabPublicFormTask { @Input() status?: GoabPublicFormTaskStatus; -} \ No newline at end of file +} diff --git a/libs/angular-components/src/lib/components/grid/grid.ts b/libs/angular-components/src/lib/components/grid/grid.ts index 5f5c6e03bf..19c20bdeb1 100644 --- a/libs/angular-components/src/lib/components/grid/grid.ts +++ b/libs/angular-components/src/lib/components/grid/grid.ts @@ -1,26 +1,33 @@ import { Spacing } from "@abgov/ui-components-common"; -import { CUSTOM_ELEMENTS_SCHEMA, Component, Input, OnInit, ChangeDetectorRef } from "@angular/core"; -import { CommonModule } from "@angular/common"; +import { + CUSTOM_ELEMENTS_SCHEMA, + Component, + Input, + OnInit, + ChangeDetectorRef, +} from "@angular/core"; + import { GoabBaseComponent } from "../base.component"; @Component({ standalone: true, selector: "goab-grid", template: ` - - - + @if (isReady) { + + + + } `, - imports: [CommonModule], + schemas: [CUSTOM_ELEMENTS_SCHEMA], }) export class GoabGrid extends GoabBaseComponent implements OnInit { diff --git a/libs/angular-components/src/lib/components/header-menu/header-menu.spec.ts b/libs/angular-components/src/lib/components/header-menu/header-menu.spec.ts index 72b3e0c0eb..5548c46d29 100644 --- a/libs/angular-components/src/lib/components/header-menu/header-menu.spec.ts +++ b/libs/angular-components/src/lib/components/header-menu/header-menu.spec.ts @@ -12,18 +12,21 @@ import { By } from "@angular/platform-browser"; [heading]="heading" [leadingIcon]="leadingIcon" [testId]="testId" + [slotName]="slotName" > - Home + Dashboard + Accounts `, }) class TestAppHeaderMenuComponent { - heading = "Test heading"; + heading?: string; leadingIcon?: GoabIconType; testId?: string; + slotName?: string; } -describe("GoABAppHeaderMenu", () => { +describe("GoabAppHeaderMenu", () => { let fixture: ComponentFixture; let component: TestAppHeaderMenuComponent; @@ -35,21 +38,76 @@ describe("GoABAppHeaderMenu", () => { fixture = TestBed.createComponent(TestAppHeaderMenuComponent); component = fixture.componentInstance; + })); + + it("should render with heading", fakeAsync(() => { + component.heading = "Menu label"; + fixture.detectChanges(); + tick(); + fixture.detectChanges(); - component.leadingIcon = "accessibility"; - component.testId = "foo"; + const el = fixture.debugElement.query(By.css("goa-app-header-menu")).nativeElement; + expect(el).toBeTruthy(); + expect(el.getAttribute("heading")).toBe("Menu label"); + })); + it("should render all properties", fakeAsync(() => { + component.heading = "Menu label"; + component.leadingIcon = "search"; + component.testId = "my-menu"; fixture.detectChanges(); tick(); fixture.detectChanges(); + + const el = fixture.debugElement.query(By.css("goa-app-header-menu")).nativeElement; + expect(el.getAttribute("heading")).toBe("Menu label"); + expect(el.getAttribute("leadingicon")).toBe("search"); + expect(el.getAttribute("testid")).toBe("my-menu"); })); - it("should render", () => { + it("should render projected content", fakeAsync(() => { + component.heading = "Menu label"; + fixture.detectChanges(); + tick(); + fixture.detectChanges(); + const el = fixture.debugElement.query(By.css("goa-app-header-menu")).nativeElement; + expect(el.querySelector("a[href='#dashboard']")).toBeTruthy(); + expect(el.querySelector("a[href='#accounts']")).toBeTruthy(); + })); + + it("should set slot attribute on host element when slotName is provided", fakeAsync(() => { + component.heading = "Menu label"; + component.slotName = "navigation"; + fixture.detectChanges(); + tick(); + fixture.detectChanges(); + + const host = fixture.debugElement.query( + By.css("goab-app-header-menu"), + ).nativeElement; + expect(host.getAttribute("slot")).toBe("navigation"); + })); + + it("should not set slot attribute when slotName is not provided", fakeAsync(() => { + component.heading = "Menu label"; + fixture.detectChanges(); + tick(); + fixture.detectChanges(); - expect(el?.getAttribute("heading")).toBe(component.heading); - expect(el?.getAttribute("leadingicon")).toBe(component.leadingIcon); - expect(el?.getAttribute("testid")).toBe(component.testId); - expect(el?.innerHTML).toContain("Home"); - }); + const host = fixture.debugElement.query( + By.css("goab-app-header-menu"), + ).nativeElement; + expect(host.getAttribute("slot")).toBeNull(); + })); + + it("should render without leadingIcon", fakeAsync(() => { + component.heading = "Menu label"; + fixture.detectChanges(); + tick(); + fixture.detectChanges(); + + const el = fixture.debugElement.query(By.css("goa-app-header-menu")).nativeElement; + expect(el.getAttribute("leadingicon")).toBeNull(); + })); }); diff --git a/libs/angular-components/src/lib/components/header-menu/header-menu.ts b/libs/angular-components/src/lib/components/header-menu/header-menu.ts index 661bb76dfe..f9459de98f 100644 --- a/libs/angular-components/src/lib/components/header-menu/header-menu.ts +++ b/libs/angular-components/src/lib/components/header-menu/header-menu.ts @@ -1,35 +1,49 @@ -import { CUSTOM_ELEMENTS_SCHEMA, Component, Input, OnInit, ChangeDetectorRef } from "@angular/core"; -import { CommonModule } from "@angular/common"; import { GoabIconType } from "@abgov/ui-components-common"; +import { + CUSTOM_ELEMENTS_SCHEMA, + Component, + HostBinding, + Input, + OnInit, + ChangeDetectorRef, +} from "@angular/core"; + +import { GoabBaseComponent } from "../base.component"; @Component({ standalone: true, selector: "goab-app-header-menu", - template: ` + template: `@if (isReady) { - `, - imports: [CommonModule], - schemas: [CUSTOM_ELEMENTS_SCHEMA] + }`, + schemas: [CUSTOM_ELEMENTS_SCHEMA], }) -export class GoabAppHeaderMenu implements OnInit { - isReady = false; +export class GoabAppHeaderMenu extends GoabBaseComponent implements OnInit { @Input() leadingIcon?: GoabIconType; @Input() heading?: string; - @Input() testId?: string; + @Input() slotName?: string; + + @HostBinding("attr.slot") + get hostSlot(): string | null { + return this.slotName ?? null; + } - constructor(private cdr: ChangeDetectorRef) {} + isReady = false; + + constructor(private cdr: ChangeDetectorRef) { + super(); + } ngOnInit(): void { setTimeout(() => { this.isReady = true; this.cdr.detectChanges(); - }); + }, 0); } } diff --git a/libs/angular-components/src/lib/components/header/header.spec.ts b/libs/angular-components/src/lib/components/header/header.spec.ts index 34216ff75b..a63a092b9f 100644 --- a/libs/angular-components/src/lib/components/header/header.spec.ts +++ b/libs/angular-components/src/lib/components/header/header.spec.ts @@ -2,6 +2,7 @@ import { ComponentFixture, TestBed, fakeAsync, tick } from "@angular/core/testin import { GoabAppHeader } from "./header"; import { Component, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; import { By } from "@angular/platform-browser"; +import { fireEvent } from "@testing-library/dom"; @Component({ standalone: true, @@ -9,24 +10,44 @@ import { By } from "@angular/platform-browser"; template: ` -

Children content

+ Navigation link
`, }) class TestAppHeaderComponent { heading?: string; + secondaryText?: string; url?: string; + maxContentWidth?: string; fullMenuBreakpoint?: number; testId?: string; - maxContentWidth?: string; + + onMenuClick() { + /* do nothing */ + } } -describe("GoABAppHeader", () => { +@Component({ + standalone: true, + imports: [GoabAppHeader], + template: ` + + Content + + `, +}) +class TestAppHeaderNoMenuClickComponent { + heading?: string; +} + +describe("GoabAppHeader", () => { let fixture: ComponentFixture; let component: TestAppHeaderComponent; @@ -38,28 +59,105 @@ describe("GoABAppHeader", () => { fixture = TestBed.createComponent(TestAppHeaderComponent); component = fixture.componentInstance; + })); - component.heading = "App Heading"; + it("should render with version 2", fakeAsync(() => { + component.heading = "Test heading"; + fixture.detectChanges(); + tick(); + fixture.detectChanges(); + + const el = fixture.debugElement.query(By.css("goa-app-header")).nativeElement; + expect(el).toBeTruthy(); + expect(el.getAttribute("version")).toBe("2"); + })); + + it("should render all properties", fakeAsync(() => { + component.heading = "Service name"; + component.secondaryText = "Beta"; component.url = "https://example.com"; - component.fullMenuBreakpoint = 1400; - component.maxContentWidth = "1600px"; - component.testId = "foo"; + component.maxContentWidth = "800px"; + component.fullMenuBreakpoint = 1024; + component.testId = "my-header"; + fixture.detectChanges(); + tick(); + fixture.detectChanges(); + + const el = fixture.debugElement.query(By.css("goa-app-header")).nativeElement; + expect(el.getAttribute("heading")).toBe("Service name"); + expect(el.getAttribute("secondarytext")).toBe("Beta"); + expect(el.getAttribute("url")).toBe("https://example.com"); + expect(el.getAttribute("maxcontentwidth")).toBe("800px"); + expect(el.getAttribute("fullmenubreakpoint")).toBe("1024"); + expect(el.getAttribute("testid")).toBe("my-header"); + expect(el.getAttribute("version")).toBe("2"); + })); + + it("should set hasmenuclickhandler to true when onMenuClick is bound", fakeAsync(() => { + component.heading = "Test heading"; + fixture.detectChanges(); + tick(); + fixture.detectChanges(); + const el = fixture.debugElement.query(By.css("goa-app-header")).nativeElement; + expect(el.getAttribute("hasmenuclickhandler")).toBe("true"); + })); + + it("should dispatch onMenuClick event", fakeAsync(() => { + const onMenuClick = jest.spyOn(component, "onMenuClick"); + component.heading = "Test heading"; fixture.detectChanges(); tick(); fixture.detectChanges(); + + const el = fixture.debugElement.query(By.css("goa-app-header")).nativeElement; + fireEvent(el, new CustomEvent("_menuClick")); + expect(onMenuClick).toHaveBeenCalled(); })); - it("should render successfully", () => { + it("should render secondaryText as secondarytext attribute", fakeAsync(() => { + component.heading = "Test heading"; + component.secondaryText = "Environment label"; + fixture.detectChanges(); + tick(); + fixture.detectChanges(); + const el = fixture.debugElement.query(By.css("goa-app-header")).nativeElement; + expect(el.getAttribute("secondarytext")).toBe("Environment label"); + })); + + it("should project content into the slot", fakeAsync(() => { + component.heading = "Test heading"; + fixture.detectChanges(); + tick(); + fixture.detectChanges(); - expect(el?.getAttribute("heading")).toBe(component.heading); - expect(el?.getAttribute("url")).toBe(component.url); - expect(el?.getAttribute("maxcontentwidth")).toBe(component.maxContentWidth); - expect(el?.getAttribute("fullmenubreakpoint")).toBe( - `${component.fullMenuBreakpoint}`, - ); - expect(el?.getAttribute("testid")).toBe(component.testId); - expect(el?.innerHTML).toContain("Children content"); - }); + const el = fixture.debugElement.query(By.css("goa-app-header")).nativeElement; + expect(el.querySelector("a[href='#nav']")).toBeTruthy(); + })); +}); + +describe("GoabAppHeader without onMenuClick", () => { + let fixture: ComponentFixture; + let component: TestAppHeaderNoMenuClickComponent; + + beforeEach(fakeAsync(() => { + TestBed.configureTestingModule({ + imports: [GoabAppHeader, TestAppHeaderNoMenuClickComponent], + schemas: [CUSTOM_ELEMENTS_SCHEMA], + }).compileComponents(); + + fixture = TestBed.createComponent(TestAppHeaderNoMenuClickComponent); + component = fixture.componentInstance; + })); + + it("should set hasmenuclickhandler to false when onMenuClick is not bound", fakeAsync(() => { + component.heading = "Test heading"; + fixture.detectChanges(); + tick(); + fixture.detectChanges(); + + const el = fixture.debugElement.query(By.css("goa-app-header")).nativeElement; + expect(el.getAttribute("hasmenuclickhandler")).toBe("false"); + })); }); diff --git a/libs/angular-components/src/lib/components/header/header.ts b/libs/angular-components/src/lib/components/header/header.ts index 8d8302d521..f470a4e3ae 100644 --- a/libs/angular-components/src/lib/components/header/header.ts +++ b/libs/angular-components/src/lib/components/header/header.ts @@ -8,43 +8,48 @@ import { OnInit, ChangeDetectorRef, } from "@angular/core"; -import { CommonModule } from "@angular/common"; + +import { GoabBaseComponent } from "../base.component"; @Component({ standalone: true, selector: "goab-app-header", - template: ` + template: `@if (isReady) { - `, - imports: [CommonModule], + }`, schemas: [CUSTOM_ELEMENTS_SCHEMA], }) -export class GoabAppHeader implements OnInit { - isReady = false; +export class GoabAppHeader extends GoabBaseComponent implements OnInit { @Input() url?: string; @Input() heading?: string; + @Input() secondaryText?: string; @Input() maxContentWidth?: string; - @Input() testId?: string; @Input({ transform: numberAttribute }) fullMenuBreakpoint?: number; - constructor(private cdr: ChangeDetectorRef) {} + isReady = false; + version = "2"; + + constructor(private cdr: ChangeDetectorRef) { + super(); + } ngOnInit(): void { setTimeout(() => { this.isReady = true; this.cdr.detectChanges(); - }); + }, 0); } @Output() onMenuClick = new EventEmitter(); diff --git a/libs/angular-components/src/lib/components/hero-banner/hero-banner.ts b/libs/angular-components/src/lib/components/hero-banner/hero-banner.ts index 1080844e06..3db5dd32e3 100644 --- a/libs/angular-components/src/lib/components/hero-banner/hero-banner.ts +++ b/libs/angular-components/src/lib/components/hero-banner/hero-banner.ts @@ -1,26 +1,34 @@ -import { CUSTOM_ELEMENTS_SCHEMA, Component, Input, TemplateRef, OnInit, ChangeDetectorRef } from "@angular/core"; -import { NgTemplateOutlet, CommonModule } from "@angular/common"; +import { + CUSTOM_ELEMENTS_SCHEMA, + Component, + Input, + TemplateRef, + OnInit, + ChangeDetectorRef, +} from "@angular/core"; +import { NgTemplateOutlet } from "@angular/common"; @Component({ standalone: true, selector: "goab-hero-banner", - imports: [NgTemplateOutlet, CommonModule], + imports: [NgTemplateOutlet], template: ` - - -
- -
-
+ @if (isReady) { + + +
+ +
+
+ } `, schemas: [CUSTOM_ELEMENTS_SCHEMA], }) diff --git a/libs/angular-components/src/lib/components/icon-button/icon-button.spec.ts b/libs/angular-components/src/lib/components/icon-button/icon-button.spec.ts index 12f493b036..7347368e06 100644 --- a/libs/angular-components/src/lib/components/icon-button/icon-button.spec.ts +++ b/libs/angular-components/src/lib/components/icon-button/icon-button.spec.ts @@ -99,6 +99,6 @@ describe("GoABIconButton", () => { fireEvent(el, new CustomEvent("_click")); - expect(onClick).toBeCalledTimes(1); + expect(onClick).toHaveBeenCalledTimes(1); }); }); diff --git a/libs/angular-components/src/lib/components/icon-button/icon-button.ts b/libs/angular-components/src/lib/components/icon-button/icon-button.ts index fc16dd9236..c74d3c2221 100644 --- a/libs/angular-components/src/lib/components/icon-button/icon-button.ts +++ b/libs/angular-components/src/lib/components/icon-button/icon-button.ts @@ -13,35 +13,35 @@ import { OnInit, ChangeDetectorRef, } from "@angular/core"; -import { CommonModule } from "@angular/common"; import { GoabBaseComponent } from "../base.component"; @Component({ standalone: true, selector: "goab-icon-button", template: ` - - - + @if (isReady) { + + + + } `, - imports: [CommonModule], + schemas: [CUSTOM_ELEMENTS_SCHEMA], }) export class GoabIconButton extends GoabBaseComponent implements OnInit { @@ -72,6 +72,4 @@ export class GoabIconButton extends GoabBaseComponent implements OnInit { _onClick() { this.onClick.emit(); } - - } diff --git a/libs/angular-components/src/lib/components/icon/icon.ts b/libs/angular-components/src/lib/components/icon/icon.ts index 310fc3d0da..526d7b4a38 100644 --- a/libs/angular-components/src/lib/components/icon/icon.ts +++ b/libs/angular-components/src/lib/components/icon/icon.ts @@ -1,4 +1,9 @@ -import { GoabIconOverridesType, GoabIconSize, GoabIconTheme, GoabIconType } from "@abgov/ui-components-common"; +import { + GoabIconOverridesType, + GoabIconSize, + GoabIconTheme, + GoabIconType, +} from "@abgov/ui-components-common"; import { CUSTOM_ELEMENTS_SCHEMA, Component, @@ -8,34 +13,34 @@ import { OnInit, ChangeDetectorRef, } from "@angular/core"; -import { CommonModule } from "@angular/common"; + import { GoabBaseComponent } from "../base.component"; @Component({ standalone: true, selector: "goab-icon", template: ` - - + @if (isReady) { + + + } `, styles: [":host { display: inline-flex; align-items: center; }"], schemas: [CUSTOM_ELEMENTS_SCHEMA], - imports: [CommonModule], }) export class GoabIcon extends GoabBaseComponent implements OnInit { @Input({ required: true }) type!: GoabIconType | GoabIconOverridesType; diff --git a/libs/angular-components/src/lib/components/index.ts b/libs/angular-components/src/lib/components/index.ts index 847001fec9..46b790f0eb 100644 --- a/libs/angular-components/src/lib/components/index.ts +++ b/libs/angular-components/src/lib/components/index.ts @@ -77,3 +77,8 @@ export * from "./temporary-notification-ctrl/temporary-notification-ctrl"; export * from "./text/text"; export * from "./textarea/textarea"; export * from "./tooltip/tooltip"; +export * from "./work-side-menu/work-side-menu"; +export * from "./work-side-menu-group/work-side-menu-group"; +export * from "./work-side-menu-item/work-side-menu-item"; +export * from "./work-side-notification-item/work-side-notification-item"; +export * from "./work-side-notification-panel/work-side-notification-panel"; diff --git a/libs/angular-components/src/lib/components/input-number/input-number.ts b/libs/angular-components/src/lib/components/input-number/input-number.ts index 0487939a1b..fc81120d51 100644 --- a/libs/angular-components/src/lib/components/input-number/input-number.ts +++ b/libs/angular-components/src/lib/components/input-number/input-number.ts @@ -8,7 +8,7 @@ import { GoabInputType, Spacing, } from "@abgov/ui-components-common"; -import { NgIf, NgTemplateOutlet, CommonModule } from "@angular/common"; +import { NgTemplateOutlet } from "@angular/common"; import { CUSTOM_ELEMENTS_SCHEMA, Component, @@ -27,71 +27,74 @@ import { ControlValueAccessor, NG_VALUE_ACCESSOR } from "@angular/forms"; @Component({ standalone: true, selector: "goab-input-number", - imports: [NgIf, NgTemplateOutlet, CommonModule], + imports: [NgTemplateOutlet], template: ` - -
- - - - - {{ getLeadingContentAsString() }} - -
- - - -
- - - - - {{ getTrailingContentAsString() }} - -
-
+ @if (isReady) { + +
+ @if (leadingContent) { + @if (getLeadingContentAsTemplate()) { + + } @else { + {{ getLeadingContentAsString() }} + } + } +
+ + + +
+ @if (trailingContent) { + @if (getTrailingContentAsTemplate()) { + + } @else { + {{ getTrailingContentAsString() }} + } + } +
+
+ } `, schemas: [CUSTOM_ELEMENTS_SCHEMA], providers: [ diff --git a/libs/angular-components/src/lib/components/input/input.spec.ts b/libs/angular-components/src/lib/components/input/input.spec.ts index 477d71a04c..4f7fddfd72 100644 --- a/libs/angular-components/src/lib/components/input/input.spec.ts +++ b/libs/angular-components/src/lib/components/input/input.spec.ts @@ -222,8 +222,12 @@ describe("GoABInput", () => { new CustomEvent("_change", { detail: { name: "foo", value: "new value" } }), ); - expect(validateOnChange).toBeCalledWith( - expect.objectContaining({ name: "foo", value: "new value", event: expect.any(Event) }), + expect(validateOnChange).toHaveBeenCalledWith( + expect.objectContaining({ + name: "foo", + value: "new value", + event: expect.any(Event), + }), ); }); @@ -234,7 +238,7 @@ describe("GoABInput", () => { fireEvent(input, new CustomEvent("_focus")); - expect(validateOnFocus).toBeCalled(); + expect(validateOnFocus).toHaveBeenCalled(); }); it("should handle onBlur event", () => { @@ -244,7 +248,7 @@ describe("GoABInput", () => { fireEvent(input, new CustomEvent("_blur")); - expect(validateOnBlur).toBeCalled(); + expect(validateOnBlur).toHaveBeenCalled(); }); it("should handle onKeyPress event", () => { @@ -254,7 +258,7 @@ describe("GoABInput", () => { fireEvent(input, new CustomEvent("_keyPress")); - expect(validateOnKeyPress).toBeCalled(); + expect(validateOnKeyPress).toHaveBeenCalled(); }); it("should render leading and trailing content", () => { @@ -271,7 +275,9 @@ describe("GoABInput", () => { describe("writeValue", () => { it("should set value attribute when writeValue is called", () => { - const inputComponent = fixture.debugElement.query(By.css("goab-input")).componentInstance; + const inputComponent = fixture.debugElement.query( + By.css("goab-input"), + ).componentInstance; const inputElement = fixture.debugElement.query(By.css("goa-input")).nativeElement; inputComponent.writeValue("new value"); @@ -282,7 +288,9 @@ describe("GoABInput", () => { }); it("should set value attribute to empty string when writeValue is called with null or empty", () => { - const inputComponent = fixture.debugElement.query(By.css("goab-input")).componentInstance; + const inputComponent = fixture.debugElement.query( + By.css("goab-input"), + ).componentInstance; const inputElement = fixture.debugElement.query(By.css("goa-input")).nativeElement; // First set a value @@ -305,7 +313,9 @@ describe("GoABInput", () => { }); it("should update component value property", () => { - const inputComponent = fixture.debugElement.query(By.css("goab-input")).componentInstance; + const inputComponent = fixture.debugElement.query( + By.css("goab-input"), + ).componentInstance; inputComponent.writeValue("updated"); expect(inputComponent.value).toBe("updated"); diff --git a/libs/angular-components/src/lib/components/input/input.ts b/libs/angular-components/src/lib/components/input/input.ts index 50bcfc6d57..c7b67b2295 100644 --- a/libs/angular-components/src/lib/components/input/input.ts +++ b/libs/angular-components/src/lib/components/input/input.ts @@ -5,6 +5,7 @@ import { GoabInputOnChangeDetail, GoabInputOnFocusDetail, GoabInputOnKeyPressDetail, + GoabInputSize, GoabInputType, } from "@abgov/ui-components-common"; import { @@ -23,20 +24,16 @@ import { } from "@angular/core"; import { NG_VALUE_ACCESSOR } from "@angular/forms"; import { GoabControlValueAccessor } from "../base.component"; -import { NgIf, NgTemplateOutlet, CommonModule } from "@angular/common"; - -export interface IgnoreMe { - ignore: string; -} +import { NgTemplateOutlet } from "@angular/common"; @Component({ standalone: true, selector: "goab-input", - imports: [NgIf, NgTemplateOutlet, CommonModule], - template: ` + imports: [NgTemplateOutlet], + template: `@if (isReady) { -
- - - - - {{ getLeadingContentAsString() }} - -
+ @if (leadingContent) { +
+ @if (getLeadingContentAsTemplate()) { + + + } @else { + {{ getLeadingContentAsString() }} + } +
+ } -
- - + @if (trailingContent) { +
+ @if (getTrailingContentAsTemplate()) { - - {{ getTrailingContentAsString() }} - -
+ } @else { + {{ getTrailingContentAsString() }} + } +
+ }
- `, + }`, schemas: [CUSTOM_ELEMENTS_SCHEMA], providers: [ { @@ -134,6 +133,7 @@ export class GoabInput extends GoabControlValueAccessor implements OnInit { @Input() textAlign?: "left" | "right" = "left"; @Input() leadingContent!: string | TemplateRef; @Input() trailingContent!: string | TemplateRef; + @Input() size?: GoabInputSize = "default"; @Output() onTrailingIconClick = new EventEmitter(); @Output() onFocus = new EventEmitter(); @@ -142,6 +142,7 @@ export class GoabInput extends GoabControlValueAccessor implements OnInit { @Output() onChange = new EventEmitter(); isReady = false; + version = "2"; handleTrailingIconClick = false; constructor( diff --git a/libs/angular-components/src/lib/components/linear-progress/linear-progress.ts b/libs/angular-components/src/lib/components/linear-progress/linear-progress.ts index f5d1d5fe85..70cc9de4e4 100644 --- a/libs/angular-components/src/lib/components/linear-progress/linear-progress.ts +++ b/libs/angular-components/src/lib/components/linear-progress/linear-progress.ts @@ -5,24 +5,22 @@ import { OnInit, ChangeDetectorRef, } from "@angular/core"; -import { CommonModule } from "@angular/common"; - @Component({ standalone: true, selector: "goab-linear-progress", template: ` - - + @if (isReady) { + + + } `, schemas: [CUSTOM_ELEMENTS_SCHEMA], - imports: [CommonModule], }) export class GoabLinearProgress implements OnInit { @Input() progress?: number | null | undefined; diff --git a/libs/angular-components/src/lib/components/link/link.ts b/libs/angular-components/src/lib/components/link/link.ts index 0f367662c1..ca1a39f300 100644 --- a/libs/angular-components/src/lib/components/link/link.ts +++ b/libs/angular-components/src/lib/components/link/link.ts @@ -1,28 +1,41 @@ -import { GoabIconType, Spacing } from "@abgov/ui-components-common"; -import { CUSTOM_ELEMENTS_SCHEMA, Component, Input, OnInit, ChangeDetectorRef } from "@angular/core"; -import { CommonModule } from "@angular/common"; +import { + GoabIconType, + GoabLinkColor, + GoabLinkSize, + Spacing, +} from "@abgov/ui-components-common"; +import { + CUSTOM_ELEMENTS_SCHEMA, + Component, + Input, + OnInit, + ChangeDetectorRef, +} from "@angular/core"; @Component({ standalone: true, selector: "goab-link", template: ` - - - + @if (isReady) { + + + + } `, - imports: [CommonModule], + schemas: [CUSTOM_ELEMENTS_SCHEMA], }) export class GoabLink implements OnInit { @@ -31,6 +44,8 @@ export class GoabLink implements OnInit { @Input() trailingIcon?: GoabIconType; @Input() testId?: string; @Input() action?: string; + @Input() color?: GoabLinkColor = "interactive"; + @Input() size?: GoabLinkSize = "medium"; @Input() actionArg?: string; @Input() actionArgs?: Record; @Input() mt?: Spacing; diff --git a/libs/angular-components/src/lib/components/menu-button/menu-action.spec.ts b/libs/angular-components/src/lib/components/menu-button/menu-action.spec.ts new file mode 100644 index 0000000000..d05f2b83f6 --- /dev/null +++ b/libs/angular-components/src/lib/components/menu-button/menu-action.spec.ts @@ -0,0 +1,83 @@ +import { ComponentFixture, TestBed } from "@angular/core/testing"; +import { GoabMenuAction } from "./menu-action"; +import { Component, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; +import { GoabIconType } from "@abgov/ui-components-common"; +import { By } from "@angular/platform-browser"; + +@Component({ + standalone: true, + imports: [GoabMenuAction], + template: ` + + + `, +}) +class TestMenuActionComponent { + text = "View case"; + action = "view"; + icon?: GoabIconType; + testId?: string; +} + +describe("GoabMenuAction", () => { + let fixture: ComponentFixture; + let component: TestMenuActionComponent; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [GoabMenuAction, TestMenuActionComponent], + schemas: [CUSTOM_ELEMENTS_SCHEMA], + }).compileComponents(); + + fixture = TestBed.createComponent(TestMenuActionComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it("should render text and action attributes", () => { + const el = fixture.debugElement.query( + By.css("goa-menu-action"), + ).nativeElement; + expect(el.getAttribute("text")).toBe("View case"); + expect(el.getAttribute("action")).toBe("view"); + }); + + it("should render with icon", () => { + component.icon = "pencil"; + fixture.detectChanges(); + + const el = fixture.debugElement.query( + By.css("goa-menu-action"), + ).nativeElement; + expect(el.getAttribute("icon")).toBe("pencil"); + }); + + it("should render without icon when not provided", () => { + const el = fixture.debugElement.query( + By.css("goa-menu-action"), + ).nativeElement; + expect(el.getAttribute("icon")).toBeNull(); + }); + + it("should render with testId", () => { + component.testId = "test-action"; + fixture.detectChanges(); + + const el = fixture.debugElement.query( + By.css("goa-menu-action"), + ).nativeElement; + expect(el.getAttribute("testid")).toBe("test-action"); + }); + + it("should render without testId when not provided", () => { + const el = fixture.debugElement.query( + By.css("goa-menu-action"), + ).nativeElement; + expect(el.getAttribute("testid")).toBeNull(); + }); +}); diff --git a/libs/angular-components/src/lib/components/menu-button/menu-action.ts b/libs/angular-components/src/lib/components/menu-button/menu-action.ts index d8978c5f5d..6909e401b3 100644 --- a/libs/angular-components/src/lib/components/menu-button/menu-action.ts +++ b/libs/angular-components/src/lib/components/menu-button/menu-action.ts @@ -4,7 +4,6 @@ import { CUSTOM_ELEMENTS_SCHEMA, Component, Input } from "@angular/core"; @Component({ standalone: true, - // eslint-disable-next-line @angular-eslint/component-selector selector: "goab-menu-action", template: ` { expect(menuButtonElement.getAttribute("type")).toBe("primary"); expect(menuButtonElement.getAttribute("leading-icon")).toBe("alarm"); expect(menuButtonElement.getAttribute("testid")).toBe("test-menu-button"); + expect(menuButtonElement.getAttribute("version")).toBe("2"); }); it("should render with leading icon", () => { @@ -92,4 +97,58 @@ describe("GoabMenuButton", () => { expect(onAction).toHaveBeenCalledWith(mockDetail); }); + + it("should render with size normal by default", () => { + const menuButtonElement = fixture.debugElement.query( + By.css("goa-menu-button"), + ).nativeElement; + expect(menuButtonElement.getAttribute("size")).toBeNull(); + }); + + it("should render with size compact", () => { + component.size = "compact"; + fixture.detectChanges(); + + const menuButtonElement = fixture.debugElement.query( + By.css("goa-menu-button"), + ).nativeElement; + expect(menuButtonElement.getAttribute("size")).toBe("compact"); + }); + + it("should render with size normal", () => { + component.size = "normal"; + fixture.detectChanges(); + + const menuButtonElement = fixture.debugElement.query( + By.css("goa-menu-button"), + ).nativeElement; + expect(menuButtonElement.getAttribute("size")).toBe("normal"); + }); + + it("should render with variant destructive", () => { + component.variant = "destructive"; + fixture.detectChanges(); + + const menuButtonElement = fixture.debugElement.query( + By.css("goa-menu-button"), + ).nativeElement; + expect(menuButtonElement.getAttribute("variant")).toBe("destructive"); + }); + + it("should render without variant when not provided", () => { + const menuButtonElement = fixture.debugElement.query( + By.css("goa-menu-button"), + ).nativeElement; + expect(menuButtonElement.getAttribute("variant")).toBeNull(); + }); + + it("should render without text for icon-only mode", () => { + component.text = undefined; + fixture.detectChanges(); + + const menuButtonElement = fixture.debugElement.query( + By.css("goa-menu-button"), + ).nativeElement; + expect(menuButtonElement.getAttribute("text")).toBeNull(); + }); }); diff --git a/libs/angular-components/src/lib/components/menu-button/menu-button.ts b/libs/angular-components/src/lib/components/menu-button/menu-button.ts index aba646b143..42f3acaf16 100644 --- a/libs/angular-components/src/lib/components/menu-button/menu-button.ts +++ b/libs/angular-components/src/lib/components/menu-button/menu-button.ts @@ -1,5 +1,7 @@ import { + GoabButtonSize, GoabButtonType, + GoabButtonVariant, GoabIconType, GoabMenuButtonOnActionDetail, } from "@abgov/ui-components-common"; @@ -13,14 +15,17 @@ import { @Component({ standalone: true, - // eslint-disable-next-line @angular-eslint/component-selector selector: "goab-menu-button", template: ` @@ -32,8 +37,11 @@ import { export class GoabMenuButton { @Input() text?: string; @Input() type?: GoabButtonType; + @Input() size?: GoabButtonSize; + @Input() variant?: GoabButtonVariant; @Input() maxWidth?: string; @Input() leadingIcon?: GoabIconType; + @Input() ariaLabel?: string; @Input() testId?: string; @Output() onAction = new EventEmitter(); diff --git a/libs/angular-components/src/lib/components/microsite-header/microsite-header.ts b/libs/angular-components/src/lib/components/microsite-header/microsite-header.ts index d218e77b9d..7eb6e477e6 100644 --- a/libs/angular-components/src/lib/components/microsite-header/microsite-header.ts +++ b/libs/angular-components/src/lib/components/microsite-header/microsite-header.ts @@ -9,30 +9,31 @@ import { OnInit, ChangeDetectorRef, } from "@angular/core"; -import { NgTemplateOutlet, CommonModule } from "@angular/common"; +import { NgTemplateOutlet } from "@angular/common"; @Component({ standalone: true, selector: "goab-microsite-header", template: ` - -
- -
-
+ @if (isReady) { + +
+ +
+
+ } `, - imports: [NgTemplateOutlet, CommonModule], + imports: [NgTemplateOutlet], schemas: [CUSTOM_ELEMENTS_SCHEMA], }) export class GoabMicrositeHeader implements OnInit { diff --git a/libs/angular-components/src/lib/components/modal/modal.ts b/libs/angular-components/src/lib/components/modal/modal.ts index b53d55ce79..bfd62e8cc7 100644 --- a/libs/angular-components/src/lib/components/modal/modal.ts +++ b/libs/angular-components/src/lib/components/modal/modal.ts @@ -13,40 +13,47 @@ import { OnInit, ChangeDetectorRef, } from "@angular/core"; -import { NgTemplateOutlet, CommonModule } from "@angular/common"; +import { NgTemplateOutlet } from "@angular/common"; @Component({ standalone: true, selector: "goab-modal", - imports: [NgTemplateOutlet, CommonModule], + imports: [NgTemplateOutlet], template: ` - -
- -
+
+ @if (this.heading !== "" && getHeadingAsTemplate() !== null) { + + } +
- + -
- -
-
- `, +
+ @if (this.actions) { + + } +
+ + } + `, schemas: [CUSTOM_ELEMENTS_SCHEMA], }) export class GoabModal implements OnInit { isReady = false; + version = "2"; constructor(private cdr: ChangeDetectorRef) {} diff --git a/libs/angular-components/src/lib/components/notification/notification.ts b/libs/angular-components/src/lib/components/notification/notification.ts index 0d1773a363..7c3e1239d8 100644 --- a/libs/angular-components/src/lib/components/notification/notification.ts +++ b/libs/angular-components/src/lib/components/notification/notification.ts @@ -1,30 +1,49 @@ -import { GoabAriaLiveType, GoabNotificationType } from "@abgov/ui-components-common"; -import { CUSTOM_ELEMENTS_SCHEMA, Component, EventEmitter, Input, Output, OnInit, ChangeDetectorRef } from "@angular/core"; -import { CommonModule } from "@angular/common"; +import { + GoabAriaLiveType, + GoabNotificationEmphasis, + GoabNotificationType, +} from "@abgov/ui-components-common"; +import { + CUSTOM_ELEMENTS_SCHEMA, + Component, + EventEmitter, + Input, + Output, + OnInit, + ChangeDetectorRef, + booleanAttribute, +} from "@angular/core"; @Component({ standalone: true, selector: "goab-notification", template: ` - - - + @if (isReady) { + + + + } `, - imports: [CommonModule], + schemas: [CUSTOM_ELEMENTS_SCHEMA], }) export class GoabNotification implements OnInit { isReady = false; + version = "2"; @Input() type?: GoabNotificationType = "information"; @Input() ariaLive?: GoabAriaLiveType; @Input() maxContentWidth?: string; + @Input() emphasis?: GoabNotificationEmphasis = "high"; + @Input({ transform: booleanAttribute }) compact?: boolean; @Input() testId?: string; constructor(private cdr: ChangeDetectorRef) {} diff --git a/libs/angular-components/src/lib/components/page-block/page-block.ts b/libs/angular-components/src/lib/components/page-block/page-block.ts index ef7ffb0b18..9fc4b7094a 100644 --- a/libs/angular-components/src/lib/components/page-block/page-block.ts +++ b/libs/angular-components/src/lib/components/page-block/page-block.ts @@ -1,20 +1,23 @@ import { GoabPageBlockSize } from "@abgov/ui-components-common"; -import { CUSTOM_ELEMENTS_SCHEMA, Component, Input, OnInit, ChangeDetectorRef } from "@angular/core"; -import { CommonModule } from "@angular/common"; +import { + CUSTOM_ELEMENTS_SCHEMA, + Component, + Input, + OnInit, + ChangeDetectorRef, +} from "@angular/core"; @Component({ standalone: true, selector: "goab-page-block", template: ` - - - + @if (isReady) { + + + + } `, - imports: [CommonModule], + schemas: [CUSTOM_ELEMENTS_SCHEMA], }) export class GoabPageBlock implements OnInit { diff --git a/libs/angular-components/src/lib/components/pages/pages.ts b/libs/angular-components/src/lib/components/pages/pages.ts index d90ab0d85f..bba2db0816 100644 --- a/libs/angular-components/src/lib/components/pages/pages.ts +++ b/libs/angular-components/src/lib/components/pages/pages.ts @@ -1,24 +1,32 @@ import { Spacing } from "@abgov/ui-components-common"; -import { CUSTOM_ELEMENTS_SCHEMA, Component, Input, numberAttribute, OnInit, ChangeDetectorRef } from "@angular/core"; -import { CommonModule } from "@angular/common"; +import { + CUSTOM_ELEMENTS_SCHEMA, + Component, + Input, + numberAttribute, + OnInit, + ChangeDetectorRef, +} from "@angular/core"; + import { GoabBaseComponent } from "../base.component"; @Component({ standalone: true, selector: "goab-pages", template: ` - - - + @if (isReady) { + + + + } `, - imports: [CommonModule], + schemas: [CUSTOM_ELEMENTS_SCHEMA], }) export class GoabPages extends GoabBaseComponent implements OnInit { diff --git a/libs/angular-components/src/lib/components/pagination/pagination.spec.ts b/libs/angular-components/src/lib/components/pagination/pagination.spec.ts index 9890357c1b..9ad9f0e9b3 100644 --- a/libs/angular-components/src/lib/components/pagination/pagination.spec.ts +++ b/libs/angular-components/src/lib/components/pagination/pagination.spec.ts @@ -1,23 +1,29 @@ import { ComponentFixture, TestBed, fakeAsync, tick } from "@angular/core/testing"; import { GoabPagination } from "./pagination"; import { Component, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; -import { GoabPaginationOnChangeDetail, GoabPaginationVariant, Spacing } from "@abgov/ui-components-common"; +import { + GoabPaginationOnChangeDetail, + GoabPaginationVariant, + Spacing, +} from "@abgov/ui-components-common"; @Component({ standalone: true, imports: [GoabPagination], template: ` - - - ` + + + `, }) class TestPaginationComponent { itemCount = 100; @@ -25,11 +31,13 @@ class TestPaginationComponent { perPageCount = 20; variant = "all" as GoabPaginationVariant; mt = "s" as Spacing; - mb = "m" as Spacing; - ml = "l" as Spacing; - mr = "xl" as Spacing; + mb = "m" as Spacing; + ml = "l" as Spacing; + mr = "xl" as Spacing; - onChange = (event: GoabPaginationOnChangeDetail) => {/** do nothing **/}; + onChange = (event: GoabPaginationOnChangeDetail) => { + /** do nothing **/ + }; } describe("GoABPagination", () => { @@ -39,7 +47,7 @@ describe("GoABPagination", () => { beforeEach(fakeAsync(() => { TestBed.configureTestingModule({ imports: [GoabPagination, TestPaginationComponent], - schemas: [CUSTOM_ELEMENTS_SCHEMA] + schemas: [CUSTOM_ELEMENTS_SCHEMA], }).compileComponents(); fixture = TestBed.createComponent(TestPaginationComponent); @@ -59,7 +67,7 @@ describe("GoABPagination", () => { expect(el.getAttribute("mt")).toBe(component.mt); expect(el.getAttribute("mb")).toBe(component.mb); expect(el.getAttribute("ml")).toBe(component.ml); - expect(el.getAttribute("mr")).toBe( component.mr); + expect(el.getAttribute("mr")).toBe(component.mr); }); it("should handle the onChange event", () => { diff --git a/libs/angular-components/src/lib/components/pagination/pagination.ts b/libs/angular-components/src/lib/components/pagination/pagination.ts index a964b51a3e..ff30b78aa5 100644 --- a/libs/angular-components/src/lib/components/pagination/pagination.ts +++ b/libs/angular-components/src/lib/components/pagination/pagination.ts @@ -12,33 +12,36 @@ import { OnInit, ChangeDetectorRef, } from "@angular/core"; -import { CommonModule } from "@angular/common"; + import { GoabBaseComponent } from "../base.component"; @Component({ standalone: true, selector: "goab-pagination", template: ` - - + @if (isReady) { + + + } `, - imports: [CommonModule], + schemas: [CUSTOM_ELEMENTS_SCHEMA], }) export class GoabPagination extends GoabBaseComponent implements OnInit { isReady = false; + version = "2"; @Input({ required: true }) itemCount!: number; @Input({ required: true }) pageNumber!: number; @Input() perPageCount?: number = 10; diff --git a/libs/angular-components/src/lib/components/popover/popover.ts b/libs/angular-components/src/lib/components/popover/popover.ts index 66a7fcf73f..9efec38475 100644 --- a/libs/angular-components/src/lib/components/popover/popover.ts +++ b/libs/angular-components/src/lib/components/popover/popover.ts @@ -1,31 +1,39 @@ import { GoabPopoverPosition } from "@abgov/ui-components-common"; -import { CUSTOM_ELEMENTS_SCHEMA, Component, Input, TemplateRef, OnInit, ChangeDetectorRef } from "@angular/core"; -import { NgTemplateOutlet, CommonModule } from "@angular/common"; +import { + CUSTOM_ELEMENTS_SCHEMA, + Component, + Input, + TemplateRef, + OnInit, + ChangeDetectorRef, +} from "@angular/core"; +import { NgTemplateOutlet } from "@angular/common"; import { GoabBaseComponent } from "../base.component"; @Component({ standalone: true, selector: "goab-popover", - imports: [NgTemplateOutlet, CommonModule], + imports: [NgTemplateOutlet], template: ` - - -
- -
-
+ @if (isReady) { + + +
+ +
+
+ } `, schemas: [CUSTOM_ELEMENTS_SCHEMA], }) diff --git a/libs/angular-components/src/lib/components/push-drawer/push-drawer.spec.ts b/libs/angular-components/src/lib/components/push-drawer/push-drawer.spec.ts index 3787242b12..f91eb681c0 100644 --- a/libs/angular-components/src/lib/components/push-drawer/push-drawer.spec.ts +++ b/libs/angular-components/src/lib/components/push-drawer/push-drawer.spec.ts @@ -1,7 +1,6 @@ import { ComponentFixture, TestBed, fakeAsync, tick } from "@angular/core/testing"; import { GoabPushDrawer } from "./push-drawer"; -import { Component, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; -import { By } from "@angular/platform-browser"; +import { Component } from "@angular/core"; @Component({ standalone: true, @@ -9,62 +8,60 @@ import { By } from "@angular/platform-browser"; template: ` -

This is the content of the push drawer.

- + {{ content }} + +

Heading

+
+ + +
`, }) class TestPushDrawerComponent { - open = true; - heading = "Push Drawer"; - testId = "test-drawer"; - width = "400px"; + open = false; + width = "600px"; + testId = "test-push-drawer"; + content = "Test Content"; - closePushDrawer = () => { - this.open = false; - }; + onClose() { + /* empty */ + } } describe("GoabPushDrawer", () => { - let fixture: ComponentFixture; let component: TestPushDrawerComponent; + let fixture: ComponentFixture; beforeEach(fakeAsync(() => { TestBed.configureTestingModule({ - imports: [GoabPushDrawer, TestPushDrawerComponent], - schemas: [CUSTOM_ELEMENTS_SCHEMA], + imports: [TestPushDrawerComponent], }).compileComponents(); fixture = TestBed.createComponent(TestPushDrawerComponent); component = fixture.componentInstance; fixture.detectChanges(); - tick(); // Wait for component initialization + tick(); fixture.detectChanges(); })); - it("should create", () => { - expect(component).toBeTruthy(); - }); + it("renders with correct attributes", fakeAsync(() => { + const pushDrawerElement = fixture.nativeElement.querySelector("goa-push-drawer"); + expect(pushDrawerElement).toBeTruthy(); - it("renders a goab-push-drawer", fakeAsync(() => { - const el = fixture.debugElement.query(By.css("goa-push-drawer")); - expect(el).toBeTruthy(); + expect(pushDrawerElement.getAttribute("width")).toBe("600px"); + expect(pushDrawerElement.getAttribute("testid")).toBe("test-push-drawer"); + expect(pushDrawerElement.getAttribute("version")).toBe("2"); + const headingContent = pushDrawerElement.querySelector("[slot='heading']"); + expect(headingContent?.textContent).toContain("Heading"); + expect(pushDrawerElement.textContent).toContain("Test Content"); + const actionsContent = pushDrawerElement.querySelector("[slot='actions']"); + expect(actionsContent?.textContent).toContain("Close"); })); - - describe("attributes", () => { - it("renders with testId", fakeAsync(() => { - const el = fixture.debugElement.query(By.css("goa-push-drawer")); - expect(el.attributes["test-id"]).toBe("test-drawer"); - })); - - it("passes heading", fakeAsync(() => { - const el = fixture.debugElement.query(By.css("goa-push-drawer")); - expect(el.attributes["heading"]).toBe("Push Drawer"); - })); - }); }); diff --git a/libs/angular-components/src/lib/components/push-drawer/push-drawer.ts b/libs/angular-components/src/lib/components/push-drawer/push-drawer.ts index 81ab781a2b..7b89a6bcea 100644 --- a/libs/angular-components/src/lib/components/push-drawer/push-drawer.ts +++ b/libs/angular-components/src/lib/components/push-drawer/push-drawer.ts @@ -1,4 +1,4 @@ -import { NgTemplateOutlet, CommonModule } from "@angular/common"; +import { NgTemplateOutlet } from "@angular/common"; import { booleanAttribute, Component, @@ -14,37 +14,37 @@ import { @Component({ standalone: true, selector: "goab-push-drawer", - imports: [NgTemplateOutlet, CommonModule], - template: ` + imports: [NgTemplateOutlet], + template: `@if (isReady) { - @if (getHeadingAsTemplate()) { -
- -
- } +
+ +
@if (actions) {
}
- `, + } `, schemas: [CUSTOM_ELEMENTS_SCHEMA], }) export class GoabPushDrawer implements OnInit { + version = "2"; + @Input({ transform: booleanAttribute }) open?: boolean; - @Input() heading?: string | TemplateRef; - @Input() testId?: string; + @Input() heading!: string | TemplateRef; @Input() width?: string; - @Input() actions?: TemplateRef; + @Input() testId?: string; + @Input() actions!: TemplateRef; @Output() onClose = new EventEmitter(); isReady = false; @@ -52,8 +52,6 @@ export class GoabPushDrawer implements OnInit { constructor(private cdr: ChangeDetectorRef) {} ngOnInit(): void { - // For Angular 20, we need to delay rendering the web component - // to ensure all attributes are properly bound before the component initializes setTimeout(() => { this.isReady = true; this.cdr.detectChanges(); @@ -65,7 +63,7 @@ export class GoabPushDrawer implements OnInit { } getHeadingAsString(): string { - return this.heading instanceof TemplateRef ? "" : this.heading || ""; + return this.heading instanceof TemplateRef ? "" : this.heading; } getHeadingAsTemplate(): TemplateRef | null { diff --git a/libs/angular-components/src/lib/components/radio-group/radio-group.spec.ts b/libs/angular-components/src/lib/components/radio-group/radio-group.spec.ts index c5de076d1f..b7e30afcde 100644 --- a/libs/angular-components/src/lib/components/radio-group/radio-group.spec.ts +++ b/libs/angular-components/src/lib/components/radio-group/radio-group.spec.ts @@ -9,7 +9,6 @@ import { import { GoabRadioItem } from "../radio-item/radio-item"; import { fireEvent } from "@testing-library/dom"; import { By } from "@angular/platform-browser"; -import { CommonModule } from "@angular/common"; interface RadioOption { text: string; @@ -20,7 +19,7 @@ interface RadioOption { @Component({ standalone: true, - imports: [GoabRadioGroup, GoabRadioItem, CommonModule], + imports: [GoabRadioGroup, GoabRadioItem], template: ` - - {{ option.text }} -
- {{ option.description }} -
-
+ @for (option of options; track option.value) { + + {{ option.text }} + @if (option.isDescriptionSlot) { +
+ {{ option.description }} +
+ } +
+ }
`, }) @@ -139,7 +141,8 @@ describe("GoABRadioGroup", () => { it("should render description", () => { component.options.forEach((option, index) => { - component.options[index].description = `Description for ${component.options[index].text}`; + component.options[index].description = + `Description for ${component.options[index].text}`; }); component.options[0].isDescriptionSlot = true; fixture.detectChanges(); @@ -150,12 +153,17 @@ describe("GoABRadioGroup", () => { expect(radioItems.length).toBe(component.options.length); // Slot description - expect(radioItems[0].querySelector("div[slot='description']")?.innerHTML, - ).toContain(`Description for ${component.options[0].text}`); + expect(radioItems[0].querySelector("div[slot='description']")?.innerHTML).toContain( + `Description for ${component.options[0].text}`, + ); // attribute description - expect(radioItems[1].getAttribute("description")).toBe(`Description for ${component.options[1].text}`); - expect(radioItems[2].getAttribute("description")).toBe(`Description for ${component.options[2].text}`); + expect(radioItems[1].getAttribute("description")).toBe( + `Description for ${component.options[1].text}`, + ); + expect(radioItems[2].getAttribute("description")).toBe( + `Description for ${component.options[2].text}`, + ); }); it("should dispatch onChange", () => { @@ -163,18 +171,31 @@ describe("GoABRadioGroup", () => { const changeEvent = new Event("change"); const radioGroup = fixture.nativeElement.querySelector("goa-radio-group"); - fireEvent(radioGroup, new CustomEvent("_change", { - detail: { name: component.name, value: component.options[0].value, event: changeEvent } - })); + fireEvent( + radioGroup, + new CustomEvent("_change", { + detail: { + name: component.name, + value: component.options[0].value, + event: changeEvent, + }, + }), + ); - expect(onChange).toBeCalledWith( - expect.objectContaining({ name: component.name, value: component.options[0].value, event: expect.any(Event) }), + expect(onChange).toHaveBeenCalledWith( + expect.objectContaining({ + name: component.name, + value: component.options[0].value, + event: expect.any(Event), + }), ); }); describe("writeValue", () => { it("should set value attribute when writeValue is called", () => { - const radioGroupComponent = fixture.debugElement.query(By.css("goab-radio-group")).componentInstance; + const radioGroupComponent = fixture.debugElement.query( + By.css("goab-radio-group"), + ).componentInstance; const radioGroupElement = fixture.nativeElement.querySelector("goa-radio-group"); radioGroupComponent.writeValue("apples"); @@ -185,7 +206,9 @@ describe("GoABRadioGroup", () => { }); it("should set value attribute to empty string when writeValue is called with null or empty", () => { - const radioGroupComponent = fixture.debugElement.query(By.css("goab-radio-group")).componentInstance; + const radioGroupComponent = fixture.debugElement.query( + By.css("goab-radio-group"), + ).componentInstance; const radioGroupElement = fixture.nativeElement.querySelector("goa-radio-group"); // First set a value @@ -208,7 +231,9 @@ describe("GoABRadioGroup", () => { }); it("should update component value property", () => { - const radioGroupComponent = fixture.debugElement.query(By.css("goab-radio-group")).componentInstance; + const radioGroupComponent = fixture.debugElement.query( + By.css("goab-radio-group"), + ).componentInstance; radioGroupComponent.writeValue("apples"); expect(radioGroupComponent.value).toBe("apples"); diff --git a/libs/angular-components/src/lib/components/radio-group/radio-group.ts b/libs/angular-components/src/lib/components/radio-group/radio-group.ts index 9216b0434c..e921bffb3a 100644 --- a/libs/angular-components/src/lib/components/radio-group/radio-group.ts +++ b/libs/angular-components/src/lib/components/radio-group/radio-group.ts @@ -1,6 +1,7 @@ import { GoabRadioGroupOnChangeDetail, GoabRadioGroupOrientation, + GoabRadioGroupSize, } from "@abgov/ui-components-common"; import { CUSTOM_ELEMENTS_SCHEMA, @@ -14,34 +15,37 @@ import { Renderer2, } from "@angular/core"; import { NG_VALUE_ACCESSOR } from "@angular/forms"; -import { CommonModule } from "@angular/common"; + import { GoabControlValueAccessor } from "../base.component"; @Component({ standalone: true, selector: "goab-radio-group", template: ` - - - + @if (isReady) { + + + + } `, - imports: [CommonModule], + schemas: [CUSTOM_ELEMENTS_SCHEMA], providers: [ { @@ -53,9 +57,11 @@ import { GoabControlValueAccessor } from "../base.component"; }) export class GoabRadioGroup extends GoabControlValueAccessor implements OnInit { isReady = false; + version = "2"; @Input() name?: string; @Input() orientation?: GoabRadioGroupOrientation; @Input() ariaLabel?: string; + @Input() size?: GoabRadioGroupSize = "default"; constructor( private cdr: ChangeDetectorRef, @@ -74,7 +80,10 @@ export class GoabRadioGroup extends GoabControlValueAccessor implements OnInit { @Output() onChange = new EventEmitter(); _onChange(e: Event) { - const detail = { ...(e as CustomEvent).detail, event: e }; + const detail = { + ...(e as CustomEvent).detail, + event: e, + }; this.markAsTouched(); this.onChange.emit(detail); diff --git a/libs/angular-components/src/lib/components/radio-item/radio-item.spec.ts b/libs/angular-components/src/lib/components/radio-item/radio-item.spec.ts index 6e41c397c1..a3d23ec911 100644 --- a/libs/angular-components/src/lib/components/radio-item/radio-item.spec.ts +++ b/libs/angular-components/src/lib/components/radio-item/radio-item.spec.ts @@ -19,7 +19,7 @@ import { GoabRadioItem } from "./radio-item"; `, }) -class TestRadioItemWithRevealSlotComponent { } +class TestRadioItemWithRevealSlotComponent {} describe("Radio item with reveal slot", () => { let fixture: ComponentFixture; @@ -37,13 +37,17 @@ describe("Radio item with reveal slot", () => { })); it("should render with slot reveal", () => { - const radioItemElement = fixture.debugElement.nativeElement.querySelector("goa-radio-item"); + const radioItemElement = + fixture.debugElement.nativeElement.querySelector("goa-radio-item"); const slotReveal = radioItemElement.querySelector("[slot='reveal']"); expect(slotReveal.textContent).toContain("A reveal slot"); }); it("should pass the revealAriaLabel property to the web component", () => { - const radioItemElement = fixture.debugElement.nativeElement.querySelector("goa-radio-item"); - expect(radioItemElement.getAttribute("revealarialabel")).toBe("Screen reader announcement for radio reveal content"); + const radioItemElement = + fixture.debugElement.nativeElement.querySelector("goa-radio-item"); + expect(radioItemElement.getAttribute("revealarialabel")).toBe( + "Screen reader announcement for radio reveal content", + ); }); }); diff --git a/libs/angular-components/src/lib/components/radio-item/radio-item.ts b/libs/angular-components/src/lib/components/radio-item/radio-item.ts index c626a30910..f2d5b62e2f 100644 --- a/libs/angular-components/src/lib/components/radio-item/radio-item.ts +++ b/libs/angular-components/src/lib/components/radio-item/radio-item.ts @@ -7,46 +7,48 @@ import { OnInit, ChangeDetectorRef, } from "@angular/core"; -import { NgTemplateOutlet, CommonModule } from "@angular/common"; +import { NgTemplateOutlet } from "@angular/common"; import { GoabBaseComponent } from "../base.component"; @Component({ standalone: true, selector: "goab-radio-item", template: ` - - -
- -
-
- -
-
- `, - imports: [NgTemplateOutlet, CommonModule], + @if (isReady) { + + +
+ +
+
+ @if (this.reveal) { + + } +
+
+ } + `, + imports: [NgTemplateOutlet], schemas: [CUSTOM_ELEMENTS_SCHEMA], }) -export class GoabRadioItem extends GoabBaseComponent { +export class GoabRadioItem extends GoabBaseComponent implements OnInit { @Input() value?: string; @Input() label?: string; @Input() name?: string; @@ -58,8 +60,10 @@ export class GoabRadioItem extends GoabBaseComponent { @Input({ transform: booleanAttribute }) checked?: boolean; @Input({ transform: booleanAttribute }) error?: boolean; @Input() maxWidth?: string; + @Input({ transform: booleanAttribute }) compact?: boolean; isReady = false; + version = "2"; constructor(private cdr: ChangeDetectorRef) { super(); diff --git a/libs/angular-components/src/lib/components/side-menu-group/side-menu-group.ts b/libs/angular-components/src/lib/components/side-menu-group/side-menu-group.ts index 5cd14e2c73..601562174c 100644 --- a/libs/angular-components/src/lib/components/side-menu-group/side-menu-group.ts +++ b/libs/angular-components/src/lib/components/side-menu-group/side-menu-group.ts @@ -1,5 +1,11 @@ -import { CUSTOM_ELEMENTS_SCHEMA, Component, Input, OnInit, ChangeDetectorRef } from "@angular/core"; -import { CommonModule } from "@angular/common"; +import { + CUSTOM_ELEMENTS_SCHEMA, + Component, + Input, + OnInit, + ChangeDetectorRef, +} from "@angular/core"; + import { GoabIconType } from "@abgov/ui-components-common"; import { GoabBaseComponent } from "../base.component"; @@ -7,24 +13,27 @@ import { GoabBaseComponent } from "../base.component"; standalone: true, selector: "goab-side-menu-group", template: ` - - - + @if (isReady) { + + + + } `, - imports: [CommonModule], + schemas: [CUSTOM_ELEMENTS_SCHEMA], }) export class GoabSideMenuGroup extends GoabBaseComponent implements OnInit { isReady = false; + version = "2"; @Input({ required: true }) heading!: string; @Input() icon?: GoabIconType; diff --git a/libs/angular-components/src/lib/components/side-menu-heading/side-menu-heading.spec.ts b/libs/angular-components/src/lib/components/side-menu-heading/side-menu-heading.spec.ts index a8f5819498..15b2a38690 100644 --- a/libs/angular-components/src/lib/components/side-menu-heading/side-menu-heading.spec.ts +++ b/libs/angular-components/src/lib/components/side-menu-heading/side-menu-heading.spec.ts @@ -7,9 +7,12 @@ import { GoabBadge } from "../badge/badge"; standalone: true, imports: [GoabSideMenuHeading, GoabBadge], template: ` - Heading - - + Heading + + `, }) class TestSideMenuHeadingComponent { @@ -21,7 +24,7 @@ describe("GoABSideMenuHeading", () => { beforeEach(fakeAsync(() => { TestBed.configureTestingModule({ imports: [GoabSideMenuHeading, GoabBadge, TestSideMenuHeadingComponent], - schemas: [CUSTOM_ELEMENTS_SCHEMA] + schemas: [CUSTOM_ELEMENTS_SCHEMA], }).compileComponents(); fixture = TestBed.createComponent(TestSideMenuHeadingComponent); @@ -36,5 +39,5 @@ describe("GoABSideMenuHeading", () => { expect(el?.getAttribute("testid")).toBe("foo"); expect(el?.textContent).toContain("Heading"); expect(el?.querySelector("[slot='meta']")?.innerHTML).toContain("details"); - }) -}) + }); +}); diff --git a/libs/angular-components/src/lib/components/side-menu-heading/side-menu-heading.ts b/libs/angular-components/src/lib/components/side-menu-heading/side-menu-heading.ts index f909bfceb5..1acb5f1cbe 100644 --- a/libs/angular-components/src/lib/components/side-menu-heading/side-menu-heading.ts +++ b/libs/angular-components/src/lib/components/side-menu-heading/side-menu-heading.ts @@ -1,23 +1,37 @@ import { GoabIconType } from "@abgov/ui-components-common"; -import { CUSTOM_ELEMENTS_SCHEMA, Component, Input, TemplateRef, OnInit, ChangeDetectorRef } from "@angular/core"; -import { NgTemplateOutlet, CommonModule } from "@angular/common"; +import { + CUSTOM_ELEMENTS_SCHEMA, + Component, + Input, + TemplateRef, + OnInit, + ChangeDetectorRef, +} from "@angular/core"; +import { NgTemplateOutlet } from "@angular/common"; @Component({ standalone: true, selector: "goab-side-menu-heading", - imports: [NgTemplateOutlet, CommonModule], + imports: [NgTemplateOutlet], template: ` - - - - - - + @if (isReady) { + + + + + + + } `, schemas: [CUSTOM_ELEMENTS_SCHEMA], }) export class GoabSideMenuHeading implements OnInit { isReady = false; + version = "2"; @Input() icon!: GoabIconType; @Input() testId?: string; @Input() meta!: TemplateRef; diff --git a/libs/angular-components/src/lib/components/side-menu/side-menu.ts b/libs/angular-components/src/lib/components/side-menu/side-menu.ts index 397646f8a7..1915a758be 100644 --- a/libs/angular-components/src/lib/components/side-menu/side-menu.ts +++ b/libs/angular-components/src/lib/components/side-menu/side-menu.ts @@ -1,19 +1,27 @@ -import { CUSTOM_ELEMENTS_SCHEMA, Component, Input, OnInit, ChangeDetectorRef } from "@angular/core"; -import { CommonModule } from "@angular/common"; +import { + CUSTOM_ELEMENTS_SCHEMA, + Component, + Input, + OnInit, + ChangeDetectorRef, +} from "@angular/core"; @Component({ standalone: true, selector: "goab-side-menu", template: ` - - - + @if (isReady) { + + + + } `, - imports: [CommonModule], - schemas: [CUSTOM_ELEMENTS_SCHEMA] + + schemas: [CUSTOM_ELEMENTS_SCHEMA], }) export class GoabSideMenu implements OnInit { isReady = false; + version = "2"; @Input() testId?: string; constructor(private cdr: ChangeDetectorRef) {} diff --git a/libs/angular-components/src/lib/components/skeleton/skeleton.spec.ts b/libs/angular-components/src/lib/components/skeleton/skeleton.spec.ts index 1cbb3635af..2e77fc6e91 100644 --- a/libs/angular-components/src/lib/components/skeleton/skeleton.spec.ts +++ b/libs/angular-components/src/lib/components/skeleton/skeleton.spec.ts @@ -7,16 +7,18 @@ import { GoabSkeletonType, Spacing } from "@abgov/ui-components-common"; standalone: true, imports: [GoabSkeleton], template: ` - - ` + + `, }) class TestSkeletonComponent { type = "image" as GoabSkeletonType; @@ -37,7 +39,7 @@ describe("GoABSkeleton", () => { beforeEach(fakeAsync(() => { TestBed.configureTestingModule({ imports: [GoabSkeleton, TestSkeletonComponent], - schemas: [CUSTOM_ELEMENTS_SCHEMA] + schemas: [CUSTOM_ELEMENTS_SCHEMA], }).compileComponents(); fixture = TestBed.createComponent(TestSkeletonComponent); @@ -45,7 +47,7 @@ describe("GoABSkeleton", () => { fixture.detectChanges(); tick(); fixture.detectChanges(); - })) + })); it("should render successfully", () => { const el = fixture.nativeElement.querySelector("goa-skeleton"); @@ -57,5 +59,5 @@ describe("GoABSkeleton", () => { expect(el?.getAttribute("mb")).toBe(component.mb); expect(el?.getAttribute("ml")).toBe(component.ml); expect(el?.getAttribute("mr")).toBe(component.mr); - }) -}) + }); +}); diff --git a/libs/angular-components/src/lib/components/skeleton/skeleton.ts b/libs/angular-components/src/lib/components/skeleton/skeleton.ts index b3523d1048..69b20fcd6d 100644 --- a/libs/angular-components/src/lib/components/skeleton/skeleton.ts +++ b/libs/angular-components/src/lib/components/skeleton/skeleton.ts @@ -1,27 +1,35 @@ import { GoabSkeletonSize, GoabSkeletonType, Spacing } from "@abgov/ui-components-common"; -import { CUSTOM_ELEMENTS_SCHEMA, Component, Input, numberAttribute, OnInit, ChangeDetectorRef } from "@angular/core"; -import { CommonModule } from "@angular/common"; +import { + CUSTOM_ELEMENTS_SCHEMA, + Component, + Input, + numberAttribute, + OnInit, + ChangeDetectorRef, +} from "@angular/core"; + import { GoabBaseComponent } from "../base.component"; @Component({ standalone: true, selector: "goab-skeleton", template: ` - - + @if (isReady) { + + + } `, - imports: [CommonModule], + schemas: [CUSTOM_ELEMENTS_SCHEMA], }) export class GoabSkeleton extends GoabBaseComponent implements OnInit { diff --git a/libs/angular-components/src/lib/components/spacer/spacer.spec.ts b/libs/angular-components/src/lib/components/spacer/spacer.spec.ts index 30b88b0111..0bffc8abc4 100644 --- a/libs/angular-components/src/lib/components/spacer/spacer.spec.ts +++ b/libs/angular-components/src/lib/components/spacer/spacer.spec.ts @@ -5,11 +5,11 @@ import { Component, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; @Component({ standalone: true, imports: [GoabSpacer], - template: ` - - ` + template: ` `, }) -class TestSpacerComponent {/** do nothing **/} +class TestSpacerComponent { + /** do nothing **/ +} describe("GoASpacer", () => { let fixture: ComponentFixture; @@ -17,7 +17,7 @@ describe("GoASpacer", () => { beforeEach(fakeAsync(() => { TestBed.configureTestingModule({ imports: [GoabSpacer, TestSpacerComponent], - schemas: [CUSTOM_ELEMENTS_SCHEMA] + schemas: [CUSTOM_ELEMENTS_SCHEMA], }).compileComponents(); fixture = TestBed.createComponent(TestSpacerComponent); diff --git a/libs/angular-components/src/lib/components/spacer/spacer.ts b/libs/angular-components/src/lib/components/spacer/spacer.ts index af1bb5321b..76a4aa8f84 100644 --- a/libs/angular-components/src/lib/components/spacer/spacer.ts +++ b/libs/angular-components/src/lib/components/spacer/spacer.ts @@ -1,20 +1,29 @@ -import { GoabSpacerHorizontalSpacing, GoabSpacerVerticalSpacing } from "@abgov/ui-components-common"; -import { CUSTOM_ELEMENTS_SCHEMA, Component, Input, OnInit, ChangeDetectorRef } from "@angular/core"; -import { CommonModule } from "@angular/common"; +import { + GoabSpacerHorizontalSpacing, + GoabSpacerVerticalSpacing, +} from "@abgov/ui-components-common"; +import { + CUSTOM_ELEMENTS_SCHEMA, + Component, + Input, + OnInit, + ChangeDetectorRef, +} from "@angular/core"; @Component({ standalone: true, selector: "goab-spacer", template: ` - - + @if (isReady) { + + + } `, - imports: [CommonModule], + schemas: [CUSTOM_ELEMENTS_SCHEMA], }) export class GoabSpacer implements OnInit { diff --git a/libs/angular-components/src/lib/components/spinner/spinner.ts b/libs/angular-components/src/lib/components/spinner/spinner.ts index 123d1ced37..821066ce11 100644 --- a/libs/angular-components/src/lib/components/spinner/spinner.ts +++ b/libs/angular-components/src/lib/components/spinner/spinner.ts @@ -8,23 +8,23 @@ import { OnInit, ChangeDetectorRef, } from "@angular/core"; -import { CommonModule } from "@angular/common"; @Component({ standalone: true, selector: "goab-spinner", template: ` - - + @if (isReady) { + + + } `, - imports: [CommonModule], + schemas: [CUSTOM_ELEMENTS_SCHEMA], }) export class GoabSpinner implements OnInit { diff --git a/libs/angular-components/src/lib/components/tab/tab.ts b/libs/angular-components/src/lib/components/tab/tab.ts index 1221035211..58e1aafb42 100644 --- a/libs/angular-components/src/lib/components/tab/tab.ts +++ b/libs/angular-components/src/lib/components/tab/tab.ts @@ -7,28 +7,29 @@ import { ChangeDetectorRef, booleanAttribute, } from "@angular/core"; -import { NgTemplateOutlet, CommonModule } from "@angular/common"; +import { NgTemplateOutlet } from "@angular/common"; @Component({ standalone: true, selector: "goab-tab", template: ` - - - @if (typeof heading !== "string") { -
- -
- } -
+ @if (isReady) { + + + @if (typeof heading !== "string") { +
+ +
+ } +
+ } `, schemas: [CUSTOM_ELEMENTS_SCHEMA], - imports: [NgTemplateOutlet, CommonModule], + imports: [NgTemplateOutlet], }) export class GoabTab implements OnInit { isReady = false; diff --git a/libs/angular-components/src/lib/components/table-sort-header/table-sort-header.spec.ts b/libs/angular-components/src/lib/components/table-sort-header/table-sort-header.spec.ts index 19d0c0516f..b33770221c 100644 --- a/libs/angular-components/src/lib/components/table-sort-header/table-sort-header.spec.ts +++ b/libs/angular-components/src/lib/components/table-sort-header/table-sort-header.spec.ts @@ -1,6 +1,6 @@ import { Component, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; import { ComponentFixture, TestBed, fakeAsync, tick } from "@angular/core/testing"; -import { GoabTableSortHeader } from "../table-sort-header/table-sort-header"; +import { GoabTableSortHeader } from "./table-sort-header"; @Component({ standalone: true, @@ -17,6 +17,21 @@ class TestTableSortHeaderComponent { /** do nothing **/ } +@Component({ + standalone: true, + imports: [GoabTableSortHeader], + template: ` + + + Salary + + + `, +}) +class TestTableSortHeaderWithSortOrderComponent { + /** do nothing **/ +} + describe("GoABTableSortHeader", () => { let fixture: ComponentFixture; @@ -39,3 +54,26 @@ describe("GoABTableSortHeader", () => { expect(el?.textContent).toContain("First name and really long header"); }); }); + +describe("GoABTableSortHeader with sortOrder", () => { + let fixture: ComponentFixture; + + beforeEach(fakeAsync(() => { + TestBed.configureTestingModule({ + imports: [GoabTableSortHeader, TestTableSortHeaderWithSortOrderComponent], + schemas: [CUSTOM_ELEMENTS_SCHEMA], + }).compileComponents(); + + fixture = TestBed.createComponent(TestTableSortHeaderWithSortOrderComponent); + fixture.detectChanges(); + tick(); + fixture.detectChanges(); + })); + + it("should render sort-order attribute", () => { + const el = fixture.nativeElement.querySelector("goa-table-sort-header"); + expect(el?.getAttribute("sort-order")).toBe("2"); + expect(el?.getAttribute("direction")).toBe("desc"); + expect(el?.getAttribute("name")).toBe("salary"); + }); +}); diff --git a/libs/angular-components/src/lib/components/table-sort-header/table-sort-header.ts b/libs/angular-components/src/lib/components/table-sort-header/table-sort-header.ts index 3d59b53476..3fb1516a05 100644 --- a/libs/angular-components/src/lib/components/table-sort-header/table-sort-header.ts +++ b/libs/angular-components/src/lib/components/table-sort-header/table-sort-header.ts @@ -1,26 +1,34 @@ -import { GoabTableSortDirection } from "@abgov/ui-components-common"; -import { CUSTOM_ELEMENTS_SCHEMA, Component, Input, OnInit, ChangeDetectorRef } from "@angular/core"; -import { CommonModule } from "@angular/common"; +import { GoabTableSortDirection, GoabTableSortOrder } from "@abgov/ui-components-common"; +import { + CUSTOM_ELEMENTS_SCHEMA, + Component, + Input, + OnInit, + ChangeDetectorRef, +} from "@angular/core"; @Component({ standalone: true, selector: "goab-table-sort-header", template: ` - - - + @if (isReady) { + + + + } `, - imports: [CommonModule], - schemas: [CUSTOM_ELEMENTS_SCHEMA] + + schemas: [CUSTOM_ELEMENTS_SCHEMA], }) export class GoabTableSortHeader implements OnInit { isReady = false; @Input() name?: string; @Input() direction?: GoabTableSortDirection = "none"; + @Input() sortOrder?: GoabTableSortOrder; constructor(private cdr: ChangeDetectorRef) {} diff --git a/libs/angular-components/src/lib/components/table/table.spec.ts b/libs/angular-components/src/lib/components/table/table.spec.ts index c67aaa4401..31db532162 100644 --- a/libs/angular-components/src/lib/components/table/table.spec.ts +++ b/libs/angular-components/src/lib/components/table/table.spec.ts @@ -3,6 +3,8 @@ import { GoabTable } from "./table"; import { Component, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; import { GoabTableOnSortDetail, + GoabTableOnMultiSortDetail, + GoabTableSortMode, GoabTableVariant, Spacing, } from "@abgov/ui-components-common"; @@ -15,12 +17,15 @@ import { fireEvent } from "@testing-library/dom"; @@ -38,13 +43,19 @@ import { fireEvent } from "@testing-library/dom"; class TestTableComponent { width?: string; variant?: GoabTableVariant; + sortMode?: GoabTableSortMode; + striped?: boolean; testId?: string; mt?: Spacing; mb?: Spacing; mr?: Spacing; ml?: Spacing; - onSort(event: GoabTableOnSortDetail) { + onSort(_event: GoabTableOnSortDetail) { + /** do nothing **/ + } + + onMultiSort(_event: GoabTableOnMultiSortDetail) { /** do nothing **/ } } @@ -64,6 +75,8 @@ describe("GoabTable", () => { component.width = "200px"; component.variant = "relaxed"; + component.sortMode = "multi"; + component.striped = true; component.testId = "foo"; component.mt = "s" as Spacing; component.mb = "xl" as Spacing; @@ -77,8 +90,11 @@ describe("GoabTable", () => { it("should render", () => { const el = fixture.nativeElement.querySelector("goa-table"); + expect(el?.getAttribute("version")).toBe("2"); expect(el?.getAttribute("width")).toBe(component.width); expect(el?.getAttribute("variant")).toBe(component.variant); + expect(el?.getAttribute("sort-mode")).toBe(component.sortMode); + expect(el?.getAttribute("striped")).toBe("true"); expect(el?.getAttribute("testid")).toBe(component.testId); expect(el?.getAttribute("mt")).toBe(component.mt); expect(el?.getAttribute("mb")).toBe(component.mb); @@ -95,13 +111,32 @@ describe("GoabTable", () => { it("should dispatch _sort", () => { const onSort = jest.spyOn(component, "onSort"); const el = fixture.nativeElement.querySelector("goa-table"); + const detail = { + sortBy: "column1", + sortDir: 1, + }; + fireEvent( + el, + new CustomEvent("_sort", { detail }), + ); + + expect(onSort).toHaveBeenCalledWith(detail); + }); + + it("should dispatch _multisort", () => { + const onMultiSort = jest.spyOn(component, "onMultiSort"); + const el = fixture.nativeElement.querySelector("goa-table"); + const detail = { + sorts: [ + { column: "column1", direction: "asc" }, + { column: "column2", direction: "desc" }, + ], + }; fireEvent( el, - new CustomEvent("_sort", { - detail: { sortBy: "column1", sortDir: 1 }, - }), + new CustomEvent("_multisort", { detail }), ); - expect(onSort).toHaveBeenCalledWith({ sortBy: "column1", sortDir: 1 }); + expect(onMultiSort).toHaveBeenCalledWith(detail); }); }); diff --git a/libs/angular-components/src/lib/components/table/table.ts b/libs/angular-components/src/lib/components/table/table.ts index a3a1bc077f..42cf324ec3 100644 --- a/libs/angular-components/src/lib/components/table/table.ts +++ b/libs/angular-components/src/lib/components/table/table.ts @@ -1,4 +1,9 @@ -import { GoabTableOnSortDetail, GoabTableVariant } from "@abgov/ui-components-common"; +import { + GoabTableOnSortDetail, + GoabTableOnMultiSortDetail, + GoabTableSortMode, + GoabTableVariant, +} from "@abgov/ui-components-common"; import { CUSTOM_ELEMENTS_SCHEMA, Component, @@ -7,37 +12,46 @@ import { Output, OnInit, ChangeDetectorRef, + booleanAttribute, } from "@angular/core"; -import { CommonModule } from "@angular/common"; + import { GoabBaseComponent } from "../base.component"; @Component({ standalone: true, selector: "goab-table", template: ` - - - -
-
+ @if (isReady) { + + + +
+
+ } `, - imports: [CommonModule], + schemas: [CUSTOM_ELEMENTS_SCHEMA], }) export class GoabTable extends GoabBaseComponent implements OnInit { isReady = false; + version = "2"; @Input() width?: string; @Input() variant?: GoabTableVariant; + @Input() sortMode?: GoabTableSortMode; + @Input({ transform: booleanAttribute }) striped?: boolean; constructor(private cdr: ChangeDetectorRef) { super(); @@ -51,9 +65,15 @@ export class GoabTable extends GoabBaseComponent implements OnInit { } @Output() onSort = new EventEmitter(); + @Output() onMultiSort = new EventEmitter(); _onSort(e: Event) { const detail = (e as CustomEvent).detail; this.onSort.emit(detail); } + + _onMultiSort(e: Event) { + const detail = (e as CustomEvent).detail; + this.onMultiSort.emit(detail); + } } diff --git a/libs/angular-components/src/lib/components/tabs/tabs.spec.ts b/libs/angular-components/src/lib/components/tabs/tabs.spec.ts index fd4dc2c428..ac470ef511 100644 --- a/libs/angular-components/src/lib/components/tabs/tabs.spec.ts +++ b/libs/angular-components/src/lib/components/tabs/tabs.spec.ts @@ -1,7 +1,7 @@ import { ComponentFixture, TestBed, fakeAsync, tick } from "@angular/core/testing"; import { GoabTabs } from "./tabs"; -import { Component, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; import { GoabTab } from "../tab/tab"; +import { Component, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core"; import { GoabTabsOnChangeDetail } from "@abgov/ui-components-common"; import { fireEvent } from "@testing-library/dom"; @@ -10,7 +10,7 @@ import { fireEvent } from "@testing-library/dom"; imports: [GoabTabs, GoabTab], template: ` - Tab content + Tab content `, }) @@ -25,15 +25,12 @@ class TestTabsComponent { standalone: true, imports: [GoabTabs, GoabTab], template: ` - - Overview content - Details content + + Tab 1 content `, }) -class TestTabsWithSlugComponent { - /** do nothing **/ -} +class TestTabsNavigationComponent {} describe("GoABTabs", () => { let fixture: ComponentFixture; @@ -41,7 +38,7 @@ describe("GoABTabs", () => { beforeEach(fakeAsync(() => { TestBed.configureTestingModule({ - imports: [GoabTabs, GoabTab, TestTabsComponent], + imports: [GoabTabs, TestTabsComponent, TestTabsNavigationComponent], schemas: [CUSTOM_ELEMENTS_SCHEMA], }).compileComponents(); @@ -54,13 +51,22 @@ describe("GoABTabs", () => { it("should render", () => { const el = fixture.nativeElement.querySelector("goa-tabs"); - expect(el?.getAttribute("initialtab")).toBe("1"); expect(el?.getAttribute("testid")).toBe("foo"); expect(el?.innerHTML).toContain("Profile"); expect(el?.textContent).toContain("Tab content"); }); + it("should render with navigation attribute", fakeAsync(() => { + const navFixture = TestBed.createComponent(TestTabsNavigationComponent); + navFixture.detectChanges(); + tick(); + navFixture.detectChanges(); + + const el = navFixture.nativeElement.querySelector("goa-tabs"); + expect(el?.getAttribute("navigation")).toBe("none"); + })); + it("should dispatch _onChange", () => { const onChange = jest.spyOn(component, "onChange"); @@ -68,26 +74,10 @@ describe("GoABTabs", () => { fireEvent( el, new CustomEvent("_change", { - detail: { tab: 2 } - }) + detail: { tab: 2 }, + }), ); expect(onChange).toHaveBeenCalledWith({ tab: 2 }); }); - - it("should render tabs with slug props", fakeAsync(() => { - const slugFixture = TestBed.createComponent(TestTabsWithSlugComponent); - slugFixture.detectChanges(); - tick(); - slugFixture.detectChanges(); - - const tabElements = slugFixture.nativeElement.querySelectorAll("goa-tab"); - expect(tabElements.length).toBe(2); - - // First tab should have slug attribute - expect(tabElements[0].getAttribute("slug")).toBe("overview-section"); - - // Second tab should not have slug attribute - expect(tabElements[1].getAttribute("slug")).toBeNull(); - })); }); diff --git a/libs/angular-components/src/lib/components/tabs/tabs.ts b/libs/angular-components/src/lib/components/tabs/tabs.ts index 075e74bb16..4678d0a71f 100644 --- a/libs/angular-components/src/lib/components/tabs/tabs.ts +++ b/libs/angular-components/src/lib/components/tabs/tabs.ts @@ -8,33 +8,45 @@ import { OnInit, ChangeDetectorRef, } from "@angular/core"; -import { CommonModule } from "@angular/common"; -import { GoabTabsOnChangeDetail, GoabTabsVariant } from "@abgov/ui-components-common"; +import { + GoabTabsOnChangeDetail, + GoabTabsOrientation, + GoabTabsVariant, + GoabTabsNavigation, +} from "@abgov/ui-components-common"; @Component({ standalone: true, selector: "goab-tabs", template: ` - - - + @if (isReady) { + + + + } `, - imports: [CommonModule], + schemas: [CUSTOM_ELEMENTS_SCHEMA], }) export class GoabTabs implements OnInit { isReady = false; + version = "2"; @Input({ transform: numberAttribute }) initialTab?: number; @Input() testId?: string; @Input() variant?: GoabTabsVariant; + /** Tab layout orientation. "auto" stacks vertically on mobile (default), "horizontal" keeps horizontal on all screen sizes. */ + @Input() orientation?: GoabTabsOrientation; + @Input() navigation?: GoabTabsNavigation; - constructor(private cdr: ChangeDetectorRef) {} + constructor(private cdr: ChangeDetectorRef) { } ngOnInit(): void { setTimeout(() => { diff --git a/libs/angular-components/src/lib/components/temporary-notification-ctrl/temporary-notification-ctrl.ts b/libs/angular-components/src/lib/components/temporary-notification-ctrl/temporary-notification-ctrl.ts index 017a2f34cf..af3eb49121 100644 --- a/libs/angular-components/src/lib/components/temporary-notification-ctrl/temporary-notification-ctrl.ts +++ b/libs/angular-components/src/lib/components/temporary-notification-ctrl/temporary-notification-ctrl.ts @@ -1,5 +1,10 @@ -import { CUSTOM_ELEMENTS_SCHEMA, Component, Input, OnInit, ChangeDetectorRef } from "@angular/core"; -import { CommonModule } from "@angular/common"; +import { + CUSTOM_ELEMENTS_SCHEMA, + Component, + Input, + OnInit, + ChangeDetectorRef, +} from "@angular/core"; type SnackbarVerticalPosition = "top" | "bottom"; type SnackbarHorizontalPosition = "left" | "center" | "right"; @@ -8,15 +13,16 @@ type SnackbarHorizontalPosition = "left" | "center" | "right"; standalone: true, selector: "goab-temporary-notification-ctrl", template: ` - - + @if (isReady) { + + + } `, - imports: [CommonModule], + schemas: [CUSTOM_ELEMENTS_SCHEMA], }) export class GoabTemporaryNotificationCtrl implements OnInit { diff --git a/libs/angular-components/src/lib/components/text/text.ts b/libs/angular-components/src/lib/components/text/text.ts index 0ee46c4eeb..5cb43aa421 100644 --- a/libs/angular-components/src/lib/components/text/text.ts +++ b/libs/angular-components/src/lib/components/text/text.ts @@ -6,7 +6,7 @@ import { ChangeDetectorRef, HostBinding, } from "@angular/core"; -import { CommonModule } from "@angular/common"; + import { GoabTextColor, GoabTextHeadingElement, @@ -19,21 +19,22 @@ import { @Component({ standalone: true, selector: "goab-text", - imports: [CommonModule], + template: ` - - - + @if (isReady) { + + + + } `, schemas: [CUSTOM_ELEMENTS_SCHEMA], }) diff --git a/libs/angular-components/src/lib/components/textarea/textarea.spec.ts b/libs/angular-components/src/lib/components/textarea/textarea.spec.ts index d3c3cfae34..443b69b20a 100644 --- a/libs/angular-components/src/lib/components/textarea/textarea.spec.ts +++ b/libs/angular-components/src/lib/components/textarea/textarea.spec.ts @@ -111,7 +111,7 @@ describe("GoABTextArea", () => { }), ); - expect(onChange).toBeCalledTimes(1); + expect(onChange).toHaveBeenCalledTimes(1); }); it("should dispatch onBlur", () => { @@ -125,12 +125,14 @@ describe("GoABTextArea", () => { }), ); - expect(onBlur).toBeCalledTimes(1); + expect(onBlur).toHaveBeenCalledTimes(1); }); describe("writeValue", () => { it("should set value attribute when writeValue is called", () => { - const textareaComponent = fixture.debugElement.query(By.css("goab-textarea")).componentInstance; + const textareaComponent = fixture.debugElement.query( + By.css("goab-textarea"), + ).componentInstance; const textareaElement = fixture.nativeElement.querySelector("goa-textarea"); textareaComponent.writeValue("new content"); @@ -141,7 +143,9 @@ describe("GoABTextArea", () => { }); it("should set value attribute to empty string when writeValue is called with null or empty", () => { - const textareaComponent = fixture.debugElement.query(By.css("goab-textarea")).componentInstance; + const textareaComponent = fixture.debugElement.query( + By.css("goab-textarea"), + ).componentInstance; const textareaElement = fixture.nativeElement.querySelector("goa-textarea"); // First set a value @@ -164,7 +168,9 @@ describe("GoABTextArea", () => { }); it("should update component value property", () => { - const textareaComponent = fixture.debugElement.query(By.css("goab-textarea")).componentInstance; + const textareaComponent = fixture.debugElement.query( + By.css("goab-textarea"), + ).componentInstance; textareaComponent.writeValue("updated value"); expect(textareaComponent.value).toBe("updated value"); diff --git a/libs/angular-components/src/lib/components/textarea/textarea.ts b/libs/angular-components/src/lib/components/textarea/textarea.ts index e63ac3b530..d92dda264a 100644 --- a/libs/angular-components/src/lib/components/textarea/textarea.ts +++ b/libs/angular-components/src/lib/components/textarea/textarea.ts @@ -3,6 +3,7 @@ import { GoabTextAreaOnChangeDetail, GoabTextAreaOnKeyPressDetail, GoabTextAreaOnBlurDetail, + GoabTextAreaSize, } from "@abgov/ui-components-common"; import { CUSTOM_ELEMENTS_SCHEMA, @@ -18,40 +19,43 @@ import { Renderer2, } from "@angular/core"; import { NG_VALUE_ACCESSOR } from "@angular/forms"; -import { CommonModule } from "@angular/common"; + import { GoabControlValueAccessor } from "../base.component"; @Component({ standalone: true, selector: "goab-textarea", - imports: [CommonModule], + template: ` - - + @if (isReady) { + + + } `, schemas: [CUSTOM_ELEMENTS_SCHEMA], providers: [ @@ -73,12 +77,14 @@ export class GoabTextArea extends GoabControlValueAccessor implements OnInit { @Input() maxCount?: number = -1; @Input() maxWidth?: string; @Input() autoComplete?: string = "on"; + @Input() size?: GoabTextAreaSize = "default"; @Output() onChange = new EventEmitter(); @Output() onKeyPress = new EventEmitter(); @Output() onBlur = new EventEmitter(); isReady = false; + version = "2"; constructor( private cdr: ChangeDetectorRef, @@ -104,7 +110,10 @@ export class GoabTextArea extends GoabControlValueAccessor implements OnInit { } _onKeyPress(e: Event) { - const detail = { ...(e as CustomEvent).detail, event: e }; + const detail = { + ...(e as CustomEvent).detail, + event: e, + }; this.markAsTouched(); this.onKeyPress.emit(detail); } diff --git a/libs/angular-components/src/lib/components/tooltip/tooltip.spec.ts b/libs/angular-components/src/lib/components/tooltip/tooltip.spec.ts index 6c497f6549..7e9c8ee03f 100644 --- a/libs/angular-components/src/lib/components/tooltip/tooltip.spec.ts +++ b/libs/angular-components/src/lib/components/tooltip/tooltip.spec.ts @@ -49,4 +49,4 @@ describe("GoABTooltip", () => { expect(el?.getAttribute("maxwidth")).toBe("300px"); expect(el?.getAttribute("testid")).toBe("foo-maxwidth"); }); -}); \ No newline at end of file +}); diff --git a/libs/angular-components/src/lib/components/tooltip/tooltip.ts b/libs/angular-components/src/lib/components/tooltip/tooltip.ts index aa9652bf62..5f8d2dd11c 100644 --- a/libs/angular-components/src/lib/components/tooltip/tooltip.ts +++ b/libs/angular-components/src/lib/components/tooltip/tooltip.ts @@ -2,38 +2,45 @@ import { GoabTooltipHorizontalAlignment, GoabTooltipPosition, } from "@abgov/ui-components-common"; -import { CUSTOM_ELEMENTS_SCHEMA, Component, Input, TemplateRef, OnInit, ChangeDetectorRef } from "@angular/core"; -import { NgTemplateOutlet, NgIf, CommonModule } from "@angular/common"; +import { + CUSTOM_ELEMENTS_SCHEMA, + Component, + Input, + TemplateRef, + OnInit, + ChangeDetectorRef, +} from "@angular/core"; +import { NgTemplateOutlet } from "@angular/common"; import { GoabBaseComponent } from "../base.component"; @Component({ standalone: true, selector: "goab-tooltip", template: ` - -
- - {{ getContentAsString() }} -
- -
+ @if (isReady) { + +
+ @if (getContentAsTemplate()) { + + } + {{ getContentAsString() }} +
+ +
+ } `, schemas: [CUSTOM_ELEMENTS_SCHEMA], - imports: [NgTemplateOutlet, NgIf, CommonModule], + imports: [NgTemplateOutlet], }) export class GoabTooltip extends GoabBaseComponent implements OnInit { isReady = false; @@ -61,4 +68,4 @@ export class GoabTooltip extends GoabBaseComponent implements OnInit { if (!this.content) return null; return this.content instanceof TemplateRef ? this.content : null; } -} \ No newline at end of file +} diff --git a/libs/angular-components/src/experimental/work-side-menu-group/work-side-menu-group.spec.ts b/libs/angular-components/src/lib/components/work-side-menu-group/work-side-menu-group.spec.ts similarity index 61% rename from libs/angular-components/src/experimental/work-side-menu-group/work-side-menu-group.spec.ts rename to libs/angular-components/src/lib/components/work-side-menu-group/work-side-menu-group.spec.ts index 78901a3e36..b6b5567031 100644 --- a/libs/angular-components/src/experimental/work-side-menu-group/work-side-menu-group.spec.ts +++ b/libs/angular-components/src/lib/components/work-side-menu-group/work-side-menu-group.spec.ts @@ -1,24 +1,31 @@ import { ComponentFixture, TestBed, fakeAsync, tick } from "@angular/core/testing"; -import { GoabxWorkSideMenuGroup } from "./work-side-menu-group"; +import { GoabWorkSideMenuGroup } from "./work-side-menu-group"; import { Component } from "@angular/core"; import { By } from "@angular/platform-browser"; @Component({ standalone: true, - imports: [GoabxWorkSideMenuGroup], + imports: [GoabWorkSideMenuGroup], template: ` - - + + `, }) class TestWorkSideMenuGroupComponent { - heading = "Test heading"; - icon = "star"; - testId = "test-id"; + heading?: string; + icon?: string; + testId?: string; + open?: boolean; } -describe("GoabxWorkSideMenuGroup", () => { +describe("GoabWorkSideMenuGroup", () => { let fixture: ComponentFixture; + let component: TestWorkSideMenuGroupComponent; beforeEach(fakeAsync(() => { TestBed.configureTestingModule({ @@ -26,6 +33,11 @@ describe("GoabxWorkSideMenuGroup", () => { }).compileComponents(); fixture = TestBed.createComponent(TestWorkSideMenuGroupComponent); + component = fixture.componentInstance; + component.heading = "Test heading"; + component.icon = "star"; + component.testId = "test-id"; + component.open = true; fixture.detectChanges(); tick(); // Wait for setTimeout in ngOnInit @@ -39,5 +51,6 @@ describe("GoabxWorkSideMenuGroup", () => { expect(menuGroupElement.getAttribute("heading")).toBe("Test heading"); expect(menuGroupElement.getAttribute("icon")).toBe("star"); expect(menuGroupElement.getAttribute("testid")).toBe("test-id"); + expect(menuGroupElement.hasAttribute("open")).toBe(true); }); }); diff --git a/libs/angular-components/src/experimental/work-side-menu-group/work-side-menu-group.ts b/libs/angular-components/src/lib/components/work-side-menu-group/work-side-menu-group.ts similarity index 58% rename from libs/angular-components/src/experimental/work-side-menu-group/work-side-menu-group.ts rename to libs/angular-components/src/lib/components/work-side-menu-group/work-side-menu-group.ts index e4880f8404..05488364bd 100644 --- a/libs/angular-components/src/experimental/work-side-menu-group/work-side-menu-group.ts +++ b/libs/angular-components/src/lib/components/work-side-menu-group/work-side-menu-group.ts @@ -1,32 +1,35 @@ import { GoabIconType } from "@abgov/ui-components-common"; import { CUSTOM_ELEMENTS_SCHEMA, + booleanAttribute, Component, Input, OnInit, ChangeDetectorRef, } from "@angular/core"; -import { CommonModule } from "@angular/common"; @Component({ standalone: true, - selector: "goabx-work-side-menu-group", // eslint-disable-line - imports: [CommonModule], + selector: "goab-work-side-menu-group", // eslint-disable-line + template: ` - - - + @if (isReady) { + + + + } `, schemas: [CUSTOM_ELEMENTS_SCHEMA], }) -export class GoabxWorkSideMenuGroup implements OnInit { +export class GoabWorkSideMenuGroup implements OnInit { @Input({ required: true }) heading!: string; - @Input({ required: true }) icon!: GoabIconType; + @Input() icon?: GoabIconType; + @Input({ transform: booleanAttribute }) open?: boolean; @Input() testId?: string; isReady = false; diff --git a/libs/angular-components/src/lib/components/work-side-menu-item/work-side-menu-item.spec.ts b/libs/angular-components/src/lib/components/work-side-menu-item/work-side-menu-item.spec.ts new file mode 100644 index 0000000000..5fb94132d6 --- /dev/null +++ b/libs/angular-components/src/lib/components/work-side-menu-item/work-side-menu-item.spec.ts @@ -0,0 +1,99 @@ +import { ComponentFixture, TestBed, fakeAsync, tick } from "@angular/core/testing"; +import { GoabWorkSideMenuItem } from "./work-side-menu-item"; +import { Component } from "@angular/core"; +import { By } from "@angular/platform-browser"; + +@Component({ + standalone: true, + imports: [GoabWorkSideMenuItem], + template: ` + + + `, +}) +class TestWorkSideMenuItemComponent { + label = "Test label"; + url = "/test"; + badge = "Test badge"; + current = true; + divider = true; + icon = "triangle"; + testId = "test-id"; + type = "normal"; +} + +@Component({ + standalone: true, + imports: [GoabWorkSideMenuItem], + template: ` + + + +
Popover content here
+
+ `, +}) +class TestWorkSideMenuItemWithPopoverComponent { + label = "Popover item"; + url = "/popover"; +} + +describe("GoabWorkSideMenuItem", () => { + it("should render and set the props correctly", fakeAsync(() => { + TestBed.configureTestingModule({ + imports: [TestWorkSideMenuItemComponent], + }).compileComponents(); + + const fixture = TestBed.createComponent(TestWorkSideMenuItemComponent); + fixture.detectChanges(); + tick(); + fixture.detectChanges(); + + const menuItemElement = fixture.debugElement.query( + By.css("goa-work-side-menu-item"), + ).nativeElement; + expect(menuItemElement.getAttribute("label")).toBe("Test label"); + expect(menuItemElement.getAttribute("url")).toBe("/test"); + expect(menuItemElement.getAttribute("badge")).toBe("Test badge"); + expect(menuItemElement.getAttribute("current")).toBe("true"); + expect(menuItemElement.getAttribute("divider")).toBe("true"); + expect(menuItemElement.getAttribute("icon")).toBe("triangle"); + expect(menuItemElement.getAttribute("testid")).toBe("test-id"); + expect(menuItemElement.getAttribute("type")).toBe("normal"); + })); + + it("should render popover content into the popoverContent slot", fakeAsync(() => { + TestBed.configureTestingModule({ + imports: [TestWorkSideMenuItemWithPopoverComponent], + }).compileComponents(); + + const fixture = TestBed.createComponent(TestWorkSideMenuItemWithPopoverComponent); + fixture.detectChanges(); + tick(); + fixture.detectChanges(); + + const slotDiv = fixture.debugElement.query( + By.css('[slot="popoverContent"]'), + ); + expect(slotDiv).toBeTruthy(); + + const popoverContent = fixture.debugElement.query( + By.css(".popover-test-content"), + ); + expect(popoverContent).toBeTruthy(); + expect(popoverContent.nativeElement.textContent).toBe("Popover content here"); + })); +}); diff --git a/libs/angular-components/src/experimental/work-side-menu-item/work-side-menu-item.ts b/libs/angular-components/src/lib/components/work-side-menu-item/work-side-menu-item.ts similarity index 51% rename from libs/angular-components/src/experimental/work-side-menu-item/work-side-menu-item.ts rename to libs/angular-components/src/lib/components/work-side-menu-item/work-side-menu-item.ts index bc302ea885..9868a3fe56 100644 --- a/libs/angular-components/src/experimental/work-side-menu-item/work-side-menu-item.ts +++ b/libs/angular-components/src/lib/components/work-side-menu-item/work-side-menu-item.ts @@ -3,41 +3,49 @@ import { CUSTOM_ELEMENTS_SCHEMA, Component, Input, + TemplateRef, OnInit, ChangeDetectorRef, } from "@angular/core"; -import { CommonModule } from "@angular/common"; +import { NgTemplateOutlet } from "@angular/common"; @Component({ standalone: true, - selector: "goabx-work-side-menu-item", // eslint-disable-line - imports: [CommonModule], + selector: "goab-work-side-menu-item", // eslint-disable-line + imports: [NgTemplateOutlet], template: ` - - - + @if (isReady) { + + @if (popoverContent) { +
+ +
+ } + +
+ } `, schemas: [CUSTOM_ELEMENTS_SCHEMA], }) -export class GoabxWorkSideMenuItem implements OnInit { +export class GoabWorkSideMenuItem implements OnInit { @Input({ required: true }) label!: string; - @Input({ required: true }) url!: string; + @Input() url?: string; @Input() badge?: string; @Input() current?: boolean; @Input() divider?: boolean; @Input() icon?: string; @Input() testId?: string; @Input() type?: GoabWorkSideMenuItemType = "normal"; + @Input() popoverContent!: TemplateRef; isReady = false; diff --git a/libs/angular-components/src/experimental/work-side-menu/work-side-menu.spec.ts b/libs/angular-components/src/lib/components/work-side-menu/work-side-menu.spec.ts similarity index 73% rename from libs/angular-components/src/experimental/work-side-menu/work-side-menu.spec.ts rename to libs/angular-components/src/lib/components/work-side-menu/work-side-menu.spec.ts index 0812d38ece..4d75f26cfe 100644 --- a/libs/angular-components/src/experimental/work-side-menu/work-side-menu.spec.ts +++ b/libs/angular-components/src/lib/components/work-side-menu/work-side-menu.spec.ts @@ -1,13 +1,13 @@ import { ComponentFixture, TestBed, tick, fakeAsync } from "@angular/core/testing"; -import { GoabxWorkSideMenu } from "./work-side-menu"; +import { GoabWorkSideMenu } from "./work-side-menu"; import { Component } from "@angular/core"; import { By } from "@angular/platform-browser"; @Component({ standalone: true, - imports: [GoabxWorkSideMenu], + imports: [GoabWorkSideMenu], template: ` - - +
Primary content
@@ -37,8 +38,13 @@ class TestWorkSideMenuComponent { userName = "Test User"; userSecondaryText = "test@example.com"; testId = "test-id"; + navigatedUrl = ""; + + handleNavigate(path: string) { + this.navigatedUrl = path; + } } -describe("GoabxBWorkSideMenu", () => { +describe("GoabBWorkSideMenu", () => { let fixture: ComponentFixture; let component: TestWorkSideMenuComponent; @@ -64,4 +70,17 @@ describe("GoabxBWorkSideMenu", () => { expect(menuElement.getAttribute("user-secondary-text")).toBe("test@example.com"); expect(menuElement.getAttribute("testId")).toBe("test-id"); }); + + it("should emit onNavigate when _navigate event is dispatched", fakeAsync(() => { + const menuElement = fixture.debugElement.query( + By.css("goa-work-side-menu"), + ).nativeElement; + + menuElement.dispatchEvent( + new CustomEvent("_navigate", { detail: { url: "/dashboard" }, bubbles: true }), + ); + fixture.detectChanges(); + + expect(component.navigatedUrl).toBe("/dashboard"); + })); }); diff --git a/libs/angular-components/src/experimental/work-side-menu/work-side-menu.ts b/libs/angular-components/src/lib/components/work-side-menu/work-side-menu.ts similarity index 50% rename from libs/angular-components/src/experimental/work-side-menu/work-side-menu.ts rename to libs/angular-components/src/lib/components/work-side-menu/work-side-menu.ts index 1cacbedc59..4771176a1f 100644 --- a/libs/angular-components/src/experimental/work-side-menu/work-side-menu.ts +++ b/libs/angular-components/src/lib/components/work-side-menu/work-side-menu.ts @@ -9,36 +9,38 @@ import { OnInit, ChangeDetectorRef, } from "@angular/core"; -import { CommonModule, NgTemplateOutlet } from "@angular/common"; +import { NgTemplateOutlet } from "@angular/common"; @Component({ standalone: true, - selector: "goabx-work-side-menu", // eslint-disable-line - imports: [NgTemplateOutlet, CommonModule], + selector: "goab-work-side-menu", // eslint-disable-line + imports: [NgTemplateOutlet], template: ` - -
- -
-
- -
-
- -
-
+ @if (isReady) { + +
+ +
+
+ +
+
+ +
+
+ } `, schemas: [CUSTOM_ELEMENTS_SCHEMA], }) -export class GoabxWorkSideMenu implements OnInit { +export class GoabWorkSideMenu implements OnInit { @Input({ required: true }) heading!: string; @Input({ required: true }) url!: string; @Input() userName?: string; @@ -49,6 +51,7 @@ export class GoabxWorkSideMenu implements OnInit { @Input() secondaryContent!: TemplateRef; @Input() accountContent!: TemplateRef; @Output() onToggle = new EventEmitter(); + @Output() onNavigate = new EventEmitter(); isReady = false; @@ -66,4 +69,8 @@ export class GoabxWorkSideMenu implements OnInit { _onToggle() { this.onToggle.emit(); } + + _onNavigate(e: Event) { + this.onNavigate.emit((e as CustomEvent).detail.url); + } } diff --git a/libs/angular-components/src/lib/components/work-side-notification-item/work-side-notification-item.spec.ts b/libs/angular-components/src/lib/components/work-side-notification-item/work-side-notification-item.spec.ts new file mode 100644 index 0000000000..e74daae78e --- /dev/null +++ b/libs/angular-components/src/lib/components/work-side-notification-item/work-side-notification-item.spec.ts @@ -0,0 +1,75 @@ +import { TestBed, fakeAsync, tick } from "@angular/core/testing"; +import { GoabWorkSideNotificationItem } from "./work-side-notification-item"; +import { Component } from "@angular/core"; +import { By } from "@angular/platform-browser"; + +@Component({ + standalone: true, + imports: [GoabWorkSideNotificationItem], + template: ` + + + `, +}) +class TestWorkSideNotificationItemComponent { + type = "event"; + timestamp = "2026-01-29T10:00:00Z"; + title = "Test notification"; + description = "Test description"; + readStatus = "unread"; + priority = "normal"; + testId = "test-id"; + clicked = false; +} + +describe("GoabWorkSideNotificationItem", () => { + it("should render and set the props correctly", fakeAsync(() => { + TestBed.configureTestingModule({ + imports: [TestWorkSideNotificationItemComponent], + }).compileComponents(); + + const fixture = TestBed.createComponent(TestWorkSideNotificationItemComponent); + fixture.detectChanges(); + tick(); + fixture.detectChanges(); + + const el = fixture.debugElement.query( + By.css("goa-work-side-notification-item"), + ).nativeElement; + expect(el.getAttribute("type")).toBe("event"); + expect(el.getAttribute("timestamp")).toBe("2026-01-29T10:00:00Z"); + expect(el.getAttribute("title")).toBe("Test notification"); + expect(el.getAttribute("description")).toBe("Test description"); + expect(el.getAttribute("read-status")).toBe("unread"); + expect(el.getAttribute("priority")).toBe("normal"); + expect(el.getAttribute("testid")).toBe("test-id"); + })); + + it("should emit onClick when _click event is dispatched", fakeAsync(() => { + TestBed.configureTestingModule({ + imports: [TestWorkSideNotificationItemComponent], + }).compileComponents(); + + const fixture = TestBed.createComponent(TestWorkSideNotificationItemComponent); + fixture.detectChanges(); + tick(); + fixture.detectChanges(); + + const el = fixture.debugElement.query( + By.css("goa-work-side-notification-item"), + ).nativeElement; + el.dispatchEvent(new CustomEvent("_click")); + fixture.detectChanges(); + + expect(fixture.componentInstance.clicked).toBe(true); + })); +}); diff --git a/libs/angular-components/src/lib/components/work-side-notification-item/work-side-notification-item.ts b/libs/angular-components/src/lib/components/work-side-notification-item/work-side-notification-item.ts new file mode 100644 index 0000000000..790c0836f3 --- /dev/null +++ b/libs/angular-components/src/lib/components/work-side-notification-item/work-side-notification-item.ts @@ -0,0 +1,60 @@ +import { + GoabWorkSideNotificationItemType, + GoabWorkSideNotificationReadStatus, + GoabWorkSideNotificationPriority, +} from "@abgov/ui-components-common"; +import { + CUSTOM_ELEMENTS_SCHEMA, + Component, + Input, + Output, + EventEmitter, + OnInit, + ChangeDetectorRef, +} from "@angular/core"; + +@Component({ + standalone: true, + selector: "goab-work-side-notification-item", // eslint-disable-line + template: ` + @if (isReady) { + + } + `, + schemas: [CUSTOM_ELEMENTS_SCHEMA], +}) +export class GoabWorkSideNotificationItem implements OnInit { + @Input() type?: GoabWorkSideNotificationItemType; + @Input() timestamp?: string; + @Input() title?: string; + @Input({ required: true }) description!: string; + @Input() readStatus?: GoabWorkSideNotificationReadStatus; + @Input() priority?: GoabWorkSideNotificationPriority; + @Input() testId?: string; + + @Output() onClick = new EventEmitter(); + + isReady = false; + + constructor(private cdr: ChangeDetectorRef) {} + + ngOnInit(): void { + setTimeout(() => { + this.isReady = true; + this.cdr.detectChanges(); + }, 0); + } + + _onClick() { + this.onClick.emit(); + } +} diff --git a/libs/angular-components/src/lib/components/work-side-notification-panel/work-side-notification-panel.spec.ts b/libs/angular-components/src/lib/components/work-side-notification-panel/work-side-notification-panel.spec.ts new file mode 100644 index 0000000000..fa99a7e330 --- /dev/null +++ b/libs/angular-components/src/lib/components/work-side-notification-panel/work-side-notification-panel.spec.ts @@ -0,0 +1,100 @@ +import { TestBed, fakeAsync, tick } from "@angular/core/testing"; +import { GoabWorkSideNotificationPanel } from "./work-side-notification-panel"; +import { Component } from "@angular/core"; +import { By } from "@angular/platform-browser"; + +@Component({ + standalone: true, + imports: [GoabWorkSideNotificationPanel], + template: ` + +
Child content
+
+ `, +}) +class TestWorkSideNotificationPanelComponent { + heading = "Notifications"; + activeTab = "all"; + testId = "test-id"; + markAllReadCalled = false; + viewAllCalled = false; +} + +describe("GoabWorkSideNotificationPanel", () => { + it("should render and set the props correctly", fakeAsync(() => { + TestBed.configureTestingModule({ + imports: [TestWorkSideNotificationPanelComponent], + }).compileComponents(); + + const fixture = TestBed.createComponent(TestWorkSideNotificationPanelComponent); + fixture.detectChanges(); + tick(); + fixture.detectChanges(); + + const el = fixture.debugElement.query( + By.css("goa-work-side-notification-panel"), + ).nativeElement; + expect(el.getAttribute("heading")).toBe("Notifications"); + expect(el.getAttribute("active-tab")).toBe("all"); + expect(el.getAttribute("testid")).toBe("test-id"); + })); + + it("should project child content", fakeAsync(() => { + TestBed.configureTestingModule({ + imports: [TestWorkSideNotificationPanelComponent], + }).compileComponents(); + + const fixture = TestBed.createComponent(TestWorkSideNotificationPanelComponent); + fixture.detectChanges(); + tick(); + fixture.detectChanges(); + + const child = fixture.debugElement.query(By.css(".panel-child")); + expect(child).toBeTruthy(); + expect(child.nativeElement.textContent).toBe("Child content"); + })); + + it("should emit onMarkAllRead when _markAllRead event is dispatched", fakeAsync(() => { + TestBed.configureTestingModule({ + imports: [TestWorkSideNotificationPanelComponent], + }).compileComponents(); + + const fixture = TestBed.createComponent(TestWorkSideNotificationPanelComponent); + fixture.detectChanges(); + tick(); + fixture.detectChanges(); + + const el = fixture.debugElement.query( + By.css("goa-work-side-notification-panel"), + ).nativeElement; + el.dispatchEvent(new CustomEvent("_markAllRead")); + fixture.detectChanges(); + + expect(fixture.componentInstance.markAllReadCalled).toBe(true); + })); + + it("should emit onViewAll when _viewAll event is dispatched", fakeAsync(() => { + TestBed.configureTestingModule({ + imports: [TestWorkSideNotificationPanelComponent], + }).compileComponents(); + + const fixture = TestBed.createComponent(TestWorkSideNotificationPanelComponent); + fixture.detectChanges(); + tick(); + fixture.detectChanges(); + + const el = fixture.debugElement.query( + By.css("goa-work-side-notification-panel"), + ).nativeElement; + el.dispatchEvent(new CustomEvent("_viewAll")); + fixture.detectChanges(); + + expect(fixture.componentInstance.viewAllCalled).toBe(true); + })); +}); diff --git a/libs/angular-components/src/lib/components/work-side-notification-panel/work-side-notification-panel.ts b/libs/angular-components/src/lib/components/work-side-notification-panel/work-side-notification-panel.ts new file mode 100644 index 0000000000..42f3f124e1 --- /dev/null +++ b/libs/angular-components/src/lib/components/work-side-notification-panel/work-side-notification-panel.ts @@ -0,0 +1,56 @@ +import { GoabWorkSideNotificationActiveTabType } from "@abgov/ui-components-common"; +import { + CUSTOM_ELEMENTS_SCHEMA, + Component, + Input, + Output, + EventEmitter, + OnInit, + ChangeDetectorRef, +} from "@angular/core"; + +@Component({ + standalone: true, + selector: "goab-work-side-notification-panel", // eslint-disable-line + template: ` + @if (isReady) { + + + + } + `, + schemas: [CUSTOM_ELEMENTS_SCHEMA], +}) +export class GoabWorkSideNotificationPanel implements OnInit { + @Input() heading?: string; + @Input() activeTab?: GoabWorkSideNotificationActiveTabType; + @Input() testId?: string; + + @Output() onMarkAllRead = new EventEmitter(); + @Output() onViewAll = new EventEmitter(); + + isReady = false; + + constructor(private cdr: ChangeDetectorRef) {} + + ngOnInit(): void { + setTimeout(() => { + this.isReady = true; + this.cdr.detectChanges(); + }, 0); + } + + _onMarkAllRead() { + this.onMarkAllRead.emit(); + } + + _onViewAll() { + this.onViewAll.emit(); + } +} diff --git a/libs/angular-components/src/lib/value-directive.ts b/libs/angular-components/src/lib/value-directive.ts index 59f97ff696..38ccf21017 100644 --- a/libs/angular-components/src/lib/value-directive.ts +++ b/libs/angular-components/src/lib/value-directive.ts @@ -4,20 +4,26 @@ import { ControlValueAccessor, NG_VALUE_ACCESSOR } from "@angular/forms"; // @deprecated: Use the new component @Directive({ standalone: true, - selector: "[goaValue]", - providers: [{ - provide: NG_VALUE_ACCESSOR, - useExisting: forwardRef(() => ValueDirective), - multi: true, - }], + selector: "[goaValue]", + providers: [ + { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef(() => ValueDirective), + multi: true, + }, + ], }) export class ValueDirective implements ControlValueAccessor { private _value = ""; private _disabled = false; /* eslint-disable @typescript-eslint/no-explicit-any */ - onChange: any = () => { /* default implementation */ }; - onTouched: any = () => { /* default implementation */ }; + onChange: any = () => { + /* default implementation */ + }; + onTouched: any = () => { + /* default implementation */ + }; get value(): string { return this._value; @@ -47,14 +53,16 @@ export class ValueDirective implements ControlValueAccessor { this.elementRef.nativeElement.disabled = isDisabled; } - constructor(protected elementRef: ElementRef) { } + constructor(protected elementRef: ElementRef) {} - @HostListener("_change", ["$event.detail.value"]) - listenForValueChange(value: string) { + @HostListener("_change", ["$event"]) + listenForValueChange(event: Event) { + const value = (event as CustomEvent<{ value: string }>).detail.value; this.value = value; } - @HostListener("disabledChange", ["$event.detail.disabled"]) - listenForDisabledChange(isDisabled: boolean) { + @HostListener("disabledChange", ["$event"]) + listenForDisabledChange(event: Event) { + const isDisabled = (event as CustomEvent<{ disabled: boolean }>).detail.disabled; this.setDisabledState(isDisabled); } } @@ -62,17 +70,19 @@ export class ValueDirective implements ControlValueAccessor { @Directive({ standalone: true, selector: "[goaValueList]", - providers: [{ - provide: NG_VALUE_ACCESSOR, - useExisting: forwardRef(() => ValueListDirective), - multi: true, - }], + providers: [ + { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef(() => ValueListDirective), + multi: true, + }, + ], }) export class ValueListDirective implements ControlValueAccessor { private _value?: string[] = []; - onChange: any = () => { }; - onTouched: any = () => { }; + onChange: any = () => {}; + onTouched: any = () => {}; get value(): string[] | undefined { return this._value; @@ -99,10 +109,11 @@ export class ValueListDirective implements ControlValueAccessor { this.onTouched = fn; } - constructor(protected elementRef: ElementRef) { } + constructor(protected elementRef: ElementRef) {} - @HostListener("_change", ["$event.detail.value"]) - listenForValueChange(value: string) { + @HostListener("_change", ["$event"]) + listenForValueChange(event: Event) { + const value = (event as CustomEvent<{ value: string }>).detail.value; if (!value) { this._setValue(undefined); return; diff --git a/libs/angular-components/src/test-setup.ts b/libs/angular-components/src/test-setup.ts index cd15a42ec6..f1b434f22a 100644 --- a/libs/angular-components/src/test-setup.ts +++ b/libs/angular-components/src/test-setup.ts @@ -1,10 +1,3 @@ -// @ts-expect-error https://thymikee.github.io/jest-preset-angular/docs/getting-started/test-environment -globalThis.ngJest = { - testEnvironmentOptions: { - errorOnUnknownElements: true, - errorOnUnknownProperties: true, - }, -}; -import { setupZoneTestEnv } from 'jest-preset-angular/setup-env/zone'; +import { setupZoneTestEnv } from "jest-preset-angular/setup-env/zone"; setupZoneTestEnv(); diff --git a/libs/angular-components/tsconfig.spec.json b/libs/angular-components/tsconfig.spec.json index 7870b7c011..bcd255aa34 100644 --- a/libs/angular-components/tsconfig.spec.json +++ b/libs/angular-components/tsconfig.spec.json @@ -4,7 +4,12 @@ "outDir": "../../dist/out-tsc", "module": "commonjs", "target": "es2016", - "types": ["jest", "node"] + "types": ["jest", "node"], + // Required after the Angular v21 upgrade: https://github.com/nrwl/nx/issues/33777#issuecomment-3674675041 + "allowSyntheticDefaultImports": true, + "resolveJsonModule": true, + "isolatedModules": true, + "emitDecoratorMetadata": false // prevents warnings after isolatedModules:true }, "files": ["src/test-setup.ts"], "include": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "src/**/*.d.ts"] diff --git a/libs/common/src/index.ts b/libs/common/src/index.ts index 1a4e965dce..a058deb0bd 100644 --- a/libs/common/src/index.ts +++ b/libs/common/src/index.ts @@ -1,6 +1,7 @@ export * from "./lib/common"; -export * from "./lib/experimental/common"; export * from "./lib/validators"; export * from "./lib/public-form-controller"; export * from "./lib/temporary-notification-controller/temporary-notification-controller"; export * from "./lib/messaging/messaging"; +export { CalendarDate } from "./lib/calendar-date"; +export { Once } from "./lib/once"; diff --git a/libs/web-components/src/common/calendar-date.spec.ts b/libs/common/src/lib/calendar-date.spec.ts similarity index 97% rename from libs/web-components/src/common/calendar-date.spec.ts rename to libs/common/src/lib/calendar-date.spec.ts index 5e50dbe477..d817f86095 100644 --- a/libs/web-components/src/common/calendar-date.spec.ts +++ b/libs/common/src/lib/calendar-date.spec.ts @@ -55,6 +55,15 @@ describe("CalendarDate", () => { expect(calDate.month).toBe(now.getMonth() + 1); expect(calDate.day).toBe(now.getDate()); }); + + it("creates a CalendarDate with a Date.toString value", () => { + const calDate = new CalendarDate( + "Fri Mar 20 2026 15:31:05 GMT-0600 (Mountain Daylight Time)", + ); + expect(calDate.year).toBe(2026); + expect(calDate.month).toBe(3); + expect(calDate.day).toBe(20); + }); }); describe("getters", () => { diff --git a/libs/web-components/src/common/calendar-date.ts b/libs/common/src/lib/calendar-date.ts similarity index 100% rename from libs/web-components/src/common/calendar-date.ts rename to libs/common/src/lib/calendar-date.ts diff --git a/libs/common/src/lib/common.ts b/libs/common/src/lib/common.ts index 014d50c81a..194b8d50c7 100644 --- a/libs/common/src/lib/common.ts +++ b/libs/common/src/lib/common.ts @@ -111,29 +111,14 @@ export type GoabBadgeType = | "success" | "important" | "emergency" - | "dark" - | "midtone" - | "light" | "archived" - | "aqua" - | "black" - | "blue" - | "green" - | "orange" - | "pink" - | "red" - | "violet" - | "white" - | "yellow" - | "aqua-light" - | "black-light" - | "blue-light" - | "green-light" - | "orange-light" - | "pink-light" - | "red-light" - | "violet-light" - | "yellow-light"; + | "sky" + | "prairie" + | "lilac" + | "pasture" + | "sunset" + | "dawn" + | "default"; export type GoabPaginationVariant = "all" | "links-only"; @@ -219,10 +204,13 @@ export type GoabTextAreaOnBlurDetail = { // Tabs export type GoabTabsVariant = "default" | "segmented"; +export type GoabTabsOrientation = "auto" | "horizontal"; +export type GoabTabsNavigation = "hash" | "none"; export interface GoabTabsProps { initialTab?: number; variant?: GoabTabsVariant; + orientation?: GoabTabsOrientation; } export type GoabTabsOnChangeDetail = { @@ -240,11 +228,23 @@ export interface GoabTableProps extends Margins { testId?: string; } +export type GoabTableSortMode = "single" | "multi"; +export type GoabTableSortOrder = 1 | 2; + +export type GoabTableSortEntry = { + column: string; + direction: "asc" | "desc"; +}; + export type GoabTableOnSortDetail = { sortBy: string; sortDir: number; }; +export type GoabTableOnMultiSortDetail = { + sorts: GoabTableSortEntry[]; +}; + // Spacer export type GoabSpacerHorizontalSpacing = Spacing | "fill"; @@ -1124,7 +1124,8 @@ export type GoabTextHeadingSize = | "heading-l" | "heading-m" | "heading-s" - | "heading-xs"; + | "heading-xs" + | "heading-2xs"; export type GoabTextBodySize = "body-l" | "body-m" | "body-s" | "body-xs"; export type GoabTextSize = GoabTextHeadingSize | GoabTextBodySize; export type GoabTextColor = "primary" | "secondary"; @@ -1201,3 +1202,43 @@ export type GoabDrawerSize = `${number}${GoabDrawerSizeUnit}` | undefined; // Work side menu export type GoabWorkSideMenuItemType = "normal" | "emergency" | "success"; + +// Work side notification +export type GoabWorkSideNotificationItemType = + | "default" + | "success" + | "critical" + | "warning" + | "info"; +export type GoabWorkSideNotificationReadStatus = "read" | "unread"; +export type GoabWorkSideNotificationPriority = "normal" | "urgent"; +export type GoabWorkSideNotificationActiveTabType = "unread" | "urgent" | "all"; + +export type GoabBadgeSize = "medium" | "large"; + +export type GoabBadgeEmphasis = "subtle" | "strong"; + +export type GoabCalloutEmphasis = "high" | "medium" | "low"; + +export type GoabCheckboxSize = "default" | "compact"; + +export type GoabDropdownSize = "default" | "compact"; + +export type GoabFormItemType = + | "" + | "text-input" + | "textarea" + | "checkbox-list" + | "radio-group"; + +export type GoabLinkColor = "interactive" | "dark" | "light"; + +export type GoabLinkSize = "xsmall" | "small" | "medium" | "large"; + +export type GoabNotificationEmphasis = "high" | "low"; + +export type GoabRadioGroupSize = "default" | "compact"; + +export type GoabInputSize = "default" | "compact"; + +export type GoabTextAreaSize = "default" | "compact"; diff --git a/libs/common/src/lib/experimental/common.ts b/libs/common/src/lib/experimental/common.ts deleted file mode 100644 index 1aabc61019..0000000000 --- a/libs/common/src/lib/experimental/common.ts +++ /dev/null @@ -1,42 +0,0 @@ -export type GoabBadgeSize = "medium" | "large"; - -export type GoabBadgeEmphasis = "subtle" | "strong"; - -export type GoabCalloutEmphasis = "high" | "medium" | "low"; - -export type GoabCheckboxSize = "default" | "compact"; - -export type GoabDropdownSize = "default" | "compact"; - -export type GoabFormItemType = - | "" - | "text-input" - | "textarea" - | "checkbox-list" - | "radio-group"; - -export type GoabLinkColor = "interactive" | "dark" | "light"; - -export type GoabLinkSize = "xsmall" | "small" | "medium" | "large"; - -export type GoabNotificationEmphasis = "high" | "low"; - -export type GoabRadioGroupSize = "default" | "compact"; - -export type GoabInputSize = "default" | "compact"; - -export type GoabTextAreaSize = "default" | "compact"; - -export type GoabxBadgeType = - | "information" - | "success" - | "important" - | "emergency" - | "archived" - | "sky" - | "prairie" - | "lilac" - | "pasture" - | "sunset" - | "dawn" - | "default"; diff --git a/libs/common/src/lib/once.ts b/libs/common/src/lib/once.ts new file mode 100644 index 0000000000..7685fbfa1a --- /dev/null +++ b/libs/common/src/lib/once.ts @@ -0,0 +1,28 @@ +export class Once { + private done: Set; + + constructor() { + this.done = new Set(); + } + + when(condition: boolean): Once { + if (condition) { + return this; + } + + return new DoNothing(); + } + + do(id: string, fn: () => void): void { + if (!this.done.has(id)) { + this.done.add(id); + fn(); + } + } +} + +class DoNothing extends Once { + override do(id: string, fn: () => void): void { + return; + } +} diff --git a/libs/common/src/lib/public-form-controller.ts b/libs/common/src/lib/public-form-controller.ts index 14f9fb72a5..249c86414a 100644 --- a/libs/common/src/lib/public-form-controller.ts +++ b/libs/common/src/lib/public-form-controller.ts @@ -1,7 +1,5 @@ import { FieldsetItemState, FieldValidator } from "./validators"; -import { - GoabFieldsetItemValue, GoabFormDispatchOn, -} from "./common"; +import { GoabFieldsetItemValue, GoabFormDispatchOn } from "./common"; import { relay, dispatch } from "./messaging/messaging"; export type FormStatus = "not-started" | "incomplete" | "complete"; @@ -66,7 +64,7 @@ export class PublicFormController { } if (callback) { - setTimeout(callback, 200); + setTimeout(callback, 201); } } @@ -337,7 +335,7 @@ export class PublicFormController { this._isCompleting = true; const stateChangeHandler = (e: Event) => { - formRef.removeEventListener('_stateChange', stateChangeHandler); + formRef.removeEventListener("_stateChange", stateChangeHandler); // Now we know state is updated, safe to complete // The _formRef points to the inner form within the SubForm @@ -346,7 +344,7 @@ export class PublicFormController { this._isCompleting = false; }; - formRef.addEventListener('_stateChange', stateChangeHandler); + formRef.addEventListener("_stateChange", stateChangeHandler); dispatch(formRef, "_continue", null, { bubbles: true }); } @@ -381,4 +379,3 @@ export class PublicFormController { }, {}); } } - diff --git a/libs/react-components/package.json b/libs/react-components/package.json index 226dc4af8f..23bf778917 100644 --- a/libs/react-components/package.json +++ b/libs/react-components/package.json @@ -29,11 +29,6 @@ "import": "./index.mjs", "require": "./index.js", "types": "./index.d.ts" - }, - "./experimental": { - "import": "./experimental.mjs", - "require": "./experimental.js", - "types": "./experimental/index.d.ts" } } } diff --git a/libs/react-components/specs/app-header-menu.browser.spec.tsx b/libs/react-components/specs/app-header-menu.browser.spec.tsx new file mode 100644 index 0000000000..fd66667255 --- /dev/null +++ b/libs/react-components/specs/app-header-menu.browser.spec.tsx @@ -0,0 +1,73 @@ +import { render } from "vitest-browser-react"; +import { GoabAppHeaderMenu, GoabNotification } from "../src"; +import { expect, describe, it, vi, beforeAll } from "vitest"; +import { useState } from "react"; +import { page, userEvent } from "@vitest/browser/context"; + +describe("AppHeaderMenu", () => { + // AppHeaderMenu uses goa-popover only in desktop mode (>= 1024px) + beforeAll(async () => { + await page.viewport(1280, 800); + }); + + it("should work before and after dismissing a notification banner - issue 3499", async () => { + const Component = () => { + const [showBanner, setShowBanner] = useState(true); + + return ( + <> + + + Menu Item 1 + + + Menu Item 2 + + + Menu Item 3 + + + {showBanner && ( + setShowBanner(false)} + > + Dismiss this notification, then verify AppHeaderMenu still works. + + )} + + ); + }; + + const result = render(); + const menuTrigger = result.getByText("Test Menu"); + + // 1. Open menu while banner is visible + await menuTrigger.click(); + await vi.waitFor(() => { + const popoverContent = result.getByTestId("popover-content"); + expect(popoverContent.element().checkVisibility()).toBeTruthy(); + }); + expect(result.getByTestId("menu-item-1").element().checkVisibility()).toBeTruthy(); + + // Close menu with Escape + await userEvent.keyboard("{Escape}"); + const popoverContent = result.getByTestId("popover-content"); + await vi.waitFor(() => { + expect(popoverContent.element().checkVisibility()).toBeFalsy(); + }); + + // 2. Dismiss the notification banner + const banner = result.getByTestId("test-banner"); + const dismissButton = banner.getByRole("button"); + await dismissButton.click(); + + // 3. Open menu again — should still work after banner is removed from DOM + await menuTrigger.click(); + await vi.waitFor(() => { + expect(popoverContent.element().checkVisibility()).toBeTruthy(); + }); + expect(result.getByTestId("menu-item-1").element().checkVisibility()).toBeTruthy(); + }); +}); diff --git a/libs/react-components/specs/checkbox-list-v2.browser.spec.tsx b/libs/react-components/specs/checkbox-list-v2.browser.spec.tsx new file mode 100644 index 0000000000..cad5e86ac9 --- /dev/null +++ b/libs/react-components/specs/checkbox-list-v2.browser.spec.tsx @@ -0,0 +1,303 @@ +import { render } from "vitest-browser-react"; +import { GoabCheckboxList, GoabCheckbox } from "../src"; +import { expect, describe, it, vi } from "vitest"; +import { useState } from "react"; +import { userEvent } from "@vitest/browser/context"; + +describe("CheckboxList V2", () => { + it("should render with version 2 set on the web component", async () => { + const Component = () => { + return ( +
+ + + + +
+ ); + }; + + const result = render(); + + const container = result.getByTestId("container"); + const checkboxList = result.getByTestId("checkbox-list"); + + expect(container).toBeTruthy(); + expect(checkboxList).toBeTruthy(); + + // V2 wrapper should set version="2" on the web component + const wcElement = container.element().querySelector("goa-checkbox-list") as any; + expect(wcElement).toBeTruthy(); + expect(wcElement.version).toBe("2"); + }); + + it("should handle checkbox selection and state management", async () => { + const Component = () => { + const [selectedValues, setSelectedValues] = useState([]); + + return ( +
+ {selectedValues.join(",")} + setSelectedValues(detail.value)} + > + + + + +
+ ); + }; + + const result = render(); + + const selectedValues = result.getByTestId("selected-values"); + const checkbox1 = result.getByTestId("checkbox-1"); + const checkbox2 = result.getByTestId("checkbox-2"); + + // Initial state should be empty + await vi.waitFor(() => { + expect(selectedValues.element().textContent).toBe(""); + }); + + // Click first checkbox + await checkbox1.click(); + await vi.waitFor(() => { + expect(selectedValues.element().textContent).toBe("option1"); + }); + + // Click second checkbox + await checkbox2.click(); + await vi.waitFor(() => { + const text = selectedValues.element().textContent || ""; + expect(text.split(",")).toEqual(expect.arrayContaining(["option1", "option2"])); + expect(text.split(",").length).toBe(2); + }); + + // Unclick first checkbox + await checkbox1.click(); + await vi.waitFor(() => { + expect(selectedValues.element().textContent).toBe("option2"); + }); + }); + + it("should handle programmatic value changes", async () => { + const Component = () => { + const [selectedValues, setSelectedValues] = useState([]); + + return ( +
+ {selectedValues.join(",")} + + + setSelectedValues(detail.value)} + > + + + + +
+ ); + }; + + const result = render(); + + const selectedValues = result.getByTestId("selected-values"); + const setValuesBtn = result.getByTestId("set-values-btn"); + const clearValuesBtn = result.getByTestId("clear-values-btn"); + + // Initial state should be empty + await vi.waitFor(() => { + expect(selectedValues.element().textContent).toBe(""); + }); + + // Set values programmatically + await setValuesBtn.click(); + await vi.waitFor( + () => { + const text = selectedValues.element().textContent || ""; + if (text === "") return false; + const values = text.split(",").filter((v) => v.trim() !== ""); + return ( + values.length === 2 && values.includes("option1") && values.includes("option3") + ); + }, + { timeout: 2000 }, + ); + + // Clear values programmatically + await clearValuesBtn.click(); + await vi.waitFor(() => { + expect(selectedValues.element().textContent).toBe(""); + }); + }); + + it("should handle disabled state", async () => { + const Component = () => { + const [isDisabled, setIsDisabled] = useState(false); + const [selectedValues, setSelectedValues] = useState([]); + + return ( +
+ {selectedValues.join(",")} + {isDisabled ? "disabled" : "enabled"} + + setSelectedValues(detail.value)} + > + + + +
+ ); + }; + + const result = render(); + + const selectedValues = result.getByTestId("selected-values"); + const disabledState = result.getByTestId("disabled-state"); + const toggleBtn = result.getByTestId("toggle-disabled-btn"); + const checkbox1 = result.getByTestId("checkbox-1"); + + // Initially not disabled - should be able to click + await vi.waitFor(() => { + expect(disabledState.element().textContent).toBe("enabled"); + }); + + await checkbox1.click(); + await vi.waitFor(() => { + expect(selectedValues.element().textContent).toBe("option1"); + }); + + // Disable the checkbox list + await toggleBtn.click(); + await vi.waitFor(() => { + expect(disabledState.element().textContent).toBe("disabled"); + }); + + // disabled state is applied + expect(disabledState.element().textContent).toBe("disabled"); + }); + + it("should propagate disabled state to child checkboxes on mount", async () => { + const Component = () => ( + + + + + ); + + const result = render(); + + // Verify child checkboxes are disabled (label gets 'disabled' class) + const checkbox1 = result.getByTestId("checkbox-1"); + const checkbox2 = result.getByTestId("checkbox-2"); + await vi.waitFor(() => { + const checkbox1El = checkbox1.element() as HTMLElement; + const checkbox2El = checkbox2.element() as HTMLElement; + expect(checkbox1El.classList.contains("disabled")).toBe(true); + expect(checkbox2El.classList.contains("disabled")).toBe(true); + }); + }); + + it("should propagate error state to child checkboxes on mount", async () => { + const Component = () => ( + + + + + ); + + const result = render(); + + // Verify child checkboxes have error state (label gets 'error' class) + const checkbox1 = result.getByTestId("checkbox-1"); + const checkbox2 = result.getByTestId("checkbox-2"); + await vi.waitFor(() => { + const checkbox1El = checkbox1.element() as HTMLElement; + const checkbox2El = checkbox2.element() as HTMLElement; + expect(checkbox1El.classList.contains("error")).toBe(true); + expect(checkbox2El.classList.contains("error")).toBe(true); + }); + }); + + it("passes the browser event in change detail", async () => { + const onChange = vi.fn(); + + const Component = () => ( + + + + ); + + const result = render(); + const checkbox = result.getByTestId("event-checkbox-1"); + + await userEvent.click(checkbox); + + await vi.waitFor(() => { + expect(onChange).toHaveBeenCalledTimes(1); + const detail = onChange.mock.calls[0][0]; + expect(detail.name).toBe("event-list"); + expect(detail.value).toEqual(["event-option1"]); + expect(detail.event).toBeInstanceOf(Event); + }); + }); + + it("should support compact size", async () => { + const Component = () => { + return ( +
+ + + + +
+ ); + }; + + const result = render(); + + const container = result.getByTestId("container"); + expect(container).toBeTruthy(); + + const wcElement = container.element().querySelector("goa-checkbox-list") as any; + expect(wcElement).toBeTruthy(); + expect(wcElement.size).toBe("compact"); + }); +}); diff --git a/libs/react-components/specs/dropdown.browser.spec.tsx b/libs/react-components/specs/dropdown.browser.spec.tsx index cad3d90882..b7b505b87b 100644 --- a/libs/react-components/specs/dropdown.browser.spec.tsx +++ b/libs/react-components/specs/dropdown.browser.spec.tsx @@ -354,7 +354,7 @@ describe("Dropdown", () => { }); describe("Popover position", () => { - it("should display popover above when dropdown is at the bottom of the view port", async () => { + it.skip("should display popover above when dropdown is at the bottom of the view port", async () => { const Component = () => { return ( <> @@ -370,15 +370,17 @@ describe("Dropdown", () => { ); } + const result = render(); + const dropdown = result.getByTestId("dropdown"); + const lastOption = result.getByText("Green"); + // Scroll to the bottom of the page window.scrollTo(0, document.body.scrollHeight); - const dropdown = result.getByTestId("dropdown"); await dropdown.click(); await vi.waitFor(() => { - const lastOption = result.getByText("Green"); const dropdownRect = dropdown.element().getBoundingClientRect(); const lastOptionRect = lastOption.element().getBoundingClientRect(); expect(lastOptionRect.bottom).toBeLessThan(dropdownRect.top); diff --git a/libs/react-components/specs/link.browser.spec.tsx b/libs/react-components/specs/link.browser.spec.tsx index f28bc23e30..621b0ebf76 100644 --- a/libs/react-components/specs/link.browser.spec.tsx +++ b/libs/react-components/specs/link.browser.spec.tsx @@ -67,4 +67,55 @@ describe("Link", () => { expect(spy).toBeCalledWith({foo: "bar"}); }) }) + + it("should trigger the anchor when the leading icon is clicked", async () => { + const Component = () => { + return ( + + Link text + + ); + }; + + const result = render(); + const link = result.getByTestId("link"); + const leadingIcon = link.getByTestId("leading-icon"); + + const spy = vi.fn(); + + const anchor = result.getByTestId("anchor"); + anchor.element().addEventListener("click", spy); + + await leadingIcon.click(); + + await vi.waitFor(() => { + expect(spy).toHaveBeenCalled(); + }); + }); + + it("should trigger the anchor when the trailing icon is clicked", async () => { + const Component = () => { + return ( + + Link text + + ); + }; + + const result = render(); + const link = result.getByTestId("link"); + const trailingIcon = link.getByTestId("trailing-icon"); + + const spy = vi.fn(); + + const anchor = result.getByTestId("anchor"); + anchor.element().addEventListener("click", spy); + + + await trailingIcon.click(); + + await vi.waitFor(() => { + expect(spy).toHaveBeenCalled(); + }); + }); }) diff --git a/libs/react-components/specs/menu-button.browser.spec.tsx b/libs/react-components/specs/menu-button.browser.spec.tsx index dd83a35c0a..41c08863de 100644 --- a/libs/react-components/specs/menu-button.browser.spec.tsx +++ b/libs/react-components/specs/menu-button.browser.spec.tsx @@ -151,3 +151,74 @@ describe("MenuButton", () => { }); }); }); + +describe("GoabMenuButton", () => { + it("should render icon-only without text and trigger action", async () => { + const onAction = vi.fn(); + + const Component = () => { + return ( + + + + + ); + }; + + const result = render(); + const menuButton = result.getByTestId("icon-menu"); + + await menuButton.click(); + await result.getByText("View").click(); + + await vi.waitFor(() => { + expect(onAction).toHaveBeenCalledWith({ action: "view" }); + }); + }); + + it("should render with size compact and text", async () => { + const onAction = vi.fn(); + + const Component = () => { + return ( + + + + + ); + }; + + const result = render(); + const menuButton = result.getByText("Actions"); + + await menuButton.click(); + await result.getByText("Edit").click(); + + await vi.waitFor(() => { + expect(onAction).toHaveBeenCalledWith({ action: "edit" }); + }); + }); + + it("should render icon-only with size compact", async () => { + const onAction = vi.fn(); + + const Component = () => { + return ( + + + + + ); + }; + + const result = render(); + const menuButton = result.getByTestId("icon-compact-menu"); + + await menuButton.click(); + await result.getByText("Assign").click(); + + await vi.waitFor(() => { + expect(onAction).toHaveBeenCalledWith({ action: "assign" }); + }); + }); +}); diff --git a/libs/react-components/specs/modal.browser.spec.tsx b/libs/react-components/specs/modal.browser.spec.tsx index 65bc979765..46cc4b5860 100644 --- a/libs/react-components/specs/modal.browser.spec.tsx +++ b/libs/react-components/specs/modal.browser.spec.tsx @@ -1,6 +1,15 @@ import { render } from "vitest-browser-react"; -import { GoabModal, GoabButton, GoabIcon } from "../src"; +import { + GoabModal, + GoabButton, + GoabIcon, + GoabDropdown, + GoabDropdownItem, + GoabDatePicker, + GoabFormItem, +} from "../src"; import { expect, describe, it, vi } from "vitest"; +import { userEvent } from "@vitest/browser/context"; import { useState } from "react"; describe("Modal", () => { @@ -125,4 +134,79 @@ describe("Modal", () => { expect(testLink1.element()).toBeTruthy(); expect(testLink2.element()).toBeTruthy(); }); + + it("should allow dropdown selection within a modal", async () => { + const onChange = vi.fn(); + const Component = () => { + return ( + + + + + + + + + + ); + }; + + const result = render(); + + // Click the dropdown to open it + const dropdown = result.getByTestId("modal-dropdown"); + await dropdown.click(); + + // The dropdown popover should be visible (rendered in top layer) + await vi.waitFor(() => { + const popoverContent = result.getByTestId("popover-content"); + expect(popoverContent.element()).toBeTruthy(); + expect(popoverContent.element().checkVisibility()).toBeTruthy(); + }); + }); + + it("should open date picker calendar within a modal", async () => { + const Component = () => { + return ( + + + + + + ); + }; + + const result = render(); + + // Click the calendar input to open the date picker + const calendarInput = result.getByTestId("calendar-input"); + await userEvent.click(calendarInput); + + // The calendar popover should be visible (rendered in top layer) + await vi.waitFor(() => { + const popoverContent = result.getByTestId("calendar-popover"); + expect(popoverContent.element()).toBeTruthy(); + expect(popoverContent.element().checkVisibility()).toBeTruthy(); + }); + }); }); \ No newline at end of file diff --git a/libs/react-components/specs/popover.browser.spec.tsx b/libs/react-components/specs/popover.browser.spec.tsx index 838a8acb72..748c599351 100644 --- a/libs/react-components/specs/popover.browser.spec.tsx +++ b/libs/react-components/specs/popover.browser.spec.tsx @@ -1,7 +1,7 @@ import { render } from "vitest-browser-react"; - -import { GoabPopover, GoabButton } from "../src"; +import { GoabPopover, GoabButton, GoabModal } from "../src"; import { expect, describe, it, vi } from "vitest"; +import { userEvent } from "@vitest/browser/context"; describe("Popover", () => { it("should allow popover to be closed via a button with a close action", async () => { @@ -20,21 +20,16 @@ describe("Popover", () => { const target = result.getByTestId("target"); const closeButton = result.getByTestId("close-button"); - // Actions - await target.click(); - expect(closeButton.element()).toBeTruthy() + expect(closeButton).toBeVisible(); await closeButton.click(); - // Result - await vi.waitFor(() => { - expect(closeButton.element().checkVisibility()).toBeFalsy(); - }) + expect(closeButton).not.toBeVisible(); + }); }); - - it("should close popover when clicking on the document body", async () => { + it.skip("should close popover when pressing Escape", async () => { const Component = () => { return ( Open popover}> @@ -48,21 +43,288 @@ describe("Popover", () => { const result = render(); const target = result.getByTestId("target"); + const closeButton = result.getByTestId("close-button"); + + // Open popover + await target.click(); + + await vi.waitFor(() => { + expect(closeButton).toBeVisible(); + }); + + // Press Escape to close (native popover light dismiss) + await userEvent.keyboard("{Escape}"); + + await vi.waitFor(() => { + expect(closeButton).not.toBeVisible(); + }); + }); + + it.skip("should return focus to trigger after closing with Escape - issue3067", async () => { + const Component = () => { + return ( + Focus Test Button} + > +

Popover content

+
+ ); + }; + + const result = render(); + const target = result.getByTestId("focus-target"); + const popoverContent = result.getByTestId("popover-content"); + const popoverTarget = result.getByTestId("popover-target"); - // Actions + // Open popover await target.click(); + await vi.waitFor(() => { + expect(popoverContent).toBeVisible(); + }); + + // Close with Escape + await userEvent.keyboard("{Escape}"); + await vi.waitFor(() => { + expect(popoverContent).not.toBeVisible(); + }); + + // Focus should be on the popover target button + await vi.waitFor(() => { + expect(popoverTarget.element().matches(":focus-within")).toBeTruthy(); + }); + }); + + it("should close Popover A when Popover B is opened (popover='auto' behavior)", async () => { + const Component = () => { + return ( + <> + Popover A} + > +

Content A

+
+ Popover B} + > +

Content B

+
+ + ); + }; + const result = render(); + const targetA = result.getByTestId("target-a"); + const targetB = result.getByTestId("target-b"); + const contentA = result.getByTestId("content-a"); + const contentB = result.getByTestId("content-b"); + + // Open Popover A + await targetA.click(); + await vi.waitFor(() => { + expect(contentA).toBeVisible(); + }); + + // Open Popover B — should auto-close Popover A + await targetB.click(); + await vi.waitFor(() => { + expect(contentB).toBeVisible(); + expect(contentA).not.toBeVisible(); + }); + }); + + it.skip("should respect maxWidth when popover is placed above a button - issue3062", async () => { + const Component = () => { + return ( + <> + + Show Popover + + } + > +

This popover is above the button. It should respect maxWidth (320px).

+
+ + Submit Form + + + Popover Test + + } + > +

+ This popover is below the button. It should also respect maxWidth (320px). +

+
+ + ); + }; + + const result = render(); + const targetAbove = result.getByTestId("target-above"); + const targetBelow = result.getByTestId("target-below"); + const popoverAbove = result.getByTestId("popover-above"); + const popoverBelow = result.getByTestId("popover-below"); + + // Open popover above the button + await targetAbove.click(); + + let aboveWidth: number; + const contentAbove = popoverAbove.getByTestId("popover-content"); await vi.waitFor(() => { - const closeButton = result.getByTestId("close-button"); - expect(closeButton.element().checkVisibility()).toBeTruthy(); + expect(contentAbove).toBeVisible(); + aboveWidth = contentAbove.element().getBoundingClientRect().width; }); - document.body.click(); // Simulate click on document body + // Close it + await userEvent.keyboard("{Escape}"); - // Result + // Open popover below the button + await targetBelow.click(); + + let belowWidth: number; + const contentBelow = popoverBelow.getByTestId("popover-content"); await vi.waitFor(() => { - const closeButton = result.getByTestId("close-button"); - expect(closeButton.element().checkVisibility()).toBeFalsy(); + expect(contentBelow).toBeVisible(); + belowWidth = contentBelow.element().getBoundingClientRect().width; + }); + + // Both popovers should have the same width (maxWidth respected equally) + expect(aboveWidth!).toBe(belowWidth!); + }); + + describe("Popover within a modal", () => { + it("should open the popover within a modal even with long content", async () => { + const Component = () => { + const longContent = Array.from({ length: 50 }, (_, i) => ( +

This is line {i + 1} of the popover content.

+ )); + + return ( + + Open popover} + > +
{longContent}
+ Close +
+
+ ); + }; + + const result = render(); + const target = result.getByTestId("target"); + const popoverContent = result.getByTestId("popover-content"); + + await target.click(); + + await vi.waitFor(() => { + expect(popoverContent).toBeVisible(); + }); + }); + + it("should open the popover upwards within a modal if there is more space above than below", async () => { + const Component = () => { + return ( + +
+

Space above

+

Space above

+

Space above

+

Space above

+

Space above

+

Space above

+

Space above

+

Space above

+ Open popover} + > +
+

Popover Content

+
+ Close +
+

Space Below

+
+
+ ); + }; + + const result = render(); + const target = result.getByTestId("target"); + const popoverContent = result.getByTestId("popover-content"); + + await target.click(); + + await vi.waitFor(() => { + expect(popoverContent).toBeVisible(); + }); + }); + + it("should open the popover downwards within a modal if there is enough space below", async () => { + const Component = () => { + return ( + +
+

Space above

+

Space above

+ Open popover} + > +
+

Popover Content

+
+ Close +
+

Space Below

+

Space Below

+

Space Below

+

Space Below

+

Space Below

+

Space Below

+
+
+ ); + }; + + const result = render(); + const target = result.getByTestId("target"); + const popoverContent = result.getByTestId("popover-content"); + + await target.click(); + + await vi.waitFor(() => { + expect(popoverContent).toBeVisible(); + }); }); }); -}) +}); diff --git a/libs/react-components/specs/pushdrawer.browser.spec.tsx b/libs/react-components/specs/pushdrawer.browser.spec.tsx index 03d64709ef..858819ea15 100644 --- a/libs/react-components/specs/pushdrawer.browser.spec.tsx +++ b/libs/react-components/specs/pushdrawer.browser.spec.tsx @@ -21,12 +21,12 @@ describe("PushDrawer", () => { const Component = () => { return (
-
+

Pushed In Content

This is pushed in

{ // a,b,c,d: 2x2 transformation identity matrix expect(beforeStyles.transform).toBe("matrix(1, 0, 0, 1, -22, -22)"); - // Check ::after pseudo-element (should not interfere with touch target) - const afterStyles = window.getComputedStyle(icon, "::after"); - // ::after should not have conflicting dimensions or positioning - expect(afterStyles.position).not.toBe("absolute"); - // Final verification: Check that all styles are applied and rendered // After the page is fully loaded and all CSS is computed await vi.waitFor(() => { diff --git a/libs/react-components/specs/side-menu.browser.spec.tsx b/libs/react-components/specs/side-menu.browser.spec.tsx new file mode 100644 index 0000000000..91c517beb5 --- /dev/null +++ b/libs/react-components/specs/side-menu.browser.spec.tsx @@ -0,0 +1,115 @@ +import { render } from "vitest-browser-react"; +import { GoabSideMenu, GoabSideMenuGroup } from "../src"; +import { describe, it, expect, vi } from "vitest"; + +describe("SideMenu", () => { + const Component = () => { + return ( + + + Parent Item + + + + Child Item + + + + + ); + }; + + const isGroupOpen = (groupHost: HTMLElement | null) => { + if (!groupHost) return; + const container = groupHost.shadowRoot?.querySelector('[data-testid="group"]'); + return !!container && !container.classList.contains("hidden"); + }; + + const updateURL = async (url: string) => { + window.history.pushState({}, "", url); + window.dispatchEvent(new PopStateEvent("popstate")); + }; + + beforeEach(() => { + window.history.pushState({}, "", "/"); + }); + + it("closes parent and child groups when no items are current", async () => { + const handler = vi.fn(); + + const result = render(); + + const menu = result.baseElement.querySelector("goa-side-menu"); + menu?.addEventListener("_open", handler); + + const parentGroup = result.baseElement.querySelector( + "goa-side-menu-group", + ) as HTMLElement; + const childGroup = parentGroup?.querySelector("goa-side-menu-group") as HTMLElement; + + expect(parentGroup).toBeTruthy(); + expect(childGroup).toBeTruthy(); + + await vi.waitFor(() => { + expect(handler).toHaveBeenCalled(); + expect(isGroupOpen(parentGroup)).toBe(false); + expect(isGroupOpen(childGroup)).toBe(false); + }); + }); + + it("opens parent and child group when the child item is current", async () => { + const handler = vi.fn(); + + const result = render(); + + const menu = result.baseElement.querySelector("goa-side-menu"); + menu?.addEventListener("_open", handler); + + const parentGroup = result.baseElement.querySelector( + "goa-side-menu-group", + ) as HTMLElement; + const childGroup = parentGroup?.querySelector("goa-side-menu-group") as HTMLElement; + + expect(parentGroup).toBeTruthy(); + expect(childGroup).toBeTruthy(); + + expect(isGroupOpen(parentGroup)).toBe(false); + expect(isGroupOpen(childGroup)).toBe(false); + + await updateURL("/child-item"); + + await vi.waitFor(() => { + expect(handler).toHaveBeenCalled(); + expect(isGroupOpen(parentGroup)).toBe(true); + expect(isGroupOpen(childGroup)).toBe(true); + }); + }); + + it("opens parent and closes child group when the parent item is current", async () => { + const handler = vi.fn(); + + const result = render(); + + const menu = result.baseElement.querySelector("goa-side-menu"); + menu?.addEventListener("_open", handler); + + const parentGroup = result.baseElement.querySelector( + "goa-side-menu-group", + ) as HTMLElement; + const childGroup = parentGroup?.querySelector("goa-side-menu-group") as HTMLElement; + + expect(parentGroup).toBeTruthy(); + expect(childGroup).toBeTruthy(); + + expect(isGroupOpen(parentGroup)).toBe(false); + expect(isGroupOpen(childGroup)).toBe(false); + + updateURL("/parent-item"); + + await vi.waitFor(() => { + expect(handler).toHaveBeenCalled(); + expect(isGroupOpen(childGroup)).toBe(false); + expect(isGroupOpen(parentGroup)).toBe(true); + }); + }); +}); diff --git a/libs/react-components/specs/table.browser.spec.tsx b/libs/react-components/specs/table.browser.spec.tsx new file mode 100644 index 0000000000..50dafc2f00 --- /dev/null +++ b/libs/react-components/specs/table.browser.spec.tsx @@ -0,0 +1,531 @@ +import { render } from "vitest-browser-react"; +import { vi, describe, it, expect } from "vitest"; +import { useState, useMemo } from "react"; +import { GoabTable, GoabTableSortHeader } from "../src"; + +type SortEntry = { column: string; direction: "asc" | "desc" }; +type RowData = { id: number; name: string; department: string; salary: number }; + +const initialData: RowData[] = [ + { id: 1, name: "Alice Johnson", department: "Engineering", salary: 95000 }, + { id: 2, name: "Bob Smith", department: "Marketing", salary: 72000 }, + { id: 3, name: "Carol Williams", department: "Engineering", salary: 105000 }, + { id: 4, name: "David Brown", department: "Sales", salary: 68000 }, + { id: 5, name: "Eve Davis", department: "Marketing", salary: 78000 }, +]; + +function sortData(data: RowData[], sorts: SortEntry[]): RowData[] { + if (sorts.length === 0) return data; + return [...data].sort((a, b) => { + for (const { column, direction } of sorts) { + const aVal = a[column as keyof RowData]; + const bVal = b[column as keyof RowData]; + let cmp = 0; + if (typeof aVal === "string" && typeof bVal === "string") { + cmp = aVal.localeCompare(bVal); + } else { + cmp = (aVal as number) - (bVal as number); + } + if (cmp !== 0) return direction === "asc" ? cmp : -cmp; + } + return 0; + }); +} + +/** Query row names from the light DOM render container (not shadow DOM). */ +function getRowNames(container: HTMLElement): string[] { + const rows = container.querySelectorAll("tbody tr"); + return Array.from(rows).map((row) => row.querySelector("td")!.textContent!.trim()); +} + +/** Get the shadow DOM button inside a goa-table-sort-header, queried from the light DOM container. */ +function getSortHeaderButton(container: HTMLElement, name: string): HTMLElement { + const header = container.querySelector(`goa-table-sort-header[name="${name}"]`); + return header!.shadowRoot!.querySelector("button")!; +} + +/** Wait for sort headers to be mounted and their shadow roots to be ready. */ +async function waitForHeaders(container: HTMLElement, count: number) { + await vi.waitFor( + () => { + const headers = container.querySelectorAll("goa-table-sort-header"); + expect(headers.length).toBe(count); + // Ensure shadow roots are ready + headers.forEach((h) => { + expect(h.shadowRoot).toBeTruthy(); + expect(h.shadowRoot!.querySelector("button")).toBeTruthy(); + }); + }, + { timeout: 3000 }, + ); +} + +describe("GoabTable Browser Tests", () => { + describe("single-column sorting", () => { + it("should sort by name ascending on first click", async () => { + const onSort = vi.fn(); + + const Component = () => { + const [sorts, setSorts] = useState([]); + const sorted = useMemo(() => sortData(initialData, sorts), [sorts]); + + return ( + { + setSorts([{ column: detail.sortBy, direction: detail.sortDir === 1 ? "asc" : "desc" }]); + onSort(detail); + }} + > + + + + Name + + + Department + + + Salary + + + + + {sorted.map((row) => ( + + {row.name} + {row.department} + ${row.salary.toLocaleString()} + + ))} + + + ); + }; + + const { container } = render(); + await waitForHeaders(container, 3); + + // Initial order should be the original data order + expect(getRowNames(container)).toEqual([ + "Alice Johnson", + "Bob Smith", + "Carol Williams", + "David Brown", + "Eve Davis", + ]); + + // Click Name header to sort ascending + getSortHeaderButton(container, "name").click(); + + await vi.waitFor(() => { + expect(onSort).toHaveBeenCalled(); + expect(getRowNames(container)).toEqual([ + "Alice Johnson", + "Bob Smith", + "Carol Williams", + "David Brown", + "Eve Davis", + ]); + }); + }); + + it("should toggle sort direction on subsequent clicks", async () => { + const Component = () => { + const [sorts, setSorts] = useState([]); + const sorted = useMemo(() => sortData(initialData, sorts), [sorts]); + + return ( + { + setSorts([{ column: detail.sortBy, direction: detail.sortDir === 1 ? "asc" : "desc" }]); + }} + > + + + + Name + + + Salary + + + + + {sorted.map((row) => ( + + {row.name} + ${row.salary.toLocaleString()} + + ))} + + + ); + }; + + const { container } = render(); + await waitForHeaders(container, 2); + + // First click — sort ascending + getSortHeaderButton(container, "name").click(); + await vi.waitFor(() => { + expect(getRowNames(container)).toEqual([ + "Alice Johnson", + "Bob Smith", + "Carol Williams", + "David Brown", + "Eve Davis", + ]); + }); + + // Second click — sort descending + getSortHeaderButton(container, "name").click(); + await vi.waitFor(() => { + expect(getRowNames(container)).toEqual([ + "Eve Davis", + "David Brown", + "Carol Williams", + "Bob Smith", + "Alice Johnson", + ]); + }); + }); + + it("should switch sort column when clicking a different header", async () => { + const Component = () => { + const [sorts, setSorts] = useState([]); + const sorted = useMemo(() => sortData(initialData, sorts), [sorts]); + + return ( + { + setSorts([{ column: detail.sortBy, direction: detail.sortDir === 1 ? "asc" : "desc" }]); + }} + > + + + + Name + + + Salary + + + + + {sorted.map((row) => ( + + {row.name} + ${row.salary.toLocaleString()} + + ))} + + + ); + }; + + const { container } = render(); + await waitForHeaders(container, 2); + + // Sort by name first + getSortHeaderButton(container, "name").click(); + await vi.waitFor(() => { + expect(getRowNames(container)[0]).toBe("Alice Johnson"); + }); + + // Now click salary — should sort by salary ascending, replacing name sort + getSortHeaderButton(container, "salary").click(); + await vi.waitFor(() => { + // Salary asc: 68000, 72000, 78000, 95000, 105000 + expect(getRowNames(container)).toEqual([ + "David Brown", + "Bob Smith", + "Eve Davis", + "Alice Johnson", + "Carol Williams", + ]); + }); + }); + }); + + describe("multi-column sorting", () => { + it("should sort by two columns when clicking sequentially", async () => { + const Component = () => { + const [sorts, setSorts] = useState([]); + const sorted = useMemo(() => sortData(initialData, sorts), [sorts]); + + return ( + { + setSorts(detail.sorts); + }} + > + + + + Name + + + Department + + + Salary + + + + + {sorted.map((row) => ( + + {row.name} + {row.department} + ${row.salary.toLocaleString()} + + ))} + + + ); + }; + + const { container } = render(); + await waitForHeaders(container, 3); + + // Click department to sort ascending + getSortHeaderButton(container, "department").click(); + await vi.waitFor(() => { + // Department asc: Engineering (Alice, Carol), Marketing (Bob, Eve), Sales (David) + const names = getRowNames(container); + expect(names[0]).toBe("Alice Johnson"); // Engineering + expect(names[4]).toBe("David Brown"); // Sales + }); + + // Click salary as secondary sort + getSortHeaderButton(container, "salary").click(); + await vi.waitFor(() => { + // Dept asc then salary asc within each dept + // Engineering: Alice (95k), Carol (105k) + // Marketing: Bob (72k), Eve (78k) + // Sales: David (68k) + expect(getRowNames(container)).toEqual([ + "Alice Johnson", + "Carol Williams", + "Bob Smith", + "Eve Davis", + "David Brown", + ]); + }); + }); + }); + + describe("declarative initial sort (multi)", () => { + it("should apply initial sort from direction and sortOrder props", async () => { + const onSort = vi.fn(); + + const Component = () => { + const [sorts, setSorts] = useState([]); + const sorted = useMemo(() => sortData(initialData, sorts), [sorts]); + + return ( + { + setSorts(detail.sorts); + onSort(detail); + }} + > + + + + Name + + + + Department + + + + + Salary + + + + + + {sorted.map((row) => ( + + {row.name} + {row.department} + ${row.salary.toLocaleString()} + + ))} + + + ); + }; + + const { container } = render(); + + // Wait for initial sort to be applied + await vi.waitFor( + () => { + // Dept asc, then salary desc within each dept + // Engineering: Carol (105k), Alice (95k) + // Marketing: Eve (78k), Bob (72k) + // Sales: David (68k) + expect(getRowNames(container)).toEqual([ + "Carol Williams", + "Alice Johnson", + "Eve Davis", + "Bob Smith", + "David Brown", + ]); + }, + { timeout: 3000 }, + ); + + // Verify the initial onMultiSort was dispatched + expect(onSort).toHaveBeenCalled(); + const lastCall = onSort.mock.calls[onSort.mock.calls.length - 1][0]; + expect(lastCall.sorts).toEqual([ + { column: "department", direction: "asc" }, + { column: "salary", direction: "desc" }, + ]); + }); + + it("should update sort when clicking a header after initial sort", async () => { + const Component = () => { + const [sorts, setSorts] = useState([]); + const sorted = useMemo(() => sortData(initialData, sorts), [sorts]); + + return ( + { + setSorts(detail.sorts); + }} + > + + + + Name + + + + Department + + + + + Salary + + + + + + {sorted.map((row) => ( + + {row.name} + {row.department} + ${row.salary.toLocaleString()} + + ))} + + + ); + }; + + const { container } = render(); + + // Wait for initial sort to apply + await vi.waitFor( + () => { + expect(getRowNames(container)[0]).toBe("Carol Williams"); + }, + { timeout: 3000 }, + ); + + // Click Name header — should add name as a sort column (replacing secondary since max is 2) + getSortHeaderButton(container, "name").click(); + + await vi.waitFor(() => { + // Department asc is primary, name asc replaces salary as secondary + // Engineering: Alice, Carol + // Marketing: Bob, Eve + // Sales: David + expect(getRowNames(container)).toEqual([ + "Alice Johnson", + "Carol Williams", + "Bob Smith", + "Eve Davis", + "David Brown", + ]); + }); + }); + }); + + describe("sort header direction attribute", () => { + it("should update direction attribute on sort header after clicking", async () => { + const Component = () => { + return ( + { /* noop */ }}> + + + + Name + + + Department + + + + + + Alice + Engineering + + + + ); + }; + + const { container } = render(); + await waitForHeaders(container, 2); + + const nameHeader = container.querySelector('goa-table-sort-header[name="name"]')!; + const deptHeader = container.querySelector('goa-table-sort-header[name="department"]')!; + + // Initially both should be "none" + expect(nameHeader.getAttribute("direction")).toBe("none"); + expect(deptHeader.getAttribute("direction")).toBe("none"); + + // Click name header + getSortHeaderButton(container, "name").click(); + + await vi.waitFor(() => { + expect(nameHeader.getAttribute("direction")).toBe("asc"); + expect(deptHeader.getAttribute("direction")).toBe("none"); + }); + + // Click again for descending + getSortHeaderButton(container, "name").click(); + + await vi.waitFor(() => { + expect(nameHeader.getAttribute("direction")).toBe("desc"); + expect(deptHeader.getAttribute("direction")).toBe("none"); + }); + + // Click department — name should reset to none + getSortHeaderButton(container, "department").click(); + + await vi.waitFor(() => { + expect(nameHeader.getAttribute("direction")).toBe("none"); + expect(deptHeader.getAttribute("direction")).toBe("asc"); + }); + }); + }); +}); diff --git a/libs/react-components/specs/tabs.browser.spec.tsx b/libs/react-components/specs/tabs.browser.spec.tsx index a35d23acd9..c46ca6b27f 100644 --- a/libs/react-components/specs/tabs.browser.spec.tsx +++ b/libs/react-components/specs/tabs.browser.spec.tsx @@ -1,7 +1,9 @@ import { render } from "vitest-browser-react"; +import { GoabTabs, GoabTab } from "../src"; import { GoabTabs, GoabTab } from "../src"; import { expect, describe, it, vi } from "vitest"; +import { page } from "@vitest/browser/context"; import { GoabBadge } from "../src/lib/badge/badge"; describe("Tabs Browser Tests", () => { @@ -521,9 +523,7 @@ describe("Tabs Browser Tests", () => { const Component = () => { return ( - - Review content - + Review content @@ -633,7 +633,6 @@ describe("Tabs Browser Tests", () => { ); }; - const { getByText, getByRole } = render(); const tabs = getByRole("tab"); @@ -693,12 +692,124 @@ describe("Tabs Browser Tests", () => { // pass and the vitest would see that as a fully passing test. The logic below ensure that // is passes all the time. const hashes = new Set(); - await vi.waitFor(() => { - hashes.add(window.location.hash); - }, { timeout: 500 }); + await vi.waitFor( + () => { + hashes.add(window.location.hash); + }, + { timeout: 500 }, + ); expect(hashes.size).toBe(1); expect(hashes.has("#active-tasks")).toBe(true); - }) + }); + }); + + describe("skip focus on initial load", () => { + it("should not focus any tab on initial page load", async () => { + const Component = () => { + return ( + + Content 1 + Content 2 + Content 3 + + ); + }; + + const { getByRole } = render(); + const tabs = getByRole("tab"); + + await vi.waitFor(() => { + expect(tabs.elements().length).toBe(3); + }); + + // No tab should be focus-visible on initial page load + tabs.elements().forEach((tab) => { + expect(tab.matches(":focus-visible")).toBe(false); + }); + }); + + it("should not focus any tab when initialTab is set", async () => { + const Component = () => { + return ( + + Content 1 + Content 2 + Content 3 + + ); + }; + + const { getByRole } = render(); + const tabs = getByRole("tab"); + + // The second goa-tab should be open (active) + await vi.waitFor(() => { + const goaTabs = document.querySelectorAll("goa-tab"); + expect(goaTabs[1].getAttribute("open")).toBe("true"); + }); + + // But it should NOT be focus-visible + await vi.waitFor(() => { + expect(tabs.elements().length).toBe(3); + }); + + const secondTab = tabs.elements()[1]; + expect(secondTab.matches(":focus-visible")).toBe(false); + }); + }); + + describe("orientation (experimental)", () => { + it("should stack tabs vertically on mobile by default (orientation='auto')", async () => { + // Simulate mobile viewport (iPhone SE dimensions) + await page.viewport(375, 667); + + const Component = () => { + return ( + + Content 1 + Content 2 + + ); + }; + + const { getByRole } = render(); + const tabs = getByRole("tab"); + + await vi.waitFor(() => { + const els = tabs.elements(); + expect(els.length).toBe(2); + }); + + const tabsDiv = tabs.elements()[0].parentElement!; + const borderLeft = getComputedStyle(tabsDiv).borderLeftStyle; + expect(borderLeft).not.toBe("none"); // on mobile css, we have border left while desktop we don't + }); + + it("should keep tabs horizontal on mobile when orientation is 'horizontal'", async () => { + // Simulate mobile viewport (iPhone SE dimensions) + await page.viewport(375, 667); + + const Component = () => { + return ( + + Content 1 + Content 2 + + ); + }; + + const { getByRole } = render(); + const tabs = getByRole("tab"); + + await vi.waitFor(() => { + const els = tabs.elements(); + expect(els.length).toBe(2); + }); + + const tabsDiv = tabs.elements()[0].parentElement!; + const borderLeft = getComputedStyle(tabsDiv).borderLeftStyle; + expect(borderLeft).toBe("none"); + }); }); }); diff --git a/libs/react-components/specs/work-side-menu-with-notification-popover.browser.spec.tsx b/libs/react-components/specs/work-side-menu-with-notification-popover.browser.spec.tsx new file mode 100644 index 0000000000..313f384205 --- /dev/null +++ b/libs/react-components/specs/work-side-menu-with-notification-popover.browser.spec.tsx @@ -0,0 +1,363 @@ +import { useState } from "react"; +import { render } from "vitest-browser-react"; +import { + GoabWorkSideMenu, + GoabWorkSideMenuItem, + GoabWorkSideNotificationPanel, + GoabWorkSideNotificationItem, +} from "../src"; +import { expect, describe, it, vi } from "vitest"; +import { page } from "@vitest/browser/context"; + +type Notification = { + id: string; + title: string; + description: string; + timestamp: string; + type: "info" | "success" | "warning" | "critical"; + readStatus: "read" | "unread"; + priority: "normal" | "urgent"; +}; + +function createNotifications(): Notification[] { + const now = Date.now(); + return [ + { + id: "1", + title: "New case assigned", + description: "Case #12345 has been assigned to you for review.", + timestamp: new Date(now - 5 * 60 * 1000).toISOString(), + type: "info", + readStatus: "unread", + priority: "normal", + }, + { + id: "2", + title: "Document uploaded", + description: "A new document was uploaded to Case #12340.", + timestamp: new Date(now - 30 * 60 * 1000).toISOString(), + type: "success", + readStatus: "unread", + priority: "normal", + }, + { + id: "3", + title: "System maintenance", + description: "Scheduled maintenance tonight at 11 PM MST.", + timestamp: new Date(now - 60 * 60 * 1000).toISOString(), + type: "critical", + readStatus: "unread", + priority: "urgent", + }, + { + id: "4", + title: "Action required", + description: "Please review the pending approval request.", + timestamp: new Date(now - 2 * 60 * 60 * 1000).toISOString(), + type: "warning", + readStatus: "unread", + priority: "normal", + }, + { + id: "5", + title: "Deadline approaching", + description: "Case #12300 deadline is in 24 hours.", + timestamp: new Date(now - 5 * 60 * 60 * 1000).toISOString(), + type: "warning", + readStatus: "unread", + priority: "urgent", + }, + { + id: "6", + title: "Comment added", + description: "John Smith commented on Case #12342.", + timestamp: new Date(now - 8 * 60 * 60 * 1000).toISOString(), + type: "info", + readStatus: "unread", + priority: "normal", + }, + { + id: "7", + title: "Case status updated", + description: "Case #12339 status changed to In Review.", + timestamp: new Date(now - 3 * 24 * 60 * 60 * 1000).toISOString(), + type: "success", + readStatus: "read", + priority: "normal", + }, + { + id: "8", + title: "New attachment", + description: "PDF document attached to Case #12338.", + timestamp: new Date(now - 3 * 24 * 60 * 60 * 1000).toISOString(), + type: "info", + readStatus: "read", + priority: "normal", + }, + ]; +} + +function NotificationMenuComponent({ + onMarkAllRead, + onViewAll, + onItemClick, +}: { + onMarkAllRead?: () => void; + onViewAll?: () => void; + onItemClick?: () => void; +}) { + const [notifications, setNotifications] = useState(createNotifications()); + + const handleItemClick = (id: string) => { + onItemClick?.(); + setNotifications((prev) => + prev.map((n) => + n.id === id && n.readStatus === "unread" + ? { ...n, readStatus: "read" as const } + : n, + ), + ); + }; + + const handleMarkAllRead = () => { + onMarkAllRead?.(); + setNotifications((prev) => prev.map((n) => ({ ...n, readStatus: "read" as const }))); + }; + + return ( + } + secondaryContent={ + + {notifications.map((notif) => ( + handleItemClick(notif.id)} + /> + ))} + + } + /> + } + accountContent={} + open={true} + /> + ); +} + +describe("WorkSideMenu with Popover", () => { + describe("Mobile viewport", () => { + it("should open notification panel in a bottom drawer", async () => { + // iPhone 14 viewport (390x844) + await page.viewport(390, 844); + + const onMarkAllRead = vi.fn(); + const onViewAll = vi.fn(); + const onItemClick = vi.fn(); + + const result = render( + , + ); + + const menu = result.getByTestId("work-space-side-menu"); + const notifMenuItem = result.getByTestId("work-space-side-menu-item-notification"); + + // Click the notification menu item to open the drawer + await notifMenuItem.click(); + + // A goa-drawer should be appended to document.body with position="bottom" + await vi.waitFor(() => { + const drawer = document.body.querySelector("goa-drawer"); + expect(drawer).toBeTruthy(); + expect(drawer?.getAttribute("position")).toBe("bottom"); + expect(drawer?.hasAttribute("open")).toBe(true); + }); + + // Menu should be hidden when drawer is open + await vi.waitFor(() => { + expect(menu.element().classList.contains("drawer-open")).toBe(true); + }); + + // Notification panel content should be inside the drawer + await vi.waitFor(() => { + const drawer = document.body.querySelector("goa-drawer"); + const panel = drawer?.querySelector("goa-work-side-notification-panel"); + expect(panel).toBeTruthy(); + }); + + // Notification items should be rendered inside the drawer + await vi.waitFor(() => { + const drawer = document.body.querySelector("goa-drawer"); + const items = drawer?.querySelectorAll("goa-work-side-notification-item"); + expect(items?.length).toBe(8); + }); + + // Click the close button inside the notification panel to close the drawer + const closeBtn = result.getByTestId("close-work-space-side-notification-panel"); + await closeBtn.click(); + + // Drawer should close + await vi.waitFor(() => { + const drawer = document.body.querySelector("goa-drawer"); + expect(drawer?.getAttribute("open")).toBeNull(); + }); + + // Menu should be visible again + await vi.waitFor(() => { + expect(menu.element().classList.contains("drawer-open")).toBe(false); + }); + }); + }); + + describe("Desktop viewport", () => { + // CSS anchor positioning is not supported in Firefox/Safari 18 (see #3540) + const isFirefox = navigator.userAgent.includes("Firefox"); + it.skipIf(isFirefox)("should open notification panel in a popover", async () => { + await page.viewport(1024, 768); + + const onMarkAllRead = vi.fn(); + const onViewAll = vi.fn(); + const onItemClick = vi.fn(); + + const result = render( + , + ); + + const notifMenuItem = result.getByTestId("work-space-side-menu-item-notification"); + const panel = result.getByTestId("work-space-side-notification-panel"); + const unreadTab = result.getByTestId("tab-1"); + const firstCard = result.getByTestId("noti-1"); + const timestamp = result.getByTestId("timestamp-noti-1"); + const unreadBadge = result.getByTestId("unreadCount"); + + // Click the notification menu item to open the popover + await notifMenuItem.click(); + + // Panel should be visible inside popover + await vi.waitFor(() => { + // Heading shows "Notifications" + expect(panel.element().textContent).toContain("Notifications"); + + // "Unread" tab is selected (tab-1 with aria-selected="true") + expect(unreadTab.element().getAttribute("aria-selected")).toBe("true"); + }); + + // Verify notification items are rendered but some of them will be hidden by status + await vi.waitFor(() => { + const items = result.baseElement.querySelectorAll( + "goa-work-side-notification-item", + ); + expect(items.length).toBe(8); + }); + + // First notification item should have "Today" date header + await vi.waitFor(() => { + const shadowRoot = firstCard.element().getRootNode() as ShadowRoot; + const dateHeader = shadowRoot.querySelector(".date-header"); + expect(dateHeader?.textContent).toBe("Today"); + }); + + // First notification item has unread dot and timestamp + await vi.waitFor(() => { + expect(timestamp.element().textContent).toMatch(/\d+ min ago/); + }); + + // Unread count badge shows 6 (wait for items to mount and register) + await vi.waitFor(() => { + expect(unreadBadge.element().textContent).toContain("6"); + }); + + // Click the first notification item + await firstCard.click(); + + // After clicking, the card should have "read" and "hidden" classes + await vi.waitFor(() => { + expect(firstCard.element().classList.contains("read")).toBe(true); + expect(firstCard.element().classList.contains("hidden")).toBe(true); + }); + + // Click "Mark all as read" button + const markAllBtn = result.getByTestId( + "mark-all-as-read-work-space-side-notification-panel", + ); + await markAllBtn.click(); + + // Panel should show empty state: "No unread notifications" + const subline = result.getByTestId( + "empty-notifications-work-space-side-notification-panel", + ); + await vi.waitFor(() => { + expect(subline.element().textContent).toBe("No unread notifications"); + }); + + // "Mark all as read" button should be disabled + await vi.waitFor(() => { + expect(markAllBtn.element().hasAttribute("disabled")).toBe(true); + }); + + // Click on "Urgent" tab + const urgentTab = result.getByTestId("tab-2"); + await urgentTab.click(); + + // Expect 2 urgent items visible with classes "urgent" and "read" but not "hidden" + const noti3 = result.getByTestId("noti-3"); + const noti5 = result.getByTestId("noti-5"); + await vi.waitFor(() => { + expect(noti3.element().classList.contains("urgent")).toBe(true); + expect(noti3.element().classList.contains("read")).toBe(true); + expect(noti3.element().classList.contains("hidden")).toBe(false); + + expect(noti5.element().classList.contains("urgent")).toBe(true); + expect(noti5.element().classList.contains("read")).toBe(true); + expect(noti5.element().classList.contains("hidden")).toBe(false); + }); + + // Click on "All" tab + const allTab = result.getByTestId("tab-3"); + await allTab.click(); + + // All 8 notification items should have class "read" and not "hidden" + const allCards = Array.from({ length: 8 }, (_, i) => + result.getByTestId(`noti-${i + 1}`), + ); + await vi.waitFor(() => { + for (const card of allCards) { + expect(card.element().classList.contains("read")).toBe(true); + expect(card.element().classList.contains("hidden")).toBe(false); + } + }); + }); + }); +}); diff --git a/libs/react-components/specs/work-side-menu.browser.spec.tsx b/libs/react-components/specs/work-side-menu.browser.spec.tsx index 640783141f..46f9d07788 100644 --- a/libs/react-components/specs/work-side-menu.browser.spec.tsx +++ b/libs/react-components/specs/work-side-menu.browser.spec.tsx @@ -1,7 +1,11 @@ import { render } from "vitest-browser-react"; import { useState } from "react"; import { GoabButton } from "../src"; -import { GoabxWorkSideMenu, GoabxWorkSideMenuItem } from "../src/experimental"; +import { + GoabWorkSideMenu, + GoabWorkSideMenuItem, + GoabWorkSideMenuGroup, +} from "../src"; import { expect, describe, it, vi } from "vitest"; import { page } from "@vitest/browser/context"; @@ -11,28 +15,28 @@ describe("WorkSideMenu", () => { await page.viewport(1024, 768); const Component = () => { return ( - } secondaryContent={ - } accountContent={ - { it("should close and open the menu when pressing the toggle button", async () => { const Component = () => { return ( - } - secondaryContent={} - accountContent={} + primaryContent={} + secondaryContent={} + accountContent={} open={true} /> ); }; const result = render(); - - expect(result.getByTestId("work-side-menu")).toBeTruthy(); - const menu = result.getByTestId("work-side-menu"); const toggle = result.getByTestId("toggle-menu"); @@ -108,36 +109,67 @@ describe("WorkSideMenu", () => { expect(menu.element().classList.contains("closed")).toBeFalsy(); }); - it("selecting a menu item navigates to a new location", async () => { - const handler = vi.fn(); - window.addEventListener("_update", handler); + it("should call onNavigate and prevent default navigation when menu item is clicked", async () => { + await page.viewport(1024, 768); + const onNavigate = vi.fn(); const Component = () => { + const [currentPage, setCurrentPage] = useState("/dashboard"); + return ( - - } - secondaryContent={} - accountContent={} - open={true} - /> +
+ { + setCurrentPage(path); + onNavigate(path); + }} + primaryContent={ + <> + + + + } + /> +
{currentPage}
+
); }; + const result = render(); - expect(result.getByTestId("work-side-menu")).toBeTruthy(); - const item1 = result.getByTestId("menu-item-1"); + await vi.waitFor(() => { + const searchItem = result.getByTestId("nav-search"); + expect(searchItem).toBeTruthy(); + }); + + const searchItem = result.getByTestId("nav-search"); + const link = searchItem.element().querySelector("a"); + expect(link).toBeTruthy(); + + await searchItem.click(); - await item1.click(); await vi.waitFor(() => { - expect(window.location.hash).toBe("#item1"); + expect(onNavigate).toHaveBeenCalledWith("/search"); + const currentPageEl = result.getByTestId("current-page"); + expect(currentPageEl.element().textContent).toBe("/search"); }); + + // Verify no full page navigation occurred + expect(window.location.pathname).not.toBe("/search"); }); }); @@ -146,23 +178,20 @@ describe("WorkSideMenu", () => { await page.viewport(390, 844); const Component = () => { return ( - } - secondaryContent={} - accountContent={} + primaryContent={} + secondaryContent={} + accountContent={} open={true} /> ); }; const result = render(); - - expect(result.getByTestId("work-side-menu")).toBeTruthy(); - const menu = result.getByTestId("work-side-menu"); const background = result.getByTestId("work-side-menu-background"); @@ -184,15 +213,15 @@ describe("WorkSideMenu", () => { } return ( <> - } - secondaryContent={} - accountContent={} + primaryContent={} + secondaryContent={} + accountContent={} open={open} onToggle={menuOnToggle} /> @@ -201,9 +230,6 @@ describe("WorkSideMenu", () => { ); }; const result = render(); - - expect(result.getByTestId("work-side-menu")).toBeTruthy(); - const menu = result.getByTestId("work-side-menu"); const button = result.getByText("Toggle menu"); @@ -213,4 +239,96 @@ describe("WorkSideMenu", () => { }); }); }); + + describe("WorkSideMenuGroup", () => { + let isOpen = false; + const Component = () => { + return ( + + + + + + + + + + } + open={true} + /> + ); + }; + + it("should render a group expanded when open is true", async () => { + isOpen = true; + await page.viewport(1024, 768); + + const result = render(); + const group = result.getByTestId("test-group"); + + await vi.waitFor(() => { + const heading = group.getByText("Group heading"); + const detailsEl = heading.element().closest("details"); + const item = result.getByTestId("test-item"); + + expect(detailsEl).toHaveAttribute("open"); + expect(item).toBeVisible(); + }); + }); + + it("should render a group collapsed when open is false", async () => { + isOpen = false; + await page.viewport(1024, 768); + + const result = render(); + const group = result.getByTestId("test-group"); + + await vi.waitFor(() => { + const heading = group.getByText("Group heading"); + const detailsEl = heading.element().closest("details"); + const item = result.getByTestId("test-item"); + + expect(detailsEl).not.toHaveAttribute("open"); + expect(item).not.toBeVisible(); + }); + }); + + it("should render a group expanded when it has a current menu item", async () => { + isOpen = false; + await page.viewport(1024, 768); + + window.history.pushState({}, "", "/test-url"); + window.dispatchEvent(new PopStateEvent("popstate")); + + const result = render(); + const group = result.getByTestId("test-group"); + + await vi.waitFor(() => { + const heading = group.getByText("Group heading"); + const detailsEl = heading.element().closest("details"); + const item = result.getByTestId("test-item"); + const link = item.element().querySelector("a"); + + expect(detailsEl).toHaveAttribute("open"); + expect(item).toBeVisible(); + expect(link?.classList.contains("current")).toBe(true); + }); + }); + }); }); diff --git a/libs/react-components/src/experimental/badge/badge.spec.tsx b/libs/react-components/src/experimental/badge/badge.spec.tsx deleted file mode 100644 index 4422eb7824..0000000000 --- a/libs/react-components/src/experimental/badge/badge.spec.tsx +++ /dev/null @@ -1,153 +0,0 @@ -import { configure, render } from "@testing-library/react"; -import { GoabxBadge } from "./badge"; - -configure({ testIdAttribute: "testId" }); - -describe("GoabxBadge", () => { - it("should render with default behavior (no icon)", () => { - const { container } = render(); - - const el = container.querySelector("goa-badge"); - expect(el?.getAttribute("icon")).toBe("false"); - }); - - it("should render the properties", () => { - const { container } = render( - , - ); - const el = container.querySelector("goa-badge"); - - expect(el?.getAttribute("type")).toBe("information"); - expect(el?.getAttribute("content")).toBe("Text Content"); - expect(el?.getAttribute("icon")).toBe("true"); - expect(el?.getAttribute("size")).toBe("large"); - expect(el?.getAttribute("emphasis")).toBe("subtle"); - expect(el?.getAttribute("mt")).toBe("s"); - expect(el?.getAttribute("mr")).toBe("m"); - expect(el?.getAttribute("mb")).toBe("l"); - expect(el?.getAttribute("ml")).toBe("xl"); - expect(el?.getAttribute("arialabel")).toBe("text"); - }); - - it("should pass data-grid attributes", () => { - const { container } = render( - , - ); - const el = container.querySelector("goa-badge"); - expect(el?.getAttribute("data-grid")).toBe("cell"); - }); - - it("should render custom icon type when icontype is provided", () => { - const { container } = render( - , - ); - const el = container.querySelector("goa-badge"); - - expect(el?.getAttribute("icontype")).toBe("home"); - expect(el?.getAttribute("icon")).toBe("true"); - }); - - it("should not render icontype when not provided", () => { - const { container } = render( - , - ); - const el = container.querySelector("goa-badge"); - - expect(el?.getAttribute("icontype")).toBeNull(); - expect(el?.getAttribute("icon")).toBe("true"); - }); - - it("should pass icon=false correctly to web component", () => { - const { container } = render( - , - ); - const el = container.querySelector("goa-badge"); - - expect(el?.getAttribute("icon")).toBe("false"); - expect(el?.getAttribute("icontype")).toBe("star"); - }); - - it("should pass icon='true' when icon={true} explicitly", () => { - const { container } = render( - , - ); - const el = container.querySelector("goa-badge"); - - expect(el?.getAttribute("icon")).toBe("true"); - expect(el?.getAttribute("icontype")).toBeNull(); - }); - - it("should pass icon='false' when icon={false} without iconType", () => { - const { container } = render( - , - ); - const el = container.querySelector("goa-badge"); - - expect(el?.getAttribute("icon")).toBe("false"); - expect(el?.getAttribute("icontype")).toBeNull(); - }); - - it("should pass icon='false' when icon={undefined}", () => { - const { container } = render( - , - ); - const el = container.querySelector("goa-badge"); - - expect(el?.getAttribute("icon")).toBe("false"); - }); - - it("should pass icon='true' when iconType and icon={true} both provided", () => { - const { container } = render( - , - ); - const el = container.querySelector("goa-badge"); - - expect(el?.getAttribute("icon")).toBe("true"); - expect(el?.getAttribute("icontype")).toBe("star"); - }); -}); diff --git a/libs/react-components/src/experimental/badge/badge.tsx b/libs/react-components/src/experimental/badge/badge.tsx deleted file mode 100644 index b5fb71c3f2..0000000000 --- a/libs/react-components/src/experimental/badge/badge.tsx +++ /dev/null @@ -1,85 +0,0 @@ -import { - DataAttributes, - GoabBadgeEmphasis, - GoabBadgeSize, - GoabBadgeType, - GoabxBadgeType, - GoabIconType, - Margins, -} from "@abgov/ui-components-common"; -import type { JSX } from "react"; -import { transformProps, lowercase } from "../../lib/common/extract-props"; - -interface WCProps extends Margins { - type: GoabBadgeType; - icon?: string; - content?: string; - arialabel?: string; - testid?: string; - icontype?: GoabIconType; - size?: GoabBadgeSize; - emphasis?: GoabBadgeEmphasis; - version?: string; -} - -declare module "react" { - // eslint-disable-next-line @typescript-eslint/no-namespace - namespace JSX { - interface IntrinsicElements { - "goa-badge": WCProps & React.HTMLAttributes; - } - } -} - -export interface GoabxBadgeProps extends Margins, DataAttributes { - type: GoabxBadgeType; - icon?: boolean; - content?: string; - testId?: string; - ariaLabel?: string; - iconType?: GoabIconType; - size?: GoabBadgeSize; - emphasis?: GoabBadgeEmphasis; - version?: string; -} - -/** - * Determines the icon display logic for the badge component. - * Priority order: - * 1. icon={true} - always show icon, starting with default - * 2. icon={false} - always hide icon (overrides iconType) - * 3. iconType provided - show custom icon - * 4. default/no icon or iconType set - hide icon - */ -function getIconValue(icon?: boolean, iconType?: GoabIconType): "true" | "false" { - // Explicit icon prop takes precedence - if (icon !== undefined) { - return icon ? "true" : "false"; - } - - // Show custom icon if iconType is provided - return iconType ? "true" : "false"; -} - -export function GoabxBadge({ - icon, - iconType, - size = "medium", - emphasis = "strong", - version = "2", - ...rest -}: GoabxBadgeProps): JSX.Element { - const _props = transformProps({ size, emphasis, ...rest }, lowercase); - - return ( - - ); -} diff --git a/libs/react-components/src/experimental/button/button.spec.tsx b/libs/react-components/src/experimental/button/button.spec.tsx deleted file mode 100644 index 0a1d76eb12..0000000000 --- a/libs/react-components/src/experimental/button/button.spec.tsx +++ /dev/null @@ -1,160 +0,0 @@ -import { render } from "@testing-library/react"; -import { fireEvent, screen } from "@testing-library/dom"; -import GoabxButton from "./button"; -import { describe, it, expect, vi } from "vitest"; -import { GoabButtonSize, GoabButtonType } from "@abgov/ui-components-common"; - -describe("GoabxButton", () => { - const buttonText = "Test Title"; - - const noop = () => { - /* do nothing */ - }; - - it("should render", () => { - const { container } = render(); - - const el = container.querySelector("goa-button"); - expect(el?.getAttribute("disabled")).toBeNull(); - }); - - it("should render the properties", () => { - const { container } = render( - , - ); - const el = container.querySelector("goa-button"); - - expect(el?.getAttribute("disabled")).toBe("true"); - expect(el?.getAttribute("type")).toBe("primary"); - expect(el?.getAttribute("size")).toBe("compact"); - expect(el?.getAttribute("variant")).toBe("destructive"); - expect(el?.getAttribute("leadingicon")).toBe("car"); - expect(el?.getAttribute("trailingicon")).toBe("bag"); - - expect(el?.getAttribute("mt")).toBe("s"); - expect(el?.getAttribute("mr")).toBe("m"); - expect(el?.getAttribute("mb")).toBe("l"); - expect(el?.getAttribute("ml")).toBe("xl"); - }); - - it("should render content", () => { - const { baseElement } = render( - { - /* do nothing */ - }} - > - {buttonText} - , - ); - - expect(baseElement).toBeTruthy(); - expect(screen.getByText(buttonText)); - }); - - describe("size", () => { - (["compact", "normal"] as const).forEach((size: GoabButtonSize) => { - it(`should render ${size} size`, async () => { - const { container } = render( - - Button - , - ); - - const button = container.querySelector("goa-button"); - expect(button).toBeTruthy(); - expect(button?.getAttribute("size")).toEqual(size); - }); - }); - }); - - describe("type", () => { - (["primary", "submit", "secondary", "tertiary"] as const).forEach( - (type: GoabButtonType) => { - it(`should render ${type} type`, async () => { - const { container } = render( - - Button - , - ); - const button = container.querySelector("goa-button"); - - expect(button).toBeTruthy(); - expect(button?.getAttribute("type")).toEqual(type); - }); - }, - ); - }); - - it("responds to events", async () => { - const onClick = vi.fn(); - const { container } = render(Button); - const button = container.querySelector("goa-button"); - expect(button).toBeTruthy(); - button && fireEvent(button, new CustomEvent("_click")); - expect(onClick).toBeCalled(); - }); - - it("should pass data-grid attributes", () => { - const { container } = render( - - Button Text - , - ); - const el = container.querySelector("goa-button"); - expect(el?.getAttribute("data-grid")).toBe("cell"); - }); -}); - -describe("GoabxButton disabled attribute", () => { - it("should set disabled attribute correctly when disabled=true", () => { - const { container } = render( - Disabled Button - ); - const el = container.querySelector("goa-button"); - - expect(el?.getAttribute("disabled")).toBe("true"); - }); - - it("should not include disabled attribute when disabled=false", () => { - const { container } = render( - Enabled Button - ); - const el = container.querySelector("goa-button"); - - // disabled attribute should not be present - expect(el?.hasAttribute("disabled")).toBe(false); - }); - - it("should handle toggle between disabled states", () => { - // First render with disabled=true - const { container, rerender } = render( - Toggle Button - ); - let el = container.querySelector("goa-button"); - expect(el?.getAttribute("disabled")).toBe("true"); - - // Rerender with disabled=false - rerender(Toggle Button); - el = container.querySelector("goa-button"); - expect(el?.hasAttribute("disabled")).toBe(false); - - // Rerender with disabled=true again - rerender(Toggle Button); - el = container.querySelector("goa-button"); - expect(el?.getAttribute("disabled")).toBe("true"); - }); -}); diff --git a/libs/react-components/src/experimental/button/button.tsx b/libs/react-components/src/experimental/button/button.tsx deleted file mode 100644 index 85e608cd20..0000000000 --- a/libs/react-components/src/experimental/button/button.tsx +++ /dev/null @@ -1,101 +0,0 @@ -import { ReactNode, useEffect, useRef, type JSX } from "react"; -import { - GoabButtonSize, - GoabButtonType, - GoabButtonVariant, - GoabIconType, - Margins, - DataAttributes, -} from "@abgov/ui-components-common"; -import { transformProps, lowercase } from "../../lib/common/extract-props"; - -interface WCProps extends Margins { - type?: GoabButtonType; - size?: GoabButtonSize; - variant?: GoabButtonVariant; - disabled?: string; - leadingicon?: string; - trailingicon?: string; - width?: string; - testid?: string; - action?: string; - actionArgs?: string; - actionArg?: string; - version?: string; -} - -declare module "react" { - // eslint-disable-next-line @typescript-eslint/no-namespace - namespace JSX { - interface IntrinsicElements { - "goa-button": WCProps & - React.HTMLAttributes & { - ref: React.RefObject; - }; - } - } -} - -export interface GoabxButtonProps extends Margins, DataAttributes { - type?: GoabButtonType; - size?: GoabButtonSize; - variant?: GoabButtonVariant; - disabled?: boolean; - leadingIcon?: GoabIconType; - trailingIcon?: GoabIconType; - width?: string; - onClick?: () => void; - testId?: string; - action?: string; - actionArgs?: Record; - actionArg?: string; - version?: string; - children?: ReactNode; -} - -export function GoabxButton({ - disabled, - onClick, - actionArgs, - actionArg, - children, - version = "2", - ...rest -}: GoabxButtonProps): JSX.Element { - const el = useRef(null); - - const _props = transformProps(rest, lowercase); - - useEffect(() => { - if (!el.current) { - return; - } - if (!onClick) { - return; - } - const current = el.current; - const listener = () => { - onClick?.(); - }; - - current.addEventListener("_click", listener); - return () => { - current.removeEventListener("_click", listener); - }; - }, [el, onClick]); - - return ( - - {children} - - ); -} - -export default GoabxButton; diff --git a/libs/react-components/src/experimental/calendar/calendar.spec.tsx b/libs/react-components/src/experimental/calendar/calendar.spec.tsx deleted file mode 100644 index 2b3b02b087..0000000000 --- a/libs/react-components/src/experimental/calendar/calendar.spec.tsx +++ /dev/null @@ -1,62 +0,0 @@ -import { fireEvent, render } from "@testing-library/react"; -import { addMonths } from "date-fns"; -import { describe, it, expect, vi } from "vitest"; - -import Calendar from "./calendar"; - -const noop = () => { /* do nothing */ }; - -describe("Calendar", () => { - it("should render successfully", () => { - const { baseElement, container } = render(); - expect(baseElement).toBeTruthy(); - - const calendar = container.querySelector("goa-calendar"); - expect(calendar).toBeTruthy(); - }); - - it("handle the event", () => { - const onChange = vi.fn(); - const name = "birthdate"; - const { container } = render(); - const calendar = container.querySelector("goa-calendar"); - - const detail = { type: "date", value: new Date(), name }; - calendar && fireEvent(calendar, new CustomEvent("_change", { detail })); - expect(onChange).toBeCalled(); - }); - - it("should set the props correctly", () => { - const value = "2025-02-03"; - const min = "2024-01-01" - const max = "2025-01-01" - - const { baseElement } = render( - - ); - const el = baseElement.querySelector("goa-calendar"); - expect(baseElement).toBeTruthy(); - expect(el?.getAttribute("value")).toBe(value); - expect(el?.getAttribute("min")).toBe(min); - expect(el?.getAttribute("max")).toBe(max); - expect(el?.getAttribute("testid")).toBe("foo"); - }); - - it("should pass data-grid attributes", () => { - const { baseElement } = render( - - ); - const el = baseElement.querySelector("goa-calendar"); - expect(el?.getAttribute("data-grid")).toBe("cell"); - }); -}); diff --git a/libs/react-components/src/experimental/calendar/calendar.tsx b/libs/react-components/src/experimental/calendar/calendar.tsx deleted file mode 100644 index b40c446346..0000000000 --- a/libs/react-components/src/experimental/calendar/calendar.tsx +++ /dev/null @@ -1,81 +0,0 @@ -import { useEffect, useRef, type JSX } from "react"; -import { - DataAttributes, - GoabCalendarOnChangeDetail, - Margins, -} from "@abgov/ui-components-common"; -import { transformProps, lowercase } from "../../lib/common/extract-props"; - -interface WCProps extends Margins { - name?: string; - value?: string; - min?: string; - max?: string; - testid?: string; - version?: string; -} - -declare module "react" { - // eslint-disable-next-line @typescript-eslint/no-namespace - namespace JSX { - interface IntrinsicElements { - "goa-calendar": WCProps & - React.HTMLAttributes & { - ref: React.RefObject; - }; - } - } -} -export interface GoabxCalendarProps extends Margins, DataAttributes { - name?: string; - value?: string; - min?: string; - max?: string; - testId?: string; - version?: string; - onChange: (details: GoabCalendarOnChangeDetail) => void; -} - -export function GoabxCalendar({ - min, - max, - onChange, - name, - version = "2", - ...rest -}: GoabxCalendarProps): JSX.Element { - const ref = useRef(null); - - const _props = transformProps(rest, lowercase); - - useEffect(() => { - if (!ref.current) { - return; - } - const current = ref.current; - const listener = (e: Event) => { - onChange({ - name: name || "", - value: (e as CustomEvent).detail.value, - }); - }; - current.addEventListener("_change", listener); - - return () => { - current.removeEventListener("_change", listener); - }; - }, []); - - return ( - - ); -} - -export default GoabxCalendar; diff --git a/libs/react-components/src/experimental/callout/callout.spec.tsx b/libs/react-components/src/experimental/callout/callout.spec.tsx deleted file mode 100644 index 0439428ae1..0000000000 --- a/libs/react-components/src/experimental/callout/callout.spec.tsx +++ /dev/null @@ -1,79 +0,0 @@ -import React from "react"; -import { render } from "@testing-library/react"; -import GoabxCallout from "./callout"; - -describe("GoabxCallout", () => { - test("Callout shall render", async () => { - const result = render( - - Information to the user goes in the content. Information can include markup as - desired. - , - ); - - const el = result.container.querySelector("goa-callout"); - expect(el?.getAttribute("heading")).toContain("Callout Title"); - expect(el?.getAttribute("type")).toContain("information"); - expect(el?.getAttribute("size")).toContain("medium"); - expect(el?.getAttribute("emphasis")).toContain("high"); - expect(el?.getAttribute("maxwidth")).toBe("480px"); - expect(el?.getAttribute("mt")).toBe("s"); - expect(el?.getAttribute("mr")).toBe("m"); - expect(el?.getAttribute("mb")).toBe("l"); - expect(el?.getAttribute("ml")).toBe("xl"); - expect(el?.getAttribute("arialive")).toBe("polite"); - expect(el?.getAttribute("testid")).toBe("test-callout"); - expect(el?.textContent).toContain("Information to the user goes"); - }); - - test("Callout shall render with different ariaLive values", async () => { - const testCases = [ - { ariaLive: "assertive", expected: "assertive" }, - { ariaLive: "polite", expected: "polite" }, - { ariaLive: "off", expected: "off" }, - { ariaLive: undefined, expected: "off" }, - { ariaLive: "", expected: "" }, - ]; - - testCases.forEach(({ ariaLive, expected }) => { - const result = render( - - Test content - , - ); - - const el = result.container.querySelector("goa-callout"); - expect(el?.getAttribute("arialive")).toBe(expected); - }); - }); - - test("should pass data-grid attributes", () => { - const result = render( - - Test content - , - ); - const el = result.container.querySelector("goa-callout"); - expect(el?.getAttribute("data-grid")).toBe("cell"); - }); -}); diff --git a/libs/react-components/src/experimental/callout/callout.tsx b/libs/react-components/src/experimental/callout/callout.tsx deleted file mode 100644 index 4b6d528563..0000000000 --- a/libs/react-components/src/experimental/callout/callout.tsx +++ /dev/null @@ -1,67 +0,0 @@ -import { - GoabCalloutAriaLive, - GoabCalloutEmphasis, - GoabCalloutSize, - GoabCalloutType, - GoabCalloutIconTheme, - Margins, DataAttributes, -} from "@abgov/ui-components-common"; -import { transformProps, lowercase } from "../../lib/common/extract-props"; - -interface WCProps extends Margins { - heading?: string; - type?: GoabCalloutType; - size?: GoabCalloutSize; - arialive?: GoabCalloutAriaLive; - maxwidth?: string; - icontheme?: GoabCalloutIconTheme; - emphasis?: GoabCalloutEmphasis; - testid?: string; - version?: string; -} - -declare module "react" { - // eslint-disable-next-line @typescript-eslint/no-namespace - namespace JSX { - interface IntrinsicElements { - "goa-callout": WCProps & React.HTMLAttributes; - } - } -} - -export interface GoabxCalloutProps extends Margins, DataAttributes { - heading?: string; - type?: GoabCalloutType; - size?: GoabCalloutSize; - iconTheme?: GoabCalloutIconTheme; - emphasis?: GoabCalloutEmphasis; - maxWidth?: string; - testId?: string; - ariaLive?: GoabCalloutAriaLive; - version?: string; - children?: React.ReactNode; -} - -export const GoabxCallout = ({ - type = "information", - iconTheme = "outline", - size = "large", - ariaLive = "off", - emphasis = "medium", - children, - version = "2", - ...rest -}: GoabxCalloutProps) => { - const _props = transformProps( - { type, icontheme: iconTheme, size, arialive: ariaLive, emphasis, ...rest }, - lowercase - ); - - return ( - - {children} - - ); -}; - -export default GoabxCallout; diff --git a/libs/react-components/src/experimental/checkbox/checkbox.spec.tsx b/libs/react-components/src/experimental/checkbox/checkbox.spec.tsx deleted file mode 100644 index 7ea3d0507e..0000000000 --- a/libs/react-components/src/experimental/checkbox/checkbox.spec.tsx +++ /dev/null @@ -1,161 +0,0 @@ -import { render } from "@testing-library/react"; -import { fireEvent } from "@testing-library/dom"; -import GoabxCheckbox, { Props as CheckboxProps } from "./checkbox"; -import { describe, it, expect, vi } from "vitest"; -import { GoabCheckboxOnChangeDetail } from "@abgov/ui-components-common"; - -const testId = "test-id"; - -describe("GoabxCheckbox", () => { - it("should render", () => { - render(); - - const checkbox = document.querySelector("goa-checkbox"); - expect(checkbox?.getAttribute("name")).toBe("foo"); - expect(checkbox?.getAttribute("disabled")).toBeNull(); - expect(checkbox?.getAttribute("checked")).toBeNull(); - expect(checkbox?.getAttribute("error")).toBeNull(); - }); - - it("should render with props", () => { - const props: CheckboxProps = { - id: "abc", - name: "foo", - value: "bar", - text: "to display", - maxWidth: "480px", - size: "compact", - disabled: true, - checked: true, - error: true, - testId: testId, - mt: "s", - mr: "m", - mb: "l", - ml: "xl", - }; - - render(); - - const checkbox = document.querySelector("goa-checkbox"); - expect(checkbox?.getAttribute("id")).toBe("abc"); - expect(checkbox?.getAttribute("name")).toBe("foo"); - expect(checkbox?.getAttribute("value")).toBe("bar"); - expect(checkbox?.getAttribute("text")).toBe("to display"); - expect(checkbox?.getAttribute("maxwidth")).toBe("480px"); - expect(checkbox?.getAttribute("size")).toBe("compact"); - expect(checkbox?.getAttribute("disabled")).toBe("true"); - expect(checkbox?.getAttribute("checked")).toBe("true"); - expect(checkbox?.getAttribute("error")).toBe("true"); - expect(checkbox?.getAttribute("testid")).toBe(testId); - expect(checkbox?.getAttribute("mt")).toBe("s"); - expect(checkbox?.getAttribute("mr")).toBe("m"); - expect(checkbox?.getAttribute("mb")).toBe("l"); - expect(checkbox?.getAttribute("ml")).toBe("xl"); - }); - - it("should render with boolean value", () => { - render(); - - const checkbox = document.querySelector("goa-checkbox"); - expect(checkbox?.getAttribute("value")).toBe("true"); - expect(checkbox?.getAttribute("disabled")).toBeNull(); - expect(checkbox?.getAttribute("checked")).toBeNull(); - expect(checkbox?.getAttribute("error")).toBeNull(); - }); - - it("should render with text description", () => { - render( - , - ); - - const checkbox = document.querySelector("goa-checkbox"); - expect(checkbox?.getAttribute("description")).toBe("description text"); - expect(checkbox?.getAttribute("checked")).toBeNull(); - }); - - it("should render with slot description", () => { - const result = render( - description slot
} />, - ); - - const checkbox = document.querySelector("goa-checkbox"); - expect(checkbox?.getAttribute("description")).toBe(null); - expect( - result.container.querySelector('div[slot="description"]')?.innerHTML, - ).toContain("description slot"); - }); - - it("should render with slot reveal", () => { - const result = render( - reveal slot
} />, - ); - - const checkbox = document.querySelector("goa-checkbox"); - expect(checkbox?.getAttribute("reveal")).toBe(null); - expect( - result.container.querySelector('div[slot="reveal"]')?.innerHTML, - ).toContain("reveal slot"); - }); - - it("should pass the revealAriaLabel property to the web component", () => { - render( - reveal slot
} - revealAriaLabel="Screen reader announcement for checkbox reveal content" - />, - ); - - const checkbox = document.querySelector("goa-checkbox"); - expect(checkbox?.getAttribute("revealarialabel")).toBe("Screen reader announcement for checkbox reveal content"); - }); - - it("should handle the onChange event", async function () { - const onChangeStub = vi.fn(); - - function onChange({ name, value, checked }: GoabCheckboxOnChangeDetail) { - expect(name).toBe("foo"); - expect(value).toBe("bar"); - expect(checked).toBeTruthy(); - onChangeStub(); - } - - const props: CheckboxProps = { - name: "foo", - value: "bar", - text: "to display", - disabled: true, - checked: false, - error: false, - onChange: onChange, - testId: testId, - }; - - render(); - const checkbox = document.querySelector("goa-checkbox"); - expect(checkbox?.getAttribute("disabled")).toBe("true"); - expect(checkbox?.getAttribute("checked")).toBeNull(); - expect(checkbox?.getAttribute("error")).toBeNull(); - - checkbox && - fireEvent( - checkbox, - new CustomEvent("_change", { - detail: { name: "foo", value: "bar", checked: true }, - }), - ); - expect(onChangeStub).toBeCalled(); - }); - - it("should pass data-grid attributes", () => { - render( - - ); - const checkbox = document.querySelector("goa-checkbox"); - expect(checkbox?.getAttribute("data-grid")).toBe("cell"); - }); -}); diff --git a/libs/react-components/src/experimental/checkbox/checkbox.tsx b/libs/react-components/src/experimental/checkbox/checkbox.tsx deleted file mode 100644 index 975e79b828..0000000000 --- a/libs/react-components/src/experimental/checkbox/checkbox.tsx +++ /dev/null @@ -1,123 +0,0 @@ -import { - DataAttributes, - GoabCheckboxOnChangeDetail, - GoabCheckboxSize, - Margins, -} from "@abgov/ui-components-common"; -import { useEffect, useRef, type JSX } from "react"; -import { transformProps, lowercase } from "../../lib/common/extract-props"; - -declare module "react" { - // eslint-disable-next-line @typescript-eslint/no-namespace - namespace JSX { - interface IntrinsicElements { - "goa-checkbox": WCProps & React.HTMLAttributes & { - ref: React.RefObject; - }; - } - } -} - -interface WCProps extends Margins { - id?: string; - name: string; - checked?: string; - indeterminate?: string; - disabled?: string; - error?: string; - text?: string; - value?: string | number; - arialabel?: string; - description?: string | React.ReactNode; - reveal?: React.ReactNode; - revealarialabel?: string; - maxwidth?: string; - testid?: string; - size?: GoabCheckboxSize; - version?: string; -} - -/* eslint-disable-next-line */ -export interface GoabxCheckboxProps extends Margins, DataAttributes { - id?: string; - name: string; - checked?: boolean; - indeterminate?: boolean; - disabled?: boolean; - error?: boolean; - text?: string; - value?: string | number | boolean; - children?: React.ReactNode; - testId?: string; - ariaLabel?: string; - description?: string | React.ReactNode; - reveal?: React.ReactNode; - revealAriaLabel?: string; - maxWidth?: string; - size?: GoabCheckboxSize; - version?: string; - onChange?: (detail: GoabCheckboxOnChangeDetail) => void; -} - -// legacy -export type Props = GoabxCheckboxProps; - -export function GoabxCheckbox({ - error, - checked, - indeterminate, - disabled, - value, - description, - reveal, - onChange, - name, - children, - size = "default", - version = "2", - ...rest -}: GoabxCheckboxProps): JSX.Element { - const el = useRef(null); - - const _props = transformProps({ size, ...rest }, lowercase); - - useEffect(() => { - if (!el.current) { - return; - } - const current = el.current; - const listener = (e: Event) => { - const detail = (e as CustomEvent).detail; - onChange?.({ ...detail, event: e }); - }; - - current.addEventListener("_change", listener); - - return () => { - current.removeEventListener("_change", listener); - }; - }, [name, onChange]); - - return ( - - {children} - {typeof description !== "string" && description && ( -
{description}
- )} - {reveal &&
{reveal}
} -
- ); -} - -export default GoabxCheckbox; diff --git a/libs/react-components/src/experimental/date-picker/date-picker.spec.tsx b/libs/react-components/src/experimental/date-picker/date-picker.spec.tsx deleted file mode 100644 index 92e1ac629d..0000000000 --- a/libs/react-components/src/experimental/date-picker/date-picker.spec.tsx +++ /dev/null @@ -1,91 +0,0 @@ -import { render } from "@testing-library/react"; -import { addMonths } from "date-fns"; -import { describe, it, expect, vi } from "vitest"; - -import DatePicker from "./date-picker"; - -const noop = () => { - /* do nothing */ -}; - -describe("DatePicker", () => { - it("should render", () => { - const { baseElement } = render(); - - const el = baseElement.querySelector("goa-date-picker"); - expect(el).toBeTruthy(); - expect(el?.getAttribute("name")).toBe("foo"); - expect(el?.getAttribute("error")).toBeNull(); - expect(el?.getAttribute("disabled")).toBeNull(); - }); - - it("should render with properties", () => { - const value = new Date(); - const min = addMonths(value, -1); - const max = addMonths(value, 1); - - const { baseElement } = render( - , - ); - - expect(baseElement).toBeTruthy(); - - const el = baseElement.querySelector("goa-date-picker"); - expect(el).toBeTruthy(); - expect(el?.getAttribute("name")).toBe("foo"); - expect(el?.getAttribute("value")).toBe(value.toISOString()); - expect(el?.getAttribute("error")).toBe("true"); - expect(el?.getAttribute("disabled")).toBe("true"); - expect(el?.getAttribute("min")).toBe(min.toISOString()); - expect(el?.getAttribute("max")).toBe(max.toISOString()); - expect(el?.getAttribute("testid")).toBe("foo"); - expect(el?.getAttribute("type")).toBe("input"); - }); - - it("should handle event", async () => { - const name = "foo"; - const value = new Date(); - const changeEvent = new Event("change"); - - const onChange = vi.fn(); - const { baseElement } = render( - , - ); - - const el = baseElement.querySelector("goa-date-picker"); - - el?.dispatchEvent( - new CustomEvent("_change", { - composed: true, - bubbles: true, - detail: { type: "date", name, value, event: changeEvent }, - }), - ); - - expect(onChange).toHaveBeenCalledTimes(1); - expect(onChange).toBeCalledWith({ - name, - value, - type: "date", - event: expect.any(Event), - }); - }); - - it("should pass data-grid attributes", () => { - const { baseElement } = render( - , - ); - const el = baseElement.querySelector("goa-date-picker"); - expect(el?.getAttribute("data-grid")).toBe("cell"); - }); -}); diff --git a/libs/react-components/src/experimental/date-picker/date-picker.tsx b/libs/react-components/src/experimental/date-picker/date-picker.tsx deleted file mode 100644 index 881b861f69..0000000000 --- a/libs/react-components/src/experimental/date-picker/date-picker.tsx +++ /dev/null @@ -1,124 +0,0 @@ -import { useEffect, useRef, type JSX } from "react"; -import { - GoabDatePickerInputType, - GoabDatePickerOnChangeDetail, - Margins, - DataAttributes, -} from "@abgov/ui-components-common"; -import { transformProps, lowercase } from "../../lib/common/extract-props"; - -interface WCProps extends Margins { - name?: string; - value?: string; - error?: string; - min?: string; - max?: string; - type?: string; - relative?: string; - disabled?: string; - testid?: string; - width?: string; - version?: string; -} - -declare module "react" { - // eslint-disable-next-line @typescript-eslint/no-namespace - namespace JSX { - interface IntrinsicElements { - "goa-date-picker": WCProps & - React.HTMLAttributes & { - ref: React.RefObject; - }; - } - } -} - -export interface GoabxDatePickerProps extends Margins, DataAttributes { - name?: string; - value?: Date | string | undefined; - error?: boolean; - min?: Date | string; - max?: Date | string; - type?: GoabDatePickerInputType; - testId?: string; - /*** - * @deprecated This property has no effect and will be removed in a future version - */ - relative?: boolean; - disabled?: boolean; - width?: string; - version?: string; - onChange?: (detail: GoabDatePickerOnChangeDetail) => void; -} - -export function GoabxDatePicker({ - value, - error, - min, - max, - disabled, - relative, - version = "2", - onChange, - ...rest -}: GoabxDatePickerProps): JSX.Element { - const ref = useRef(null); - - const _props = transformProps(rest, lowercase); - - useEffect(() => { - if (value && typeof value !== "string") { - console.warn( - "Using a `Date` type for value is deprecated. Instead use a string of the format `yyyy-mm-dd`", - ); - } - }, []); - - useEffect(() => { - if (!ref.current) { - return; - } - const current = ref.current; - - const handleChange = (e: Event) => { - const detail = (e as CustomEvent).detail; - onChange?.({ ...detail, event: e }); - }; - - if (onChange) { - current.addEventListener("_change", handleChange); - } - - return () => { - if (onChange) { - current.removeEventListener("_change", handleChange); - } - }; - }, [onChange]); - - const formatValue = (val: Date | string | undefined) => { - if (!val) return ""; - - if (val instanceof Date) { - return val.toISOString(); - } - - return val; - }; - - return ( - - ); -} - -export default GoabxDatePicker; diff --git a/libs/react-components/src/experimental/drawer/drawer.spec.tsx b/libs/react-components/src/experimental/drawer/drawer.spec.tsx deleted file mode 100644 index 2513071705..0000000000 --- a/libs/react-components/src/experimental/drawer/drawer.spec.tsx +++ /dev/null @@ -1,92 +0,0 @@ -import { render, waitFor } from "@testing-library/react"; -import { describe, it } from "vitest"; -import GoabxDrawer from "./drawer"; - -const noop = () => { - /* nothing */ -}; - -describe("GoabxDrawer", () => { - it("should render", async () => { - const content = render( - - The content - , - ); - - const el = content.container.querySelector("goa-drawer"); - - expect(el?.getAttribute("position")).toBe("bottom"); - expect(el?.getAttribute("open")).toBeNull(); - }); - - it("should render with properties", async () => { - const content = render( - - The content - , - ); - - const el = content.container.querySelector("goa-drawer"); - expect(el).toBeTruthy(); - await waitFor(() => { - expect(el?.getAttribute("open")).not.toBeNull(); - // TODO: Look in to why this was not working locally - // expect(el?.getAttribute("open")).toBe(true); - expect(el?.getAttribute("position")).toBe("bottom"); - expect(el?.getAttribute("heading")).toBe("The heading"); - expect(el?.getAttribute("maxsize")).toBe("50ch"); - expect(el?.getAttribute("testid")).toBe("the testid"); - }); - }); - - it("renders with React node heading", async () => { - const headingNode =
Custom Heading
; - const content = render( - - The content - , - ); - - const el = content.container.querySelector("goa-drawer"); - expect(el).toBeTruthy(); - await waitFor(() => { - expect(el?.getAttribute("heading")).toBeNull(); - const headingSlot = el?.querySelector('[slot="heading"]'); - expect(headingSlot).toBeTruthy(); - expect(headingSlot?.textContent).toBe("Custom Heading"); - }); - }); - - it("renders with actions", async () => { - const actionsNode = ; - const content = render( - - The content - , - ); - - const el = content.container.querySelector("goa-drawer"); - expect(el).toBeTruthy(); - await waitFor(() => { - const actionsSlot = el?.querySelector('[slot="actions"]'); - expect(actionsSlot).toBeTruthy(); - const actionButton = actionsSlot?.querySelector("button"); - expect(actionButton).toBeTruthy(); - expect(actionButton?.textContent).toBe("Action Button"); - }); - }); -}); diff --git a/libs/react-components/src/experimental/drawer/drawer.tsx b/libs/react-components/src/experimental/drawer/drawer.tsx deleted file mode 100644 index 57d51656b9..0000000000 --- a/libs/react-components/src/experimental/drawer/drawer.tsx +++ /dev/null @@ -1,75 +0,0 @@ -import { ReactNode, useEffect, useRef, type JSX } from "react"; -import { GoabDrawerPosition, GoabDrawerSize } from "@abgov/ui-components-common"; - -interface WCProps { - position: GoabDrawerPosition; - open?: boolean; - heading?: string; - maxsize?: GoabDrawerSize; - testid?: string; - ref: React.RefObject; - version?: string; -} - -declare module "react" { - // eslint-disable-next-line @typescript-eslint/no-namespace - namespace JSX { - interface IntrinsicElements { - "goa-drawer": WCProps & React.HTMLAttributes; - } - } -} - -export interface GoabxDrawerProps { - position: GoabDrawerPosition; - open?: boolean; - heading?: string | ReactNode; - maxSize?: GoabDrawerSize; - testId?: string; - actions?: ReactNode; - children: ReactNode; - onClose: () => void; - version?: string; -} - -export function GoabxDrawer({ - position, - open, - heading, - maxSize, - testId, - actions, - children, - onClose, - version = "2", -}: GoabxDrawerProps): JSX.Element { - const el = useRef(null); - - useEffect(() => { - if (!el?.current || !onClose) { - return; - } - el.current?.addEventListener("_close", onClose); - return () => { - el.current?.removeEventListener("_close", onClose); - }; - }, [el, onClose]); - - return ( - - {heading && typeof heading !== "string" &&
{heading}
} - {actions &&
{actions}
} - {children} -
- ); -} - -export default GoabxDrawer; diff --git a/libs/react-components/src/experimental/dropdown/dropdown-item.tsx b/libs/react-components/src/experimental/dropdown/dropdown-item.tsx deleted file mode 100644 index b1379a5165..0000000000 --- a/libs/react-components/src/experimental/dropdown/dropdown-item.tsx +++ /dev/null @@ -1,58 +0,0 @@ -import { useEffect } from "react"; -import { GoabDropdownItemMountType } from "@abgov/ui-components-common"; - -interface WCProps { - value: string; - label?: string; - filter?: string; - mount?: GoabDropdownItemMountType; - - // @deprecated - name?: string; -} - -declare module "react" { - // eslint-disable-next-line @typescript-eslint/no-namespace - namespace JSX { - interface IntrinsicElements { - "goa-dropdown-item": WCProps & React.HTMLAttributes; - } - } -} - -export interface GoabxDropdownItemProps { - value: string; - label?: string; - filter?: string; - testId?: string; - mountType?: GoabDropdownItemMountType; - - // @deprecated - name?: string; -} - -export function GoabxDropdownOption(props: GoabxDropdownItemProps) { - useEffect(() => { - console.warn("GoabxDropdownOption is deprecated. Please use GoabxDropdownItem"); - }, []); - - return ; -} - -export function GoabxDropdownItem({ - value, - label, - filter, - name, - mountType = "append", -}: GoabxDropdownItemProps) { - return ( - - ); -} diff --git a/libs/react-components/src/experimental/dropdown/dropdown.spec.tsx b/libs/react-components/src/experimental/dropdown/dropdown.spec.tsx deleted file mode 100644 index 1d2b2585ff..0000000000 --- a/libs/react-components/src/experimental/dropdown/dropdown.spec.tsx +++ /dev/null @@ -1,132 +0,0 @@ -import { render, cleanup, fireEvent, waitFor } from "@testing-library/react"; -import { GoabxDropdown } from "./dropdown"; -import { GoabxDropdownItem, GoabxDropdownOption } from "./dropdown-item"; -import { describe, it, expect, vi } from "vitest"; - -const noop = () => { - /* do nothing */ -}; - -afterEach(cleanup); - -describe("GoabxDropdown", () => { - it("should inform the user that GoabxDropdownOption is deprecated", async () => { - const mock = vi.spyOn(console, "warn").mockImplementation(() => { - /* do nothing */ - }); - render( - - - , - ); - - await waitFor(() => { - // @ts-expect-error: console mock - expect(console.warn["mock"].calls.length).toBe(1); - }); - mock.mockRestore(); - }); - - it("should render", async () => { - const { baseElement } = render(); - - const el = baseElement.querySelector("goa-dropdown"); - expect(el?.getAttribute("disabled")).toBeNull(); - expect(el?.getAttribute("error")).toBeNull(); - expect(el?.getAttribute("filterable")).toBeNull(); - expect(el?.getAttribute("multiselect")).toBeNull(); - expect(el?.getAttribute("native")).toBeNull(); - }); - - it("should bind all web-component attributes", async () => { - const { baseElement } = render( - - - - - , - ); - - const el = baseElement.querySelector("goa-dropdown"); - expect(el?.getAttribute("leadingicon")).toBe("color-wand"); - expect(el?.getAttribute("mt")).toBe("s"); - expect(el?.getAttribute("mr")).toBe("m"); - expect(el?.getAttribute("mb")).toBe("l"); - expect(el?.getAttribute("ml")).toBe("xl"); - expect(el?.getAttribute("id")).toBe("foo-dropdown"); - expect(el?.getAttribute("disabled")).toBe("true"); - expect(el?.getAttribute("error")).toBe("true"); - expect(el?.getAttribute("filterable")).toBe("true"); - expect(el?.getAttribute("multiselect")).toBe("true"); - expect(el?.getAttribute("native")).toBe("true"); - expect(el?.getAttribute("arialabel")).toBe("label"); - expect(el?.getAttribute("arialabelledby")).toBe("foo-dropdown-label"); - expect(el?.getAttribute("autocomplete")).toBe("off"); - expect(el?.getAttribute("maxwidth")).toBe("400px"); - expect(el?.getAttribute("size")).toBe("compact"); - }); - - it("should allow for a single selection", async () => { - const fn = vi.fn(); - - const { baseElement } = render( - - - - - , - ); - - const el = baseElement.querySelector("goa-dropdown"); - expect(el).toBeTruthy(); - - el && - fireEvent( - el, - new CustomEvent("_change", { detail: { name: "favColor", value: "blue" } }), - ); - await waitFor(() => { - expect(fn).toBeCalledWith( - expect.objectContaining({ - name: "favColor", - value: "blue", - event: expect.any(Event), - }), - ); - }); - }); - - it("should pass data-grid attributes", () => { - const { baseElement } = render( - - - , - ); - const el = baseElement.querySelector("goa-dropdown"); - expect(el?.getAttribute("data-grid")).toBe("cell"); - }); -}); diff --git a/libs/react-components/src/experimental/dropdown/dropdown.tsx b/libs/react-components/src/experimental/dropdown/dropdown.tsx deleted file mode 100644 index c1e245d357..0000000000 --- a/libs/react-components/src/experimental/dropdown/dropdown.tsx +++ /dev/null @@ -1,140 +0,0 @@ -import { - GoabDropdownOnChangeDetail, - GoabDropdownSize, - GoabIconType, - Margins, DataAttributes, -} from "@abgov/ui-components-common"; -import { useEffect, useRef, type JSX } from "react"; -import { transformProps, lowercase } from "../../lib/common/extract-props"; - -interface WCProps extends Margins { - arialabel?: string; - arialabelledby?: string; - disabled?: string; - error?: string; - filterable?: string; - leadingicon?: string; - maxheight?: string; - multiselect?: string; - name?: string; - native?: string; - placeholder?: string; - value?: string; - width?: string; - maxwidth?: string; - relative?: string; - id?: string; - autocomplete?: string; - testid?: string; - size?: GoabDropdownSize; - version?: string; -} - -declare module "react" { - // eslint-disable-next-line @typescript-eslint/no-namespace - namespace JSX { - // eslint-disable-next-line @typescript-eslint/no-empty-interface - interface IntrinsicElements { - "goa-dropdown": WCProps & React.HTMLAttributes & { - ref: React.RefObject; - }; - } - } -} - -export interface GoabxDropdownProps extends Margins, DataAttributes { - name?: string; - value?: string[] | string; - onChange?: (detail: GoabDropdownOnChangeDetail) => void; - - // optional - ariaLabel?: string; - ariaLabelledBy?: string; - id?: string; - children?: React.ReactNode; - disabled?: boolean; - error?: boolean; - filterable?: boolean; - leadingIcon?: GoabIconType; - maxHeight?: string; - multiselect?: boolean; - native?: boolean; - placeholder?: string; - testId?: string; - width?: string; - maxWidth?: string; - autoComplete?: string; - size?: GoabDropdownSize; - version?: string; - /*** - * @deprecated This property has no effect and will be removed in a future version - */ - relative?: boolean; -} - -function stringify(value: string | string[] | undefined): string { - if (typeof value === "undefined") { - return ""; - } - if (typeof value === "string") { - return value; - } - return JSON.stringify(value); -} - -export function GoabxDropdown({ - value, - onChange, - disabled, - error, - filterable, - multiselect, - native, - relative, - children, - size = "default", - version = "2", - ...rest -}: GoabxDropdownProps): JSX.Element { - const el = useRef(null); - - const _props = transformProps({ size, ...rest }, lowercase); - - useEffect(() => { - if (!el.current) { - return; - } - const current = el.current; - const handler = (e: Event) => { - const detail = (e as CustomEvent).detail; - onChange?.({ ...detail, event: e }); - }; - if (onChange) { - current.addEventListener("_change", handler); - } - return () => { - if (onChange) { - current.removeEventListener("_change", handler); - } - }; - }, [el, onChange]); - - return ( - - {children} - - ); -} - -export default GoabxDropdown; diff --git a/libs/react-components/src/experimental/file-upload-card/file-upload-card.spec.tsx b/libs/react-components/src/experimental/file-upload-card/file-upload-card.spec.tsx deleted file mode 100644 index 8bfd172a94..0000000000 --- a/libs/react-components/src/experimental/file-upload-card/file-upload-card.spec.tsx +++ /dev/null @@ -1,120 +0,0 @@ -import { fireEvent, render } from "@testing-library/react"; -import { describe, it, expect, vi } from "vitest"; - -import GoabxFileUploadCard from "./file-upload-card"; - -describe("GoabxFileUploadCard", () => { - it("should render with base params", () => { - const { container } = render( - - ); - - const el = container.querySelector("goa-file-upload-card"); - expect(el?.getAttribute("filename")).toBe("foo.png"); - expect(el?.getAttribute("size")).toBe("1000"); - }); - - it("should render with additional params", () => { - const { container } = render( - - ); - - const el = container.querySelector("goa-file-upload-card"); - expect(el?.getAttribute("filename")).toBe("foo.png"); - expect(el?.getAttribute("size")).toBe("1000"); - expect(el?.getAttribute("type")).toBe("image/png"); - expect(el?.getAttribute("progress")).toBe("23"); - expect(el?.getAttribute("error")).toBe("true"); - expect(el?.getAttribute("testid")).toBe("foo"); - }); - - it("dispatches and event when cancel is clicked while uploading", () => { - const onCancel = vi.fn(); - const { container } = render( - - ); - - const el = container.querySelector("goa-file-upload-card"); - el && fireEvent(el, new CustomEvent("_cancel")); - - expect(onCancel).toHaveBeenCalledTimes(1); - }); - - it("dispatches and event when delete is clicked and upload is complete", () => { - const onDelete = vi.fn(); - const { container } = render( - - ); - - const el = container.querySelector("goa-file-upload-card"); - el && fireEvent(el, new CustomEvent("_delete")); - - expect(onDelete).toHaveBeenCalledTimes(1); - }); - - it("dispatches and event when an error occurs", () => { - const onDelete = vi.fn(); - const { container } = render( - - ); - - const el = container.querySelector("goa-file-upload-card"); - el && fireEvent(el, new CustomEvent("_delete")); - - expect(onDelete).toHaveBeenCalledTimes(1); - }); - - it("GoabxFileUploadCard should render without testId (testId is optional)", () => { - const { container } = render( - , - ); - - const el = container.querySelector("goa-file-upload-card"); - expect(el?.getAttribute("filename")).toBe("bar.pdf"); - expect(el?.getAttribute("size")).toBe("1000"); - expect(el?.getAttribute("type")).toBe("application/pdf"); - expect(el?.getAttribute("progress")).toBe("50"); - // testid should be undefined when not provided - expect(el?.getAttribute("testid")).toBeNull(); - }); - - it("should pass data-grid attributes", () => { - const { container } = render( - - ); - const el = container.querySelector("goa-file-upload-card"); - expect(el?.getAttribute("data-grid")).toBe("cell"); - }); - -}); diff --git a/libs/react-components/src/experimental/file-upload-card/file-upload-card.tsx b/libs/react-components/src/experimental/file-upload-card/file-upload-card.tsx deleted file mode 100644 index ff9e2138f7..0000000000 --- a/libs/react-components/src/experimental/file-upload-card/file-upload-card.tsx +++ /dev/null @@ -1,72 +0,0 @@ -import { - DataAttributes, - GoabFileUploadOnCancelDetail, - GoabFileUploadOnDeleteDetail, -} from "@abgov/ui-components-common"; -import { useEffect, useRef } from "react"; -import { transformProps, lowercase } from "../../lib/common/extract-props"; - -interface WCProps { - filename: string; - size: number; - type?: string; - progress?: number; - error?: string; - testid?: string; - version?: string; -} - -declare module "react" { - // eslint-disable-next-line @typescript-eslint/no-namespace - namespace JSX { - interface IntrinsicElements { - "goa-file-upload-card": WCProps & - React.HTMLAttributes & { - ref: React.RefObject; - }; - } - } -} - -/* eslint-disable-next-line */ -export interface GoabxFileUploadCardProps extends DataAttributes { - filename: string; - size: number; - type?: string; - progress?: number; - testId?: string; - error?: string; - onDelete?: (detail: GoabFileUploadOnDeleteDetail) => void; - onCancel?: (detail: GoabFileUploadOnCancelDetail) => void; - version?: string; -} - -export function GoabxFileUploadCard({ - onDelete, - onCancel, - filename, - version = "2", - ...rest -}: GoabxFileUploadCardProps) { - const el = useRef(null); - - const _props = transformProps({ filename, ...rest }, lowercase); - - useEffect(() => { - if (!el.current) return; - - const current = el.current; - const deleteHandler = (event: Event) => onDelete?.({ filename, event }); - const cancelHandler = (event: Event) => onCancel?.({ filename, event }); - current.addEventListener("_delete", deleteHandler); - current.addEventListener("_cancel", cancelHandler); - return () => { - current.removeEventListener("_delete", deleteHandler); - current.removeEventListener("_cancel", cancelHandler); - }; - }, [el, onDelete, onCancel, filename]); - - return ; -} - -export default GoabxFileUploadCard; diff --git a/libs/react-components/src/experimental/file-upload-input/file-upload-input.spec.tsx b/libs/react-components/src/experimental/file-upload-input/file-upload-input.spec.tsx deleted file mode 100644 index 6204d2fb80..0000000000 --- a/libs/react-components/src/experimental/file-upload-input/file-upload-input.spec.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import { fireEvent, render } from "@testing-library/react"; -import { describe, it, expect, vi } from "vitest"; - -import GoabxFileUploadInput from "./file-upload-input"; - -const noop = () => { /* do nothing */ }; - -describe("GoabxFileUploadInput", () => { - it("should render successfully", () => { - const { baseElement } = render( - - ); - const el = baseElement.querySelector("goa-file-upload-input"); - - expect(el?.getAttribute("maxfilesize")).toBe("10MB"); - expect(el?.getAttribute("accept")).toBe("image/*"); - expect(el?.getAttribute("variant")).toBe("dragdrop"); - expect(el?.getAttribute("testid")).toBe("foo"); - }); - - it("handles the onSelectFile event", () => { - const onSelect = vi.fn(); - const { baseElement } = render(); - const el = baseElement.querySelector("goa-file-upload-input"); - el && fireEvent(el, new CustomEvent("_selectFile", { detail: {} })); - - expect(onSelect).toBeCalled(); - }); - - it("should pass data-grid attributes", () => { - const { baseElement } = render( - - ); - const el = baseElement.querySelector("goa-file-upload-input"); - expect(el?.getAttribute("data-grid")).toBe("cell"); - }); -}); diff --git a/libs/react-components/src/experimental/file-upload-input/file-upload-input.tsx b/libs/react-components/src/experimental/file-upload-input/file-upload-input.tsx deleted file mode 100644 index a53d37952f..0000000000 --- a/libs/react-components/src/experimental/file-upload-input/file-upload-input.tsx +++ /dev/null @@ -1,66 +0,0 @@ -import { - DataAttributes, - GoabFileUploadInputOnSelectFileDetail, - GoabFileUploadInputVariant, -} from "@abgov/ui-components-common"; -import { useEffect, useRef } from "react"; -import { transformProps, lowercase } from "../../lib/common/extract-props"; - -interface WCProps { - variant?: GoabFileUploadInputVariant; - accept?: string; - maxfilesize?: string; - testid?: string; - version?: string; -} - -declare module "react" { - // eslint-disable-next-line @typescript-eslint/no-namespace - namespace JSX { - interface IntrinsicElements { - "goa-file-upload-input": WCProps & React.HTMLAttributes & { - ref: React.RefObject; - }; - } - } -} - -/* eslint-disable-next-line */ -export interface GoabxFileUploadInputProps extends DataAttributes { - variant?: GoabFileUploadInputVariant; - accept?: string; - maxFileSize?: string; - testId?: string; - onSelectFile: (detail: GoabFileUploadInputOnSelectFileDetail) => void; - version?: string; -} - -export function GoabxFileUploadInput({ - onSelectFile, - version = "2", - ...rest -}: GoabxFileUploadInputProps) { - const el = useRef(null); - - const _props = transformProps(rest, lowercase); - - useEffect(() => { - if (!el.current) return; - - const current = el.current; - const handler = (e: Event) => { - const detail = (e as CustomEvent).detail; - onSelectFile({ ...detail, event: e }); - }; - current.addEventListener("_selectFile", handler); - return () => { - current.removeEventListener("_selectFile", handler); - }; - }, [el, onSelectFile]); - - return ( - - ); -} - -export default GoabxFileUploadInput; diff --git a/libs/react-components/src/experimental/filter-chip/filter-chip.spec.tsx b/libs/react-components/src/experimental/filter-chip/filter-chip.spec.tsx deleted file mode 100644 index 65674d2c4f..0000000000 --- a/libs/react-components/src/experimental/filter-chip/filter-chip.spec.tsx +++ /dev/null @@ -1,85 +0,0 @@ -import { fireEvent, render, waitFor } from "@testing-library/react"; -import { GoabxFilterChip } from "./filter-chip"; -import { describe, it, expect, vi } from "vitest"; - -describe("GoabxFilterChip", () => { - it("should render", () => { - const { container } = render(); - - const el = container.querySelector("goa-filter-chip"); - expect(el?.getAttribute("content")).toBe("some filter chip"); - expect(el?.getAttribute("error")).toBeNull(); - }); - - it("should bind all properties correctly", async () => { - const { container } = render( - , - ); - - const el = container.querySelector("goa-filter-chip"); - - expect(el?.getAttribute("content")).toBe("some filter chip"); - expect(el?.getAttribute("mt")).toBe("s"); - expect(el?.getAttribute("mr")).toBe("m"); - expect(el?.getAttribute("mb")).toBe("l"); - expect(el?.getAttribute("ml")).toBe("xl"); - expect(el?.getAttribute("error")).toBe("true"); - expect(el?.getAttribute("icontheme")).toBe("filled"); - expect(el?.getAttribute("secondarytext")).toBe("secondary text"); - expect(el?.getAttribute("leadingicon")).toBe("accessibility"); - expect(el?.getAttribute("testid")).toBe("test-chip"); - }); - - it("should show the chip in the error state", () => { - const { container } = render(); - const el = container.querySelector("goa-filter-chip"); - expect(el?.getAttribute("error")).toBe("true"); - }); - - it("should handle the click event", async () => { - const onClick = vi.fn(); - const { container } = render( - , - ); - const el = container.querySelector("goa-filter-chip"); - - el && fireEvent(el, new CustomEvent("_click")); - expect(onClick).toHaveBeenCalled(); - }); - - it("should have an unfilled close icon by default", () => { - const { container } = render(); - const el = container.querySelector("goa-filter-chip"); - expect(el?.getAttribute("icontheme")).toBe("outline"); - }); - - // This test was passing due to a false positive - it.skip("should not apply background fill on hover", async () => { - const { container } = render(); - const chip = container.querySelector("goa-filter-chip"); - fireEvent.mouseOver(chip!); - expect(chip).not.toHaveStyle("background-color: var(--goa-color-greyscale-200)"); - }); - - it("should pass data-grid attributes", () => { - const { container } = render( - - ); - const el = container.querySelector("goa-filter-chip"); - expect(el?.getAttribute("data-grid")).toBe("cell"); - }); -}); diff --git a/libs/react-components/src/experimental/filter-chip/filter-chip.tsx b/libs/react-components/src/experimental/filter-chip/filter-chip.tsx deleted file mode 100644 index b179b4069e..0000000000 --- a/libs/react-components/src/experimental/filter-chip/filter-chip.tsx +++ /dev/null @@ -1,78 +0,0 @@ -import { useEffect, useRef } from "react"; -import { - DataAttributes, - GoabFilterChipTheme, - GoabIconType, - Margins, -} from "@abgov/ui-components-common"; -import { transformProps, lowercase } from "../../lib/common/extract-props"; - -interface WCProps extends Margins { - icontheme: GoabFilterChipTheme; - error?: string; - content: string; - secondarytext?: string; - leadingicon?: GoabIconType; - testid?: string; - version?: string; -} - -declare module "react" { - // eslint-disable-next-line @typescript-eslint/no-namespace - namespace JSX { - interface IntrinsicElements { - "goa-filter-chip": WCProps & React.HTMLAttributes & { - ref: React.RefObject; - }; - } - } -} - -export interface GoabxFilterChipProps extends Margins, DataAttributes { - onClick?: () => void; - iconTheme?: GoabFilterChipTheme; - error?: boolean; - content: string; - secondaryText?: string; - leadingIcon?: GoabIconType; - testId?: string; - version?: string; -} - -export const GoabxFilterChip = ({ - iconTheme = "outline", - error, - onClick, - version = "2", - ...rest -}: GoabxFilterChipProps) => { - const el = useRef(null); - - const _props = transformProps( - { icontheme: iconTheme, ...rest }, - lowercase - ); - - useEffect(() => { - if (!el.current) return; - if (!onClick) return; - - const current = el.current; - - current.addEventListener("_click", onClick); - return () => { - current.removeEventListener("_click", onClick!); - }; - }, [el, onClick]); - - return ( - - ); -}; - -export default GoabxFilterChip; diff --git a/libs/react-components/src/experimental/footer-meta-section/footer-meta-section.spec.tsx b/libs/react-components/src/experimental/footer-meta-section/footer-meta-section.spec.tsx deleted file mode 100644 index 854d1b1e32..0000000000 --- a/libs/react-components/src/experimental/footer-meta-section/footer-meta-section.spec.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import { render } from "@testing-library/react"; - -import FooterMetaSection from "./footer-meta-section"; - -describe("FooterMetaSection", () => { - it("should render successfully", () => { - const { baseElement } = render(); - const el = baseElement.querySelector("goa-app-footer-meta-section"); - expect(baseElement).toBeTruthy(); - expect(el?.getAttribute("testid")).toBe("foo"); - }); - - it("should pass data-grid attributes", () => { - const { baseElement } = render( - - Meta content - - ); - const el = baseElement.querySelector("goa-app-footer-meta-section"); - expect(el?.getAttribute("data-grid")).toBe("cell"); - }); -}); diff --git a/libs/react-components/src/experimental/footer-meta-section/footer-meta-section.tsx b/libs/react-components/src/experimental/footer-meta-section/footer-meta-section.tsx deleted file mode 100644 index c7354186e2..0000000000 --- a/libs/react-components/src/experimental/footer-meta-section/footer-meta-section.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import { ReactNode } from "react"; -import { DataAttributes } from "@abgov/ui-components-common"; -import { transformProps, lowercase } from "../../lib/common/extract-props"; - -interface WCProps { - testid?: string; -} - -declare module "react" { - // eslint-disable-next-line @typescript-eslint/no-namespace - namespace JSX { - interface IntrinsicElements { - "goa-app-footer-meta-section": WCProps & React.HTMLAttributes; - } - } -} - -/* eslint-disable-next-line */ -export interface GoabxAppFooterMetaSectionProps extends DataAttributes { - testId?: string; - children?: ReactNode; -} - -export function GoabxAppFooterMetaSection({ - children, - ...rest -}: GoabxAppFooterMetaSectionProps) { - const _props = transformProps(rest, lowercase); - - return ( - - {children} - - ); -} - -export default GoabxAppFooterMetaSection; diff --git a/libs/react-components/src/experimental/footer-nav-section/footer-nav-section.spec.tsx b/libs/react-components/src/experimental/footer-nav-section/footer-nav-section.spec.tsx deleted file mode 100644 index c2e7b16319..0000000000 --- a/libs/react-components/src/experimental/footer-nav-section/footer-nav-section.spec.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import { render } from "@testing-library/react"; - -import FooterNavSection from "./footer-nav-section"; - -describe("FooterNavSection", () => { - it("should render successfully", () => { - const { baseElement } = render(); - expect(baseElement).toBeTruthy(); - }); - - it("should pass data-grid attributes", () => { - const { baseElement } = render( - - Nav content - - ); - const el = baseElement.querySelector("goa-app-footer-nav-section"); - expect(el?.getAttribute("data-grid")).toBe("cell"); - }); -}); diff --git a/libs/react-components/src/experimental/footer-nav-section/footer-nav-section.tsx b/libs/react-components/src/experimental/footer-nav-section/footer-nav-section.tsx deleted file mode 100644 index 6c6f84c49e..0000000000 --- a/libs/react-components/src/experimental/footer-nav-section/footer-nav-section.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import { ReactNode } from "react"; -import { DataAttributes } from "@abgov/ui-components-common"; -import { transformProps, lowercase } from "../../lib/common/extract-props"; - -interface WCProps { - maxcolumncount?: number; - heading?: string; - testid?: string; -} - -declare module "react" { - // eslint-disable-next-line @typescript-eslint/no-namespace - namespace JSX { - interface IntrinsicElements { - "goa-app-footer-nav-section": WCProps & React.HTMLAttributes; - } - } -} - -/* eslint-disable-next-line */ -export interface GoabxFooterNavSectionProps extends DataAttributes { - maxColumnCount?: number; - heading?: string; - testId?: string; - children?: ReactNode; -} - -export function GoabxAppFooterNavSection({ - children, - ...rest -}: GoabxFooterNavSectionProps) { - const _props = transformProps(rest, lowercase); - - return ( - - {children} - - ); -} - -export default GoabxAppFooterNavSection; diff --git a/libs/react-components/src/experimental/footer/footer.spec.tsx b/libs/react-components/src/experimental/footer/footer.spec.tsx deleted file mode 100644 index f5957f4774..0000000000 --- a/libs/react-components/src/experimental/footer/footer.spec.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import { render } from "@testing-library/react"; - -import Footer from "./footer"; - -describe("Footer", () => { - it("should render successfully", () => { - const { baseElement } = render(
); - expect(baseElement).toBeTruthy(); - }); - - it("should pass data-grid attributes", () => { - const { baseElement } = render( -
- Footer content -
- ); - const el = baseElement.querySelector("goa-app-footer"); - expect(el?.getAttribute("data-grid")).toBe("cell"); - }); -}); diff --git a/libs/react-components/src/experimental/footer/footer.tsx b/libs/react-components/src/experimental/footer/footer.tsx deleted file mode 100644 index c2b5d39c6b..0000000000 --- a/libs/react-components/src/experimental/footer/footer.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import { ReactNode, type JSX } from "react"; -import { DataAttributes } from "@abgov/ui-components-common"; -import { transformProps, lowercase } from "../../lib/common/extract-props"; - -interface WCProps { - maxcontentwidth?: string; - testid?: string; - url?: string; - version?: string; -} - -declare module "react" { - // eslint-disable-next-line @typescript-eslint/no-namespace - namespace JSX { - interface IntrinsicElements { - "goa-app-footer": WCProps & React.HTMLAttributes; - } - } -} - -/* eslint-disable-next-line */ -export interface GoabxAppFooterProps extends DataAttributes { - maxContentWidth?: string; - children?: ReactNode; - testId?: string; - url?: string; - version?: string; -} - -export function GoabxAppFooter({ children, ...rest }: GoabxAppFooterProps): JSX.Element { - const _props = transformProps(rest, lowercase); - - return ( - - {children} - - ); -} - -export default GoabxAppFooter; diff --git a/libs/react-components/src/experimental/form-hook.ts b/libs/react-components/src/experimental/form-hook.ts deleted file mode 100644 index 915e258f31..0000000000 --- a/libs/react-components/src/experimental/form-hook.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { useState } from "react"; - -// export type FormState = { -// form: Record; -// errors: Record; -// history: string[]; -// lastModified?: Date; -// }; - -// useSimpleForm types -type ContinueTo = (next: string) => void; -type OnMount = (next: ContinueTo) => void; -type SimpleForm = { - onMount: OnMount; - continueTo: ContinueTo; -}; - -export function useSimpleForm(): SimpleForm { - const [continueTo, setContinueTo] = useState<{ fn: ContinueTo }>({ - fn: (_: string) => { - // empty - }, - }); - - function onMount(next: ContinueTo) { - const _next = (id: string) => { - next(id); - }; - setContinueTo({ fn: _next }); - } - - return { onMount, continueTo: continueTo.fn }; -} diff --git a/libs/react-components/src/experimental/form-item/form-item.spec.tsx b/libs/react-components/src/experimental/form-item/form-item.spec.tsx deleted file mode 100644 index 77ff316b81..0000000000 --- a/libs/react-components/src/experimental/form-item/form-item.spec.tsx +++ /dev/null @@ -1,73 +0,0 @@ -import { render, cleanup } from "@testing-library/react"; -import { GoabxFormItem } from "./form-item"; - -afterEach(cleanup); - -describe("GoabxFormItem", () => { - it("renders all with properties", () => { - const { baseElement } = render( - - ); - const el = baseElement.querySelector("goa-form-item"); - expect(el?.getAttribute("label")).toEqual("First Name"); - expect(el?.getAttribute("labelsize")).toEqual("large"); - expect(el?.getAttribute("requirement")).toEqual("optional"); - expect(el?.getAttribute("type")).toEqual("text-input"); - expect(el?.getAttribute("error")).toEqual("This is an error"); - expect(el?.getAttribute("helptext")).toEqual("This is some help text"); - expect(el?.getAttribute("maxwidth")).toEqual("480px"); - expect(el?.getAttribute("id")).toEqual("firstName"); - expect(el?.getAttribute("name")).toEqual("first_name"); - expect(el?.getAttribute("public-form-summary-order")).toEqual("1"); - }); - - it("renders without optional properties", () => { - const { baseElement } = render( - - ); - const el = baseElement.querySelector("goa-form-item"); - expect(el?.getAttribute("label")).toEqual("First Name"); - expect(el?.getAttribute("name")).toBeNull(); - expect(el?.getAttribute("public-form-summary-order")).toBeNull(); - }); - - it("renders with only public form properties", () => { - const { baseElement } = render( - - ); - const el = baseElement.querySelector("goa-form-item"); - expect(el?.getAttribute("label")).toEqual("First Name"); - expect(el?.getAttribute("name")).toEqual("first_name"); - expect(el?.getAttribute("public-form-summary-order")).toEqual("2"); - }); - - it("should pass data-grid attributes", () => { - const { baseElement } = render( - - Form content - - ); - const el = baseElement.querySelector("goa-form-item"); - expect(el?.getAttribute("data-grid")).toBe("cell"); - }); -}); diff --git a/libs/react-components/src/experimental/form-item/form-item.tsx b/libs/react-components/src/experimental/form-item/form-item.tsx deleted file mode 100644 index a2961cc1ea..0000000000 --- a/libs/react-components/src/experimental/form-item/form-item.tsx +++ /dev/null @@ -1,83 +0,0 @@ -import { - GoabFormItemLabelSize, - GoabFormItemRequirement, - GoabFormItemType, - Margins, DataAttributes, -} from "@abgov/ui-components-common"; - -import type { JSX } from "react"; -import { transformProps, lowercase } from "../../lib/common/extract-props"; - -interface WCProps extends Margins { - label?: string; - labelsize?: GoabFormItemLabelSize; - requirement?: GoabFormItemRequirement; - error?: string; - helptext?: string; - maxwidth?: string; - "public-form-summary-order"?: number; - name?: string; - id?: string; - testid?: string; - type?: GoabFormItemType; - version?: string; -} - -declare module "react" { - // eslint-disable-next-line @typescript-eslint/no-namespace - namespace JSX { - interface IntrinsicElements { - "goa-form-item": WCProps & React.HTMLAttributes; - } - } -} - -export interface GoabxFormItemProps extends Margins, DataAttributes { - label?: string; - labelSize?: GoabFormItemLabelSize; - requirement?: GoabFormItemRequirement; - error?: string | React.ReactNode; - helpText?: string | React.ReactNode; - maxWidth?: string; - type?: GoabFormItemType; - version?: string; - /** - * Public form: to arrange fields in the summary - */ - publicFormSummaryOrder?: number; - /** - * Public form: allow to override the label value within the form-summary to provide a shorter description of the value - */ - name?: string; - children?: React.ReactNode; - testId?: string; - id?: string; -} - -export function GoabxFormItem({ - error, - helpText, - publicFormSummaryOrder, - children, - type = "", - version = "2", - ...rest -}: GoabxFormItemProps): JSX.Element { - const _props = transformProps({ type, ...rest }, lowercase); - - return ( - - {error && typeof error !== "string" &&
{error}
} - {helpText && typeof helpText !== "string" &&
{helpText}
} - {children} -
- ); -} - -export default GoabxFormItem; diff --git a/libs/react-components/src/experimental/index.ts b/libs/react-components/src/experimental/index.ts deleted file mode 100644 index faa16b2ba9..0000000000 --- a/libs/react-components/src/experimental/index.ts +++ /dev/null @@ -1,33 +0,0 @@ -export * from "./badge/badge"; -export * from "./button/button"; -export * from "./calendar/calendar"; -export * from "./callout/callout"; -export * from "./checkbox/checkbox"; -export * from "./date-picker/date-picker"; -export * from "./drawer/drawer"; -export * from "./dropdown/dropdown"; -export * from "./dropdown/dropdown-item"; -export * from "./file-upload-card/file-upload-card"; -export * from "./file-upload-input/file-upload-input"; -export * from "./filter-chip/filter-chip"; -export * from "./form-item/form-item"; -export * from "./footer/footer"; -export * from "./footer-meta-section/footer-meta-section"; -export * from "./footer-nav-section/footer-nav-section"; -export * from "./input/input"; -export * from "./link/link"; -export * from "./modal/modal"; -export * from "./notification/notification"; -export * from "./pagination/pagination"; -export * from "./radio-group/radio-group"; -export * from "./side-menu/side-menu"; -export * from "./side-menu-group/side-menu-group"; -export * from "./side-menu-heading/side-menu-heading"; -export * from "./table/table"; -export * from "./table/table-sort-header"; -export * from "./tabs/tabs"; -export * from "./textarea/textarea"; -export * from "./work-side-menu/work-side-menu"; -export * from "./work-side-menu-item/work-side-menu-item"; -export * from "./work-side-menu-group/work-side-menu-group"; - diff --git a/libs/react-components/src/experimental/input/input.spec.tsx b/libs/react-components/src/experimental/input/input.spec.tsx deleted file mode 100644 index d561f974e5..0000000000 --- a/libs/react-components/src/experimental/input/input.spec.tsx +++ /dev/null @@ -1,211 +0,0 @@ -import { render } from "@testing-library/react"; -import { fireEvent } from "@testing-library/dom"; -import { - GoabxInputDateTime, - GoabxInputText, - GoabxInputProps, - GoabxInputNumber, -} from "./input"; -import { describe, it, expect, vi } from "vitest"; -import { GoabIconType, GoabInputOnChangeDetail } from "@abgov/ui-components-common"; - -const noop = () => { - /* do nothing */ -}; -const testId = "test-id"; -const defaultProps: GoabxInputProps = { - name: "", - value: "", - testId: testId, - onChange: noop, -}; - -describe("GoabxInput", () => { - it("should render", () => { - render(); - - const input = document.querySelector("goa-input"); - expect(input?.getAttribute("name")).toBe("foo"); - expect(input?.getAttribute("focused")).toBeNull(); - expect(input?.getAttribute("disabled")).toBeNull(); - expect(input?.getAttribute("readonly")).toBeNull(); - expect(input?.getAttribute("error")).toBeNull(); - expect(input?.getAttribute("handletrailingiconclick")).toBe("false"); - }); - - it("should render with properties", () => { - const props: GoabxInputProps = { - ...defaultProps, - name: "foo", - value: "bar", - id: "foo", - leadingIcon: "search" as GoabIconType, - trailingIcon: "close" as GoabIconType, - autoComplete: "off", - autoCapitalize: "on", - variant: "bare", - disabled: true, - readonly: true, - focused: true, - error: true, - placeholder: "placeholder", - size: "compact", - // TODO: remove deprecated property or fix spec failure - // prefix: "foo", - suffix: "bar", - testId: testId, - debounce: 1000, - mt: "s", - mr: "m", - mb: "l", - ml: "xl", - leadingContent: "$", - trailingContent: "items", - maxLength: 10, - onTrailingIconClick: noop, - }; - - render(); - - const input = document.querySelector("goa-input"); - expect(input).toBeTruthy(); - expect(input?.getAttribute("name")).toBe("foo"); - expect(input?.getAttribute("value")).toBe("bar"); - expect(input?.getAttribute("type")).toBe("text"); - expect(input?.getAttribute("id")).toBe("foo"); - expect(input?.getAttribute("leadingicon")).toBe("search"); - expect(input?.getAttribute("trailingicon")).toBe("close"); - expect(input?.getAttribute("autocapitalize")).toBe("on"); - expect(input?.getAttribute("autocomplete")).toBe("off"); - expect(input?.getAttribute("variant")).toBe("bare"); - expect(input?.getAttribute("disabled")).toBe("true"); - expect(input?.getAttribute("focused")).toBe("true"); - expect(input?.getAttribute("readonly")).toBe("true"); - expect(input?.getAttribute("error")).toBe("true"); - expect(input?.getAttribute("placeholder")).toBe("placeholder"); - expect(input?.getAttribute("size")).toBe("compact"); - // TODO: remove deprecated property or fix spec failure - // expect(input?.getAttribute("prefix")).toBe("foo"); - expect(input?.getAttribute("suffix")).toBe("bar"); - expect(input?.getAttribute("testid")).toBe(testId); - expect(input?.getAttribute("debounce")).toBe("1000"); - expect(input?.getAttribute("mt")).toBe("s"); - expect(input?.getAttribute("mr")).toBe("m"); - expect(input?.getAttribute("mb")).toBe("l"); - expect(input?.getAttribute("ml")).toBe("xl"); - expect(input?.getAttribute("maxlength")).toBe("10"); - expect(input?.querySelector("[slot='leadingContent']")?.textContent).toContain("$"); - expect(input?.querySelector("[slot='trailingContent']")?.textContent).toContain( - "items", - ); - expect(input?.getAttribute("handletrailingiconclick")).toBe("true"); - }); - - it("should handle the onChange event", async function () { - const validateOnChange = vi.fn(); - const newValue = "barfoo"; - - const onChange = ({ name, value }: GoabInputOnChangeDetail) => { - expect(name).toBe("foo"); - expect(value).toBe(newValue); - validateOnChange(); - }; - const props = { ...defaultProps, onChange }; - render(); - - const input = document.querySelector("goa-input"); - expect(input).toBeTruthy(); - - input && - fireEvent( - input, - new CustomEvent("_change", { detail: { name: "foo", value: newValue } }), - ); - expect(validateOnChange).toBeCalled(); - }); - - it("should not error out with invalid dates", () => { - const mockOnChangeHandler = vi.fn(); - const { container } = render( - , - ); - const inputElement = container.querySelector('goa-input[type="datetime-local"]'); - expect(inputElement).toBeTruthy(); - //invalid dates do not trigger change event - inputElement && - fireEvent( - inputElement, - new CustomEvent("_change", { - detail: { name: "dateInput", value: "invalid date" }, - }), - ); - expect(mockOnChangeHandler).not.toBeCalled(); - const newDate = new Date().toISOString(); - //valid dates trigger change event - inputElement && - fireEvent( - inputElement, - new CustomEvent("_change", { detail: { name: "dateInput", value: newDate } }), - ); - expect(mockOnChangeHandler).toBeCalledWith( - expect.objectContaining({ - name: "dateInput", - value: new Date(newDate), - event: expect.any(Event), - }), - ); - }); - - it("should handle decimal number for GoabxInputNumber", () => { - const mockOnChangeHandler = vitest.fn(); - const { container } = render( - , - ); - - const inputElement = container.querySelector("goa-input[type='number']"); - expect(inputElement).toBeTruthy(); - const decimalValue = 1.3; - inputElement && - fireEvent( - inputElement, - new CustomEvent("_change", { - detail: { name: "numberInput", value: decimalValue }, - }), - ); - expect(mockOnChangeHandler).toBeCalledWith( - expect.objectContaining({ - name: "numberInput", - value: decimalValue, - event: expect.any(Event), - }), - ); - }); - - describe("Text Alignment", () => { - it("passes textAlign prop through to web component", () => { - const props: GoabxInputProps = { - ...defaultProps, - name: "test", - textAlign: "right", - }; - - render(); - - const input = document.querySelector("goa-input"); - expect(input).toBeTruthy(); - expect(input?.getAttribute("textalign")).toBe("right"); - }); - }); - - it("should pass data-grid attributes", () => { - const { container } = render( - , - ); - const el = container.querySelector("goa-input"); - expect(el?.getAttribute("data-grid")).toBe("cell"); - }); -}); diff --git a/libs/react-components/src/experimental/input/input.tsx b/libs/react-components/src/experimental/input/input.tsx deleted file mode 100644 index 604507b35a..0000000000 --- a/libs/react-components/src/experimental/input/input.tsx +++ /dev/null @@ -1,399 +0,0 @@ -import { useEffect, useRef, type JSX } from "react"; -import { format, isValid, parseISO } from "date-fns"; -import { - GoabAutoCapitalize, - GoabDate, - GoabIconType, - GoabInputOnBlurDetail, - GoabInputOnChangeDetail, - GoabInputOnFocusDetail, - GoabInputOnKeyPressDetail, - GoabInputSize, - GoabInputType, - Margins, DataAttributes, -} from "@abgov/ui-components-common"; -import { transformProps, lowercase } from "../../lib/common/extract-props"; - -export interface IgnoreMe { - ignore: string; -} - -interface WCProps extends Margins { - type?: GoabInputType; - name: string; - value?: string; - id?: string; - autocapitalize?: GoabAutoCapitalize; - autocomplete?: string; - debounce?: number; - placeholder?: string; - leadingicon?: string; - trailingicon?: string; - variant: string; - disabled?: string; - error?: string; - readonly?: string; - focused?: string; - handletrailingiconclick: string; - width?: string; - prefix?: string; - suffix?: string; - arialabel?: string; - testid?: string; - textalign?: string; - size?: GoabInputSize; - - // type=number - min?: string | number; - max?: string | number; - step?: number; - maxlength?: number; - - trailingiconarialabel?: string; - version?: string; -} - -declare module "react" { - // eslint-disable-next-line @typescript-eslint/no-namespace - namespace JSX { - interface IntrinsicElements { - "goa-input": WCProps & React.HTMLAttributes & { - ref?: React.RefObject; - }; - } - } -} - -interface BaseProps extends Margins, DataAttributes { - // required - name: string; - - // optional - id?: string; - debounce?: number; - disabled?: boolean; - autoCapitalize?: GoabAutoCapitalize; - autoComplete?: string; - placeholder?: string; - leadingIcon?: GoabIconType; - trailingIcon?: GoabIconType; - onTrailingIconClick?: () => void; - variant?: "goa" | "bare"; - focused?: boolean; - readonly?: boolean; - error?: boolean; - width?: string; - prefix?: string; - suffix?: string; - testId?: string; - ariaLabel?: string; - leadingContent?: React.ReactNode; - trailingContent?: React.ReactNode; - maxLength?: number; - trailingIconAriaLabel?: string; - textAlign?: "left" | "right"; - size?: GoabInputSize; - version?: string; -} - -type OnChange = (detail: GoabInputOnChangeDetail) => void; -type OnFocus = (detail: GoabInputOnFocusDetail) => void; -type OnBlur = (detail: GoabInputOnBlurDetail) => void; -type OnKeyPress = (detail: GoabInputOnKeyPressDetail) => void; - -export interface GoabxInputProps extends BaseProps { - onChange?: OnChange; - value?: string; - min?: number | string; - max?: number | string; - step?: number; - onFocus?: OnFocus; - onBlur?: OnBlur; - onKeyPress?: OnKeyPress; -} - -interface GoabxNumberInputProps extends BaseProps { - onChange?: OnChange; - value?: number; - min?: number; - max?: number; - step?: number; - onFocus?: OnFocus; - onBlur?: OnBlur; - onKeyPress?: OnKeyPress; -} - -interface GoabxDateInputProps extends BaseProps { - onChange?: OnChange; - value?: GoabDate; - min?: GoabDate; - max?: GoabDate; - step?: number; - onFocus?: OnFocus; - onBlur?: OnBlur; - onKeyPress?: OnKeyPress; -} - -export function GoabxInput({ - variant = "goa", - textAlign = "left", - size = "default", - focused, - disabled, - readonly, - error, - leadingContent, - trailingContent, - onTrailingIconClick, - onChange, - onFocus, - onBlur, - onKeyPress, - version = "2", - ...rest -}: GoabxInputProps & { type?: GoabInputType }): JSX.Element { - const ref = useRef(null); - - const _props = transformProps( - { variant, textalign: textAlign, size, ...rest }, - lowercase - ); - - useEffect(() => { - if (!ref.current) { - return; - } - const current = ref.current; - const changeListener = (e: Event) => { - const detail = (e as CustomEvent).detail; - onChange?.({ ...detail, event: e }); - }; - const clickListener = () => { - onTrailingIconClick?.(); - }; - - const focusListener = (e: Event) => { - const detail = (e as CustomEvent).detail; - onFocus?.({ ...detail, event: e }); - }; - - const blurListener = (e: Event) => { - const detail = (e as CustomEvent).detail; - onBlur?.({ ...detail, event: e }); - }; - - const keypressListener = (e: Event) => { - const detail = (e as CustomEvent).detail; - onKeyPress?.({ ...detail, event: e }); - }; - - current.addEventListener("_change", changeListener); - current.addEventListener("_trailingIconClick", clickListener); - current.addEventListener("_focus", focusListener); - current.addEventListener("_blur", blurListener); - current.addEventListener("_keyPress", keypressListener); - - return () => { - current.removeEventListener("_change", changeListener); - current.removeEventListener("_trailingIconClick", clickListener); - current.removeEventListener("_focus", focusListener); - current.removeEventListener("_blur", blurListener); - current.removeEventListener("_keyPress", keypressListener); - }; - }, [ref, onChange, onTrailingIconClick, onFocus, onBlur, onKeyPress]); - - return ( - - {leadingContent &&
{leadingContent}
} - {trailingContent &&
{trailingContent}
} -
- ); -} - -const onDateChangeHandler = (onChange?: OnChange) => { - return ({ name, value, event }: GoabInputOnChangeDetail) => { - if (!value) { - onChange?.({ name, value: "", event }); - return; - } - // valid string date - if (typeof value === "string" && isValid(new Date(value))) { - onChange?.({ name, value: parseISO(value), event }); - return; - } - // valid date - if (isValid(value)) { - onChange?.({ name, value, event }); - return; - } - }; -}; - -const onTimeChangeHandler = (onChange?: OnChange) => { - return ({ name, value, event }: GoabInputOnChangeDetail) => { - if (!value) { - onChange?.({ name, value: "", event }); - return; - } - onChange?.({ name, value, event }); - }; -}; - -function toString(value: GoabDate | null | undefined, tmpl = "yyyy-MM-dd"): string { - if (!value) { - return ""; - } - if (typeof value === "string") { - return format(parseISO(value), tmpl); - } - if (value.toISOString() === new Date(0).toISOString()) { - return ""; - } - return format(value, tmpl); -} - -export function GoabxInputText(props: GoabxInputProps): JSX.Element { - return ; -} - -export function GoabxInputPassword(props: GoabxInputProps): JSX.Element { - return ; -} - -export function GoabxInputDate({ - value, - min = "", - max = "", - ...props -}: GoabxDateInputProps): JSX.Element { - return ( - - ); -} - -export function GoabxInputTime({ - value, - min = "", - max = "", - ...props -}: GoabxInputProps): JSX.Element { - return ( - - ); -} - -export function GoabxInputDateTime({ - value, - min = "", - max = "", - ...props -}: GoabxDateInputProps): JSX.Element { - return ( - - ); -} - -export function GoabxInputEmail(props: GoabxInputProps): JSX.Element { - return ; -} - -export function GoabxInputSearch(props: GoabxInputProps): JSX.Element { - return ; -} - -export function GoabxInputUrl(props: GoabxInputProps): JSX.Element { - return ; -} - -export function GoabxInputTel(props: GoabxInputProps): JSX.Element { - return ; -} - -export function GoabxInputFile(props: GoabxInputProps): JSX.Element { - return ( - - props.onChange?.({ - name: e.target.name, - value: e.target.value, - event: e.nativeEvent, - }) - } - style={{ backgroundColor: "revert" }} - /> - ); -} - -export function GoabxInputMonth(props: GoabxInputProps): JSX.Element { - return ; -} - -export function GoabxInputNumber({ - min = Number.MIN_VALUE, - max = Number.MAX_VALUE, - value, - textAlign = "right", - ...props -}: GoabxNumberInputProps): JSX.Element { - const onNumberChange = ({ name, value, event }: GoabInputOnChangeDetail) => { - props.onChange?.({ name, value: parseFloat(value), event }); - }; - const onFocus = ({ name, value, event }: GoabInputOnFocusDetail) => { - props.onFocus?.({ name, value: parseFloat(value), event }); - }; - const onBlur = ({ name, value, event }: GoabInputOnBlurDetail) => { - props.onBlur?.({ name, value: parseFloat(value), event }); - }; - const onKeyPress = ({ name, value, key, event }: GoabInputOnKeyPressDetail) => { - props.onKeyPress?.({ name, value: parseFloat(value), key: parseInt(key), event }); - }; - return ( - - ); -} - -export function GoabxInputRange(props: GoabxInputProps): JSX.Element { - return ; -} - -export default GoabxInput; diff --git a/libs/react-components/src/experimental/link/link.spec.tsx b/libs/react-components/src/experimental/link/link.spec.tsx deleted file mode 100644 index 8f758f207b..0000000000 --- a/libs/react-components/src/experimental/link/link.spec.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import { configure, render } from "@testing-library/react"; -import { GoabxLink } from "./link"; - -configure({ - testIdAttribute: "testId", -}); - -describe("GoabxLink", () => { - it("should render the properties", () => { - const { container } = render( - - Test link - , - ); - const el = container.querySelector("goa-link"); - const link = container.querySelector("a"); - - expect(el).toBeTruthy(); - expect(el?.getAttribute("leadingicon")).toBe("add"); - expect(el?.getAttribute("trailingicon")).toBe("archive"); - expect(el?.getAttribute("color")).toBe("dark"); - expect(el?.getAttribute("size")).toBe("large"); - expect(el?.getAttribute("testid")).toBe("test-id"); - expect(el?.getAttribute("mt")).toBe("s"); - expect(el?.getAttribute("mr")).toBe("m"); - expect(el?.getAttribute("mb")).toBe("l"); - expect(el?.getAttribute("ml")).toBe("xl"); - - expect(link).toBeTruthy(); - expect(link?.getAttribute("href")).toBe("https://example.com"); - }); - - it("should pass data-grid attributes", () => { - const { container } = render( - - Test link - - ); - const el = container.querySelector("goa-link"); - expect(el?.getAttribute("data-grid")).toBe("cell"); - }); -}); diff --git a/libs/react-components/src/experimental/link/link.tsx b/libs/react-components/src/experimental/link/link.tsx deleted file mode 100644 index e21ab013d8..0000000000 --- a/libs/react-components/src/experimental/link/link.tsx +++ /dev/null @@ -1,64 +0,0 @@ -import { ReactNode } from "react"; -import { - GoabIconType, - GoabLinkColor, - GoabLinkSize, - Margins, - DataAttributes, -} from "@abgov/ui-components-common"; -import { transformProps, lowercase } from "../../lib/common/extract-props"; - -interface WCProps extends Margins { - leadingicon?: GoabIconType; - trailingicon?: GoabIconType; - action?: string; - actionArgs?: string; - actionArg?: string; - testid?: string; - color?: GoabLinkColor; - size?: GoabLinkSize; -} - -declare module "react" { - // eslint-disable-next-line @typescript-eslint/no-namespace - namespace JSX { - interface IntrinsicElements { - "goa-link": WCProps & React.HTMLAttributes; - } - } -} - -interface GoabxLinkProps extends Margins, DataAttributes { - leadingIcon?: GoabIconType; - trailingIcon?: GoabIconType; - action?: string; - actionArgs?: Record; - actionArg?: string; - color?: GoabLinkColor; - size?: GoabLinkSize; - testId?: string; - children: ReactNode; -} - -export function GoabxLink({ - actionArgs, - actionArg, - color = "interactive", - size = "medium", - children, - ...rest -}: GoabxLinkProps) { - const _props = transformProps({ color, size, ...rest }, lowercase); - - return ( - - {children} - - ); -} - -export default GoabxLink; diff --git a/libs/react-components/src/experimental/modal/modal.spec.tsx b/libs/react-components/src/experimental/modal/modal.spec.tsx deleted file mode 100644 index 0d4169f0ce..0000000000 --- a/libs/react-components/src/experimental/modal/modal.spec.tsx +++ /dev/null @@ -1,63 +0,0 @@ -import { render } from "@testing-library/react"; -import GoabxButton from "../button/button"; -import { GoabxModal, GoabxModalProps } from "./modal"; - -describe("GoabxModal", () => { - it("should render", async () => { - const { baseElement } = render(Modal Content); - - const modal = baseElement.querySelector("goa-modal"); - - expect(modal?.getAttribute("open")).toBeNull(); - expect(modal?.getAttribute("closable")).toBe("false"); - }); - - it("should render with close capability via icon and background", async () => { - const props = { - heading: "Modal Heading", - open: true, - maxWidth: "500px", - role: "alertdialog", - actions: ( - { - /* do nothing */ - }} - > - Close - - ), - onClose: () => { - /* do nothing */ - }, - } as GoabxModalProps; - - const { baseElement } = render(Modal Content); - const modal = baseElement.querySelector("goa-modal"); - const actionContent = modal?.querySelector("[slot='actions']"); - // Role attribute is no longer passed to the web component (deprecated) - expect(modal?.getAttribute("role")).toBeNull(); - - expect(modal?.getAttribute("heading")).toBe("Modal Heading"); - expect(modal?.getAttribute("open")).toBe("true"); - expect(modal?.getAttribute("maxwidth")).toBe("500px"); - expect(modal?.getAttribute("closable")).toBe("true"); - expect(modal?.textContent).toContain("Modal Content"); - expect(actionContent?.textContent).toContain("Close"); - }); - - it("should render with React node heading", async () => { - const headingNode =
Custom Heading
; - const { baseElement } = render( - - Modal Content - , - ); - - const modal = baseElement.querySelector("goa-modal"); - const headingContent = modal?.querySelector("[slot='heading']"); - - expect(modal?.getAttribute("open")).toBe("true"); - expect(headingContent?.textContent).toBe("Custom Heading"); - }); -}); diff --git a/libs/react-components/src/experimental/modal/modal.tsx b/libs/react-components/src/experimental/modal/modal.tsx deleted file mode 100644 index 6f0c334661..0000000000 --- a/libs/react-components/src/experimental/modal/modal.tsx +++ /dev/null @@ -1,100 +0,0 @@ -import { - GoabModalCalloutVariant, - GoabModalRole, - GoabModalTransition, -} from "@abgov/ui-components-common"; -import { ReactElement, ReactNode, RefObject, useEffect, useRef, type JSX } from "react"; - -interface WCProps { - ref: RefObject; - heading?: ReactNode; - open?: string; - maxwidth?: string; - closable: string; - /** - * @deprecated The role property is deprecated and will be removed in a future version. - * The modal will always use role="dialog". - */ - role?: GoabModalRole; - transition?: GoabModalTransition; - calloutvariant?: GoabModalCalloutVariant; - testid?: string; - version?: string; -} - -declare module "react" { - // eslint-disable-next-line @typescript-eslint/no-namespace - namespace JSX { - interface IntrinsicElements { - "goa-modal": WCProps & React.HTMLAttributes; - } - } -} - -export interface GoabxModalProps { - heading?: ReactNode; - maxWidth?: string; - actions?: ReactElement; - onClose?: () => void; - transition?: GoabModalTransition; - children?: ReactNode; - open?: boolean; - calloutVariant?: GoabModalCalloutVariant; - testId?: string; - version?: string; - /** - * @deprecated The role property is deprecated and will be removed in a future version. - * The modal will always use role="dialog". - */ - role?: GoabModalRole; -} - -export function GoabxModal({ - heading, - children, - maxWidth, - open, - actions, - transition, - calloutVariant, - onClose, - testId, - version = "2", -}: GoabxModalProps): JSX.Element { - const el = useRef(null); - - useEffect(() => { - if (!el.current) { - return; - } - const current = el.current; - const listener = () => { - onClose?.(); - }; - - current.addEventListener("_close", listener); - return () => { - current.removeEventListener("_close", listener); - }; - }, [el, onClose]); - - return ( - - {heading && typeof heading !== "string" &&
{heading}
} - {actions &&
{actions}
} - {children} -
- ); -} - -export default GoabxModal; diff --git a/libs/react-components/src/experimental/notification/notification.spec.tsx b/libs/react-components/src/experimental/notification/notification.spec.tsx deleted file mode 100644 index 1f359157e5..0000000000 --- a/libs/react-components/src/experimental/notification/notification.spec.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import { render } from "@testing-library/react"; -import GoabxNotification from "./notification"; -import { fireEvent } from "@testing-library/dom"; -import { describe, it, expect, vi } from "vitest"; -import { GoabNotificationType } from "@abgov/ui-components-common"; - -describe("GoabxNotification", () => { - describe("type", () => { - (["important", "information", "emergency", "event"] as const).forEach( - (type: GoabNotificationType) => { - it(`should render ${type} notification`, async function () { - render( - - Information to the user goes in the content - , - ); - const el = document.querySelector("goa-notification"); - expect(el?.getAttribute("type")).toEqual(type); - }); - }, - ); - }); - - it("Event triggered on notification banner dismiss", async () => { - const onDismiss = vi.fn(); - const { container } = render( - - Information to the user goes in the content - , - ); - const notificationBanner = container.querySelector("goa-notification"); - notificationBanner && fireEvent(notificationBanner, new CustomEvent("_dismiss")); - expect(onDismiss).toBeCalled(); - }); - - it("should render notification banner with ariaLive", async () => { - render( - - Information to the user goes in the content - , - ); - const el = document.querySelector("goa-notification"); - expect(el?.getAttribute("ariaLive")).toEqual("assertive"); - }); - - it("should render notification banner with emphasis and compact", async () => { - render( - - Information to the user goes in the content - , - ); - const el = document.querySelector("goa-notification"); - expect(el?.getAttribute("emphasis")).toEqual("low"); - expect(el?.getAttribute("compact")).toEqual("true"); - }); -}); diff --git a/libs/react-components/src/experimental/notification/notification.tsx b/libs/react-components/src/experimental/notification/notification.tsx deleted file mode 100644 index 4a72e4a77c..0000000000 --- a/libs/react-components/src/experimental/notification/notification.tsx +++ /dev/null @@ -1,84 +0,0 @@ -import { - GoabAriaLiveType, - GoabNotificationEmphasis, - GoabNotificationType, -} from "@abgov/ui-components-common"; -import { useEffect, useRef } from "react"; - -interface WCProps { - ref: React.RefObject; - type: GoabNotificationType; - maxcontentwidth?: string; - arialive?: GoabAriaLiveType; - testid?: string; - emphasis?: GoabNotificationEmphasis; - compact?: string; - version?: string; -} - -declare module "react" { - // eslint-disable-next-line @typescript-eslint/no-namespace - namespace JSX { - interface IntrinsicElements { - "goa-notification": WCProps & React.HTMLAttributes; - } - } -} - -export interface GoabxNotificationProps { - type?: GoabNotificationType; - ariaLive?: GoabAriaLiveType; - maxContentWidth?: string; - emphasis?: GoabNotificationEmphasis; - compact?: boolean; - children?: React.ReactNode; - onDismiss?: () => void; - testId?: string; - version?: string; -} - -export const GoabxNotification = ({ - type = "information", - emphasis = "high", - compact, - ariaLive, - maxContentWidth, - children, - testId, - onDismiss, - version = "2", -}: GoabxNotificationProps) => { - const el = useRef(null); - - useEffect(() => { - if (!el.current) { - return; - } - const current = el.current; - const listener = () => { - onDismiss?.(); - }; - - current.addEventListener("_dismiss", listener); - return () => { - current.removeEventListener("_dismiss", listener); - }; - }, [el, onDismiss]); - - return ( - - {children} - - ); -}; - -export default GoabxNotification; diff --git a/libs/react-components/src/experimental/pagination/pagination.spec.tsx b/libs/react-components/src/experimental/pagination/pagination.spec.tsx deleted file mode 100644 index 430e54a8f5..0000000000 --- a/libs/react-components/src/experimental/pagination/pagination.spec.tsx +++ /dev/null @@ -1,50 +0,0 @@ -import { fireEvent, render, waitFor } from "@testing-library/react"; -import { describe, it, expect, vi } from "vitest"; - -import GoabxPagination from "./pagination"; -import { GoabPaginationOnChangeDetail } from "@abgov/ui-components-common"; - -describe("GoabxPagination", () => { - it("should render successfully", () => { - const { baseElement } = render( - { /* do nothing */ }} - pageNumber={1} - itemCount={100} - perPageCount={20} - variant="all" - mt="s" - mb="m" - ml="l" - mr="xl" - /> - ); - - const el = baseElement.querySelector("goa-pagination"); - - expect(el?.getAttribute("pagenumber")).toBe("1"); - expect(el?.getAttribute("itemcount")).toBe("100"); - expect(el?.getAttribute("perpagecount")).toBe("20"); - expect(el?.getAttribute("variant")).toBe("all"); - expect(el?.getAttribute("mt")).toBe("s"); - expect(el?.getAttribute("mb")).toBe("m"); - expect(el?.getAttribute("ml")).toBe("l"); - expect(el?.getAttribute("mr")).toBe("xl"); - }); - - it("should handle the onChange event", async () => { - const fn = vi.fn(); - - const { baseElement } = render( - - ); - const detail: GoabPaginationOnChangeDetail = { page: 2 }; - - const el = baseElement.querySelector("goa-pagination"); - el && fireEvent(el, new CustomEvent("_change", { detail: detail })); - - await waitFor(() => { - expect(fn).toBeCalledWith(detail); - }); - }); -}); diff --git a/libs/react-components/src/experimental/pagination/pagination.tsx b/libs/react-components/src/experimental/pagination/pagination.tsx deleted file mode 100644 index 7b94cf059f..0000000000 --- a/libs/react-components/src/experimental/pagination/pagination.tsx +++ /dev/null @@ -1,77 +0,0 @@ -import { GoabPaginationOnChangeDetail, Margins } from "@abgov/ui-components-common"; -import { useEffect, useRef } from "react"; - -interface WCProps extends Margins { - ref?: React.RefObject; - itemcount: number; - perpagecount?: number; - pagenumber: number; - variant?: "all" | "links-only"; - testid?: string; - version?: string; -} - -declare module "react" { - // eslint-disable-next-line @typescript-eslint/no-namespace - namespace JSX { - interface IntrinsicElements { - "goa-pagination": WCProps & React.HTMLAttributes; - } - } -} - -/* eslint-disable-next-line */ -export interface GoabxPaginationProps extends Margins { - itemCount: number; - perPageCount?: number; - pageNumber: number; - variant?: "all" | "links-only"; - onChange: (detail: GoabPaginationOnChangeDetail) => void; - testId?: string; - version?: string; -} - -// legacy -export type PaginationProps = GoabxPaginationProps; - -export function GoabxPagination({ - onChange, - version = "2", - ...props -}: GoabxPaginationProps) { - const ref = useRef(null); - - useEffect(() => { - if (!ref.current) { - return; - } - const current = ref.current; - const changeListener = (e: Event) => { - const detail = (e as CustomEvent).detail; - onChange(detail); - }; - - current.addEventListener("_change", changeListener); - return () => { - current.removeEventListener("_change", changeListener); - }; - }, [ref, onChange]); - - return ( - - ); -} - -export default GoabxPagination; diff --git a/libs/react-components/src/experimental/radio-group/radio-group.spec.tsx b/libs/react-components/src/experimental/radio-group/radio-group.spec.tsx deleted file mode 100644 index 857e01b5ef..0000000000 --- a/libs/react-components/src/experimental/radio-group/radio-group.spec.tsx +++ /dev/null @@ -1,290 +0,0 @@ -import { render, waitFor } from "@testing-library/react"; -import { describe, it, expect, vi } from "vitest"; -import { fireEvent } from "@testing-library/dom"; - -import { GoabxRadioGroup, GoabxRadioItem } from "./radio-group"; -import { GoabRadioGroupOnChangeDetail } from "@abgov/ui-components-common"; - -type MockData = { - title: string; - helperText: string; - value: string; - labelPosition: string; - - required: boolean; - requiredErrorMessage: string; - - radios: { text: string; value: string; description?: string | React.ReactNode }[]; -}; - -const noop = (detail: GoabRadioGroupOnChangeDetail) => { - /* do nothing */ -}; - -describe("GoabxRadioGroup", () => { - const baseMockData: MockData = { - title: "mock title", - value: "", - helperText: "mock helper text", - labelPosition: "after", - required: true, - requiredErrorMessage: "mock required error message", - - radios: [ - { text: "Apples", value: "apples" }, - { text: "Oranges", value: "oranges", description: "Oranges are orange" }, - { text: "Bananas", value: "bananas", description:

Bananas are banana

}, - ], - }; - - describe("Basic rendering", () => { - it("should render", async () => { - const data = baseMockData; - const { baseElement } = render( - - {data.radios.map((radio) => ( - - ))} - , - ); - expect(baseElement).toBeTruthy(); - const el = baseElement.querySelector("goa-radio-group"); - - expect(el?.getAttribute("name")).toBe("fruits"); - expect(el?.getAttribute("disabled")).toBeNull(); - expect(el?.getAttribute("error")).toBeNull(); - - const radios = document.querySelectorAll("input[type=radio]"); - radios.forEach((radio) => { - expect(radio.getAttribute("disabled")).toBeNull(); - expect(radio.getAttribute("error")).toBeNull(); - expect(radio.getAttribute("checked")).toBeNull(); - }); - }); - - it("should render with properties", async () => { - const data = baseMockData; - const { baseElement } = render( - - {data.radios.map((radio) => ( - - {radio.text} - - ))} - , - ); - expect(baseElement).toBeTruthy(); - const el = baseElement.querySelector("goa-radio-group"); - expect(el).toBeTruthy(); - - expect(el?.getAttribute("mt")).toBe("s"); - expect(el?.getAttribute("mr")).toBe("m"); - expect(el?.getAttribute("mb")).toBe("l"); - expect(el?.getAttribute("ml")).toBe("xl"); - expect(el?.getAttribute("name")).toBe("fruits"); - expect(el?.getAttribute("arialabel")).toBe("please select fruit"); - expect(el?.getAttribute("disabled")).toBe("true"); - expect(el?.getAttribute("error")).toBe("true"); - expect(el?.getAttribute("size")).toBe("compact"); - - const radios = document.querySelectorAll("input[type=radio]"); - radios.forEach((radio) => { - expect(radio.getAttribute("arialabel")).toBe("you are choosing " + radio.value); - expect(radio.getAttribute("disabled")).toBe("true"); - expect(radio.getAttribute("error")).toBe("true"); - expect(radio.getAttribute("checked")).toBe("true"); - expect(radio.getAttribute("compact")).toBe("true"); - }); - }); - }); - - describe("Initial data", () => { - const selectedValue = "oranges"; - - it("initial data is set", async () => { - const data = baseMockData; - render( - - {data.radios.map((radio) => ( - - {radio.text} - - ))} - , - ); - - const radios = document.querySelectorAll("input[type=radio]"); - radios.forEach((radio) => { - expect(radio.checked).toBe(radio.value === selectedValue); - }); - }); - - it("render with description", async () => { - const data = baseMockData; - const result = render( - - {data.radios.map((radio) => ( - - {radio.text} - - ))} - , - ); - - const radios = document.querySelectorAll("goa-radio-item"); - expect(radios[0].getAttribute("description")).toBe(null); - expect(radios[1].getAttribute("description")).toBe("Oranges are orange"); - expect( - result.container.querySelector("div[slot='description']")?.innerHTML, - ).toContain("Bananas are banana"); - }); - - it("should pass the revealAriaLabel property to the web component", () => { - const result = render( - - Additional apple options
} - revealAriaLabel="Screen reader announcement for radio reveal content" - /> - , - ); - - const radioItem = document.querySelector("goa-radio-item"); - expect(radioItem?.getAttribute("revealarialabel")).toBe("Screen reader announcement for radio reveal content"); - expect( - result.container.querySelector("div[slot='reveal']")?.innerHTML, - ).toContain("Additional apple options"); - }); - }); - - describe("Selection Change Tests", () => { - it("event should not fire when disabled", async () => { - const onChange = vi.fn(); - const data = { ...baseMockData, value: "oranges", disabled: true }; - - const { container } = render( - onChange(event)} - > - {data.radios.map((radio) => ( - - {radio.text} - - ))} - , - ); - - await waitFor(() => { - const radios = container.querySelectorAll("goa-radio-item"); - expect(radios[0]).toBeTruthy(); - fireEvent.click(radios[0]); - expect(onChange).not.toBeCalled(); - }); - }); - }); - - it("change event should work", async () => { - const onChange = vi.fn(); - const data = { ...baseMockData, value: "oranges" }; - const { container } = render( - - {data.radios.map((radio) => ( - - {radio.text} - - ))} - , - ); - - const radios = container.querySelectorAll("goa-radio-item"); - const radioGroup = container.querySelector("goa-radio-group"); - - expect(radios[0]).toBeTruthy(); - radioGroup && - fireEvent( - radioGroup, - new CustomEvent("_change", { - detail: { name: "fruits", value: radios[0].value }, - }), - ); - - await waitFor(() => { - expect(onChange).toBeCalled(); - }); - }); - - it("should pass data-grid attributes", () => { - const { baseElement } = render( - - Apples - - ); - const el = baseElement.querySelector("goa-radio-group"); - expect(el?.getAttribute("data-grid")).toBe("cell"); - }); -}); diff --git a/libs/react-components/src/experimental/radio-group/radio-group.tsx b/libs/react-components/src/experimental/radio-group/radio-group.tsx deleted file mode 100644 index b398f45dba..0000000000 --- a/libs/react-components/src/experimental/radio-group/radio-group.tsx +++ /dev/null @@ -1,99 +0,0 @@ -import { useEffect, useRef, type JSX } from "react"; -import { - GoabRadioGroupOnChangeDetail, - GoabRadioGroupOrientation, - GoabRadioGroupSize, - Margins, DataAttributes, -} from "@abgov/ui-components-common"; -import { transformProps, lowercase } from "../../lib/common/extract-props"; - -export * from "./radio"; - -interface WCProps extends Margins { - name: string; - value?: string; - id?: string; - orientation?: GoabRadioGroupOrientation; - disabled?: string; - error?: string; - arialabel?: string; - testid?: string; - size?: GoabRadioGroupSize; - version?: string; -} - -declare module "react" { - // eslint-disable-next-line @typescript-eslint/no-namespace - namespace JSX { - interface IntrinsicElements { - "goa-radio-group": WCProps & React.HTMLAttributes & { - ref: React.RefObject; - }; - } - } -} - -export interface GoabxRadioGroupProps extends Margins, DataAttributes { - name: string; - value?: string; - id?: string; - disabled?: boolean; - orientation?: GoabRadioGroupOrientation; - size?: GoabRadioGroupSize; - testId?: string; - error?: boolean; - ariaLabel?: string; - children?: React.ReactNode; - version?: string; - onChange?: (detail: GoabRadioGroupOnChangeDetail) => void; -} - -export function GoabxRadioGroup({ - disabled, - error, - onChange, - name, - children, - size = "default", - version = "2", - ...rest -}: GoabxRadioGroupProps): JSX.Element { - const el = useRef(null); - - const _props = transformProps({ size, ...rest }, lowercase); - - useEffect(() => { - if (!el.current) return; - - const listener = (e: Event) => { - const detail = (e as CustomEvent).detail; - onChange?.({ ...detail, event: e }); - }; - - const currentEl = el.current; - if (onChange) { - currentEl.addEventListener("_change", listener); - } - - return () => { - if (onChange) { - currentEl.removeEventListener("_change", listener); - } - }; - }, [name, onChange]); - - return ( - - {children} - - ); -} - -export default GoabxRadioGroup; diff --git a/libs/react-components/src/experimental/radio-group/radio.tsx b/libs/react-components/src/experimental/radio-group/radio.tsx deleted file mode 100644 index 0bc0ae58cb..0000000000 --- a/libs/react-components/src/experimental/radio-group/radio.tsx +++ /dev/null @@ -1,95 +0,0 @@ -import { Margins } from "@abgov/ui-components-common"; - -import type { JSX } from "react"; - -interface WCProps extends Margins { - name?: string; - value?: string; - description?: string | React.ReactNode; - reveal?: React.ReactNode; - revealarialabel?: string; - label?: string; - maxwidth?: string; - disabled?: string; - checked?: string; - error?: string; - arialabel?: string; - compact?: string; - version?: string; -} - -declare module "react" { - // eslint-disable-next-line @typescript-eslint/no-namespace - namespace JSX { - interface IntrinsicElements { - "goa-radio-item": WCProps & React.HTMLAttributes; - } - } -} - -export interface GoabxRadioItemProps extends Margins { - value?: string; - label?: string; - name?: string; - description?: string | React.ReactNode; - reveal?: React.ReactNode; - revealAriaLabel?: string; - maxWidth?: string; - disabled?: boolean; - checked?: boolean; - error?: boolean; - compact?: boolean; - children?: React.ReactNode; - ariaLabel?: string; - version?: string; -} - -export function GoabxRadioItem({ - name, - label, - value, - description, - reveal, - revealAriaLabel, - maxWidth, - disabled, - checked, - error, - compact, - ariaLabel, - children, - version = "2", - mt, - mr, - mb, - ml, -}: GoabxRadioItemProps): JSX.Element { - return ( - - {description && typeof description !== "string" && ( -
{description}
- )} - {reveal &&
{reveal}
} - {children} -
- ); -} - -export default GoabxRadioItem; diff --git a/libs/react-components/src/experimental/side-menu-group/side-menu-group.spec.tsx b/libs/react-components/src/experimental/side-menu-group/side-menu-group.spec.tsx deleted file mode 100644 index 39926ef738..0000000000 --- a/libs/react-components/src/experimental/side-menu-group/side-menu-group.spec.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import { render } from "@testing-library/react"; - -import GoabxSideMenuGroup from "./side-menu-group"; - -describe("GoabxSideMenuGroup", () => { - it("should render successfully", () => { - const { baseElement } = render(); - - const el = baseElement.querySelector("goa-side-menu-group"); - expect(el?.getAttribute("heading")).toBe("some header"); - expect(el?.getAttribute("testid")).toBe("foo"); - }); - it("should render icon if provided", () => { - const { baseElement } = render( - , - ); - - const el = baseElement.querySelector("goa-side-menu-group"); - expect(el?.getAttribute("icon")).toBe("accessibility"); - }) -}); diff --git a/libs/react-components/src/experimental/side-menu-group/side-menu-group.tsx b/libs/react-components/src/experimental/side-menu-group/side-menu-group.tsx deleted file mode 100644 index cdb58f3f42..0000000000 --- a/libs/react-components/src/experimental/side-menu-group/side-menu-group.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import { ReactNode, type JSX } from "react"; -import { GoabIconType, Margins } from "@abgov/ui-components-common"; - -interface WCProps extends Margins { - heading: string; - icon?: GoabIconType; - testid?: string; - version?: string; -} - -declare module "react" { - // eslint-disable-next-line @typescript-eslint/no-namespace - namespace JSX { - interface IntrinsicElements { - "goa-side-menu-group": WCProps & React.HTMLAttributes; - } - } -} - -/* eslint-disable-next-line */ -export interface GoabxSideMenuGroupProps extends Margins { - heading: string; - icon?: GoabIconType; - testId?: string; - children?: ReactNode; - version?: string; -} - -export function GoabxSideMenuGroup({ - heading, - icon, - testId, - children, - mt, - mr, - mb, - ml, - version = "2", -}: GoabxSideMenuGroupProps): JSX.Element { - return ( - - {children} - - ); -} - -export default GoabxSideMenuGroup; diff --git a/libs/react-components/src/experimental/side-menu-heading/side-menu-heading.spec.tsx b/libs/react-components/src/experimental/side-menu-heading/side-menu-heading.spec.tsx deleted file mode 100644 index 42f521c9d5..0000000000 --- a/libs/react-components/src/experimental/side-menu-heading/side-menu-heading.spec.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import { render } from "@testing-library/react"; - -import GoabxSideMenuHeading from "./side-menu-heading"; - -describe("GoabxSideMenuHeading", () => { - it("should render successfully", () => { - const { baseElement } = render(); - - const el = baseElement.querySelector("goa-side-menu-heading"); - expect(el).toBeTruthy(); - expect(el?.getAttribute("icon")).toBe("home"); - expect(el?.getAttribute("testid")).toBe("foo"); - }); -}); diff --git a/libs/react-components/src/experimental/side-menu-heading/side-menu-heading.tsx b/libs/react-components/src/experimental/side-menu-heading/side-menu-heading.tsx deleted file mode 100644 index 1a070f4c7a..0000000000 --- a/libs/react-components/src/experimental/side-menu-heading/side-menu-heading.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import { GoabIconType } from "@abgov/ui-components-common"; -import { ReactNode } from "react"; - -interface WCProps { - testid?: string; - icon?: GoabIconType; - version?: string; -} - -declare module "react" { - // eslint-disable-next-line @typescript-eslint/no-namespace - namespace JSX { - interface IntrinsicElements { - "goa-side-menu-heading": WCProps & React.HTMLAttributes; - } - } -} - -/* eslint-disable-next-line */ -export interface GoabxSideMenuHeadingProps { - meta?: ReactNode; - testId?: string; - icon?: GoabIconType; - children?: ReactNode; - version?: string; -} - -export function GoabxSideMenuHeading({ - meta, - testId, - icon, - children, - version = "2", -}: GoabxSideMenuHeadingProps) { - return ( - - {children} - {meta && {meta}} - - ); -} - -export default GoabxSideMenuHeading; diff --git a/libs/react-components/src/experimental/side-menu/side-menu.spec.tsx b/libs/react-components/src/experimental/side-menu/side-menu.spec.tsx deleted file mode 100644 index 0a251e33bb..0000000000 --- a/libs/react-components/src/experimental/side-menu/side-menu.spec.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import { render } from "@testing-library/react"; - -import GoabxSideMenu from "./side-menu"; - -describe("GoabxSideMenu", () => { - it("should render successfully", () => { - const { baseElement } = render( - - Link - - ); - const el = baseElement.querySelector("goa-side-menu"); - expect(baseElement).toBeTruthy(); - expect(el?.getAttribute("testid")).toBe("foo"); - }); -}); diff --git a/libs/react-components/src/experimental/side-menu/side-menu.tsx b/libs/react-components/src/experimental/side-menu/side-menu.tsx deleted file mode 100644 index a806588f8e..0000000000 --- a/libs/react-components/src/experimental/side-menu/side-menu.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import { ReactNode, type JSX } from "react"; - -interface WCProps { - testid?: string; - version?: string; -} - -declare module "react" { - // eslint-disable-next-line @typescript-eslint/no-namespace - namespace JSX { - interface IntrinsicElements { - "goa-side-menu": WCProps & React.HTMLAttributes; - } - } -} - -/* eslint-disable-next-line */ -export interface GoabxSideMenuProps { - testId?: string; - children: ReactNode; - version?: string; -} - -export function GoabxSideMenu({ - testId, - children, - version = "2", -}: GoabxSideMenuProps): JSX.Element { - return ( - - {children} - - ); -} - -export default GoabxSideMenu; diff --git a/libs/react-components/src/experimental/table/table-sort-header.spec.tsx b/libs/react-components/src/experimental/table/table-sort-header.spec.tsx deleted file mode 100644 index 8e0d0ed40c..0000000000 --- a/libs/react-components/src/experimental/table/table-sort-header.spec.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import { render } from "@testing-library/react"; -import GoabxTableSortHeader from "./table-sort-header"; - -describe("GoabxTableSortHeader", () => { - it("renders", async () => { - render(); - const el = document.querySelector("goa-table-sort-header"); - expect(el).toBeTruthy(); - }); - - it("binds direction param", async () => { - render(); - const el = document.querySelector("goa-table-sort-header"); - expect(el?.getAttribute("direction")).toBe("asc"); - }); - - it("should pass data-grid attributes", () => { - render(); - const el = document.querySelector("goa-table-sort-header"); - expect(el?.getAttribute("data-grid")).toBe("cell"); - }); -}); diff --git a/libs/react-components/src/experimental/table/table-sort-header.tsx b/libs/react-components/src/experimental/table/table-sort-header.tsx deleted file mode 100644 index a1845a9f7d..0000000000 --- a/libs/react-components/src/experimental/table/table-sort-header.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import { DataAttributes, GoabTableSortDirection } from "@abgov/ui-components-common"; - -import type { JSX } from "react"; -import { transformProps, lowercase } from "../../lib/common/extract-props"; - -interface WCProps { - name?: string; - direction?: GoabTableSortDirection; -} - -declare module "react" { - // eslint-disable-next-line @typescript-eslint/no-namespace - namespace JSX { - interface IntrinsicElements { - "goa-table-sort-header": WCProps & React.HTMLAttributes; - } - } -} - -/* eslint-disable-next-line */ -export interface GoabxTableSortProps extends DataAttributes { - name?: string; - direction?: GoabTableSortDirection; - children?: React.ReactNode; -} - -export function GoabxTableSortHeader({ - children, - ...rest -}: GoabxTableSortProps): JSX.Element { - const _props = transformProps(rest, lowercase); - - return {children}; -} - -export default GoabxTableSortHeader; diff --git a/libs/react-components/src/experimental/table/table.spec.tsx b/libs/react-components/src/experimental/table/table.spec.tsx deleted file mode 100644 index 30c9effc79..0000000000 --- a/libs/react-components/src/experimental/table/table.spec.tsx +++ /dev/null @@ -1,50 +0,0 @@ -import { render, fireEvent } from "@testing-library/react"; -import { describe, it, vi } from "vitest"; -import GoabxTable from "./table"; -import { GoabTableOnSortDetail } from "@abgov/ui-components-common"; - -describe("GoabxTable", () => { - it("should render", () => { - const { baseElement } = render(); - - const table = baseElement.querySelector("goa-table"); - expect(table?.getAttribute("stickyHeader")).toBeNull(); - }); - - it("should render with properties", () => { - const { baseElement } = render(); - - const table = baseElement.querySelector("goa-table"); - expect(table?.getAttribute("stickyHeader")).toBeNull(); - expect(table?.getAttribute("striped")).toBe("true"); - // TODO: Enable this later if needed - // expect(table?.getAttribute("stickyHeader")).toBe("true"); - }); - - it("should call onSort when _sort event is triggered", () => { - const onSort = vi.fn(); - const { baseElement } = render(); - - const table = baseElement.querySelector("goa-table"); - const event: GoabTableOnSortDetail = { sortBy: "name", sortDir: 1 }; - expect(table).toBeTruthy(); - - table && fireEvent(table, new CustomEvent("_sort", { detail: event })); - expect(onSort).toHaveBeenCalledWith(event); - }); - - it("should handle _sort event gracefully when no onSort prop is passed", () => { - const { baseElement } = render(); - const table = baseElement.querySelector("goa-table"); - - expect(table).toBeTruthy(); - expect( - () => - table && - fireEvent( - table, - new CustomEvent("_sort", { detail: { sortBy: "age", sortDir: -1 } }), - ), - ).not.toThrow(); - }); -}); diff --git a/libs/react-components/src/experimental/table/table.tsx b/libs/react-components/src/experimental/table/table.tsx deleted file mode 100644 index 33552ab7f1..0000000000 --- a/libs/react-components/src/experimental/table/table.tsx +++ /dev/null @@ -1,80 +0,0 @@ -import { - GoabTableOnSortDetail, - GoabTableVariant, - Margins, -} from "@abgov/ui-components-common"; -import { ReactNode, useEffect, useRef } from "react"; - -interface WCProps extends Margins { - ref?: React.RefObject; - width?: string; - stickyheader?: string; - variant?: GoabTableVariant; - testid?: string; - striped?: string; - version?: string; -} - -declare module "react" { - // eslint-disable-next-line @typescript-eslint/no-namespace - namespace JSX { - interface IntrinsicElements { - "goa-table": WCProps & React.HTMLAttributes; - } - } -} - -/* eslint-disable-next-line */ -export interface GoabxTableProps extends Margins { - width?: string; - onSort?: (detail: GoabTableOnSortDetail) => void; - // stickyHeader?: boolean; TODO: enable this later - variant?: GoabTableVariant; - striped?: boolean; - testId?: string; - version?: string; - children?: ReactNode; -} - -// legacy name -export type TableProps = GoabxTableProps; - -export function GoabxTable({ onSort, version = "2", ...props }: GoabxTableProps) { - const ref = useRef(null); - useEffect(() => { - if (!ref.current) { - return; - } - const current = ref.current; - const sortListener = (e: unknown) => { - const detail = (e as CustomEvent).detail; - onSort?.(detail); - }; - - current.addEventListener("_sort", sortListener); - return () => { - current.removeEventListener("_sort", sortListener); - }; - }, [ref, onSort]); - - return ( - - {props.children}
-
- ); -} - -export default GoabxTable; diff --git a/libs/react-components/src/experimental/tabs/tabs.spec.tsx b/libs/react-components/src/experimental/tabs/tabs.spec.tsx deleted file mode 100644 index f16f025f94..0000000000 --- a/libs/react-components/src/experimental/tabs/tabs.spec.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import { render } from "@testing-library/react"; -import { GoabTab } from "../../lib/tab/tab"; -import GoabxTabs from "./tabs"; - -describe("GoabxTabs", () => { - it("should render successfully", () => { - const { baseElement } = render( - - -

- Profile: Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed - do eiusmod tempor incididunt ut labore et dolore magna aliqua. -

-
-
, - ); - const el = baseElement.querySelector("goa-tabs"); - expect(el).toBeTruthy(); - expect(el?.getAttribute("initialTab")).toBe("1"); - expect(el?.getAttribute("testid")).toBe("foo"); - - const tabElements = baseElement.querySelectorAll("goa-tab"); - expect(tabElements.length).toBe(1); - }); -}); diff --git a/libs/react-components/src/experimental/tabs/tabs.tsx b/libs/react-components/src/experimental/tabs/tabs.tsx deleted file mode 100644 index 4a93f9c913..0000000000 --- a/libs/react-components/src/experimental/tabs/tabs.tsx +++ /dev/null @@ -1,68 +0,0 @@ -import React, { useEffect, useRef, type JSX } from "react"; -import { GoabTabsOnChangeDetail, GoabTabsVariant } from "@abgov/ui-components-common"; - -interface WCProps { - initialtab?: number; - ref: React.RefObject; - onChange?: (tab: number) => void; - testid?: string; - variant?: GoabTabsVariant; - version?: string; -} - -declare module "react" { - // eslint-disable-next-line @typescript-eslint/no-namespace - namespace JSX { - interface IntrinsicElements { - "goa-tabs": WCProps & React.HTMLAttributes; - } - } -} - -export interface GoabxTabsProps { - initialTab?: number; - children?: React.ReactNode; - testId?: string; - variant?: GoabTabsVariant; - onChange?: (detail: GoabTabsOnChangeDetail) => void; - version?: string; -} - -export function GoabxTabs({ - initialTab, - children, - testId, - onChange, - variant, - version = "2", -}: GoabxTabsProps): JSX.Element { - const ref = useRef(null); - - useEffect(() => { - const element = ref.current; - if (element && onChange) { - const handler = (event: Event) => { - const detail = (event as CustomEvent).detail; - onChange(detail); - }; - element.addEventListener("_change", handler); - return () => { - element.removeEventListener("_change", handler); - }; - } - }, [onChange]); - - return ( - - {children} - - ); -} - -export default GoabxTabs; diff --git a/libs/react-components/src/experimental/textarea/textarea.spec.tsx b/libs/react-components/src/experimental/textarea/textarea.spec.tsx deleted file mode 100644 index 396b04ce2b..0000000000 --- a/libs/react-components/src/experimental/textarea/textarea.spec.tsx +++ /dev/null @@ -1,107 +0,0 @@ -import { fireEvent, render } from "@testing-library/react"; -import GoabxTextArea from "./textarea"; -import { describe, it, expect, vi } from "vitest"; -import { GoabTextAreaOnChangeDetail } from "@abgov/ui-components-common"; - -const noop = () => { - /* do nothing */ -}; - -describe("GoabxTextArea", () => { - it("should render with properties", async () => { - render(); - - const el = document.querySelector("goa-textarea"); - expect(el?.getAttribute("name")).toBe("textarea-name"); - expect(el?.getAttribute("readonly")).toBeNull(); - expect(el?.getAttribute("disabled")).toBeNull(); - expect(el?.getAttribute("error")).toBeNull(); - }); - - it("should render with properties", async () => { - render( - , - ); - - const el = document.querySelector("goa-textarea"); - expect(el?.getAttribute("name")).toBe("textarea-name"); - expect(el?.getAttribute("value")).toBe("textarea-value"); - expect(el?.getAttribute("rows")).toBe("10"); - expect(el?.getAttribute("placeholder")).toBe("textarea-placeholder"); - expect(el?.getAttribute("readonly")).toBe("true"); - expect(el?.getAttribute("disabled")).toBe("true"); - expect(el?.getAttribute("error")).toBe("true"); - expect(el?.getAttribute("countby")).toBe("word"); - expect(el?.getAttribute("maxcount")).toBe("50"); - expect(el?.getAttribute("maxwidth")).toBe("100px"); - expect(el?.getAttribute("mt")).toBe("s"); - expect(el?.getAttribute("mr")).toBe("m"); - expect(el?.getAttribute("mb")).toBe("l"); - expect(el?.getAttribute("ml")).toBe("xl"); - expect(el?.getAttribute("autocomplete")).toBe("off"); - }); - - it("handles the onChange event", async () => { - const onChange = vi.fn(); - const newValue = "new-value"; - - render( - { - expect(event.name).toBe("textarea-name"); - expect(event.value).toBe(newValue); - onChange(); - }} - />, - ); - - const el = document.querySelector("goa-textarea"); - - if (el) { - fireEvent( - el, - new CustomEvent("_change", { - detail: { name: "textarea-name", value: newValue }, - }), - ); - } - - expect(onChange).toBeCalled(); - }); - - it("should pass data-grid attributes", () => { - render( - - ); - const el = document.querySelector("goa-textarea"); - expect(el?.getAttribute("data-grid")).toBe("cell"); - }); -}); diff --git a/libs/react-components/src/experimental/textarea/textarea.tsx b/libs/react-components/src/experimental/textarea/textarea.tsx deleted file mode 100644 index 57bcc9863c..0000000000 --- a/libs/react-components/src/experimental/textarea/textarea.tsx +++ /dev/null @@ -1,126 +0,0 @@ -import { - GoabTextAreaCountBy, - GoabTextAreaOnChangeDetail, - GoabTextAreaOnKeyPressDetail, - GoabTextAreaOnBlurDetail, - GoabTextAreaSize, - Margins, - DataAttributes, -} from "@abgov/ui-components-common"; -import { useEffect, useRef, type JSX } from "react"; -import { transformProps, lowercase } from "../../lib/common/extract-props"; - -interface WCProps extends Margins { - name: string; - value?: string; - placeholder?: string; - rows?: number; - error?: string; - readOnly?: string; - disabled?: string; - width?: string; - maxwidth?: string; - arialabel?: string; - countby?: GoabTextAreaCountBy; - maxcount?: number; - autocomplete?: string; - testid?: string; - size?: GoabTextAreaSize; - version?: string; -} - -declare module "react" { - // eslint-disable-next-line @typescript-eslint/no-namespace - namespace JSX { - interface IntrinsicElements { - "goa-textarea": WCProps & - React.HTMLAttributes & { - ref: React.Ref; - }; - } - } -} - -export interface GoabxTextAreaProps extends Margins, DataAttributes { - name: string; - value?: string; - id?: string; - placeholder?: string; - rows?: number; - error?: boolean; - readOnly?: boolean; - disabled?: boolean; - width?: string; - maxWidth?: string; - testId?: string; - ariaLabel?: string; - countBy?: GoabTextAreaCountBy; - maxCount?: number; - autoComplete?: string; - size?: GoabTextAreaSize; - version?: string; - - onChange?: (event: GoabTextAreaOnChangeDetail) => void; - onKeyPress?: (event: GoabTextAreaOnKeyPressDetail) => void; - onBlur?: (event: GoabTextAreaOnBlurDetail) => void; -} - -export function GoabxTextArea({ - readOnly, - disabled, - error, - onChange, - onKeyPress, - onBlur, - version = "2", - ...rest -}: GoabxTextAreaProps): JSX.Element { - const el = useRef(null); - - const _props = transformProps(rest, lowercase); - - useEffect(() => { - if (!el.current) { - return; - } - const current = el.current; - - const changeListener: EventListener = (e: Event) => { - const detail = (e as CustomEvent).detail; - onChange?.({ ...detail, event: e }); - }; - - const keypressListener = (e: unknown) => { - const detail = (e as CustomEvent).detail; - onKeyPress?.({ ...detail, event: e as Event }); - }; - - const blurListener = (e: unknown) => { - const detail = (e as CustomEvent).detail; - onBlur?.({ ...detail, event: e as Event }); - }; - - current.addEventListener("_change", changeListener); - current.addEventListener("_keyPress", keypressListener); - current.addEventListener("_blur", blurListener); - - return () => { - current.removeEventListener("_change", changeListener); - current.removeEventListener("_keyPress", keypressListener); - current.removeEventListener("_blur", blurListener); - }; - }, [el, onChange, onKeyPress, onBlur]); - - return ( - - ); -} - -export default GoabxTextArea; diff --git a/libs/react-components/src/experimental/work-side-menu-item/work-side-menu-item.spec.tsx b/libs/react-components/src/experimental/work-side-menu-item/work-side-menu-item.spec.tsx deleted file mode 100644 index 85983989f1..0000000000 --- a/libs/react-components/src/experimental/work-side-menu-item/work-side-menu-item.spec.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import { render } from "@testing-library/react"; - -import WorkSideMenuItem from "./work-side-menu-item"; - -describe("WorkSideMenuItem", () => { - it("should render successfully", () => { - const { baseElement } = render( - - ); - expect(baseElement).toBeTruthy(); - const menuItem = baseElement.querySelector("goa-work-side-menu-item"); - expect(menuItem?.getAttribute("label")).toBe("Foo"); - expect(menuItem?.getAttribute("url")).toBe("#"); - expect(menuItem?.getAttribute("badge")).toBe("42"); - expect(menuItem?.getAttribute("icon")).toBe("star"); - expect(menuItem?.getAttribute("testid")).toBe("foo"); - expect(menuItem?.getAttribute("type")).toBe("success"); - }); -}); diff --git a/libs/react-components/src/index.ts b/libs/react-components/src/index.ts index 52d33aabfe..f51ac6b0b9 100644 --- a/libs/react-components/src/index.ts +++ b/libs/react-components/src/index.ts @@ -75,3 +75,8 @@ export * from "./lib/tooltip/tooltip"; export * from "./lib/two-column-layout/two-column-layout"; export * from "./lib/filter-chip/filter-chip"; export * from "./lib/use-public-form-controller"; +export * from "./lib/work-side-menu/work-side-menu"; +export * from "./lib/work-side-menu-group/work-side-menu-group"; +export * from "./lib/work-side-menu-item/work-side-menu-item"; +export * from "./lib/work-side-notification-item/work-side-notification-item"; +export * from "./lib/work-side-notification-panel/work-side-notification-panel"; diff --git a/libs/react-components/src/lib/app-header-menu/app-header-menu.spec.tsx b/libs/react-components/src/lib/app-header-menu/app-header-menu.spec.tsx index c50adace64..c46737a325 100644 --- a/libs/react-components/src/lib/app-header-menu/app-header-menu.spec.tsx +++ b/libs/react-components/src/lib/app-header-menu/app-header-menu.spec.tsx @@ -1,51 +1,72 @@ import { render } from "@testing-library/react"; +import { GoabAppHeaderMenu } from "./app-header-menu"; +import { describe, it, expect } from "vitest"; -import GoabAppHeaderMenu from "./app-header-menu"; - -describe("AppHeaderMenu", () => { - it("should render with no children", () => { - const { baseElement } = render(); - const el = baseElement.querySelector("goa-app-header-menu"); +describe("GoabAppHeaderMenu", () => { + it("should render with heading", () => { + const { container } = render(); + const el = container.querySelector("goa-app-header-menu"); expect(el).toBeTruthy(); - expect(el?.getAttribute("heading")).toBe("Some label"); + expect(el?.getAttribute("heading")).toBe("Menu label"); }); it("should render children", () => { - const { baseElement } = render( - - Foo - Bar + const { container } = render( + + Dashboard + Accounts , ); - const el = baseElement.querySelector("goa-app-header-menu"); + + const el = container.querySelector("goa-app-header-menu"); expect(el).toBeTruthy(); - expect(el?.querySelector("a[href='#foo']")).toBeTruthy(); - expect(el?.querySelector("a[href='#bar']")).toBeTruthy(); - expect(el?.querySelector("a[href='#boom']")).toBeFalsy(); + expect(el?.querySelector("a[href='#dashboard']")).toBeTruthy(); + expect(el?.querySelector("a[href='#accounts']")).toBeTruthy(); }); - it("should set the props correctly", () => { - const { baseElement } = render( - , + it("should render all properties", () => { + const { container } = render( + , ); - const el = baseElement.querySelector("goa-app-header-menu"); - expect(el).toBeTruthy(); - expect(el?.getAttribute("heading")).toBe("Some label"); - expect(el?.getAttribute("leadingIcon")).toBe("search"); - expect(el?.getAttribute("testid")).toBe("foo"); + + const el = container.querySelector("goa-app-header-menu"); + expect(el?.getAttribute("heading")).toBe("Menu label"); + expect(el?.getAttribute("leadingicon")).toBe("search"); + expect(el?.getAttribute("testid")).toBe("my-menu"); + }); + + it("should render without leadingIcon", () => { + const { container } = render(); + + const el = container.querySelector("goa-app-header-menu"); + expect(el?.getAttribute("leadingicon")).toBeNull(); + }); + + it("should set slot attribute when slotName is provided", () => { + const { container } = render( + , + ); + + const el = container.querySelector("goa-app-header-menu"); + expect(el?.getAttribute("slot")).toBe("navigation"); + }); + + it("should not set slot attribute when slotName is not provided", () => { + const { container } = render(); + + const el = container.querySelector("goa-app-header-menu"); + expect(el?.getAttribute("slot")).toBeNull(); }); it("should pass data-grid attributes", () => { - const { baseElement } = render( - + const { container } = render( + Content , ); - const el = baseElement.querySelector("goa-app-header-menu"); + + const el = container.querySelector("goa-app-header-menu"); expect(el?.getAttribute("data-grid")).toBe("row"); }); }); diff --git a/libs/react-components/src/lib/app-header-menu/app-header-menu.tsx b/libs/react-components/src/lib/app-header-menu/app-header-menu.tsx index 9c123c57f7..68da03126e 100644 --- a/libs/react-components/src/lib/app-header-menu/app-header-menu.tsx +++ b/libs/react-components/src/lib/app-header-menu/app-header-menu.tsx @@ -8,14 +8,6 @@ interface WCProps { testid?: string; } -/* eslint-disable-next-line */ -export interface GoabAppHeaderMenuProps extends DataAttributes { - heading: string; - leadingIcon?: GoabIconType; - testId?: string; - children?: ReactNode; -} - declare module "react" { // eslint-disable-next-line @typescript-eslint/no-namespace namespace JSX { @@ -25,14 +17,23 @@ declare module "react" { } } +export interface GoabAppHeaderMenuProps extends DataAttributes { + heading: string; + leadingIcon?: GoabIconType; + testId?: string; + slotName?: string; + children?: ReactNode; +} + export function GoabAppHeaderMenu({ children, + slotName, ...rest }: GoabAppHeaderMenuProps) { const _props = transformProps(rest, lowercase); return ( - + {children} ); diff --git a/libs/react-components/src/lib/app-header/app-header.spec.tsx b/libs/react-components/src/lib/app-header/app-header.spec.tsx index dc16baae16..70e533f8bb 100644 --- a/libs/react-components/src/lib/app-header/app-header.spec.tsx +++ b/libs/react-components/src/lib/app-header/app-header.spec.tsx @@ -1,37 +1,92 @@ import { render } from "@testing-library/react"; +import { fireEvent } from "@testing-library/dom"; import { GoabAppHeader } from "./app-header"; +import { describe, it, expect, vi } from "vitest"; describe("GoabAppHeader", () => { - it("should render", () => { - const { baseElement } = render(); + it("should render with version 2", () => { + const { container } = render(); - const header = baseElement.querySelector("goa-app-header"); - expect(header).toBeTruthy(); - expect(header?.getAttribute("hasmenuclickhandler")).toBe("false"); + const el = container.querySelector("goa-app-header"); + expect(el).toBeTruthy(); + expect(el?.getAttribute("version")).toBe("2"); }); - it("should dispatch onMobileMenuClick if provided", () => { - const onMobileMenuClick = vi.fn(); - const { baseElement } = render( - , + it("should render all properties", () => { + const { container } = render( + , + ); + + const el = container.querySelector("goa-app-header"); + expect(el?.getAttribute("heading")).toBe("Service name"); + expect(el?.getAttribute("secondarytext")).toBe("Beta"); + expect(el?.getAttribute("url")).toBe("https://example.com"); + expect(el?.getAttribute("maxcontentwidth")).toBe("800px"); + expect(el?.getAttribute("fullmenubreakpoint")).toBe("1024"); + expect(el?.getAttribute("testid")).toBe("my-header"); + expect(el?.getAttribute("version")).toBe("2"); + }); + + it("should set hasmenuclickhandler to false when no handler provided", () => { + const { container } = render(); + + const el = container.querySelector("goa-app-header"); + expect(el?.getAttribute("hasmenuclickhandler")).toBe("false"); + }); + + it("should set hasmenuclickhandler to true and dispatch event when handler provided", () => { + const onMenuClick = vi.fn(); + const { container } = render( + , + ); + + const el = container.querySelector("goa-app-header"); + expect(el?.getAttribute("hasmenuclickhandler")).toBe("true"); + + el && fireEvent(el, new CustomEvent("_menuClick")); + expect(onMenuClick).toHaveBeenCalledTimes(1); + }); + + it("should render children into the slot", () => { + const { container } = render( + +
Navigation content
+
, + ); + + const el = container.querySelector("goa-app-header"); + expect(el?.querySelector("[data-testid='child-content']")).toBeTruthy(); + }); + + it("should pass secondaryText as the secondarytext attribute", () => { + const { container } = render( + , ); - const header = baseElement.querySelector("goa-app-header"); - expect(header).toBeTruthy(); - expect(header?.getAttribute("hasmenuclickhandler")).toBe("true"); - header?.dispatchEvent(new Event("_menuClick")); - expect(onMobileMenuClick).toHaveBeenCalled(); + const el = container.querySelector("goa-app-header"); + expect(el?.getAttribute("secondarytext")).toBe("Environment label"); + }); + + it("should not set secondarytext when not provided", () => { + const { container } = render(); + + const el = container.querySelector("goa-app-header"); + expect(el?.getAttribute("secondarytext")).toBeNull(); }); it("should pass data-grid attributes", () => { - const { baseElement } = render( - , + const { container } = render( + , ); - const el = baseElement.querySelector("goa-app-header"); + + const el = container.querySelector("goa-app-header"); expect(el?.getAttribute("data-grid")).toBe("row"); }); }); diff --git a/libs/react-components/src/lib/app-header/app-header.tsx b/libs/react-components/src/lib/app-header/app-header.tsx index 068a26abee..26a50103f1 100644 --- a/libs/react-components/src/lib/app-header/app-header.tsx +++ b/libs/react-components/src/lib/app-header/app-header.tsx @@ -4,26 +4,30 @@ import { transformProps, lowercase } from "../common/extract-props"; interface WCProps { heading?: string; + secondarytext?: string; url?: string; maxcontentwidth?: string; fullmenubreakpoint?: number; hasmenuclickhandler?: string; testid?: string; + version?: string; } declare module "react" { // eslint-disable-next-line @typescript-eslint/no-namespace namespace JSX { interface IntrinsicElements { - "goa-app-header": WCProps & React.HTMLAttributes & { - ref: React.RefObject; - }; + "goa-app-header": WCProps & + React.HTMLAttributes & { + ref: React.RefObject; + }; } } } export interface GoabAppHeaderProps extends DataAttributes { heading?: string; + secondaryText?: string; url?: string; maxContentWidth?: string; fullMenuBreakpoint?: number; @@ -35,6 +39,7 @@ export interface GoabAppHeaderProps extends DataAttributes { export function GoabAppHeader({ onMenuClick, children, + secondaryText, ...rest }: GoabAppHeaderProps): JSX.Element { const el = useRef(null); @@ -62,11 +67,11 @@ export function GoabAppHeader({ {children} ); } - -export default GoabAppHeader; diff --git a/libs/react-components/src/lib/badge/badge.spec.tsx b/libs/react-components/src/lib/badge/badge.spec.tsx index 91eea81cb9..27243afc5b 100644 --- a/libs/react-components/src/lib/badge/badge.spec.tsx +++ b/libs/react-components/src/lib/badge/badge.spec.tsx @@ -17,6 +17,8 @@ describe("GoabBadge", () => { type="information" content="Text Content" icon + size="large" + emphasis="subtle" mt="s" mr="m" mb="l" @@ -29,6 +31,8 @@ describe("GoabBadge", () => { expect(el?.getAttribute("type")).toBe("information"); expect(el?.getAttribute("content")).toBe("Text Content"); expect(el?.getAttribute("icon")).toBe("true"); + expect(el?.getAttribute("size")).toBe("large"); + expect(el?.getAttribute("emphasis")).toBe("subtle"); expect(el?.getAttribute("mt")).toBe("s"); expect(el?.getAttribute("mr")).toBe("m"); expect(el?.getAttribute("mb")).toBe("l"); diff --git a/libs/react-components/src/lib/badge/badge.tsx b/libs/react-components/src/lib/badge/badge.tsx index c10bb78f5a..01a63a45f6 100644 --- a/libs/react-components/src/lib/badge/badge.tsx +++ b/libs/react-components/src/lib/badge/badge.tsx @@ -1,5 +1,7 @@ import { DataAttributes, + GoabBadgeEmphasis, + GoabBadgeSize, GoabBadgeType, GoabIconType, Margins, @@ -14,6 +16,18 @@ interface WCProps extends Margins { arialabel?: string; testid?: string; icontype?: GoabIconType; + size?: GoabBadgeSize; + emphasis?: GoabBadgeEmphasis; + version?: string; +} + +declare module "react" { + // eslint-disable-next-line @typescript-eslint/no-namespace + namespace JSX { + interface IntrinsicElements { + "goa-badge": WCProps & React.HTMLAttributes; + } + } } export interface GoabBadgeProps extends Margins, DataAttributes { @@ -23,6 +37,8 @@ export interface GoabBadgeProps extends Margins, DataAttributes { testId?: string; ariaLabel?: string; iconType?: GoabIconType; + size?: GoabBadgeSize; + emphasis?: GoabBadgeEmphasis; } /** @@ -43,8 +59,14 @@ function getIconValue(icon?: boolean, iconType?: GoabIconType): "true" | "false" return iconType ? "true" : "false"; } -export function GoabBadge({ icon, iconType, ...rest }: GoabBadgeProps): JSX.Element { - const _props = transformProps(rest, lowercase); +export function GoabBadge({ + icon, + iconType, + size = "medium", + emphasis = "strong", + ...rest +}: GoabBadgeProps): JSX.Element { + const _props = transformProps({ size, emphasis, ...rest }, lowercase); return ( - ); -} - -/** - * @deprecated - */ -export function GoabInfoBadge({ - content, - testId, - icon, - mt, - mr, - mb, - ml, - ariaLabel, -}: GoabBadgeProps): JSX.Element { - return ( - - ); -} - -/** - * @deprecated - */ -export function GoabSuccessBadge({ - content, - testId, - icon, - mt, - mr, - mb, - ml, - ariaLabel, -}: GoabBadgeProps): JSX.Element { - return ( - - ); -} - -/** - * @deprecated - */ -export function GoabImportantBadge({ - content, - testId, - icon, - mt, - mr, - mb, - ml, - ariaLabel, -}: GoabBadgeProps): JSX.Element { - return ( - - ); -} - -/** - * @deprecated - */ -export function GoabEmergencyBadge({ - content, - testId, - icon, - mt, - mr, - mb, - ml, - ariaLabel, -}: GoabBadgeProps): JSX.Element { - return ( - ); } diff --git a/libs/react-components/src/lib/button/button.tsx b/libs/react-components/src/lib/button/button.tsx index 6aeceab7b1..550c131055 100644 --- a/libs/react-components/src/lib/button/button.tsx +++ b/libs/react-components/src/lib/button/button.tsx @@ -4,7 +4,8 @@ import { GoabButtonType, GoabButtonVariant, GoabIconType, - Margins, DataAttributes, + Margins, + DataAttributes, } from "@abgov/ui-components-common"; import { transformProps, lowercase } from "../common/extract-props"; @@ -20,6 +21,19 @@ interface WCProps extends Margins { action?: string; actionArgs?: string; actionArg?: string; + version?: string; +} + +declare module "react" { + // eslint-disable-next-line @typescript-eslint/no-namespace + namespace JSX { + interface IntrinsicElements { + "goa-button": WCProps & + React.HTMLAttributes & { + ref: React.RefObject; + }; + } + } } export interface GoabButtonProps extends Margins, DataAttributes { @@ -75,6 +89,7 @@ export function GoabButton({ action-arg={actionArg} action-args={JSON.stringify(actionArgs)} {..._props} + version="2" > {children} diff --git a/libs/react-components/src/lib/calendar/calendar.tsx b/libs/react-components/src/lib/calendar/calendar.tsx index bfd1312412..cf8e27da49 100644 --- a/libs/react-components/src/lib/calendar/calendar.tsx +++ b/libs/react-components/src/lib/calendar/calendar.tsx @@ -1,5 +1,9 @@ import { useEffect, useRef, type JSX } from "react"; -import { DataAttributes, GoabCalendarOnChangeDetail, Margins } from "@abgov/ui-components-common"; +import { + DataAttributes, + GoabCalendarOnChangeDetail, + Margins, +} from "@abgov/ui-components-common"; import { transformProps, lowercase } from "../common/extract-props"; interface WCProps extends Margins { @@ -8,8 +12,20 @@ interface WCProps extends Margins { min?: string; max?: string; testid?: string; + version?: string; } +declare module "react" { + // eslint-disable-next-line @typescript-eslint/no-namespace + namespace JSX { + interface IntrinsicElements { + "goa-calendar": WCProps & + React.HTMLAttributes & { + ref: React.RefObject; + }; + } + } +} export interface GoabCalendarProps extends Margins, DataAttributes { name?: string; value?: string; @@ -40,12 +56,12 @@ export function GoabCalendar({ name: name || "", value: (e as CustomEvent).detail.value, }); - } + }; current.addEventListener("_change", listener); return () => { current.removeEventListener("_change", listener); - } + }; }, []); return ( @@ -54,6 +70,7 @@ export function GoabCalendar({ name={name} min={min || undefined} max={max || undefined} + version="2" {..._props} /> ); diff --git a/libs/react-components/src/lib/callout/callout.spec.tsx b/libs/react-components/src/lib/callout/callout.spec.tsx index 5478523e83..a9e826c71d 100644 --- a/libs/react-components/src/lib/callout/callout.spec.tsx +++ b/libs/react-components/src/lib/callout/callout.spec.tsx @@ -2,13 +2,14 @@ import React from "react"; import { render } from "@testing-library/react"; import GoabCallout from "./callout"; -describe("Callout", () => { +describe("GoabCallout", () => { test("Callout shall render", async () => { const result = render( { expect(el?.getAttribute("heading")).toContain("Callout Title"); expect(el?.getAttribute("type")).toContain("information"); expect(el?.getAttribute("size")).toContain("medium"); + expect(el?.getAttribute("emphasis")).toContain("high"); expect(el?.getAttribute("maxwidth")).toBe("480px"); expect(el?.getAttribute("mt")).toBe("s"); expect(el?.getAttribute("mr")).toBe("m"); diff --git a/libs/react-components/src/lib/callout/callout.tsx b/libs/react-components/src/lib/callout/callout.tsx index 29c8e31311..5544eb1844 100644 --- a/libs/react-components/src/lib/callout/callout.tsx +++ b/libs/react-components/src/lib/callout/callout.tsx @@ -1,5 +1,6 @@ import { GoabCalloutAriaLive, + GoabCalloutEmphasis, GoabCalloutSize, GoabCalloutType, GoabCalloutIconTheme, @@ -14,7 +15,18 @@ interface WCProps extends Margins { arialive?: GoabCalloutAriaLive; maxwidth?: string; icontheme?: GoabCalloutIconTheme; + emphasis?: GoabCalloutEmphasis; testid?: string; + version?: string; +} + +declare module "react" { + // eslint-disable-next-line @typescript-eslint/no-namespace + namespace JSX { + interface IntrinsicElements { + "goa-callout": WCProps & React.HTMLAttributes; + } + } } export interface GoabCalloutProps extends Margins, DataAttributes { @@ -22,6 +34,7 @@ export interface GoabCalloutProps extends Margins, DataAttributes { type?: GoabCalloutType; size?: GoabCalloutSize; iconTheme?: GoabCalloutIconTheme; + emphasis?: GoabCalloutEmphasis; maxWidth?: string; testId?: string; ariaLive?: GoabCalloutAriaLive; @@ -33,16 +46,17 @@ export const GoabCallout = ({ iconTheme = "outline", size = "large", ariaLive = "off", + emphasis = "medium", children, ...rest }: GoabCalloutProps) => { const _props = transformProps( - { type, icontheme: iconTheme, size, arialive: ariaLive, ...rest }, - lowercase + { type, icontheme: iconTheme, size, arialive: ariaLive, emphasis, ...rest }, + lowercase, ); return ( - + {children} ); diff --git a/libs/react-components/src/lib/checkbox-list/checkbox-list.spec.tsx b/libs/react-components/src/lib/checkbox-list/checkbox-list.spec.tsx index 7d0c555459..85e7d49c48 100644 --- a/libs/react-components/src/lib/checkbox-list/checkbox-list.spec.tsx +++ b/libs/react-components/src/lib/checkbox-list/checkbox-list.spec.tsx @@ -1,216 +1,98 @@ -import { render, cleanup } from "@testing-library/react"; -import { fireEvent, waitFor } from "@testing-library/dom"; -import { describe, it, expect, vi, beforeEach, afterEach } from "vitest"; -import { useState } from "react"; -import GoabCheckboxList from "./checkbox-list"; -import { GoabCheckbox } from "../checkbox/checkbox"; +import { render } from "@testing-library/react"; +import { fireEvent } from "@testing-library/dom"; +import GoabCheckboxList, { GoabCheckboxListProps as CheckboxListProps } from "./checkbox-list"; +import { describe, it, expect, vi } from "vitest"; import { GoabCheckboxListOnChangeDetail } from "@abgov/ui-components-common"; -const testId = "checkbox-list-test"; - -describe("GoabCheckboxList (React)", () => { - beforeEach(() => { - vi.clearAllMocks(); - }); - - afterEach(() => { - cleanup(); - }); +const testId = "test-id"; +describe("GoabCheckboxList", () => { it("should render", () => { - render( - , - ); + render(); - const el = document.querySelector("goa-checkbox-list"); - expect(el?.getAttribute("name")).toBe("foo"); - expect(el?.getAttribute("disabled")).toBe("true"); - expect(el?.getAttribute("error")).toBe("true"); - expect(el?.getAttribute("testid")).toBe(testId); - expect(el?.getAttribute("maxwidth")).toBe("480px"); - expect(el?.getAttribute("mt")).toBe("s"); - expect(el?.getAttribute("mr")).toBe("m"); - expect(el?.getAttribute("mb")).toBe("l"); - expect(el?.getAttribute("ml")).toBe("xl"); - // value is set as a property (not reflected to attribute); verified via change event below + const checkboxList = document.querySelector("goa-checkbox-list"); + expect(checkboxList?.getAttribute("name")).toBe("foo"); + expect(checkboxList?.getAttribute("version")).toBe("2"); + expect(checkboxList?.getAttribute("disabled")).toBeNull(); + expect(checkboxList?.getAttribute("error")).toBeNull(); }); - it("should render checkbox children", async () => { - render( - - - - - , - ); - - const list = document.querySelector("goa-checkbox-list"); - expect(list).toBeTruthy(); - - const checkboxes = list?.querySelectorAll("goa-checkbox"); - expect(checkboxes?.length).toBe(3); + it("should render with props", () => { + const props: CheckboxListProps = { + name: "foo", + value: ["option1", "option2"], + maxWidth: "480px", + size: "compact", + disabled: true, + error: true, + testId: testId, + mt: "s", + mr: "m", + mb: "l", + ml: "xl", + }; - const first = checkboxes?.[0] as HTMLElement & { value?: string }; - expect(first.getAttribute("name")).toBe("basic1"); - expect(first.getAttribute("text")).toBe("Basic 1"); + render(); + + const checkboxList = document.querySelector("goa-checkbox-list"); + expect(checkboxList?.getAttribute("name")).toBe("foo"); + expect(checkboxList?.getAttribute("maxwidth")).toBe("480px"); + expect(checkboxList?.getAttribute("size")).toBe("compact"); + expect(checkboxList?.getAttribute("version")).toBe("2"); + expect(checkboxList?.getAttribute("disabled")).toBe("true"); + expect(checkboxList?.getAttribute("error")).toBe("true"); + expect(checkboxList?.getAttribute("testid")).toBe(testId); + expect(checkboxList?.getAttribute("mt")).toBe("s"); + expect(checkboxList?.getAttribute("mr")).toBe("m"); + expect(checkboxList?.getAttribute("mb")).toBe("l"); + expect(checkboxList?.getAttribute("ml")).toBe("xl"); }); - it("should change disabled and error", () => { - const { rerender } = render( - , - ); + it("should default version to 2", () => { + render(); - let el = document.querySelector("goa-checkbox-list"); - expect(el?.getAttribute("disabled")).toBeNull(); - expect(el?.getAttribute("error")).toBeNull(); - - rerender(); - - el = document.querySelector("goa-checkbox-list"); - expect(el?.getAttribute("disabled")).toBe("true"); - expect(el?.getAttribute("error")).toBe("true"); + const checkboxList = document.querySelector("goa-checkbox-list"); + expect(checkboxList?.getAttribute("version")).toBe("2"); }); - it("should handle the onChange event and pass detail", () => { - const onChange = vi.fn(); - - render(); + it("should handle the onChange event", async function () { + const onChangeStub = vi.fn(); - const el = document.querySelector("goa-checkbox-list"); - expect(el).toBeTruthy(); + function onChange({ name, value }: GoabCheckboxListOnChangeDetail) { + expect(name).toBe("foo"); + expect(value).toEqual(["option1"]); + onChangeStub(); + } - const changeEvent = new Event("change"); - const detail: GoabCheckboxListOnChangeDetail = { + const props: CheckboxListProps = { name: "foo", - value: ["x", "y"], - event: changeEvent, + value: [], + onChange: onChange, + testId: testId, }; - el && + render(); + const checkboxList = document.querySelector("goa-checkbox-list"); + + checkboxList && fireEvent( - el, + checkboxList, new CustomEvent("_change", { - detail, + detail: { name: "foo", value: ["option1"] }, }), ); - - expect(onChange).toHaveBeenCalledTimes(1); - expect(onChange).toHaveBeenCalledWith( - expect.objectContaining({ ...detail, event: expect.any(Event) }), - ); - }); - - it("should update onChange handler when prop changes", () => { - const onChange1 = vi.fn(); - const onChange2 = vi.fn(); - - const { rerender } = render(); - - const el = document.querySelector("goa-checkbox-list"); - const detail: GoabCheckboxListOnChangeDetail = { - name: "foo", - value: ["x"], - }; - - // Fire event with first handler - el && fireEvent(el, new CustomEvent("_change", { detail })); - expect(onChange1).toHaveBeenCalledTimes(1); - expect(onChange2).not.toHaveBeenCalled(); - - // Update handler - rerender(); - - // Fire event with second handler - el && fireEvent(el, new CustomEvent("_change", { detail })); - expect(onChange1).toHaveBeenCalledTimes(1); // Should not be called again - expect(onChange2).toHaveBeenCalledTimes(1); + expect(onChangeStub).toBeCalled(); }); - it("should update child checked attribute on rerender", () => { - const { rerender } = render( - - - , - ); - - let email = document.querySelector('goa-checkbox[name="email"]'); - expect(email?.getAttribute("checked")).toBeNull(); - - rerender( - - - , + it("should render children", () => { + render( + +
Child content
+
); - email = document.querySelector('goa-checkbox[name="email"]'); - expect(email?.getAttribute("checked")).toBe("true"); - }); - it("should handle component unmounting", () => { - const { unmount } = render(); - - expect(() => { - unmount(); - }).not.toThrow(); - }); - - it("should handle component remounting", () => { - const { unmount } = render(); - unmount(); - - expect(() => { - render(); - }).not.toThrow(); - }); - - it("should handle value changes", async () => { - const TestComponent = () => { - const [values, setValues] = useState(["initial"]); - - return ( -
- {values.join(",")} - - -
- ); - }; - - const { getByTestId } = render(); - - // Initial state - expect(getByTestId("values-out").textContent).toBe("initial"); - - // Click to change - fireEvent.click(getByTestId("change-btn")); - - // State updated (wait for React to flush updates) - await vi.waitFor(() => { - expect(getByTestId("values-out").textContent).toBe("changed"); - }); - }); - - it("should handle empty and undefined values", () => { - const { rerender } = render(); - - let el = document.querySelector("goa-checkbox-list"); - expect(el).toBeTruthy(); - - // Test with undefined - rerender(); - el = document.querySelector("goa-checkbox-list"); - expect(el).toBeTruthy(); + const child = document.querySelector("[data-testid='child']"); + expect(child).toBeTruthy(); + expect(child?.textContent).toBe("Child content"); }); }); diff --git a/libs/react-components/src/lib/checkbox-list/checkbox-list.tsx b/libs/react-components/src/lib/checkbox-list/checkbox-list.tsx index c1d83754f6..e6632f4245 100644 --- a/libs/react-components/src/lib/checkbox-list/checkbox-list.tsx +++ b/libs/react-components/src/lib/checkbox-list/checkbox-list.tsx @@ -1,18 +1,9 @@ import { GoabCheckboxListOnChangeDetail, - Margins + Margins, } from "@abgov/ui-components-common"; import { useEffect, useRef, type JSX } from "react"; -declare module "react" { - // eslint-disable-next-line @typescript-eslint/no-namespace - namespace JSX { - interface IntrinsicElements { - "goa-checkbox-list": WCProps & React.HTMLAttributes; - } - } -} - interface WCProps extends Margins { ref: React.RefObject; name: string; @@ -21,6 +12,17 @@ interface WCProps extends Margins { error?: string; testid?: string; maxwidth?: string; + version?: string; + size?: string; +} + +declare module "react" { + // eslint-disable-next-line @typescript-eslint/no-namespace + namespace JSX { + interface IntrinsicElements { + "goa-checkbox-list": WCProps & React.HTMLAttributes; + } + } } export interface GoabCheckboxListProps extends Margins { @@ -30,6 +32,7 @@ export interface GoabCheckboxListProps extends Margins { error?: boolean; testId?: string; maxWidth?: string; + size?: "default" | "compact"; children?: React.ReactNode; onChange?: (detail: GoabCheckboxListOnChangeDetail) => void; } @@ -41,6 +44,7 @@ export function GoabCheckboxList({ error, testId, maxWidth, + size = "default", children, onChange, mt, @@ -55,26 +59,14 @@ export function GoabCheckboxList({ const current = el.current; const listener = (e: Event) => { - try { - const detail = (e as CustomEvent).detail; - onChange?.({ ...detail, event: e }); - } catch (error) { - console.error("Error handling checkbox list change:", error); - } + const detail = (e as CustomEvent).detail; + onChange?.({ ...detail, event: e }); }; - try { - current.addEventListener("_change", listener); - } catch (error) { - console.error("Failed to attach checkbox list listener:", error); - } + current.addEventListener("_change", listener); return () => { - try { - current.removeEventListener("_change", listener); - } catch (error) { - console.error("Failed to remove checkbox list listener:", error); - } + current.removeEventListener("_change", listener); }; }, [onChange]); @@ -87,6 +79,8 @@ export function GoabCheckboxList({ error={error ? "true" : undefined} testid={testId} maxwidth={maxWidth} + version="2" + size={size} mt={mt} mr={mr} mb={mb} diff --git a/libs/react-components/src/lib/checkbox/checkbox.spec.tsx b/libs/react-components/src/lib/checkbox/checkbox.spec.tsx index 490cd10a60..669b1c94a9 100644 --- a/libs/react-components/src/lib/checkbox/checkbox.spec.tsx +++ b/libs/react-components/src/lib/checkbox/checkbox.spec.tsx @@ -24,6 +24,7 @@ describe("GoabCheckbox", () => { value: "bar", text: "to display", maxWidth: "480px", + size: "compact", disabled: true, checked: true, error: true, @@ -42,6 +43,7 @@ describe("GoabCheckbox", () => { expect(checkbox?.getAttribute("value")).toBe("bar"); expect(checkbox?.getAttribute("text")).toBe("to display"); expect(checkbox?.getAttribute("maxwidth")).toBe("480px"); + expect(checkbox?.getAttribute("size")).toBe("compact"); expect(checkbox?.getAttribute("disabled")).toBe("true"); expect(checkbox?.getAttribute("checked")).toBe("true"); expect(checkbox?.getAttribute("error")).toBe("true"); diff --git a/libs/react-components/src/lib/checkbox/checkbox.tsx b/libs/react-components/src/lib/checkbox/checkbox.tsx index e67cef0d4e..55b5f2cab2 100644 --- a/libs/react-components/src/lib/checkbox/checkbox.tsx +++ b/libs/react-components/src/lib/checkbox/checkbox.tsx @@ -1,7 +1,23 @@ -import { DataAttributes, GoabCheckboxOnChangeDetail, Margins } from "@abgov/ui-components-common"; +import { + DataAttributes, + GoabCheckboxOnChangeDetail, + GoabCheckboxSize, + Margins, +} from "@abgov/ui-components-common"; import { useEffect, useRef, type JSX } from "react"; import { transformProps, lowercase } from "../common/extract-props"; +declare module "react" { + // eslint-disable-next-line @typescript-eslint/no-namespace + namespace JSX { + interface IntrinsicElements { + "goa-checkbox": WCProps & React.HTMLAttributes & { + ref: React.RefObject; + }; + } + } +} + interface WCProps extends Margins { id?: string; name: string; @@ -17,6 +33,8 @@ interface WCProps extends Margins { revealarialabel?: string; maxwidth?: string; testid?: string; + size?: GoabCheckboxSize; + version?: string; } /* eslint-disable-next-line */ @@ -36,6 +54,7 @@ export interface GoabCheckboxProps extends Margins, DataAttributes { reveal?: React.ReactNode; revealAriaLabel?: string; maxWidth?: string; + size?: GoabCheckboxSize; onChange?: (detail: GoabCheckboxOnChangeDetail) => void; } @@ -53,11 +72,12 @@ export function GoabCheckbox({ onChange, name, children, + size = "default", ...rest }: GoabCheckboxProps): JSX.Element { const el = useRef(null); - const _props = transformProps(rest, lowercase); + const _props = transformProps({ size, ...rest }, lowercase); useEffect(() => { if (!el.current) { @@ -87,6 +107,7 @@ export function GoabCheckbox({ disabled={disabled ? "true" : undefined} value={typeof value === "boolean" ? (value ? "true" : undefined) : value} description={typeof description === "string" ? description : undefined} + version="2" > {children} {typeof description !== "string" && description && ( diff --git a/libs/react-components/src/lib/date-picker/date-picker.spec.tsx b/libs/react-components/src/lib/date-picker/date-picker.spec.tsx index 92e1ac629d..c2aa55d54e 100644 --- a/libs/react-components/src/lib/date-picker/date-picker.spec.tsx +++ b/libs/react-components/src/lib/date-picker/date-picker.spec.tsx @@ -1,6 +1,7 @@ import { render } from "@testing-library/react"; import { addMonths } from "date-fns"; import { describe, it, expect, vi } from "vitest"; +import { CalendarDate } from "@abgov/ui-components-common"; import DatePicker from "./date-picker"; @@ -43,11 +44,11 @@ describe("DatePicker", () => { const el = baseElement.querySelector("goa-date-picker"); expect(el).toBeTruthy(); expect(el?.getAttribute("name")).toBe("foo"); - expect(el?.getAttribute("value")).toBe(value.toISOString()); + expect(el?.getAttribute("value")).toBe(new CalendarDate(value).toString()); expect(el?.getAttribute("error")).toBe("true"); expect(el?.getAttribute("disabled")).toBe("true"); - expect(el?.getAttribute("min")).toBe(min.toISOString()); - expect(el?.getAttribute("max")).toBe(max.toISOString()); + expect(el?.getAttribute("min")).toBe(new CalendarDate(min).toString()); + expect(el?.getAttribute("max")).toBe(new CalendarDate(max).toString()); expect(el?.getAttribute("testid")).toBe("foo"); expect(el?.getAttribute("type")).toBe("input"); }); diff --git a/libs/react-components/src/lib/date-picker/date-picker.tsx b/libs/react-components/src/lib/date-picker/date-picker.tsx index 9f5c3b20e8..4e78a3bcb4 100644 --- a/libs/react-components/src/lib/date-picker/date-picker.tsx +++ b/libs/react-components/src/lib/date-picker/date-picker.tsx @@ -1,8 +1,10 @@ import { useEffect, useRef, type JSX } from "react"; import { + CalendarDate, GoabDatePickerInputType, GoabDatePickerOnChangeDetail, - Margins, DataAttributes, + Margins, + DataAttributes, } from "@abgov/ui-components-common"; import { transformProps, lowercase } from "../common/extract-props"; @@ -17,6 +19,19 @@ interface WCProps extends Margins { disabled?: string; testid?: string; width?: string; + version?: string; +} + +declare module "react" { + // eslint-disable-next-line @typescript-eslint/no-namespace + namespace JSX { + interface IntrinsicElements { + "goa-date-picker": WCProps & + React.HTMLAttributes & { + ref: React.RefObject; + }; + } + } } export interface GoabDatePickerProps extends Margins, DataAttributes { @@ -52,7 +67,9 @@ export function GoabDatePicker({ useEffect(() => { if (value && typeof value !== "string") { - console.warn("Using a `Date` type for value is deprecated. Instead use a string of the format `yyyy-mm-dd`") + console.warn( + "Using a `Date` type for value is deprecated. Instead use a string of the format `yyyy-mm-dd`", + ); } }, []); @@ -82,7 +99,7 @@ export function GoabDatePicker({ if (!val) return ""; if (val instanceof Date) { - return val.toISOString(); + return new CalendarDate(val).toString(); } return val; @@ -97,6 +114,7 @@ export function GoabDatePicker({ min={formatValue(min) || undefined} max={formatValue(max) || undefined} relative={relative ? "true" : undefined} + version="2" {..._props} /> ); diff --git a/libs/react-components/src/lib/drawer/drawer.spec.tsx b/libs/react-components/src/lib/drawer/drawer.spec.tsx index a1ff217f4c..9661f32d12 100644 --- a/libs/react-components/src/lib/drawer/drawer.spec.tsx +++ b/libs/react-components/src/lib/drawer/drawer.spec.tsx @@ -6,7 +6,7 @@ const noop = () => { /* nothing */ }; -describe("Drawer", () => { +describe("GoabDrawer", () => { it("should render", async () => { const content = render( diff --git a/libs/react-components/src/lib/drawer/drawer.tsx b/libs/react-components/src/lib/drawer/drawer.tsx index 0d764b741e..dd12a61682 100644 --- a/libs/react-components/src/lib/drawer/drawer.tsx +++ b/libs/react-components/src/lib/drawer/drawer.tsx @@ -1,6 +1,25 @@ import { ReactNode, useEffect, useRef, type JSX } from "react"; import { GoabDrawerPosition, GoabDrawerSize } from "@abgov/ui-components-common"; +interface WCProps { + position: GoabDrawerPosition; + open?: boolean; + heading?: string; + maxsize?: GoabDrawerSize; + testid?: string; + ref: React.RefObject; + version?: string; +} + +declare module "react" { + // eslint-disable-next-line @typescript-eslint/no-namespace + namespace JSX { + interface IntrinsicElements { + "goa-drawer": WCProps & React.HTMLAttributes; + } + } +} + export interface GoabDrawerProps { position: GoabDrawerPosition; open?: boolean; @@ -42,6 +61,7 @@ export function GoabDrawer({ heading={typeof heading === "string" ? heading : undefined} maxsize={maxSize} testid={testId} + version="2" > {heading && typeof heading !== "string" &&
{heading}
} {actions &&
{actions}
} diff --git a/libs/react-components/src/lib/dropdown/dropdown-item.tsx b/libs/react-components/src/lib/dropdown/dropdown-item.tsx index 35792e05ed..147f7b8e6a 100644 --- a/libs/react-components/src/lib/dropdown/dropdown-item.tsx +++ b/libs/react-components/src/lib/dropdown/dropdown-item.tsx @@ -1,6 +1,25 @@ import { useEffect } from "react"; import { GoabDropdownItemMountType } from "@abgov/ui-components-common"; +interface WCProps { + value: string; + label?: string; + filter?: string; + mount?: GoabDropdownItemMountType; + + // @deprecated + name?: string; +} + +declare module "react" { + // eslint-disable-next-line @typescript-eslint/no-namespace + namespace JSX { + interface IntrinsicElements { + "goa-dropdown-item": WCProps & React.HTMLAttributes; + } + } +} + export interface GoabDropdownItemProps { value: string; label?: string; diff --git a/libs/react-components/src/lib/dropdown/dropdown.spec.tsx b/libs/react-components/src/lib/dropdown/dropdown.spec.tsx index 8853e67085..a9f31fbc7b 100644 --- a/libs/react-components/src/lib/dropdown/dropdown.spec.tsx +++ b/libs/react-components/src/lib/dropdown/dropdown.spec.tsx @@ -62,6 +62,7 @@ describe("GoabDropdown", () => { ariaLabel={"label"} ariaLabelledBy={"foo-dropdown-label"} autoComplete="off" + size="compact" onChange={noop} > @@ -86,6 +87,7 @@ describe("GoabDropdown", () => { expect(el?.getAttribute("arialabelledby")).toBe("foo-dropdown-label"); expect(el?.getAttribute("autocomplete")).toBe("off"); expect(el?.getAttribute("maxwidth")).toBe("400px"); + expect(el?.getAttribute("size")).toBe("compact"); }); it("should allow for a single selection", async () => { @@ -120,13 +122,9 @@ describe("GoabDropdown", () => { it("should pass data-grid attributes", () => { const { baseElement } = render( - + - + , ); const el = baseElement.querySelector("goa-dropdown"); expect(el?.getAttribute("data-grid")).toBe("cell"); diff --git a/libs/react-components/src/lib/dropdown/dropdown.tsx b/libs/react-components/src/lib/dropdown/dropdown.tsx index 91ae519c26..8ec91b3009 100644 --- a/libs/react-components/src/lib/dropdown/dropdown.tsx +++ b/libs/react-components/src/lib/dropdown/dropdown.tsx @@ -1,5 +1,6 @@ import { GoabDropdownOnChangeDetail, + GoabDropdownSize, GoabIconType, Margins, DataAttributes, } from "@abgov/ui-components-common"; @@ -25,6 +26,20 @@ interface WCProps extends Margins { id?: string; autocomplete?: string; testid?: string; + size?: GoabDropdownSize; + version?: string; +} + +declare module "react" { + // eslint-disable-next-line @typescript-eslint/no-namespace + namespace JSX { + // eslint-disable-next-line @typescript-eslint/no-empty-interface + interface IntrinsicElements { + "goa-dropdown": WCProps & React.HTMLAttributes & { + ref: React.RefObject; + }; + } + } } export interface GoabDropdownProps extends Margins, DataAttributes { @@ -49,6 +64,7 @@ export interface GoabDropdownProps extends Margins, DataAttributes { width?: string; maxWidth?: string; autoComplete?: string; + size?: GoabDropdownSize; /*** * @deprecated This property has no effect and will be removed in a future version */ @@ -75,11 +91,12 @@ export function GoabDropdown({ native, relative, children, + size = "default", ...rest }: GoabDropdownProps): JSX.Element { const el = useRef(null); - const _props = transformProps(rest, lowercase); + const _props = transformProps({ size, ...rest }, lowercase); useEffect(() => { if (!el.current) { @@ -111,6 +128,7 @@ export function GoabDropdown({ native={native ? "true" : undefined} relative={relative ? "true" : undefined} {..._props} + version="2" > {children} diff --git a/libs/react-components/src/lib/file-upload-card/file-upload-card.spec.tsx b/libs/react-components/src/lib/file-upload-card/file-upload-card.spec.tsx index 687806f37b..f79f41494e 100644 --- a/libs/react-components/src/lib/file-upload-card/file-upload-card.spec.tsx +++ b/libs/react-components/src/lib/file-upload-card/file-upload-card.spec.tsx @@ -1,12 +1,12 @@ import { fireEvent, render } from "@testing-library/react"; import { describe, it, expect, vi } from "vitest"; -import FileUploadCard from "./file-upload-card"; +import GoabFileUploadCard from "./file-upload-card"; -describe("FileUploadCard", () => { +describe("GoabFileUploadCard", () => { it("should render with base params", () => { const { container } = render( - + ); const el = container.querySelector("goa-file-upload-card"); @@ -16,7 +16,7 @@ describe("FileUploadCard", () => { it("should render with additional params", () => { const { container } = render( - { it("dispatches and event when cancel is clicked while uploading", () => { const onCancel = vi.fn(); const { container } = render( - { it("dispatches and event when delete is clicked and upload is complete", () => { const onDelete = vi.fn(); const { container } = render( - { it("dispatches and event when an error occurs", () => { const onDelete = vi.fn(); const { container } = render( - { expect(onDelete).toHaveBeenCalledTimes(1); }); - it("FileUploadCard should render without testId (testId is optional)", () => { + it("GoabFileUploadCard should render without testId (testId is optional)", () => { const { container } = render( - { it("should pass data-grid attributes", () => { const { container } = render( - { expect(el?.getAttribute("data-grid")).toBe("cell"); }); -}); \ No newline at end of file +}); diff --git a/libs/react-components/src/lib/file-upload-card/file-upload-card.tsx b/libs/react-components/src/lib/file-upload-card/file-upload-card.tsx index 5b8a5167e1..86aed1921e 100644 --- a/libs/react-components/src/lib/file-upload-card/file-upload-card.tsx +++ b/libs/react-components/src/lib/file-upload-card/file-upload-card.tsx @@ -13,6 +13,19 @@ interface WCProps { progress?: number; error?: string; testid?: string; + version?: string; +} + +declare module "react" { + // eslint-disable-next-line @typescript-eslint/no-namespace + namespace JSX { + interface IntrinsicElements { + "goa-file-upload-card": WCProps & + React.HTMLAttributes & { + ref: React.RefObject; + }; + } + } } /* eslint-disable-next-line */ @@ -51,9 +64,7 @@ export function GoabFileUploadCard({ }; }, [el, onDelete, onCancel, filename]); - return ( - - ); + return ; } export default GoabFileUploadCard; diff --git a/libs/react-components/src/lib/file-upload-input/file-upload-input.spec.tsx b/libs/react-components/src/lib/file-upload-input/file-upload-input.spec.tsx index 5161adea66..bcbf64ebd3 100644 --- a/libs/react-components/src/lib/file-upload-input/file-upload-input.spec.tsx +++ b/libs/react-components/src/lib/file-upload-input/file-upload-input.spec.tsx @@ -1,14 +1,14 @@ import { fireEvent, render } from "@testing-library/react"; import { describe, it, expect, vi } from "vitest"; -import FileUploadInput from "./file-upload-input"; +import GoabFileUploadInput from "./file-upload-input"; const noop = () => { /* do nothing */ }; -describe("FileUploadInput", () => { +describe("GoabFileUploadInput", () => { it("should render successfully", () => { const { baseElement } = render( - { it("handles the onSelectFile event", () => { const onSelect = vi.fn(); - const { baseElement } = render(); + const { baseElement } = render(); const el = baseElement.querySelector("goa-file-upload-input"); el && fireEvent(el, new CustomEvent("_selectFile", { detail: {} })); @@ -35,7 +35,7 @@ describe("FileUploadInput", () => { it("should pass data-grid attributes", () => { const { baseElement } = render( - diff --git a/libs/react-components/src/lib/file-upload-input/file-upload-input.tsx b/libs/react-components/src/lib/file-upload-input/file-upload-input.tsx index 5389439551..fa56adf9c3 100644 --- a/libs/react-components/src/lib/file-upload-input/file-upload-input.tsx +++ b/libs/react-components/src/lib/file-upload-input/file-upload-input.tsx @@ -11,6 +11,18 @@ interface WCProps { accept?: string; maxfilesize?: string; testid?: string; + version?: string; +} + +declare module "react" { + // eslint-disable-next-line @typescript-eslint/no-namespace + namespace JSX { + interface IntrinsicElements { + "goa-file-upload-input": WCProps & React.HTMLAttributes & { + ref: React.RefObject; + }; + } + } } /* eslint-disable-next-line */ @@ -22,10 +34,7 @@ export interface GoabFileUploadInputProps extends DataAttributes { onSelectFile: (detail: GoabFileUploadInputOnSelectFileDetail) => void; } -export function GoabFileUploadInput({ - onSelectFile, - ...rest -}: GoabFileUploadInputProps) { +export function GoabFileUploadInput({ onSelectFile, ...rest }: GoabFileUploadInputProps) { const el = useRef(null); const _props = transformProps(rest, lowercase); @@ -44,9 +53,7 @@ export function GoabFileUploadInput({ }; }, [el, onSelectFile]); - return ( - - ); + return ; } export default GoabFileUploadInput; diff --git a/libs/react-components/src/lib/filter-chip/filter-chip.spec.tsx b/libs/react-components/src/lib/filter-chip/filter-chip.spec.tsx index 7830461ccc..65352e5f75 100644 --- a/libs/react-components/src/lib/filter-chip/filter-chip.spec.tsx +++ b/libs/react-components/src/lib/filter-chip/filter-chip.spec.tsx @@ -2,7 +2,7 @@ import { fireEvent, render, waitFor } from "@testing-library/react"; import { GoabFilterChip } from "./filter-chip"; import { describe, it, expect, vi } from "vitest"; -describe("GoA FilterChip", () => { +describe("GoabFilterChip", () => { it("should render", () => { const { container } = render(); @@ -15,6 +15,8 @@ describe("GoA FilterChip", () => { const { container } = render( { expect(el?.getAttribute("ml")).toBe("xl"); expect(el?.getAttribute("error")).toBe("true"); expect(el?.getAttribute("icontheme")).toBe("filled"); + expect(el?.getAttribute("secondarytext")).toBe("secondary text"); + expect(el?.getAttribute("leadingicon")).toBe("accessibility"); expect(el?.getAttribute("testid")).toBe("test-chip"); }); diff --git a/libs/react-components/src/lib/filter-chip/filter-chip.tsx b/libs/react-components/src/lib/filter-chip/filter-chip.tsx index c6c8ada63a..aa0eec28b1 100644 --- a/libs/react-components/src/lib/filter-chip/filter-chip.tsx +++ b/libs/react-components/src/lib/filter-chip/filter-chip.tsx @@ -1,12 +1,31 @@ import { useEffect, useRef } from "react"; -import { DataAttributes, GoabFilterChipTheme, Margins } from "@abgov/ui-components-common"; +import { + DataAttributes, + GoabFilterChipTheme, + GoabIconType, + Margins, +} from "@abgov/ui-components-common"; import { transformProps, lowercase } from "../common/extract-props"; interface WCProps extends Margins { icontheme: GoabFilterChipTheme; error?: string; content: string; + secondarytext?: string; + leadingicon?: GoabIconType; testid?: string; + version?: string; +} + +declare module "react" { + // eslint-disable-next-line @typescript-eslint/no-namespace + namespace JSX { + interface IntrinsicElements { + "goa-filter-chip": WCProps & React.HTMLAttributes & { + ref: React.RefObject; + }; + } + } } export interface GoabFilterChipProps extends Margins, DataAttributes { @@ -14,6 +33,8 @@ export interface GoabFilterChipProps extends Margins, DataAttributes { iconTheme?: GoabFilterChipTheme; error?: boolean; content: string; + secondaryText?: string; + leadingIcon?: GoabIconType; testId?: string; } @@ -25,10 +46,7 @@ export const GoabFilterChip = ({ }: GoabFilterChipProps) => { const el = useRef(null); - const _props = transformProps( - { icontheme: iconTheme, ...rest }, - lowercase - ); + const _props = transformProps({ icontheme: iconTheme, ...rest }, lowercase); useEffect(() => { if (!el.current) return; @@ -46,6 +64,7 @@ export const GoabFilterChip = ({ ); diff --git a/libs/react-components/src/lib/footer-meta-section/footer-meta-section.tsx b/libs/react-components/src/lib/footer-meta-section/footer-meta-section.tsx index 36f560109a..2def8880e9 100644 --- a/libs/react-components/src/lib/footer-meta-section/footer-meta-section.tsx +++ b/libs/react-components/src/lib/footer-meta-section/footer-meta-section.tsx @@ -6,6 +6,15 @@ interface WCProps { testid?: string; } +declare module "react" { + // eslint-disable-next-line @typescript-eslint/no-namespace + namespace JSX { + interface IntrinsicElements { + "goa-app-footer-meta-section": WCProps & React.HTMLAttributes; + } + } +} + /* eslint-disable-next-line */ export interface GoabAppFooterMetaSectionProps extends DataAttributes { testId?: string; diff --git a/libs/react-components/src/lib/footer-nav-section/footer-nav-section.tsx b/libs/react-components/src/lib/footer-nav-section/footer-nav-section.tsx index 81b4c171db..92eb37305b 100644 --- a/libs/react-components/src/lib/footer-nav-section/footer-nav-section.tsx +++ b/libs/react-components/src/lib/footer-nav-section/footer-nav-section.tsx @@ -8,6 +8,15 @@ interface WCProps { testid?: string; } +declare module "react" { + // eslint-disable-next-line @typescript-eslint/no-namespace + namespace JSX { + interface IntrinsicElements { + "goa-app-footer-nav-section": WCProps & React.HTMLAttributes; + } + } +} + /* eslint-disable-next-line */ export interface GoabFooterNavSectionProps extends DataAttributes { maxColumnCount?: number; diff --git a/libs/react-components/src/lib/footer/footer.tsx b/libs/react-components/src/lib/footer/footer.tsx index ade2d2739d..a40de6a7a9 100644 --- a/libs/react-components/src/lib/footer/footer.tsx +++ b/libs/react-components/src/lib/footer/footer.tsx @@ -6,6 +6,16 @@ interface WCProps { maxcontentwidth?: string; testid?: string; url?: string; + version?: string; +} + +declare module "react" { + // eslint-disable-next-line @typescript-eslint/no-namespace + namespace JSX { + interface IntrinsicElements { + "goa-app-footer": WCProps & React.HTMLAttributes; + } + } } /* eslint-disable-next-line */ @@ -16,17 +26,11 @@ export interface GoabAppFooterProps extends DataAttributes { url?: string; } -// legacy name -export type FooterProps = GoabAppFooterProps; - -export function GoabAppFooter({ - children, - ...rest -}: GoabAppFooterProps): JSX.Element { +export function GoabAppFooter({ children, ...rest }: GoabAppFooterProps): JSX.Element { const _props = transformProps(rest, lowercase); return ( - + {children} ); diff --git a/libs/react-components/src/lib/form-item/form-item.spec.tsx b/libs/react-components/src/lib/form-item/form-item.spec.tsx index 94a8e70746..ce46d7a28a 100644 --- a/libs/react-components/src/lib/form-item/form-item.spec.tsx +++ b/libs/react-components/src/lib/form-item/form-item.spec.tsx @@ -3,13 +3,14 @@ import { GoabFormItem } from "./form-item"; afterEach(cleanup); -describe("GoaFormItem", () => { +describe("GoabFormItem", () => { it("renders all with properties", () => { const { baseElement } = render( { expect(el?.getAttribute("label")).toEqual("First Name"); expect(el?.getAttribute("labelsize")).toEqual("large"); expect(el?.getAttribute("requirement")).toEqual("optional"); + expect(el?.getAttribute("type")).toEqual("text-input"); expect(el?.getAttribute("error")).toEqual("This is an error"); expect(el?.getAttribute("helptext")).toEqual("This is some help text"); expect(el?.getAttribute("maxwidth")).toEqual("480px"); diff --git a/libs/react-components/src/lib/form-item/form-item.tsx b/libs/react-components/src/lib/form-item/form-item.tsx index 7bf64ad3dc..28c4c7073b 100644 --- a/libs/react-components/src/lib/form-item/form-item.tsx +++ b/libs/react-components/src/lib/form-item/form-item.tsx @@ -1,6 +1,7 @@ import { GoabFormItemLabelSize, GoabFormItemRequirement, + GoabFormItemType, Margins, DataAttributes, } from "@abgov/ui-components-common"; @@ -18,6 +19,17 @@ interface WCProps extends Margins { name?: string; id?: string; testid?: string; + type?: GoabFormItemType; + version?: string; +} + +declare module "react" { + // eslint-disable-next-line @typescript-eslint/no-namespace + namespace JSX { + interface IntrinsicElements { + "goa-form-item": WCProps & React.HTMLAttributes; + } + } } export interface GoabFormItemProps extends Margins, DataAttributes { @@ -27,6 +39,7 @@ export interface GoabFormItemProps extends Margins, DataAttributes { error?: string | React.ReactNode; helpText?: string | React.ReactNode; maxWidth?: string; + type?: GoabFormItemType; /** * Public form: to arrange fields in the summary */ @@ -45,9 +58,10 @@ export function GoabFormItem({ helpText, publicFormSummaryOrder, children, + type = "", ...rest }: GoabFormItemProps): JSX.Element { - const _props = transformProps(rest, lowercase); + const _props = transformProps({ type, ...rest }, lowercase); return ( {error && typeof error !== "string" &&
{error}
} {helpText && typeof helpText !== "string" &&
{helpText}
} diff --git a/libs/react-components/src/lib/input/input.spec.tsx b/libs/react-components/src/lib/input/input.spec.tsx index 14d57349a0..c83becb171 100644 --- a/libs/react-components/src/lib/input/input.spec.tsx +++ b/libs/react-components/src/lib/input/input.spec.tsx @@ -20,7 +20,7 @@ const defaultProps: GoabInputProps = { onChange: noop, }; -describe("Input", () => { +describe("GoabInput", () => { it("should render", () => { render(); @@ -49,6 +49,7 @@ describe("Input", () => { focused: true, error: true, placeholder: "placeholder", + size: "compact", // TODO: remove deprecated property or fix spec failure // prefix: "foo", suffix: "bar", @@ -82,6 +83,7 @@ describe("Input", () => { expect(input?.getAttribute("readonly")).toBe("true"); expect(input?.getAttribute("error")).toBe("true"); expect(input?.getAttribute("placeholder")).toBe("placeholder"); + expect(input?.getAttribute("size")).toBe("compact"); // TODO: remove deprecated property or fix spec failure // expect(input?.getAttribute("prefix")).toBe("foo"); expect(input?.getAttribute("suffix")).toBe("bar"); @@ -201,11 +203,7 @@ describe("Input", () => { it("should pass data-grid attributes", () => { const { container } = render( - + , ); const el = container.querySelector("goa-input"); expect(el?.getAttribute("data-grid")).toBe("cell"); diff --git a/libs/react-components/src/lib/input/input.tsx b/libs/react-components/src/lib/input/input.tsx index e6757302a8..5c358edcaa 100644 --- a/libs/react-components/src/lib/input/input.tsx +++ b/libs/react-components/src/lib/input/input.tsx @@ -8,6 +8,7 @@ import { GoabInputOnChangeDetail, GoabInputOnFocusDetail, GoabInputOnKeyPressDetail, + GoabInputSize, GoabInputType, Margins, DataAttributes, } from "@abgov/ui-components-common"; @@ -40,6 +41,7 @@ interface WCProps extends Margins { arialabel?: string; testid?: string; textalign?: string; + size?: GoabInputSize; // type=number min?: string | number; @@ -48,6 +50,18 @@ interface WCProps extends Margins { maxlength?: number; trailingiconarialabel?: string; + version?: string; +} + +declare module "react" { + // eslint-disable-next-line @typescript-eslint/no-namespace + namespace JSX { + interface IntrinsicElements { + "goa-input": WCProps & React.HTMLAttributes & { + ref?: React.RefObject; + }; + } + } } interface BaseProps extends Margins, DataAttributes { @@ -78,6 +92,7 @@ interface BaseProps extends Margins, DataAttributes { maxLength?: number; trailingIconAriaLabel?: string; textAlign?: "left" | "right"; + size?: GoabInputSize; } type OnChange = (detail: GoabInputOnChangeDetail) => void; @@ -121,6 +136,7 @@ interface GoabDateInputProps extends BaseProps { export function GoabInput({ variant = "goa", textAlign = "left", + size = "default", focused, disabled, readonly, @@ -136,7 +152,10 @@ export function GoabInput({ }: GoabInputProps & { type?: GoabInputType }): JSX.Element { const ref = useRef(null); - const _props = transformProps({ variant, textalign: textAlign, ...rest }, lowercase); + const _props = transformProps( + { variant, textalign: textAlign, size, ...rest }, + lowercase, + ); useEffect(() => { if (!ref.current) { @@ -190,6 +209,7 @@ export function GoabInput({ readonly={readonly ? "true" : undefined} error={error ? "true" : undefined} handletrailingiconclick={onTrailingIconClick ? "true" : "false"} + version="2" > {leadingContent &&
{leadingContent}
} {trailingContent &&
{trailingContent}
} diff --git a/libs/react-components/src/lib/link/link.spec.tsx b/libs/react-components/src/lib/link/link.spec.tsx index 98565c26aa..43be1d6370 100644 --- a/libs/react-components/src/lib/link/link.spec.tsx +++ b/libs/react-components/src/lib/link/link.spec.tsx @@ -11,6 +11,8 @@ describe("GoabLink", () => { { expect(el).toBeTruthy(); expect(el?.getAttribute("leadingicon")).toBe("add"); expect(el?.getAttribute("trailingicon")).toBe("archive"); + expect(el?.getAttribute("color")).toBe("dark"); + expect(el?.getAttribute("size")).toBe("large"); expect(el?.getAttribute("testid")).toBe("test-id"); expect(el?.getAttribute("mt")).toBe("s"); expect(el?.getAttribute("mr")).toBe("m"); diff --git a/libs/react-components/src/lib/link/link.tsx b/libs/react-components/src/lib/link/link.tsx index 9436693fa6..5f82f461b7 100644 --- a/libs/react-components/src/lib/link/link.tsx +++ b/libs/react-components/src/lib/link/link.tsx @@ -1,5 +1,11 @@ import { ReactNode } from "react"; -import { GoabIconType, Margins, DataAttributes } from "@abgov/ui-components-common"; +import { + GoabIconType, + GoabLinkColor, + GoabLinkSize, + Margins, + DataAttributes, +} from "@abgov/ui-components-common"; import { transformProps, lowercase } from "../common/extract-props"; interface WCProps extends Margins { @@ -9,14 +15,27 @@ interface WCProps extends Margins { actionArgs?: string; actionArg?: string; testid?: string; + color?: GoabLinkColor; + size?: GoabLinkSize; } -interface GoabLinkProps extends Margins, DataAttributes { +declare module "react" { + // eslint-disable-next-line @typescript-eslint/no-namespace + namespace JSX { + interface IntrinsicElements { + "goa-link": WCProps & React.HTMLAttributes; + } + } +} + +export interface GoabLinkProps extends Margins, DataAttributes { leadingIcon?: GoabIconType; trailingIcon?: GoabIconType; action?: string; actionArgs?: Record; actionArg?: string; + color?: GoabLinkColor; + size?: GoabLinkSize; testId?: string; children: ReactNode; } @@ -24,10 +43,12 @@ interface GoabLinkProps extends Margins, DataAttributes { export function GoabLink({ actionArgs, actionArg, + color = "interactive", + size = "medium", children, ...rest }: GoabLinkProps) { - const _props = transformProps(rest, lowercase); + const _props = transformProps({ color, size, ...rest }, lowercase); return ( { expect(el?.getAttribute("icon")).toBe("checkmark"); expect(el?.getAttribute("testid")).toBe("complete-test"); }); -}); \ No newline at end of file +}); diff --git a/libs/react-components/src/lib/menu-button/menu-action.tsx b/libs/react-components/src/lib/menu-button/menu-action.tsx index 6277d2c3ff..84f0d622d6 100644 --- a/libs/react-components/src/lib/menu-button/menu-action.tsx +++ b/libs/react-components/src/lib/menu-button/menu-action.tsx @@ -18,6 +18,7 @@ declare module "react" { } } + export interface GoabMenuActionProps extends DataAttributes { text: string; action: string; diff --git a/libs/react-components/src/lib/menu-button/menu-button.spec.tsx b/libs/react-components/src/lib/menu-button/menu-button.spec.tsx index 3a77a1b9ca..f0160bbe88 100644 --- a/libs/react-components/src/lib/menu-button/menu-button.spec.tsx +++ b/libs/react-components/src/lib/menu-button/menu-button.spec.tsx @@ -60,4 +60,78 @@ describe("GoabMenuButton", () => { expect(el?.getAttribute("type")).toBe("tertiary"); expect(el?.getAttribute("testid")).toBe("advanced-menu"); }); -}); \ No newline at end of file + + it("should render with size compact", () => { + const { container } = render(); + const el = container.querySelector("goa-menu-button"); + + expect(el?.getAttribute("size")).toBe("compact"); + }); + + it("should render with size normal", () => { + const { container } = render(); + const el = container.querySelector("goa-menu-button"); + + expect(el?.getAttribute("size")).toBe("normal"); + }); + + it("should not render size attribute when not provided", () => { + const { container } = render(); + const el = container.querySelector("goa-menu-button"); + + expect(el?.getAttribute("size")).toBeNull(); + }); + + it("should render without text for icon-only mode", () => { + const { container } = render(); + const el = container.querySelector("goa-menu-button"); + + expect(el?.getAttribute("text")).toBeNull(); + expect(el?.getAttribute("leading-icon")).toBe("ellipsis-horizontal"); + expect(el?.getAttribute("aria-label")).toBeNull(); + }); + + it("should render with leading icon and text", () => { + const { container } = render( + + ); + const el = container.querySelector("goa-menu-button"); + + expect(el?.getAttribute("text")).toBe("More"); + expect(el?.getAttribute("leading-icon")).toBe("ellipsis-horizontal"); + }); + + it("should render icon-only with size compact", () => { + const { container } = render( + + ); + const el = container.querySelector("goa-menu-button"); + + expect(el?.getAttribute("text")).toBeNull(); + expect(el?.getAttribute("leading-icon")).toBe("ellipsis-horizontal"); + expect(el?.getAttribute("size")).toBe("compact"); + }); + + it("should render with variant destructive", () => { + const { container } = render(); + const el = container.querySelector("goa-menu-button"); + + expect(el?.getAttribute("variant")).toBe("destructive"); + }); + + it("should not render variant attribute when not provided", () => { + const { container } = render(); + const el = container.querySelector("goa-menu-button"); + + expect(el?.getAttribute("variant")).toBeNull(); + }); + + it("should render icon-only with custom ariaLabel", () => { + const { container } = render( + + ); + const el = container.querySelector("goa-menu-button"); + + expect(el?.getAttribute("aria-label")).toBe("Actions for John Smith"); + }); +}); diff --git a/libs/react-components/src/lib/menu-button/menu-button.tsx b/libs/react-components/src/lib/menu-button/menu-button.tsx index 5caebd48d4..c3275c89c9 100644 --- a/libs/react-components/src/lib/menu-button/menu-button.tsx +++ b/libs/react-components/src/lib/menu-button/menu-button.tsx @@ -1,38 +1,19 @@ -/** - * @module GoabMenuButton - * - * This module defines the `GoabMenuButton` React component and related types, - * which wraps a Web Component (`goa-menu-button`) with enhanced functionality for React applications. - * It also includes TypeScript interfaces for improved type checking and development experience. - */ - -import { DataAttributes, GoabButtonType, GoabIconType, GoabMenuButtonOnActionDetail } from "@abgov/ui-components-common"; +import { DataAttributes, GoabButtonSize, GoabButtonType, GoabButtonVariant, GoabIconType, GoabMenuButtonOnActionDetail } from "@abgov/ui-components-common"; import { ReactNode, type JSX, useRef, useEffect } from "react"; import { transformProps, kebab } from "../common/extract-props"; -/** - * Props definition for the `goab-menu-button` Web Component. - * @typedef {Object} WCProps - * - * @property {string} text - The text label to be displayed on the button. - * @property {GoabButtonType} type - The button type, e.g., "primary", "secondary", etc. - * @property {GoaIconType} leadingIcon - Optional leading icon appearing within the button. - * @property {string} [testid] - A test identifier for automated testing purposes. - * @property {React.RefObject} ref - A reference object pointing to the Web Component's DOM element. - */ interface WCProps { - text: string; + text?: string; type: GoabButtonType; - "max-width"?: string, + size?: GoabButtonSize; + variant?: GoabButtonVariant; + "max-width"?: string; "leading-icon"?: GoabIconType; + "aria-label"?: string; testid?: string; ref: React.RefObject; } -/** - * Extends React's `JSX` namespace to include the custom `goa-menu-button` Web Component. - * The `goa-menu-button` supports additional React-specific props. - */ declare module "react" { // eslint-disable-next-line @typescript-eslint/no-namespace namespace JSX { @@ -42,51 +23,19 @@ declare module "react" { } } -/** - * Props for the `GoabMenuButton` React component. - * - * @typedef {Object} GoabMenuButtonProps - * - * @property {string} text - The text label to display on the button. - * @property {GoabButtonType} [type="primary"] - The button type, e.g., "primary", "secondary". Defaults to "primary". - * @property {GoaIconType} leadingIcon - Optional leading icon appearing within the button. - * @property {string} [testId] - A test identifier for automated testing purposes. - * @property {Function} [onAction] - Callback function invoked when an action event is emitted by the component. - * @property {ReactNode} [children] - Optional child elements to be rendered inside the button. - */ export interface GoabMenuButtonProps extends DataAttributes { - text: string; + text?: string; type?: GoabButtonType; + size?: GoabButtonSize; + variant?: GoabButtonVariant; maxWidth?: string; leadingIcon?: GoabIconType; + ariaLabel?: string; testId?: string; onAction?: (detail: GoabMenuButtonOnActionDetail) => void; children?: ReactNode; } -/** - * A React wrapper component for the `goa-menu-button` Web Component. - * - * This component provides seamless integration of the Web Component into a React application, including React-specific props and event handling. - * - * @function GoabMenuButton - * @param {GoabMenuButtonProps} props - The props for the component. - * - * @returns {JSX.Element} A JSX element wrapping the `goa-menu-button` Web Component. - * - * @example - * ```tsx - * console.log(`Action: ${action}`)} - * > - * - * - * - * - * ``` - */ export function GoabMenuButton({ type = "primary", testId, @@ -110,7 +59,6 @@ export function GoabMenuButton({ } const current = el.current; - // Event listener for the "_action" event emitted by the Web Component. const listener = (e: Event) => { const detail = (e as CustomEvent).detail as GoabMenuButtonOnActionDetail; onAction?.(detail); @@ -123,7 +71,8 @@ export function GoabMenuButton({ }, [el, onAction]); return ( - + // @ts-expect-error - stable WCProps requires text, but experimental supports icon-only mode + {children} ); diff --git a/libs/react-components/src/lib/modal/modal.spec.tsx b/libs/react-components/src/lib/modal/modal.spec.tsx index 80c52e15f2..29bba8f01c 100644 --- a/libs/react-components/src/lib/modal/modal.spec.tsx +++ b/libs/react-components/src/lib/modal/modal.spec.tsx @@ -1,8 +1,8 @@ import { render } from "@testing-library/react"; -import GoabButton from "../../lib/button/button"; +import GoabButton from "../button/button"; import { GoabModal, GoabModalProps } from "./modal"; -describe("Modal", () => { +describe("GoabModal", () => { it("should render", async () => { const { baseElement } = render(Modal Content); diff --git a/libs/react-components/src/lib/modal/modal.tsx b/libs/react-components/src/lib/modal/modal.tsx index 21165c4b9c..20b936dbbf 100644 --- a/libs/react-components/src/lib/modal/modal.tsx +++ b/libs/react-components/src/lib/modal/modal.tsx @@ -5,6 +5,32 @@ import { } from "@abgov/ui-components-common"; import { ReactElement, ReactNode, RefObject, useEffect, useRef, type JSX } from "react"; +interface WCProps { + ref: RefObject; + heading?: ReactNode; + open?: string; + maxwidth?: string; + closable: string; + /** + * @deprecated The role property is deprecated and will be removed in a future version. + * The modal will always use role="dialog". + */ + role?: GoabModalRole; + transition?: GoabModalTransition; + calloutvariant?: GoabModalCalloutVariant; + testid?: string; + version?: string; +} + +declare module "react" { + // eslint-disable-next-line @typescript-eslint/no-namespace + namespace JSX { + interface IntrinsicElements { + "goa-modal": WCProps & React.HTMLAttributes; + } + } +} + export interface GoabModalProps { heading?: ReactNode; maxWidth?: string; @@ -60,6 +86,7 @@ export function GoabModal({ transition={transition} calloutvariant={calloutVariant} testid={testId} + version="2" > {heading && typeof heading !== "string" &&
{heading}
} {actions &&
{actions}
} diff --git a/libs/react-components/src/lib/notification/notification.spec.tsx b/libs/react-components/src/lib/notification/notification.spec.tsx index 698ce48ec6..338652d36a 100644 --- a/libs/react-components/src/lib/notification/notification.spec.tsx +++ b/libs/react-components/src/lib/notification/notification.spec.tsx @@ -4,7 +4,7 @@ import { fireEvent } from "@testing-library/dom"; import { describe, it, expect, vi } from "vitest"; import { GoabNotificationType } from "@abgov/ui-components-common"; -describe("Notification Banner", () => { +describe("GoabNotification", () => { describe("type", () => { (["important", "information", "emergency", "event"] as const).forEach( (type: GoabNotificationType) => { @@ -42,4 +42,15 @@ describe("Notification Banner", () => { const el = document.querySelector("goa-notification"); expect(el?.getAttribute("ariaLive")).toEqual("assertive"); }); + + it("should render notification banner with emphasis and compact", async () => { + render( + + Information to the user goes in the content + , + ); + const el = document.querySelector("goa-notification"); + expect(el?.getAttribute("emphasis")).toEqual("low"); + expect(el?.getAttribute("compact")).toEqual("true"); + }); }); diff --git a/libs/react-components/src/lib/notification/notification.tsx b/libs/react-components/src/lib/notification/notification.tsx index c40a01c421..05392e5fc3 100644 --- a/libs/react-components/src/lib/notification/notification.tsx +++ b/libs/react-components/src/lib/notification/notification.tsx @@ -1,10 +1,36 @@ -import { GoabAriaLiveType, GoabNotificationType } from "@abgov/ui-components-common"; +import { + GoabAriaLiveType, + GoabNotificationEmphasis, + GoabNotificationType, +} from "@abgov/ui-components-common"; import { useEffect, useRef } from "react"; +interface WCProps { + ref: React.RefObject; + type: GoabNotificationType; + maxcontentwidth?: string; + arialive?: GoabAriaLiveType; + testid?: string; + emphasis?: GoabNotificationEmphasis; + compact?: string; + version?: string; +} + +declare module "react" { + // eslint-disable-next-line @typescript-eslint/no-namespace + namespace JSX { + interface IntrinsicElements { + "goa-notification": WCProps & React.HTMLAttributes; + } + } +} + export interface GoabNotificationProps { type?: GoabNotificationType; ariaLive?: GoabAriaLiveType; maxContentWidth?: string; + emphasis?: GoabNotificationEmphasis; + compact?: boolean; children?: React.ReactNode; onDismiss?: () => void; testId?: string; @@ -12,6 +38,8 @@ export interface GoabNotificationProps { export const GoabNotification = ({ type = "information", + emphasis = "high", + compact, ariaLive, maxContentWidth, children, @@ -42,6 +70,9 @@ export const GoabNotification = ({ testid={testId} maxcontentwidth={maxContentWidth} arialive={ariaLive} + emphasis={emphasis} + compact={compact ? "true" : undefined} + version="2" > {children} diff --git a/libs/react-components/src/lib/pagination/pagination.spec.tsx b/libs/react-components/src/lib/pagination/pagination.spec.tsx index f753028c66..675933b353 100644 --- a/libs/react-components/src/lib/pagination/pagination.spec.tsx +++ b/libs/react-components/src/lib/pagination/pagination.spec.tsx @@ -1,13 +1,13 @@ import { fireEvent, render, waitFor } from "@testing-library/react"; import { describe, it, expect, vi } from "vitest"; -import Pagination from "./pagination"; +import GoabPagination from "./pagination"; import { GoabPaginationOnChangeDetail } from "@abgov/ui-components-common"; -describe("Pagination", () => { +describe("GoabPagination", () => { it("should render successfully", () => { const { baseElement } = render( - { /* do nothing */ }} pageNumber={1} itemCount={100} @@ -36,7 +36,7 @@ describe("Pagination", () => { const fn = vi.fn(); const { baseElement } = render( - + ); const detail: GoabPaginationOnChangeDetail = { page: 2 }; diff --git a/libs/react-components/src/lib/pagination/pagination.tsx b/libs/react-components/src/lib/pagination/pagination.tsx index aa13742435..241dd7b2ad 100644 --- a/libs/react-components/src/lib/pagination/pagination.tsx +++ b/libs/react-components/src/lib/pagination/pagination.tsx @@ -1,6 +1,25 @@ import { GoabPaginationOnChangeDetail, Margins } from "@abgov/ui-components-common"; import { useEffect, useRef } from "react"; +interface WCProps extends Margins { + ref?: React.RefObject; + itemcount: number; + perpagecount?: number; + pagenumber: number; + variant?: "all" | "links-only"; + testid?: string; + version?: string; +} + +declare module "react" { + // eslint-disable-next-line @typescript-eslint/no-namespace + namespace JSX { + interface IntrinsicElements { + "goa-pagination": WCProps & React.HTMLAttributes; + } + } +} + /* eslint-disable-next-line */ export interface GoabPaginationProps extends Margins { itemCount: number; @@ -45,6 +64,7 @@ export function GoabPagination({ onChange, ...props }: GoabPaginationProps) { ml={props.ml} mr={props.mr} testid={props.testId} + version="2" /> ); } diff --git a/libs/react-components/src/lib/push-drawer/push-drawer.spec.tsx b/libs/react-components/src/lib/push-drawer/push-drawer.spec.tsx index 35a5d2f097..c795c79ad3 100644 --- a/libs/react-components/src/lib/push-drawer/push-drawer.spec.tsx +++ b/libs/react-components/src/lib/push-drawer/push-drawer.spec.tsx @@ -1,83 +1,79 @@ import { render, waitFor } from "@testing-library/react"; -import { GoabPushDrawer } from "./push-drawer"; -import { GoabButton } from "../button/button"; +import { describe, it } from "vitest"; +import GoabPushDrawer from "./push-drawer"; -function testElement(open: boolean, drawerWidth: string) { - const closePushDrawer = vi.fn(() => { - open = false; - }); - - const actions = ( -
- - -
- ); +const noop = () => { + /* nothing */ +}; - const pushDrawerControls = ( -
-

This is the content of the push drawer.

-
- ); +describe("GoabPushDrawer", () => { + it("should render", async () => { + const content = render(The content); - return ( - - {pushDrawerControls} - Close - - ); -} + const el = content.container.querySelector("goa-push-drawer"); -describe("GoabPushDrawer", () => { - it("renders a goab-push-drawer", async () => { - const { container } = render(testElement(true, "400px")); - const el = container.querySelector("goa-push-drawer"); - await waitFor(() => { - expect(el).toBeTruthy(); - }); + expect(el?.getAttribute("open")).toBeNull(); + expect(el?.getAttribute("version")).toBe("2"); }); - describe("attributes", () => { - it("renders with testid", async () => { - const { container } = render(testElement(true, "400px")); - const el = container.querySelector("goa-push-drawer"); - await waitFor(() => { - expect(el?.getAttribute("testid")).toBe("test-drawer"); - }); - }); + it("should render with properties", async () => { + const content = render( + + The content + , + ); - it("opens when open is true", async () => { - const { container } = render(testElement(true, "400px")); - const el = container.querySelector("goa-push-drawer"); - - await waitFor(() => { - expect(el?.getAttribute("open")).toBe(""); - }); + const el = content.container.querySelector("goa-push-drawer"); + expect(el).toBeTruthy(); + await waitFor(() => { + expect(el?.getAttribute("open")).not.toBeNull(); + expect(el?.getAttribute("heading")).toBe("The heading"); + expect(el?.getAttribute("width")).toBe("600px"); + expect(el?.getAttribute("testid")).toBe("the testid"); + expect(el?.getAttribute("version")).toBe("2"); }); + }); - it("opens when open is false", async () => { - const { container } = render(testElement(false, "400px")); - const el = container.querySelector("goa-push-drawer"); + it("renders with React node heading", async () => { + const headingNode =
Custom Heading
; + const content = render( + + The content + , + ); - await waitFor(() => { - expect(el?.getAttribute("open")).toBeFalsy(); - }); + const el = content.container.querySelector("goa-push-drawer"); + expect(el).toBeTruthy(); + await waitFor(() => { + expect(el?.getAttribute("heading")).toBeNull(); + const headingSlot = el?.querySelector('[slot="heading"]'); + expect(headingSlot).toBeTruthy(); + expect(headingSlot?.textContent).toBe("Custom Heading"); }); + }); - it("passes heading", async () => { - const { container } = render(testElement(false, "400px")); - const el = container.querySelector("goa-push-drawer"); + it("renders with actions", async () => { + const actionsNode = ; + const content = render( + + The content + , + ); - await waitFor(() => { - expect(el?.getAttribute("heading")).toBe("Push Drawer"); - }); + const el = content.container.querySelector("goa-push-drawer"); + expect(el).toBeTruthy(); + await waitFor(() => { + const actionsSlot = el?.querySelector('[slot="actions"]'); + expect(actionsSlot).toBeTruthy(); + const actionButton = actionsSlot?.querySelector("button"); + expect(actionButton).toBeTruthy(); + expect(actionButton?.textContent).toBe("Action Button"); }); }); }); diff --git a/libs/react-components/src/lib/push-drawer/push-drawer.tsx b/libs/react-components/src/lib/push-drawer/push-drawer.tsx index 232d07c9be..4d76f0a9be 100644 --- a/libs/react-components/src/lib/push-drawer/push-drawer.tsx +++ b/libs/react-components/src/lib/push-drawer/push-drawer.tsx @@ -1,12 +1,14 @@ -import { ReactNode, useEffect, useRef } from "react"; +import { ReactNode, useEffect, useRef, type JSX } from "react"; interface WCProps { open?: boolean; - testid?: string; heading?: string; width?: string; + testid?: string; + version?: string; ref: React.RefObject; } + declare module "react" { // eslint-disable-next-line @typescript-eslint/no-namespace namespace JSX { @@ -17,45 +19,44 @@ declare module "react" { } export interface GoabPushDrawerProps { - testid?: string; open?: boolean; - heading?: string; + heading?: string | ReactNode; width?: string; - actions?: ReactNode | undefined; + testId?: string; + actions?: ReactNode; children: ReactNode; onClose: () => void; } export function GoabPushDrawer({ - testid, open, heading, width, + testId, actions, children, onClose, -}: GoabPushDrawerProps) { - // console.log("GoabPushDrawer:", testId, open, heading); +}: GoabPushDrawerProps): JSX.Element { const el = useRef(null); useEffect(() => { - const elCurrent = el?.current; - if (!elCurrent || !onClose) { + if (!el?.current || !onClose) { return; } - elCurrent.addEventListener("_close", onClose); + el.current?.addEventListener("_close", onClose); return () => { - elCurrent.removeEventListener("_close", onClose); + el.current?.removeEventListener("_close", onClose); }; }, [el, onClose]); return ( {heading && typeof heading !== "string" &&
{heading}
} {actions &&
{actions}
} diff --git a/libs/react-components/src/lib/radio-group/radio-group.spec.tsx b/libs/react-components/src/lib/radio-group/radio-group.spec.tsx index 06f7df6848..0dc0bee605 100644 --- a/libs/react-components/src/lib/radio-group/radio-group.spec.tsx +++ b/libs/react-components/src/lib/radio-group/radio-group.spec.tsx @@ -21,7 +21,7 @@ const noop = (detail: GoabRadioGroupOnChangeDetail) => { /* do nothing */ }; -describe("RadioGroup", () => { +describe("GoabRadioGroup", () => { const baseMockData: MockData = { title: "mock title", value: "", @@ -70,6 +70,7 @@ describe("RadioGroup", () => { value={data.value} disabled error + size="compact" mt="s" mr="m" mb="l" @@ -85,6 +86,7 @@ describe("RadioGroup", () => { disabled error checked + compact value={radio.value} ariaLabel={"you are choosing " + radio.value} > @@ -105,6 +107,7 @@ describe("RadioGroup", () => { expect(el?.getAttribute("arialabel")).toBe("please select fruit"); expect(el?.getAttribute("disabled")).toBe("true"); expect(el?.getAttribute("error")).toBe("true"); + expect(el?.getAttribute("size")).toBe("compact"); const radios = document.querySelectorAll("input[type=radio]"); radios.forEach((radio) => { @@ -112,6 +115,7 @@ describe("RadioGroup", () => { expect(radio.getAttribute("disabled")).toBe("true"); expect(radio.getAttribute("error")).toBe("true"); expect(radio.getAttribute("checked")).toBe("true"); + expect(radio.getAttribute("compact")).toBe("true"); }); }); }); diff --git a/libs/react-components/src/lib/radio-group/radio-group.tsx b/libs/react-components/src/lib/radio-group/radio-group.tsx index f4a8763314..171d11274e 100644 --- a/libs/react-components/src/lib/radio-group/radio-group.tsx +++ b/libs/react-components/src/lib/radio-group/radio-group.tsx @@ -2,6 +2,7 @@ import { useEffect, useRef, type JSX } from "react"; import { GoabRadioGroupOnChangeDetail, GoabRadioGroupOrientation, + GoabRadioGroupSize, Margins, DataAttributes, } from "@abgov/ui-components-common"; import { transformProps, lowercase } from "../common/extract-props"; @@ -17,6 +18,19 @@ interface WCProps extends Margins { error?: string; arialabel?: string; testid?: string; + size?: GoabRadioGroupSize; + version?: string; +} + +declare module "react" { + // eslint-disable-next-line @typescript-eslint/no-namespace + namespace JSX { + interface IntrinsicElements { + "goa-radio-group": WCProps & React.HTMLAttributes & { + ref: React.RefObject; + }; + } + } } export interface GoabRadioGroupProps extends Margins, DataAttributes { @@ -25,6 +39,7 @@ export interface GoabRadioGroupProps extends Margins, DataAttributes { id?: string; disabled?: boolean; orientation?: GoabRadioGroupOrientation; + size?: GoabRadioGroupSize; testId?: string; error?: boolean; ariaLabel?: string; @@ -38,11 +53,12 @@ export function GoabRadioGroup({ onChange, name, children, + size = "default", ...rest }: GoabRadioGroupProps): JSX.Element { const el = useRef(null); - const _props = transformProps(rest, lowercase); + const _props = transformProps({ size, ...rest }, lowercase); useEffect(() => { if (!el.current) return; @@ -71,6 +87,7 @@ export function GoabRadioGroup({ name={name} disabled={disabled ? "true" : undefined} error={error ? "true" : undefined} + version="2" > {children} diff --git a/libs/react-components/src/lib/radio-group/radio.tsx b/libs/react-components/src/lib/radio-group/radio.tsx index 842e091ba2..e4bb2276be 100644 --- a/libs/react-components/src/lib/radio-group/radio.tsx +++ b/libs/react-components/src/lib/radio-group/radio.tsx @@ -2,6 +2,31 @@ import { Margins } from "@abgov/ui-components-common"; import type { JSX } from "react"; +interface WCProps extends Margins { + name?: string; + value?: string; + description?: string | React.ReactNode; + reveal?: React.ReactNode; + revealarialabel?: string; + label?: string; + maxwidth?: string; + disabled?: string; + checked?: string; + error?: string; + arialabel?: string; + compact?: string; + version?: string; +} + +declare module "react" { + // eslint-disable-next-line @typescript-eslint/no-namespace + namespace JSX { + interface IntrinsicElements { + "goa-radio-item": WCProps & React.HTMLAttributes; + } + } +} + export interface GoabRadioItemProps extends Margins { value?: string; label?: string; @@ -13,6 +38,7 @@ export interface GoabRadioItemProps extends Margins { disabled?: boolean; checked?: boolean; error?: boolean; + compact?: boolean; children?: React.ReactNode; ariaLabel?: string; } @@ -28,6 +54,7 @@ export function GoabRadioItem({ disabled, checked, error, + compact, ariaLabel, children, mt, @@ -45,12 +72,14 @@ export function GoabRadioItem({ error={error ? "true" : undefined} disabled={disabled ? "true" : undefined} checked={checked ? "true" : undefined} + compact={compact ? "true" : undefined} arialabel={ariaLabel} revealarialabel={revealAriaLabel} mt={mt} mr={mr} mb={mb} ml={ml} + version="2" > {description && typeof description !== "string" && (
{description}
diff --git a/libs/react-components/src/lib/side-menu-group/side-menu-group.spec.tsx b/libs/react-components/src/lib/side-menu-group/side-menu-group.spec.tsx index 7e63445648..b2dc7c51a9 100644 --- a/libs/react-components/src/lib/side-menu-group/side-menu-group.spec.tsx +++ b/libs/react-components/src/lib/side-menu-group/side-menu-group.spec.tsx @@ -1,10 +1,10 @@ import { render } from "@testing-library/react"; -import SideMenuGroup from "./side-menu-group"; +import GoabSideMenuGroup from "./side-menu-group"; -describe("SideMenuGroup", () => { +describe("GoabSideMenuGroup", () => { it("should render successfully", () => { - const { baseElement } = render(); + const { baseElement } = render(); const el = baseElement.querySelector("goa-side-menu-group"); expect(el?.getAttribute("heading")).toBe("some header"); @@ -12,7 +12,7 @@ describe("SideMenuGroup", () => { }); it("should render icon if provided", () => { const { baseElement } = render( - , + , ); const el = baseElement.querySelector("goa-side-menu-group"); diff --git a/libs/react-components/src/lib/side-menu-group/side-menu-group.tsx b/libs/react-components/src/lib/side-menu-group/side-menu-group.tsx index b0f47e05e6..2cc8d9fa45 100644 --- a/libs/react-components/src/lib/side-menu-group/side-menu-group.tsx +++ b/libs/react-components/src/lib/side-menu-group/side-menu-group.tsx @@ -1,6 +1,22 @@ import { ReactNode, type JSX } from "react"; import { GoabIconType, Margins } from "@abgov/ui-components-common"; +interface WCProps extends Margins { + heading: string; + icon?: GoabIconType; + testid?: string; + version?: string; +} + +declare module "react" { + // eslint-disable-next-line @typescript-eslint/no-namespace + namespace JSX { + interface IntrinsicElements { + "goa-side-menu-group": WCProps & React.HTMLAttributes; + } + } +} + /* eslint-disable-next-line */ export interface GoabSideMenuGroupProps extends Margins { heading: string; @@ -9,18 +25,28 @@ export interface GoabSideMenuGroupProps extends Margins { children?: ReactNode; } -export function GoabSideMenuGroup(props: GoabSideMenuGroupProps): JSX.Element { +export function GoabSideMenuGroup({ + heading, + icon, + testId, + children, + mt, + mr, + mb, + ml, +}: GoabSideMenuGroupProps): JSX.Element { return ( - {props.children} + {children} ); } diff --git a/libs/react-components/src/lib/side-menu-heading/side-menu-heading.spec.tsx b/libs/react-components/src/lib/side-menu-heading/side-menu-heading.spec.tsx index 12f38f1a8c..4f99d5285c 100644 --- a/libs/react-components/src/lib/side-menu-heading/side-menu-heading.spec.tsx +++ b/libs/react-components/src/lib/side-menu-heading/side-menu-heading.spec.tsx @@ -1,10 +1,10 @@ import { render } from "@testing-library/react"; -import SideMenuHeading from "./side-menu-heading"; +import GoabSideMenuHeading from "./side-menu-heading"; -describe("SideMenuHeading", () => { +describe("GoabSideMenuHeading", () => { it("should render successfully", () => { - const { baseElement } = render(); + const { baseElement } = render(); const el = baseElement.querySelector("goa-side-menu-heading"); expect(el).toBeTruthy(); diff --git a/libs/react-components/src/lib/side-menu-heading/side-menu-heading.tsx b/libs/react-components/src/lib/side-menu-heading/side-menu-heading.tsx index 41d66f9a7b..a7a9bf0484 100644 --- a/libs/react-components/src/lib/side-menu-heading/side-menu-heading.tsx +++ b/libs/react-components/src/lib/side-menu-heading/side-menu-heading.tsx @@ -1,6 +1,21 @@ import { GoabIconType } from "@abgov/ui-components-common"; import { ReactNode } from "react"; +interface WCProps { + testid?: string; + icon?: GoabIconType; + version?: string; +} + +declare module "react" { + // eslint-disable-next-line @typescript-eslint/no-namespace + namespace JSX { + interface IntrinsicElements { + "goa-side-menu-heading": WCProps & React.HTMLAttributes; + } + } +} + /* eslint-disable-next-line */ export interface GoabSideMenuHeadingProps { meta?: ReactNode; @@ -9,11 +24,11 @@ export interface GoabSideMenuHeadingProps { children?: ReactNode; } -export function GoabSideMenuHeading(props: GoabSideMenuHeadingProps) { +export function GoabSideMenuHeading({ meta, testId, icon, children }: GoabSideMenuHeadingProps) { return ( - - {props.children} - {props.meta && {props.meta}} + + {children} + {meta && {meta}} ); } diff --git a/libs/react-components/src/lib/side-menu/side-menu.spec.tsx b/libs/react-components/src/lib/side-menu/side-menu.spec.tsx index 5f4e7687b7..6fc5a42bbe 100644 --- a/libs/react-components/src/lib/side-menu/side-menu.spec.tsx +++ b/libs/react-components/src/lib/side-menu/side-menu.spec.tsx @@ -1,13 +1,13 @@ import { render } from "@testing-library/react"; -import SideMenu from "./side-menu"; +import GoabSideMenu from "./side-menu"; -describe("SideMenu", () => { +describe("GoabSideMenu", () => { it("should render successfully", () => { const { baseElement } = render( - + Link - + ); const el = baseElement.querySelector("goa-side-menu"); expect(baseElement).toBeTruthy(); diff --git a/libs/react-components/src/lib/side-menu/side-menu.tsx b/libs/react-components/src/lib/side-menu/side-menu.tsx index 58adae0be0..0f15fb5d76 100644 --- a/libs/react-components/src/lib/side-menu/side-menu.tsx +++ b/libs/react-components/src/lib/side-menu/side-menu.tsx @@ -1,13 +1,31 @@ import { ReactNode, type JSX } from "react"; +interface WCProps { + testid?: string; + version?: string; +} + +declare module "react" { + // eslint-disable-next-line @typescript-eslint/no-namespace + namespace JSX { + interface IntrinsicElements { + "goa-side-menu": WCProps & React.HTMLAttributes; + } + } +} + /* eslint-disable-next-line */ export interface GoabSideMenuProps { testId?: string; children: ReactNode; } -export function GoabSideMenu(props: GoabSideMenuProps): JSX.Element { - return {props.children}; +export function GoabSideMenu({ testId, children }: GoabSideMenuProps): JSX.Element { + return ( + + {children} + + ); } export default GoabSideMenu; diff --git a/libs/react-components/src/lib/tab/tab.tsx b/libs/react-components/src/lib/tab/tab.tsx index 44faa0418a..c8c294a909 100644 --- a/libs/react-components/src/lib/tab/tab.tsx +++ b/libs/react-components/src/lib/tab/tab.tsx @@ -1,4 +1,5 @@ import type { JSX } from "react"; + interface WCProps { heading?: React.ReactNode; disabled?: string; diff --git a/libs/react-components/src/lib/table/table-sort-header.spec.tsx b/libs/react-components/src/lib/table/table-sort-header.spec.tsx index ec7c9803c4..67bfcc606c 100644 --- a/libs/react-components/src/lib/table/table-sort-header.spec.tsx +++ b/libs/react-components/src/lib/table/table-sort-header.spec.tsx @@ -19,4 +19,12 @@ describe("GoabTableSortHeader", () => { const el = document.querySelector("goa-table-sort-header"); expect(el?.getAttribute("data-grid")).toBe("cell"); }); + + it("should render sort-order attribute", () => { + render(); + const el = document.querySelector("goa-table-sort-header"); + expect(el?.getAttribute("sort-order")).toBe("2"); + expect(el?.getAttribute("name")).toBe("salary"); + expect(el?.getAttribute("direction")).toBe("desc"); + }); }); diff --git a/libs/react-components/src/lib/table/table-sort-header.tsx b/libs/react-components/src/lib/table/table-sort-header.tsx index 057a8d25d3..3babdaa1a0 100644 --- a/libs/react-components/src/lib/table/table-sort-header.tsx +++ b/libs/react-components/src/lib/table/table-sort-header.tsx @@ -1,28 +1,39 @@ -import { DataAttributes, GoabTableSortDirection } from "@abgov/ui-components-common"; +import { DataAttributes, GoabTableSortDirection, GoabTableSortOrder } from "@abgov/ui-components-common"; import type { JSX } from "react"; -import { transformProps, lowercase } from "../common/extract-props"; interface WCProps { name?: string; direction?: GoabTableSortDirection; + "sort-order"?: GoabTableSortOrder; +} + +declare module "react" { + // eslint-disable-next-line @typescript-eslint/no-namespace + namespace JSX { + interface IntrinsicElements { + "goa-table-sort-header": WCProps & React.HTMLAttributes; + } + } } /* eslint-disable-next-line */ export interface GoabTableSortProps extends DataAttributes { name?: string; direction?: GoabTableSortDirection; + sortOrder?: GoabTableSortOrder; children?: React.ReactNode; } export function GoabTableSortHeader({ + name, + direction = "none", + sortOrder, children, ...rest }: GoabTableSortProps): JSX.Element { - const _props = transformProps(rest, lowercase); - return ( - + {children} ); diff --git a/libs/react-components/src/lib/table/table.spec.tsx b/libs/react-components/src/lib/table/table.spec.tsx index d9d38a2f7e..cac3b306ed 100644 --- a/libs/react-components/src/lib/table/table.spec.tsx +++ b/libs/react-components/src/lib/table/table.spec.tsx @@ -1,39 +1,38 @@ import { render, fireEvent } from "@testing-library/react"; import { describe, it, vi } from "vitest"; -import Table from "./table"; +import GoabTable from "./table"; import { GoabTableOnSortDetail } from "@abgov/ui-components-common"; -describe("Table", () => { +describe("GoabTable", () => { it("should render", () => { - const { baseElement } = render(); + const { baseElement } = render(); const table = baseElement.querySelector("goa-table"); expect(table?.getAttribute("stickyHeader")).toBeNull(); }); it("should render with properties", () => { - const { baseElement } = render(
); + const { baseElement } = render(); const table = baseElement.querySelector("goa-table"); - expect(table?.getAttribute("stickyHeader")).toBeNull(); - // TODO: Enable this later if needed - // expect(table?.getAttribute("stickyHeader")).toBe("true"); + expect(table?.getAttribute("striped")).toBe("true"); + expect(table?.getAttribute("sort-mode")).toBe("multi"); }); it("should call onSort when _sort event is triggered", () => { const onSort = vi.fn(); - const { baseElement } = render(
); + const { baseElement } = render(); const table = baseElement.querySelector("goa-table"); - const event: GoabTableOnSortDetail = { sortBy: "name", sortDir: 1 }; + const detail: GoabTableOnSortDetail = { sortBy: "name", sortDir: 1 }; expect(table).toBeTruthy(); - table && fireEvent(table, new CustomEvent("_sort", { detail: event })); - expect(onSort).toHaveBeenCalledWith(event); + table && fireEvent(table, new CustomEvent("_sort", { detail })); + expect(onSort).toHaveBeenCalledWith(detail); }); it("should handle _sort event gracefully when no onSort prop is passed", () => { - const { baseElement } = render(
); + const { baseElement } = render(); const table = baseElement.querySelector("goa-table"); expect(table).toBeTruthy(); diff --git a/libs/react-components/src/lib/table/table.tsx b/libs/react-components/src/lib/table/table.tsx index 659c6b6bc2..fda6a94bff 100644 --- a/libs/react-components/src/lib/table/table.tsx +++ b/libs/react-components/src/lib/table/table.tsx @@ -1,16 +1,41 @@ import { GoabTableOnSortDetail, + GoabTableOnMultiSortDetail, + GoabTableSortMode, GoabTableVariant, Margins, } from "@abgov/ui-components-common"; import { ReactNode, useEffect, useRef } from "react"; +interface WCProps extends Margins { + ref?: React.RefObject; + width?: string; + stickyheader?: string; + variant?: GoabTableVariant; + "sort-mode"?: GoabTableSortMode; + testid?: string; + striped?: string; + version?: string; +} + +declare module "react" { + // eslint-disable-next-line @typescript-eslint/no-namespace + namespace JSX { + interface IntrinsicElements { + "goa-table": WCProps & React.HTMLAttributes; + } + } +} + /* eslint-disable-next-line */ export interface GoabTableProps extends Margins { width?: string; onSort?: (detail: GoabTableOnSortDetail) => void; + onMultiSort?: (detail: GoabTableOnMultiSortDetail) => void; + sortMode?: GoabTableSortMode; // stickyHeader?: boolean; TODO: enable this later variant?: GoabTableVariant; + striped?: boolean; testId?: string; children?: ReactNode; } @@ -18,7 +43,7 @@ export interface GoabTableProps extends Margins { // legacy name export type TableProps = GoabTableProps; -export function GoabTable({ onSort, ...props }: GoabTableProps) { +export function GoabTable({ onSort, onMultiSort, sortMode, ...props }: GoabTableProps) { const ref = useRef(null); useEffect(() => { if (!ref.current) { @@ -29,12 +54,18 @@ export function GoabTable({ onSort, ...props }: GoabTableProps) { const detail = (e as CustomEvent).detail; onSort?.(detail); }; + const multiSortListener = (e: unknown) => { + const detail = (e as CustomEvent).detail; + onMultiSort?.(detail); + }; current.addEventListener("_sort", sortListener); + current.addEventListener("_multisort", multiSortListener); return () => { current.removeEventListener("_sort", sortListener); + current.removeEventListener("_multisort", multiSortListener); }; - }, [ref, onSort]); + }, [ref, onSort, onMultiSort]); return (
{props.children}
diff --git a/libs/react-components/src/lib/tabs/tabs.spec.tsx b/libs/react-components/src/lib/tabs/tabs.spec.tsx index 7656263cb0..320c11e51c 100644 --- a/libs/react-components/src/lib/tabs/tabs.spec.tsx +++ b/libs/react-components/src/lib/tabs/tabs.spec.tsx @@ -2,10 +2,10 @@ import { render } from "@testing-library/react"; import { GoabTab } from "../tab/tab"; import GoabTabs from "./tabs"; -describe("Tabs", () => { +describe("GoabTabs", () => { it("should render successfully", () => { const { baseElement } = render( - +

Profile: Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed @@ -23,25 +23,13 @@ describe("Tabs", () => { expect(tabElements.length).toBe(1); }); - it("should render tabs with slug props", () => { + it("should render with navigation attribute", () => { const { baseElement } = render( - - -

Overview content

-
- -

Details content

-
+ + Tab 1 content , ); - - const tabElements = baseElement.querySelectorAll("goa-tab"); - expect(tabElements.length).toBe(2); - - // First tab should have slug attribute - expect(tabElements[0].getAttribute("slug")).toBe("overview-section"); - - // Second tab should not have slug attribute (or null/undefined) - expect(tabElements[1].getAttribute("slug")).toBeNull(); + const el = baseElement.querySelector("goa-tabs"); + expect(el?.getAttribute("navigation")).toBe("none"); }); }); diff --git a/libs/react-components/src/lib/tabs/tabs.tsx b/libs/react-components/src/lib/tabs/tabs.tsx index 18d331c5ca..29b9353071 100644 --- a/libs/react-components/src/lib/tabs/tabs.tsx +++ b/libs/react-components/src/lib/tabs/tabs.tsx @@ -1,11 +1,39 @@ import React, { useEffect, useRef, type JSX } from "react"; -import { GoabTabsOnChangeDetail, GoabTabsVariant } from "@abgov/ui-components-common"; +import { + GoabTabsOnChangeDetail, + GoabTabsOrientation, + GoabTabsVariant, + GoabTabsNavigation, +} from "@abgov/ui-components-common"; + +interface WCProps { + initialtab?: number; + ref: React.RefObject; + onChange?: (tab: number) => void; + testid?: string; + variant?: GoabTabsVariant; + navigation?: GoabTabsNavigation; + version?: string; + orientation?: string; +} + +declare module "react" { + // eslint-disable-next-line @typescript-eslint/no-namespace + namespace JSX { + interface IntrinsicElements { + "goa-tabs": WCProps & React.HTMLAttributes; + } + } +} export interface GoabTabsProps { initialTab?: number; children?: React.ReactNode; testId?: string; variant?: GoabTabsVariant; + /** Tab layout orientation. "auto" stacks vertically on mobile (default), "horizontal" keeps horizontal on all screen sizes. */ + orientation?: GoabTabsOrientation; + navigation?: GoabTabsNavigation; onChange?: (detail: GoabTabsOnChangeDetail) => void; } @@ -13,8 +41,10 @@ export function GoabTabs({ initialTab, children, testId, - variant, onChange, + variant, + orientation, + navigation, }: GoabTabsProps): JSX.Element { const ref = useRef(null); @@ -33,7 +63,15 @@ export function GoabTabs({ }, [onChange]); return ( - + {children} ); diff --git a/libs/react-components/src/lib/textarea/textarea.spec.tsx b/libs/react-components/src/lib/textarea/textarea.spec.tsx index d775af6002..683478afde 100644 --- a/libs/react-components/src/lib/textarea/textarea.spec.tsx +++ b/libs/react-components/src/lib/textarea/textarea.spec.tsx @@ -7,7 +7,7 @@ const noop = () => { /* do nothing */ }; -describe("TextArea", () => { +describe("GoabTextArea", () => { it("should render with properties", async () => { render(); diff --git a/libs/react-components/src/lib/textarea/textarea.tsx b/libs/react-components/src/lib/textarea/textarea.tsx index 81ac075662..ec364f80f8 100644 --- a/libs/react-components/src/lib/textarea/textarea.tsx +++ b/libs/react-components/src/lib/textarea/textarea.tsx @@ -3,7 +3,9 @@ import { GoabTextAreaOnChangeDetail, GoabTextAreaOnKeyPressDetail, GoabTextAreaOnBlurDetail, - Margins, DataAttributes, + GoabTextAreaSize, + Margins, + DataAttributes, } from "@abgov/ui-components-common"; import { useEffect, useRef, type JSX } from "react"; import { transformProps, lowercase } from "../common/extract-props"; @@ -23,6 +25,20 @@ interface WCProps extends Margins { maxcount?: number; autocomplete?: string; testid?: string; + size?: GoabTextAreaSize; + version?: string; +} + +declare module "react" { + // eslint-disable-next-line @typescript-eslint/no-namespace + namespace JSX { + interface IntrinsicElements { + "goa-textarea": WCProps & + React.HTMLAttributes & { + ref: React.Ref; + }; + } + } } export interface GoabTextAreaProps extends Margins, DataAttributes { @@ -41,6 +57,7 @@ export interface GoabTextAreaProps extends Margins, DataAttributes { countBy?: GoabTextAreaCountBy; maxCount?: number; autoComplete?: string; + size?: GoabTextAreaSize; onChange?: (event: GoabTextAreaOnChangeDetail) => void; onKeyPress?: (event: GoabTextAreaOnKeyPressDetail) => void; @@ -98,6 +115,7 @@ export function GoabTextArea({ readOnly={readOnly ? "true" : undefined} disabled={disabled ? "true" : undefined} error={error ? "true" : undefined} + version="2" {..._props} > ); diff --git a/libs/react-components/src/lib/three-column-layout/three-column-layout.spec.tsx b/libs/react-components/src/lib/three-column-layout/three-column-layout.spec.tsx index bb1aa7d4fe..955578f7c9 100644 --- a/libs/react-components/src/lib/three-column-layout/three-column-layout.spec.tsx +++ b/libs/react-components/src/lib/three-column-layout/three-column-layout.spec.tsx @@ -40,7 +40,7 @@ describe("ThreeColumnLayout", () => { "Lorem ipsum dolor sit amet, qui minim labore adipisicing minim sint cillum sint consectetur cupidatat.", ); expect(baseElement.querySelector("goa-app-header")).toBeTruthy(); - expect(baseElement.innerHTML).toContain(""); + expect(baseElement.innerHTML).toContain(' { "Lorem ipsum dolor sit amet, qui minim labore adipisicing minim sint cillum sint consectetur cupidatat.", ); expect(baseElement.querySelector("goa-app-header")).toBeTruthy(); - expect(baseElement.innerHTML).toContain(""); + expect(baseElement.innerHTML).toContain(' { expect(menuGroup?.getAttribute("icon")).toBe("star"); expect(menuGroup?.getAttribute("testid")).toBe("foo"); }); + + it("should set open attribute", () => { + const { baseElement } = render( + , + ); + const menuGroup = baseElement.querySelector("goa-work-side-menu-group"); + expect(menuGroup?.hasAttribute("open")).toBe(true); + }); + + it("should be closed by default", () => { + const { baseElement } = render( + , + ); + const menuGroup = baseElement.querySelector("goa-work-side-menu-group"); + expect(menuGroup?.getAttribute("open")).toBeNull(); + }); }); diff --git a/libs/react-components/src/experimental/work-side-menu-group/work-side-menu-group.tsx b/libs/react-components/src/lib/work-side-menu-group/work-side-menu-group.tsx similarity index 73% rename from libs/react-components/src/experimental/work-side-menu-group/work-side-menu-group.tsx rename to libs/react-components/src/lib/work-side-menu-group/work-side-menu-group.tsx index 5d498c68e4..503898e66e 100644 --- a/libs/react-components/src/experimental/work-side-menu-group/work-side-menu-group.tsx +++ b/libs/react-components/src/lib/work-side-menu-group/work-side-menu-group.tsx @@ -3,8 +3,9 @@ import { GoabIconType } from "@abgov/ui-components-common"; interface WCProps { heading: string; - icon: GoabIconType; + icon?: GoabIconType; testid?: string; + open?: boolean; } declare module "react" { @@ -18,16 +19,18 @@ declare module "react" { export interface GoabWorkSideMenuGroupProps { heading: string; - icon: GoabIconType; + icon?: GoabIconType; + open?: boolean; testId?: string; children?: React.ReactNode; } -export function GoabxWorkSideMenuGroup(props: GoabWorkSideMenuGroupProps): JSX.Element { +export function GoabWorkSideMenuGroup(props: GoabWorkSideMenuGroupProps): JSX.Element { return ( {props.children} @@ -35,4 +38,4 @@ export function GoabxWorkSideMenuGroup(props: GoabWorkSideMenuGroupProps): JSX.E ); } -export default GoabxWorkSideMenuGroup; +export default GoabWorkSideMenuGroup; diff --git a/libs/react-components/src/lib/work-side-menu-item/work-side-menu-item.spec.tsx b/libs/react-components/src/lib/work-side-menu-item/work-side-menu-item.spec.tsx new file mode 100644 index 0000000000..f5c9190c46 --- /dev/null +++ b/libs/react-components/src/lib/work-side-menu-item/work-side-menu-item.spec.tsx @@ -0,0 +1,60 @@ +import { render } from "@testing-library/react"; + +import WorkSideMenuItem from "./work-side-menu-item"; + +describe("WorkSideMenuItem", () => { + it("should render successfully", () => { + const { baseElement } = render( + + ); + expect(baseElement).toBeTruthy(); + const menuItem = baseElement.querySelector("goa-work-side-menu-item"); + expect(menuItem?.getAttribute("label")).toBe("Foo"); + expect(menuItem?.getAttribute("url")).toBe("#"); + expect(menuItem?.getAttribute("badge")).toBe("42"); + expect(menuItem?.getAttribute("icon")).toBe("star"); + expect(menuItem?.getAttribute("testid")).toBe("foo"); + expect(menuItem?.getAttribute("type")).toBe("success"); + }); + + it("should render without url", () => { + const { baseElement } = render( + , + ); + const menuItem = baseElement.querySelector("goa-work-side-menu-item"); + expect(menuItem).toBeTruthy(); + expect(menuItem?.getAttribute("label")).toBe("No Link"); + expect(menuItem?.getAttribute("url")).toBeNull(); + }); + + it("should render with popoverContent slot", () => { + const { baseElement } = render( + Popover content
} + />, + ); + const menuItem = baseElement.querySelector("goa-work-side-menu-item"); + expect(menuItem).toBeTruthy(); + const slotDiv = menuItem?.querySelector('[slot="popoverContent"]'); + expect(slotDiv).toBeTruthy(); + expect(slotDiv?.textContent).toBe("Popover content"); + }); + + it("should not render popoverContent slot when not provided", () => { + const { baseElement } = render( + , + ); + const menuItem = baseElement.querySelector("goa-work-side-menu-item"); + const slotDiv = menuItem?.querySelector('[slot="popoverContent"]'); + expect(slotDiv).toBeNull(); + }); +}); diff --git a/libs/react-components/src/experimental/work-side-menu-item/work-side-menu-item.tsx b/libs/react-components/src/lib/work-side-menu-item/work-side-menu-item.tsx similarity index 79% rename from libs/react-components/src/experimental/work-side-menu-item/work-side-menu-item.tsx rename to libs/react-components/src/lib/work-side-menu-item/work-side-menu-item.tsx index b0bc5545c4..6a0e3f517e 100644 --- a/libs/react-components/src/experimental/work-side-menu-item/work-side-menu-item.tsx +++ b/libs/react-components/src/lib/work-side-menu-item/work-side-menu-item.tsx @@ -2,7 +2,7 @@ import { type JSX } from "react"; import { GoabWorkSideMenuItemType } from "@abgov/ui-components-common"; interface WCProps { label: string; - url: string; + url?: string; badge?: string; current?: string; divider?: string; @@ -22,7 +22,7 @@ declare module "react" { export interface GoabWorkSideMenuItemProps { label: string; - url: string; + url?: string; badge?: string; current?: boolean; divider?: boolean; @@ -30,9 +30,10 @@ export interface GoabWorkSideMenuItemProps { testId?: string; type?: GoabWorkSideMenuItemType; children?: React.ReactNode; + popoverContent?: React.ReactNode; } -export function GoabxWorkSideMenuItem(props: GoabWorkSideMenuItemProps): JSX.Element { +export function GoabWorkSideMenuItem(props: GoabWorkSideMenuItemProps): JSX.Element { return ( + {props.popoverContent &&
{props.popoverContent}
} {props.children}
); } -export default GoabxWorkSideMenuItem; +export default GoabWorkSideMenuItem; diff --git a/libs/react-components/src/experimental/work-side-menu/work-side-menu.spec.tsx b/libs/react-components/src/lib/work-side-menu/work-side-menu.spec.tsx similarity index 61% rename from libs/react-components/src/experimental/work-side-menu/work-side-menu.spec.tsx rename to libs/react-components/src/lib/work-side-menu/work-side-menu.spec.tsx index 1a2a603432..10082429eb 100644 --- a/libs/react-components/src/experimental/work-side-menu/work-side-menu.spec.tsx +++ b/libs/react-components/src/lib/work-side-menu/work-side-menu.spec.tsx @@ -1,4 +1,5 @@ import { render } from "@testing-library/react"; +import { vi } from "vitest"; import WorkSideMenu from "./work-side-menu"; @@ -21,4 +22,16 @@ describe("WorkSideMenu", () => { expect(menu?.getAttribute("user-secondary-text")).toBe("test.user@example.com"); expect(menu?.getAttribute("testid")).toBe("bar"); }); -}); \ No newline at end of file + + it("should call onNavigate when _navigate event is dispatched", () => { + const onNavigate = vi.fn(); + const { baseElement } = render( + , + ); + const menu = baseElement.querySelector("goa-work-side-menu"); + menu?.dispatchEvent( + new CustomEvent("_navigate", { detail: { url: "/dashboard" }, bubbles: true }), + ); + expect(onNavigate).toHaveBeenCalledWith("/dashboard"); + }); +}); diff --git a/libs/react-components/src/experimental/work-side-menu/work-side-menu.tsx b/libs/react-components/src/lib/work-side-menu/work-side-menu.tsx similarity index 79% rename from libs/react-components/src/experimental/work-side-menu/work-side-menu.tsx rename to libs/react-components/src/lib/work-side-menu/work-side-menu.tsx index f3b249c115..a0f8db1067 100644 --- a/libs/react-components/src/experimental/work-side-menu/work-side-menu.tsx +++ b/libs/react-components/src/lib/work-side-menu/work-side-menu.tsx @@ -33,9 +33,10 @@ export interface GoabWorkSideMenuProps { accountContent?: ReactNode; open?: boolean; onToggle?: () => void; + onNavigate?: (path: string) => void; } -export function GoabxWorkSideMenu({ +export function GoabWorkSideMenu({ heading, url, userName, @@ -46,6 +47,7 @@ export function GoabxWorkSideMenu({ accountContent, open, onToggle, + onNavigate, }: GoabWorkSideMenuProps): JSX.Element { const el = useRef(null); @@ -58,6 +60,20 @@ export function GoabxWorkSideMenu({ el.current?.removeEventListener("_toggle", onToggle); }; }, [el, onToggle]); + + useEffect(() => { + if (!el?.current || !onNavigate) { + return; + } + const handler = (e: Event) => { + onNavigate((e as CustomEvent).detail.url); + }; + el.current?.addEventListener("_navigate", handler); + return () => { + el.current?.removeEventListener("_navigate", handler); + }; + }, [el, onNavigate]); + return ( { + it("should render with all props", () => { + const { baseElement } = render( + , + ); + const el = baseElement.querySelector("goa-work-side-notification-item"); + expect(el).toBeTruthy(); + expect(el?.getAttribute("type")).toBe("warning"); + expect(el?.getAttribute("timestamp")).toBe("2026-02-10T12:00:00Z"); + expect(el?.getAttribute("title")).toBe("Action required"); + expect(el?.getAttribute("description")).toBe("Please review the pending request."); + expect(el?.getAttribute("read-status")).toBe("unread"); + expect(el?.getAttribute("priority")).toBe("urgent"); + expect(el?.getAttribute("testid")).toBe("noti-1"); + }); + + it("should render with only required props", () => { + const { baseElement } = render( + , + ); + const el = baseElement.querySelector("goa-work-side-notification-item"); + expect(el).toBeTruthy(); + expect(el?.getAttribute("description")).toBe("A simple notification."); + expect(el?.getAttribute("type")).toBeNull(); + expect(el?.getAttribute("read-status")).toBeNull(); + expect(el?.getAttribute("priority")).toBeNull(); + }); + + it("should handle _click event", () => { + const onClick = vi.fn(); + const { baseElement } = render( + , + ); + const el = baseElement.querySelector("goa-work-side-notification-item"); + expect(el).toBeTruthy(); + + fireEvent(el!, new CustomEvent("_click", { bubbles: true })); + expect(onClick).toHaveBeenCalledTimes(1); + }); +}); diff --git a/libs/react-components/src/lib/work-side-notification-item/work-side-notification-item.tsx b/libs/react-components/src/lib/work-side-notification-item/work-side-notification-item.tsx new file mode 100644 index 0000000000..c8b60354f9 --- /dev/null +++ b/libs/react-components/src/lib/work-side-notification-item/work-side-notification-item.tsx @@ -0,0 +1,79 @@ +import { useEffect, useRef, type JSX } from "react"; +import { + GoabWorkSideNotificationItemType, + GoabWorkSideNotificationReadStatus, + GoabWorkSideNotificationPriority, +} from "@abgov/ui-components-common"; + +interface WCProps { + type?: GoabWorkSideNotificationItemType; + timestamp?: string; + title?: string; + description: string; + "read-status"?: GoabWorkSideNotificationReadStatus; + priority?: GoabWorkSideNotificationPriority; + testid?: string; + ref: React.RefObject; +} + +declare module "react" { + // eslint-disable-next-line @typescript-eslint/no-namespace + namespace JSX { + interface IntrinsicElements { + "goa-work-side-notification-item": WCProps & React.HTMLAttributes; + } + } +} + +export interface GoabWorkSideNotificationItemProps { + type?: GoabWorkSideNotificationItemType; + timestamp?: string; + title?: string; + description: string; + readStatus?: GoabWorkSideNotificationReadStatus; + priority?: GoabWorkSideNotificationPriority; + testId?: string; + onClick?: () => void; +} + +export function GoabWorkSideNotificationItem({ + type, + timestamp, + title, + description, + readStatus, + priority, + testId, + onClick, +}: GoabWorkSideNotificationItemProps): JSX.Element { + const el = useRef(null); + + useEffect(() => { + if (!el.current) return; + + const handleClick = () => { + onClick?.(); + }; + + el.current.addEventListener("_click", handleClick); + + return () => { + el.current?.removeEventListener("_click", handleClick); + }; + }, [el, onClick]); + + return ( + + ); +} + +export default GoabWorkSideNotificationItem; diff --git a/libs/react-components/src/lib/work-side-notification-panel/work-side-notification-panel.spec.tsx b/libs/react-components/src/lib/work-side-notification-panel/work-side-notification-panel.spec.tsx new file mode 100644 index 0000000000..50eb5a6ce5 --- /dev/null +++ b/libs/react-components/src/lib/work-side-notification-panel/work-side-notification-panel.spec.tsx @@ -0,0 +1,60 @@ +import { render, fireEvent } from "@testing-library/react"; +import { vi } from "vitest"; +import GoabWorkSideNotificationPanel from "./work-side-notification-panel"; + +describe("GoabWorkSideNotificationPanel", () => { + it("should render with all props", () => { + const { baseElement } = render( + +

Child content

+
, + ); + const el = baseElement.querySelector("goa-work-side-notification-panel"); + expect(el).toBeTruthy(); + expect(el?.getAttribute("heading")).toBe("Notifications"); + expect(el?.getAttribute("active-tab")).toBe("unread"); + expect(el?.getAttribute("testid")).toBe("panel-1"); + expect(el?.textContent).toContain("Child content"); + }); + + it("should render with only children", () => { + const { baseElement } = render( + +
Notification items
+
, + ); + const el = baseElement.querySelector("goa-work-side-notification-panel"); + expect(el).toBeTruthy(); + expect(el?.getAttribute("heading")).toBeNull(); + expect(el?.getAttribute("active-tab")).toBeNull(); + expect(el?.textContent).toContain("Notification items"); + }); + + it("should handle _markAllRead event", () => { + const onMarkAllRead = vi.fn(); + const { baseElement } = render( + , + ); + const el = baseElement.querySelector("goa-work-side-notification-panel"); + expect(el).toBeTruthy(); + + fireEvent(el!, new CustomEvent("_markAllRead", { bubbles: true })); + expect(onMarkAllRead).toHaveBeenCalledTimes(1); + }); + + it("should handle _viewAll event", () => { + const onViewAll = vi.fn(); + const { baseElement } = render( + , + ); + const el = baseElement.querySelector("goa-work-side-notification-panel"); + expect(el).toBeTruthy(); + + fireEvent(el!, new CustomEvent("_viewAll", { bubbles: true })); + expect(onViewAll).toHaveBeenCalledTimes(1); + }); +}); diff --git a/libs/react-components/src/lib/work-side-notification-panel/work-side-notification-panel.tsx b/libs/react-components/src/lib/work-side-notification-panel/work-side-notification-panel.tsx new file mode 100644 index 0000000000..0f963df150 --- /dev/null +++ b/libs/react-components/src/lib/work-side-notification-panel/work-side-notification-panel.tsx @@ -0,0 +1,71 @@ +import { ReactNode, useEffect, useRef, type JSX } from "react"; +import { GoabWorkSideNotificationActiveTabType } from "@abgov/ui-components-common"; + +interface WCProps { + heading?: string; + "active-tab"?: GoabWorkSideNotificationActiveTabType; + testid?: string; + ref: React.RefObject; +} + +declare module "react" { + // eslint-disable-next-line @typescript-eslint/no-namespace + namespace JSX { + interface IntrinsicElements { + "goa-work-side-notification-panel": WCProps & React.HTMLAttributes; + } + } +} + +export interface GoabWorkSideNotificationPanelProps { + heading?: string; + activeTab?: GoabWorkSideNotificationActiveTabType; + testId?: string; + children?: ReactNode; + onMarkAllRead?: () => void; + onViewAll?: () => void; +} + +export function GoabWorkSideNotificationPanel({ + heading, + activeTab, + testId, + children, + onMarkAllRead, + onViewAll, +}: GoabWorkSideNotificationPanelProps): JSX.Element { + const el = useRef(null); + + useEffect(() => { + if (!el.current) return; + + const handleMarkAllRead = () => { + onMarkAllRead?.(); + }; + + const handleViewAll = () => { + onViewAll?.(); + }; + + el.current.addEventListener("_markAllRead", handleMarkAllRead); + el.current.addEventListener("_viewAll", handleViewAll); + + return () => { + el.current?.removeEventListener("_markAllRead", handleMarkAllRead); + el.current?.removeEventListener("_viewAll", handleViewAll); + }; + }, [el, onMarkAllRead, onViewAll]); + + return ( + + {children} + + ); +} + +export default GoabWorkSideNotificationPanel; diff --git a/libs/react-components/vite.config.ts b/libs/react-components/vite.config.ts index 3c33234452..0a35b5549a 100644 --- a/libs/react-components/vite.config.ts +++ b/libs/react-components/vite.config.ts @@ -32,7 +32,7 @@ export default defineConfig({ emptyOutDir: true, lib: { // Could also be a dictionary or array of multiple entry points. - entry: { index: "src/index.ts", experimental: "src/experimental/index.ts" }, + entry: { index: "src/index.ts" }, name: "react-components", // Change this to the formats you want to support. // Don't forget to update your package.json as well. diff --git a/libs/web-components/src/assets/css/reset.css b/libs/web-components/src/assets/css/reset.css index a242ab8320..cc8d0a05bd 100644 --- a/libs/web-components/src/assets/css/reset.css +++ b/libs/web-components/src/assets/css/reset.css @@ -91,23 +91,28 @@ a:focus-visible, a:focus-within, a:focus { h1 { font: var(--goa-typography-heading-xl); + letter-spacing: var(--goa-typography-heading-xl-letter-spacing); } h2 { font: var(--goa-typography-heading-l); + letter-spacing: var(--goa-typography-heading-l-letter-spacing); } h3 { font: var(--goa-typography-heading-m); + letter-spacing: var(--goa-typography-heading-m-letter-spacing); } h4 { font: var(--goa-typography-heading-s); + letter-spacing: var(--goa-typography-heading-s-letter-spacing); } h5, h6 { font: var(--goa-typography-heading-xs); + letter-spacing: var(--goa-typography-heading-xs-letter-spacing); } h3 + h1 { diff --git a/libs/web-components/src/common/utils.ts b/libs/web-components/src/common/utils.ts index 40b5d52afc..88c905a22e 100644 --- a/libs/web-components/src/common/utils.ts +++ b/libs/web-components/src/common/utils.ts @@ -387,6 +387,95 @@ export function getLocalDateValues(input: string | Date): { return null; } +// =============== +// Date formatting +// =============== + +/** + * Returns "Today", "Yesterday", or null for other dates. + */ +export function getRelativeDayLabel(date: Date): "Today" | "Yesterday" | null { + const now = new Date(); + const today = new Date(now.getFullYear(), now.getMonth(), now.getDate()); + const yesterday = new Date(today); + yesterday.setDate(today.getDate() - 1); + const dateOnly = new Date( + date.getFullYear(), + date.getMonth(), + date.getDate(), + ); + + if (dateOnly.getTime() === today.getTime()) return "Today"; + if (dateOnly.getTime() === yesterday.getTime()) return "Yesterday"; + return null; +} + +/** + * Formats a relative timestamp: "Now", "5 min ago", "2 h ago", "3 d ago", + * or a short date string for older dates. + */ +export function formatRelativeTimestamp(date: Date | null): string { + if (!date || !date.getTime()) return ""; + + const now = new Date(); + const diffMs = now.getTime() - date.getTime(); + const diffSecs = Math.floor(diffMs / 1000); + const diffMins = Math.floor(diffSecs / 60); + const diffHours = Math.floor(diffMins / 60); + const diffDays = Math.floor(diffHours / 24); + + if (diffSecs < 60) return "Now"; + if (diffMins < 60) return `${diffMins} min ago`; + if (diffHours < 24) return `${diffHours} h ago`; + if (diffDays < 7) return `${diffDays} d ago`; + + return date.toLocaleString("en-CA", { + weekday: "short", + month: "short", + day: "numeric", + hour: "numeric", + minute: "2-digit", + hour12: true, + }); +} + +/** + * Formats a full date for tooltips: "Today, February 24, 2026, 2:30 p.m." + */ +export function formatFullDate(date: Date | null): string { + if (!date || !date.getTime()) return ""; + + const fullDateString = date.toLocaleString("en-CA", { + weekday: "long", + month: "long", + day: "numeric", + year: "numeric", + hour: "numeric", + minute: "2-digit", + hour12: true, + }); + + const label = getRelativeDayLabel(date); + if (label) { + return `${label}, ${fullDateString.split(", ").slice(1).join(", ")}`; + } + return fullDateString; +} + +/** + * Formats a date group heading: "Today", "Yesterday", or "February 24, 2026". + */ +export function formatDateGroup(date: Date): string { + const label = getRelativeDayLabel(date); + if (label) return label; + + return date.toLocaleDateString("en-CA", { + month: "long", + day: "numeric", + year: "numeric", + }); +} + /** * Check if a node is focusable * @param node diff --git a/libs/web-components/src/components/app-header-menu/AppHeaderMenu.svelte b/libs/web-components/src/components/app-header-menu/AppHeaderMenu.svelte index 0cd5f13076..7d70ec4d99 100644 --- a/libs/web-components/src/components/app-header-menu/AppHeaderMenu.svelte +++ b/libs/web-components/src/components/app-header-menu/AppHeaderMenu.svelte @@ -26,6 +26,8 @@ export let leadingicon: GoAIconType; /** The menu style variant. Primary uses bold text, secondary uses regular weight. */ export let type: "primary" | "secondary" = "primary"; + /** The header version this menu is used with. */ + export let version: "1" | "2" = "1"; /** Sets a data-testid attribute for automated testing. */ export let testid: string = "rootEl"; @@ -44,9 +46,13 @@ let _hasCurrentLink = false; // open state let _open = false; + // Track if this menu is in V2 navigation context + let _isV2Navigation = false; // Reactive - $: _desktop = _innerWidth >= TABLET_BP; + // V2 navigation menus stay in desktop mode at all sizes (they're in the navigation slot with full width) + // V1 menus collapse to mobile mode below TABLET_BP (they're inside the collapsed menu) + $: _desktop = _isV2Navigation ? true : _innerWidth >= TABLET_BP; // call the method when window changes to desktop size $: _desktop && bindToPopoverCloseEvent(); @@ -55,6 +61,23 @@ onMount(() => { validateRequired("GoaAppHeaderMenu", { heading }); + const hostElement = (_rootEl?.getRootNode() as ShadowRoot) + ?.host as HTMLElement; + const inNavigationSlot = hostElement?.getAttribute("slot") === "navigation"; + + // Auto-detect version from parent AppHeader if not explicitly set + // Uses property access because Svelte props aren't reflected as HTML attributes + let effectiveVersion = version; + if (version === "1" && inNavigationSlot) { + const parentAppHeader = hostElement?.closest( + "goa-app-header", + ) as HTMLElement & { version?: string }; + if (parentAppHeader?.version === "2") { + effectiveVersion = "2"; + } + } + + _isV2Navigation = effectiveVersion === "2" && inNavigationSlot; dispatchInit(); addAppHeaderCurrentChangeListener(); }); @@ -166,42 +189,69 @@ class="app-header-menu-popover" context="menu" focusborderwidth="0" - borderradius="0" + borderradius={_isV2Navigation ? "8" : "0"} padded="false" tabindex="-1" maxwidth="16rem" minwidth="8rem" position="below" open={_open} + style={_isV2Navigation + ? "--goa-popover-shadow: var(--goa-app-header-nav-menu-dropdown-shadow); --goa-popover-border: var(--goa-app-header-nav-menu-dropdown-border, 0.5px solid var(--goa-color-greyscale-200, #e0e0e0)); margin-top: var(--goa-app-header-nav-menu-dropdown-gap, 3px);" + : ""} > -
+
{:else} - {#if _open} -
+
{/if} @@ -217,7 +267,7 @@ position: inherit; } - /* Menu item with children */ + /* Menu item with children - V1 styles */ button { padding: var(--goa-app-header-padding-nav-item-with-children); border: none; @@ -226,7 +276,7 @@ display: flex; align-items: center; gap: 6px; - background: none; + background: var(--goa-color-greyscale-white, #ffffff); border-top: var(--goa-app-header-border-nav-item-default); border-bottom: var(--goa-app-header-border-nav-item-default); } @@ -330,6 +380,33 @@ ); } + /* Menu headers (non-clickable group labels in More menu) */ + /* Need high specificity to override .desktop.v2-nav-menu styles */ + .desktop.v2-nav-menu :global(::slotted(a.menu-header)), + .desktop.v2-nav-menu :global(::slotted(a.menu-header:visited)), + .desktop.v2-nav-menu :global(::slotted(a.menu-header:hover)), + .desktop.v2-nav-menu :global(::slotted(a.menu-header:focus)), + .desktop.v2-nav-menu :global(::slotted(a.menu-header:active)) { + font-size: 14px !important; + font-weight: var(--goa-font-weight-regular) !important; + color: var(--goa-color-greyscale-600) !important; + padding: 6px 8px !important; + cursor: default !important; + background: transparent !important; + text-decoration: none !important; + pointer-events: none !important; + } + + /* Indented menu items (children under a header in More menu) */ + /* Need high specificity to override .desktop.v2-nav-menu padding */ + .desktop.v2-nav-menu :global(::slotted(a.indented)), + .desktop.v2-nav-menu :global(::slotted(a.indented:visited)), + .desktop.v2-nav-menu :global(::slotted(a.indented:hover)), + .desktop.v2-nav-menu :global(::slotted(a.indented:focus)) { + padding-left: 24px !important; + padding-right: 8px !important; + } + /* Secondary Menu items (in popover on menu item) --Tablet */ .not-desktop :global(::slotted(a)) { padding: var( @@ -347,6 +424,7 @@ border-bottom: none; display: flex; align-items: center; + background: var(--goa-color-greyscale-white, #ffffff); } /* Menu item with children on mobile --Hover, --Active */ button:active, @@ -410,4 +488,151 @@ border-bottom: var(--goa-app-header-border-nav-item-focus); } } + + /* V2 Navigation Button Styling - Using class-based approach with design tokens */ + /* This works because the button is in the same shadow DOM as these styles */ + button.v2-nav { + /* Typography - use design tokens */ + font-weight: var(--goa-font-weight-medium) !important; + font-size: var(--goa-font-size-3) !important; + line-height: var(--goa-line-height-2) !important; + color: var(--goa-app-header-nav-text-color) !important; + + /* Background - use design token */ + background: var(--goa-app-header-nav-bar-bg) !important; + + /* Padding - use design token */ + padding: var(--goa-app-header-padding-nav-item) !important; + + /* Border - use design token */ + border: none !important; + border-bottom: var(--goa-app-header-border-nav-item-default) !important; + border-radius: 0; + box-shadow: none !important; + + /* Layout */ + height: var(--goa-app-header-height-nav-item); + display: inline-flex; + align-items: center; + gap: var(--goa-space-2xs); + box-sizing: border-box; + white-space: nowrap; + cursor: pointer; + + /* Transition */ + transition: border-bottom-color 0.2s ease; + } + + button.v2-nav goa-icon { + --goa-icon-size: var(--goa-icon-size-2); + } + + button.v2-nav:hover { + background: var(--goa-app-header-nav-bar-bg) !important; + border-bottom-color: var( + --goa-app-header-nav-hover-indicator-color + ) !important; + } + + button.v2-nav:active { + background: transparent !important; + } + + button.v2-nav.open { + background: var(--goa-app-header-nav-bar-bg) !important; + border-bottom-color: var( + --goa-app-header-nav-hover-indicator-color + ) !important; + } + + button.v2-nav.current { + font-weight: var(--goa-font-weight-semi-bold) !important; + border-bottom-color: var( + --goa-app-header-nav-active-indicator-color + ) !important; + } + + button.v2-nav:focus-visible { + outline: var(--goa-app-header-border-focus); + outline-offset: -3px; + z-index: 1; + } + + /* V2 Mobile/Tablet dropdown - position it like a popover (V2 only) */ + @media not (--desktop) { + /* Root container needs relative positioning for absolute dropdown - V2 only */ + :has(.v2-nav-menu) div[data-testid] { + position: relative; + } + + .not-desktop.v2-nav-menu { + position: absolute; + top: 100%; + left: 0; + min-width: 8rem; + max-width: 16rem; + width: max-content; + background: var(--goa-color-greyscale-white, #ffffff); + box-shadow: 0 3px 6px rgba(0, 0, 0, 0.25); + z-index: 1000; + margin-top: 0; + } + } + + /* V2 Dropdown Menu Container - Add padding around items */ + .desktop.v2-nav-menu { + padding: var(--goa-app-header-padding-nav-item-in-menu); + } + + /* V2 Dropdown Menu Items - Target the v2-nav-menu class on desktop div */ + .desktop.v2-nav-menu :global(::slotted(a)), + .desktop.v2-nav-menu :global(::slotted(a:visited)) { + /* Typography - use design tokens */ + font-size: var(--goa-font-size-4) !important; + font-weight: var(--goa-font-weight-medium) !important; + line-height: var(--goa-line-height-3) !important; + color: var(--goa-color-text-default) !important; + + /* Remove border separator */ + box-shadow: none !important; + border: none !important; + + /* Spacing */ + padding: var(--goa-space-s) var(--goa-space-xs) !important; + + /* Border radius */ + border-radius: var(--goa-border-radius-s) !important; + + /* Display */ + display: block; + text-decoration: none; + background: transparent; + } + + .desktop.v2-nav-menu :global(::slotted(a:hover)) { + background: var(--goa-app-header-color-bg-nav-item-child-hover) !important; + color: var(--goa-color-text-default) !important; + } + + .desktop.v2-nav-menu :global(::slotted(a:focus-visible)) { + outline: 3px solid var(--goa-color-interactive-focus) !important; + outline-offset: -3px !important; + background: var(--goa-app-header-color-bg-nav-item-child-hover) !important; + color: var(--goa-color-text-default) !important; + } + + .desktop.v2-nav-menu :global(::slotted(a.current)) { + background: var( + --goa-app-header-color-bg-nav-item-in-menu-current + ) !important; + color: var(--goa-color-text-light) !important; + font-weight: var(--goa-font-weight-medium) !important; + } + + .desktop.v2-nav-menu :global(::slotted(a.current:hover)) { + background: var( + --goa-app-header-color-bg-nav-item-in-menu-current + ) !important; + color: var(--goa-color-text-light) !important; + } diff --git a/libs/web-components/src/components/app-header-navigation/AppHeaderNavigation.svelte b/libs/web-components/src/components/app-header-navigation/AppHeaderNavigation.svelte new file mode 100644 index 0000000000..64d206d849 --- /dev/null +++ b/libs/web-components/src/components/app-header-navigation/AppHeaderNavigation.svelte @@ -0,0 +1,591 @@ + + + + +{#if version === "2"} +
+ +
+{/if} + + diff --git a/libs/web-components/src/components/app-header/AppHeader.svelte b/libs/web-components/src/components/app-header/AppHeader.svelte index 4d39b2da06..814f76a4ae 100644 --- a/libs/web-components/src/components/app-header/AppHeader.svelte +++ b/libs/web-components/src/components/app-header/AppHeader.svelte @@ -5,13 +5,21 @@ - +
-
- {#if heading || $$slots.heading} - {#if heading} - {#if version === "2"} - {heading} + {#if _showCloseButton} +
+ {#if heading || $$slots.heading} + {#if heading} + {#if version === "2"} + {heading} + {:else} + {heading} + {/if} {:else} - {heading} + {/if} - {:else} - {/if} - {/if} - -
+ +
+ {/if}
Open - + {content}
{actions}
diff --git a/libs/web-components/src/components/drawer/drawer.spec.ts b/libs/web-components/src/components/drawer/drawer.spec.ts index ec25e6d085..163b159c4b 100644 --- a/libs/web-components/src/components/drawer/drawer.spec.ts +++ b/libs/web-components/src/components/drawer/drawer.spec.ts @@ -124,6 +124,38 @@ describe("Drawer", () => { }); }); + it("hides header when closeButtonVisibility is hidden", async () => { + const el = render(DrawerWrapper, { + open: true, + heading: "Heading", + testid: "drawer", + closeButtonVisibility: "hidden", + }); + + await waitFor(() => { + const drawerEl = el.queryByTestId("drawer"); + const drawer = drawerEl?.querySelector(".drawer") as HTMLElement; + const header = drawer?.querySelector(".header"); + expect(header).toBeNull(); + }); + }); + + it("shows header when closeButtonVisibility is visible", async () => { + const el = render(DrawerWrapper, { + open: true, + heading: "Heading", + testid: "drawer", + closeButtonVisibility: "visible", + }); + + await waitFor(() => { + const drawerEl = el.queryByTestId("drawer"); + const drawer = drawerEl?.querySelector(".drawer") as HTMLElement; + const header = drawer?.querySelector(".header"); + expect(header).toBeTruthy(); + }); + }); + it("updates scroll position correctly", async () => { const el = render(DrawerWrapper, { position: "right", diff --git a/libs/web-components/src/components/dropdown/Dropdown.svelte b/libs/web-components/src/components/dropdown/Dropdown.svelte index f75da4666b..0726e9006e 100644 --- a/libs/web-components/src/components/dropdown/Dropdown.svelte +++ b/libs/web-components/src/components/dropdown/Dropdown.svelte @@ -1,13 +1,7 @@ @@ -99,12 +93,6 @@ export let autocomplete: string = ""; /** Sets a data-testid attribute for automated testing. */ export let testid: string = ""; - - // Exposed Privates - - /** Prevents the popover from closing when clicking outside. Used for nested dropdowns or complex interactions. */ - export let disableGlobalClosePopover: boolean = false; - // // Private @@ -176,9 +164,6 @@ sendMountedMessage(); setupPopoverListeners(); - if (disableGlobalClosePopover) { - _popoverEl.setAttribute("disable-global-close-popover", "yes"); - } _eventHandler = _filterable ? new ComboboxKeyUpHandler(_inputEl) : new DropdownKeyUpHandler(_inputEl); @@ -824,7 +809,7 @@ {/if} @@ -1048,7 +1033,10 @@ /** menu **/ ul[role="listbox"] { - border-radius: var(--goa-dropdown-menu-border-radius, var(--goa-dropdown-border-radius)); + border-radius: var( + --goa-dropdown-menu-border-radius, + var(--goa-dropdown-border-radius) + ); padding: 0; margin: var(--goa-dropdown-menu-margin, 0); } @@ -1067,7 +1055,6 @@ border-radius: var(--goa-dropdown-item-border-radius, 0); } - .dropdown-item:hover, .dropdown-item--highlighted { background: var(--goa-dropdown-item-color-bg-hover); diff --git a/libs/web-components/src/components/footer-nav-section/FooterNavSection.svelte b/libs/web-components/src/components/footer-nav-section/FooterNavSection.svelte index aaf754bbcb..d8e92fbfbf 100644 --- a/libs/web-components/src/components/footer-nav-section/FooterNavSection.svelte +++ b/libs/web-components/src/components/footer-nav-section/FooterNavSection.svelte @@ -70,6 +70,7 @@ .title { font: var(--goa-typography-heading-s); + letter-spacing: var(--goa-typography-heading-s-letter-spacing); padding-bottom: var(--goa-space-m); color: var(--goa-color-greyscale-800); } @@ -97,8 +98,9 @@ flex-direction: column; } .title { - font: var(--goa-typography-heading-m); - padding-bottom: var(--goa-space-l); + font: var(--goa-typography-heading-m); + letter-spacing: var(--goa-typography-heading-m-letter-spacing); + padding-bottom: var(--goa-space-l); } } @@ -116,8 +118,6 @@ } } - - a { color: var(--goa-footer-color-links); cursor: pointer; diff --git a/libs/web-components/src/components/form-stepper/form-stepper.spec.ts b/libs/web-components/src/components/form-stepper/form-stepper.spec.ts index 002dcd7047..29bcc1e5a4 100644 --- a/libs/web-components/src/components/form-stepper/form-stepper.spec.ts +++ b/libs/web-components/src/components/form-stepper/form-stepper.spec.ts @@ -19,7 +19,7 @@ beforeAll(() => { vi.stubGlobal("ResizeObserver", ResizeObserverMock); }); -describe("FormStepper", () => { +describe.skip("FormStepper", () => { it("it renders", async () => { const { container } = render(FormStepper); await waitFor(() => { diff --git a/libs/web-components/src/components/form/FormSummary.svelte b/libs/web-components/src/components/form/FormSummary.svelte index 6fcf764305..ec7d3c7e7a 100644 --- a/libs/web-components/src/components/form/FormSummary.svelte +++ b/libs/web-components/src/components/form/FormSummary.svelte @@ -314,6 +314,7 @@ .label { width: 50%; font: var(--goa-typography-heading-s); + letter-spacing: var(--goa-typography-heading-s-letter-spacing); } .value { width: 50%; diff --git a/libs/web-components/src/components/icon-button/IconButton.svelte b/libs/web-components/src/components/icon-button/IconButton.svelte index 0cd2aa2c69..7ff5984e6d 100644 --- a/libs/web-components/src/components/icon-button/IconButton.svelte +++ b/libs/web-components/src/components/icon-button/IconButton.svelte @@ -1,10 +1,12 @@ - + -
-
- -
- -
-
-
-
+ + + +
@@ -462,29 +409,59 @@ padding: 0; background-color: transparent; width: inherit; + text-align: inherit; + anchor-name: --goa-popover-target; } .popover-target:has(:focus-visible) { - outline: var(--goa-popover-border-focus); + outline: var( + --goa-popover-border-focus, + var(--focus-border-width) solid var(--goa-color-interactive-default) + ); } .popover-content { color: var(--goa-color-text-default); - position: absolute; - z-index: 99; width: fit-content; list-style-type: none; background: var(--goa-popover-color-bg); - border-radius: var(--goa-popover-border-radius); + border-radius: var(--border-radius, var(--goa-popover-border-radius)); outline: none; overflow: visible; box-shadow: var(--goa-popover-box-shadow, none); filter: var(--goa-popover-shadow, none); border: var(--goa-popover-border, none); - margin-top: var(--offset-top, 3px); - margin-bottom: var(--offset-bottom, 3px); - margin-left: var(--offset-left, 0); - margin-right: var(--offset-right, 0); + margin: 0; + position-anchor: --goa-popover-target; + inset-block-start: anchor(bottom); + inset-inline-start: anchor(left); + --popover-translate-x: var(--offset-left, 0); + --popover-translate-y: var(--offset-top, 3px); + translate: var(--popover-translate-x) var(--popover-translate-y); + } + + .popover-content.use-anchor-based-positioning { + inset-block-start: anchor(top); + --popover-translate-y: calc(-100% - var(--offset-bottom, 3px)); + } + .popover-content.use-anchor-based-positioning.position-above { + inset-block-start: anchor(top); + --popover-translate-y: calc(-100% - var(--offset-bottom, 3px)); + position-try-fallbacks: none; + } + + .popover-content.position-below { + inset-block-start: anchor(bottom); + --popover-translate-y: var(--offset-top, 3px); + } + + .popover-content.position-right { + inset-block-start: unset; + inset-block-end: max(8px, anchor(bottom)); + inset-inline-start: anchor(right); + --popover-translate-x: var(--offset-left, 8px); + --popover-translate-y: var(--offset-bottom, 0px); + position-try-fallbacks: none; } :global(::slotted(ul)) { diff --git a/libs/web-components/src/components/popover/popover.spec.ts b/libs/web-components/src/components/popover/popover.spec.ts index e7d141d2c1..1a24619a1e 100644 --- a/libs/web-components/src/components/popover/popover.spec.ts +++ b/libs/web-components/src/components/popover/popover.spec.ts @@ -17,7 +17,7 @@ describe("Popover", () => { const slotContent = result.queryByTestId("popover-content"); const slotTarget = result.queryByTestId("popover-target"); - expect(slotContent?.parentElement?.style.display).toBe("none"); + expect(slotContent?.classList.contains("is-open")).toBe(false); expect(slotTarget).toBeTruthy(); }); @@ -28,7 +28,7 @@ describe("Popover", () => { target && (await user.click(target)); const popOverContent = result.queryByTestId("popover-content"); - expect(popOverContent?.parentElement?.style.display).not.toBe("none"); + expect(popOverContent?.classList.contains("is-open")).toBe(true); const style = popOverContent?.getAttribute("style"); expect(style).toContain("min-width: 8rem"); @@ -36,6 +36,77 @@ describe("Popover", () => { expect(style).toContain("padding: var(--goa-space-m)"); }); + it("should close content when target is clicked again", async () => { + const result = render(Popover); + const target = result.queryByTestId("popover-target"); + + // open + target && (await user.click(target)); + expect(result.queryByTestId("popover-content")?.classList.contains("is-open")).toBe(true); + + // close + target && (await user.click(target)); + expect(result.queryByTestId("popover-content")?.classList.contains("is-open")).toBe(false); + }); + + it("should open when open prop is set to true", async () => { + const result = render(Popover, { open: "true" }); + const popoverContent = result.queryByTestId("popover-content"); + + expect(popoverContent?.classList.contains("is-open")).toBe(true); + }); + + it("should close when open prop changes from true to false", async () => { + const result = render(Popover, { open: "true" }); + expect(result.queryByTestId("popover-content")?.classList.contains("is-open")).toBe(true); + + await result.rerender({ open: "false" }); + expect(result.queryByTestId("popover-content")?.classList.contains("is-open")).toBe(false); + }); + + it("should dispatch _open event when popover opens", async () => { + const result = render(Popover); + const rootEl = result.queryByTestId("popover"); + const target = result.queryByTestId("popover-target"); + + const openHandler = vi.fn(); + rootEl?.addEventListener("_open", openHandler); + + target && (await user.click(target)); + expect(openHandler).toHaveBeenCalledTimes(1); + }); + + it("should dispatch _close event when popover closes", async () => { + const result = render(Popover); + const rootEl = result.queryByTestId("popover"); + const target = result.queryByTestId("popover-target"); + + const closeHandler = vi.fn(); + rootEl?.addEventListener("_close", closeHandler); + + // open then close + target && (await user.click(target)); + target && (await user.click(target)); + expect(closeHandler).toHaveBeenCalledTimes(1); + }); + + it("should not open on space key when disabled", async () => { + const result = render(Popover, { disabled: "true" }); + const target = result.queryByTestId("popover-target"); + + target?.focus(); + await user.keyboard(" "); + expect(result.queryByTestId("popover-content")?.classList.contains("is-open")).toBe(false); + }); + + it("should apply explicit placement classes", async () => { + const result = render(Popover, { position: "above" }); + const popoverContent = result.queryByTestId("popover-content") as HTMLElement; + + expect(popoverContent.classList.contains("position-above")).toBe(true); + expect(popoverContent.classList.contains("position-auto")).toBe(false); + }); + it("should not close content when clicked focusable target then click focusable content inside the content container", async () => { // arrange to test that focusout event bubbles up to popover component const result = render(PopoverWrapper, { @@ -45,16 +116,16 @@ describe("Popover", () => { const target = result.queryByTestId("clickable-target"); expect(target).toBeTruthy(); - expect(result.queryByTestId("popover-content")?.parentElement?.style.display).toBe("none"); + expect(result.queryByTestId("popover-content")?.classList.contains("is-open")).toBe(false); // click on focusable element within popover target target && (await user.click(target)); - expect(result.queryByTestId("popover-content")?.parentElement?.style.display).not.toBe("none"); + expect(result.queryByTestId("popover-content")?.classList.contains("is-open")).toBe(true); // click on focusable content inside popover content const button = result.queryByTestId("clickable-content"); button && (await user.click(button)); - expect(result.queryByTestId("popover-content")?.parentElement?.style.display).not.toBe("none"); + expect(result.queryByTestId("popover-content")?.classList.contains("is-open")).toBe(true); }); it("should not close content when clicked non-focusable target then click non-focusable content inside the content container", async () => { @@ -66,17 +137,17 @@ describe("Popover", () => { const target = result.queryByTestId("non-focusable-target"); expect(target).toBeTruthy(); - expect(result.queryByTestId("popover-content")?.parentElement?.style.display).toBe("none"); + expect(result.queryByTestId("popover-content")?.classList.contains("is-open")).toBe(false); // click on non-focusable element within popover target target && (await user.click(target)); - expect(result.queryByTestId("popover-content")?.parentElement?.style.display).not.toBe("none"); + expect(result.queryByTestId("popover-content")?.classList.contains("is-open")).toBe(true); // click on non-focusable content within popover content const contentNonfocusableEl = result.queryByTestId("non-focusable-content"); expect(contentNonfocusableEl?.tabIndex).toBe(-1); contentNonfocusableEl && (await user.click(contentNonfocusableEl)); - expect(result.queryByTestId("popover-content")?.parentElement?.style.display).not.toBe("none"); + expect(result.queryByTestId("popover-content")?.classList.contains("is-open")).toBe(true); }); }) diff --git a/libs/web-components/src/components/push-drawer/PushDrawer.svelte b/libs/web-components/src/components/push-drawer/PushDrawer.svelte index 6d548a092e..fe488d4a38 100644 --- a/libs/web-components/src/components/push-drawer/PushDrawer.svelte +++ b/libs/web-components/src/components/push-drawer/PushDrawer.svelte @@ -6,6 +6,7 @@ open: { type: "Boolean", reflect: true }, heading: { type: "String", reflect: true }, width: { type: "String", reflect: true }, + version: { type: "String", reflect: true }, }, }} /> @@ -17,6 +18,7 @@ export let open: boolean = false; export let heading: string = ""; export let width: string = "492px"; + export let version: string | undefined = undefined; // Minimum window width for desktop layout from vite.config.js const minimumDesktopWidth = 1023; @@ -40,10 +42,13 @@ position="right" maxsize={width} {heading} + {version} > - - - + {#if $$slots.actions} + + + + {/if} {:else} @@ -53,10 +58,13 @@ {open} {width} {heading} + {version} > - - - + {#if $$slots.actions} + + + + {/if} {/if} diff --git a/libs/web-components/src/components/push-drawer/PushDrawerInternal.spec.ts b/libs/web-components/src/components/push-drawer/PushDrawerInternal.spec.ts index ceca20a0af..d72882a922 100644 --- a/libs/web-components/src/components/push-drawer/PushDrawerInternal.spec.ts +++ b/libs/web-components/src/components/push-drawer/PushDrawerInternal.spec.ts @@ -133,4 +133,90 @@ describe("GoAPushDrawerInternal", () => { consoleErrorSpy.mockRestore(); }); + + describe("V2", () => { + it("should apply v2 class when version is 2", async () => { + const result = render(PushDrawerInternalWrapper, { + props: { + testId: "test-drawer", + open: true, + version: "2", + }, + }); + + const drawer = result.getByTestId("test-drawer"); + await waitFor(() => { + expect(drawer).toHaveClass("v2"); + }); + }); + + it("should not apply v2 class when version is 1", async () => { + const result = render(PushDrawerInternalWrapper, { + props: { + testId: "test-drawer", + open: true, + version: "1", + }, + }); + + const drawer = result.getByTestId("test-drawer"); + await waitFor(() => { + expect(drawer).not.toHaveClass("v2"); + }); + }); + + it("should use heading-s for V2 heading", async () => { + const result = render(PushDrawerInternalWrapper, { + props: { + testId: "test-drawer", + open: true, + version: "2", + heading: "Test Heading", + }, + }); + + const heading = result.container.querySelector("goa-text"); + await waitFor(() => { + expect(heading?.getAttribute("size")).toBe("heading-s"); + }); + }); + + it("should use heading-m for V1 heading", async () => { + const result = render(PushDrawerInternalWrapper, { + props: { + testId: "test-drawer", + open: true, + version: "1", + heading: "Test Heading", + }, + }); + + const heading = result.container.querySelector("goa-text"); + await waitFor(() => { + expect(heading?.getAttribute("size")).toBe("heading-m"); + }); + }); + + it("should validate version prop on mount", async () => { + const consoleErrorSpy = vi + .spyOn(console, "error") + .mockImplementation(() => { + /* noop */ + }); + + render(PushDrawerInternalWrapper, { + props: { + testId: "test-drawer", + open: true, + version: "3" as any, + }, + }); + + await waitFor(() => { + expect(consoleErrorSpy).toHaveBeenCalled(); + }); + + consoleErrorSpy.mockRestore(); + }); + }); }); diff --git a/libs/web-components/src/components/push-drawer/PushDrawerInternal.svelte b/libs/web-components/src/components/push-drawer/PushDrawerInternal.svelte index 36586aa138..5efc55ea69 100644 --- a/libs/web-components/src/components/push-drawer/PushDrawerInternal.svelte +++ b/libs/web-components/src/components/push-drawer/PushDrawerInternal.svelte @@ -6,22 +6,31 @@ open: { type: "Boolean", reflect: true }, heading: { type: "String", reflect: true }, width: { type: "String", reflect: true }, + version: { type: "String", attribute: "version", reflect: true }, }, }} /> @@ -105,17 +181,39 @@ class:open={!!open} class:closed={drawerState === "closed"} class:closing={drawerState === "closing"} + class:v2={version === "2"} + class:v2-scroll-top={version === "2" && _scrollPos === "top"} + class:v2-scroll-middle={version === "2" && _scrollPos === "middle"} + class:v2-scroll-bottom={version === "2" && _scrollPos === "bottom"} bind:this={_contentEl} aria-labelledby="goa-drawer-heading" style="--goa-push-drawer-width: {width};" > -
+
{#if heading || $$slots.heading} {#if heading} - - {heading} - + {#if version === "2"} + + {heading} + + {:else} + + {heading} + + {/if} {:else} {/if} @@ -149,6 +247,8 @@ class="drawer-actions" data-testid="drawer-actions" class:empty-actions={!_actionsSlotHasContent} + class:v2-scrolled={version === "2" && + (_scrollPos === "top" || _scrollPos === "middle")} > @@ -160,6 +260,9 @@ box-sizing: border-box; } + /* V2: No layout overrides — inherits V1's stretch behavior so + height: 100% resolves and flex pins header/actions correctly */ + @keyframes opening { 0% { display: flex; @@ -192,11 +295,48 @@ align-self: stretch; margin-left: var(--goa-drawer-padding); height: 100%; /* fill parent height */ + overflow: hidden; border-radius: var(--goa-push-drawer-border-radius); background: var(--goa-color-greyscale-white); border: var(--goa-border-width-s) solid var(--goa-color-greyscale-200); } + /* V2: Floating inset appearance, matching regular Drawer V2. + Default state (no overflow): offset + rounded on all edges. */ + .goa-push-drawer.v2 { + margin: var(--goa-drawer-offset, 16px); + height: calc(100% - 2 * var(--goa-drawer-offset, 16px)); + border-color: var(--goa-color-greyscale-150); + transition: + margin 0.2s ease, + border-radius 0.2s ease, + height 0.2s ease; + } + + /* V2 dynamic edges: at top of scroll — top floating, bottom flush */ + .goa-push-drawer.v2-scroll-top { + margin-bottom: 0; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + height: calc(100% - var(--goa-drawer-offset, 16px)); + } + + /* V2 dynamic edges: middle of scroll — both edges flush */ + .goa-push-drawer.v2-scroll-middle { + margin-top: 0; + margin-bottom: 0; + border-radius: 0; + height: 100%; + } + + /* V2 dynamic edges: at bottom of scroll — top flush, bottom floating */ + .goa-push-drawer.v2-scroll-bottom { + margin-top: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; + height: calc(100% - var(--goa-drawer-offset, 16px)); + } + /* Shadow styles for scrollable content */ .top { box-shadow: inset 0 -8px 8px -8px rgba(0, 0, 0, 0.3); @@ -212,6 +352,11 @@ inset 0 -8px 8px -8px rgba(0, 0, 0, 0.2); } + /* V2: No scroll shadows on content */ + .v2 .drawer-content { + box-shadow: none !important; + } + @starting-style { .goa-push-drawer.closed { display: none; @@ -246,6 +391,21 @@ background: var(--goa-color-greyscale-white); } + /* V2: Header pinned via flex (not sticky), no border by default */ + .v2 .drawer-header { + position: static; + flex: 0 0 auto; + gap: var(--goa-space-2xs); + border-bottom: none; + } + + /* V2: Show header border + shadow when content is scrolled */ + .drawer-header.v2-scrolled { + border-bottom: var(--goa-border-width-s) solid + var(--goa-color-greyscale-150); + box-shadow: var(--goa-shadow-shallow-below); + } + .drawer-default-header { width: 100%; display: flex; @@ -265,11 +425,31 @@ background: var(--goa-color-greyscale-white); } + /* V2: Actions pinned via flex (not sticky), no border by default */ + .v2 .drawer-actions { + position: static; + flex: 0 0 auto; + border-top: none; + } + + /* V2: Show actions border + shadow when content has overflow */ + .drawer-actions.v2-scrolled { + border-top: var(--goa-border-width-s) solid var(--goa-color-greyscale-150); + box-shadow: var(--goa-shadow-shallow-below); + } + .drawer-actions.empty-actions { padding: 0; border-top: none; } + /* V2: Collapse empty actions area (not display:none, which breaks slot distribution) */ + .v2 .drawer-actions.empty-actions { + height: 0; + overflow: hidden; + flex-basis: 0; + } + .drawer-content { display: flex; width: 100%; diff --git a/libs/web-components/src/components/push-drawer/PushDrawerInternalWrapper.svelte b/libs/web-components/src/components/push-drawer/PushDrawerInternalWrapper.svelte index b667cd2c2a..bb05a74be5 100644 --- a/libs/web-components/src/components/push-drawer/PushDrawerInternalWrapper.svelte +++ b/libs/web-components/src/components/push-drawer/PushDrawerInternalWrapper.svelte @@ -5,6 +5,8 @@ export let open: boolean = false; export let heading: string = "Test Heading"; export let width: string = "999px"; + export let version: string = "1"; + export let showActions: boolean = true; function closeDrawer() { open = false; @@ -18,10 +20,16 @@ - -
-

Action 1

-

Action 2

-
- -
+{#if showActions} + +
+

Action 1

+

Action 2

+
+ +
+{:else} + + + +{/if} diff --git a/libs/web-components/src/components/radio-item/RadioItem.svelte b/libs/web-components/src/components/radio-item/RadioItem.svelte index b0ed95fdf9..bbf00546a5 100644 --- a/libs/web-components/src/components/radio-item/RadioItem.svelte +++ b/libs/web-components/src/components/radio-item/RadioItem.svelte @@ -53,6 +53,7 @@ FormFieldMountRelayDetail, } from "../../types/relay-types"; + /** The value of this radio option. Will be emitted when selected. */ export let value: string; /** The name of the radio group. Inherited from the parent RadioGroup if not set. */ @@ -309,13 +310,7 @@ diff --git a/libs/web-components/src/components/tabs/Tabs.svelte b/libs/web-components/src/components/tabs/Tabs.svelte index 54b7b12dac..470cece631 100644 --- a/libs/web-components/src/components/tabs/Tabs.svelte +++ b/libs/web-components/src/components/tabs/Tabs.svelte @@ -1,4 +1,8 @@ - + @@ -417,6 +467,7 @@ role="tablist" bind:this={_rootEl} class:v2={version === "2"} + class:horizontal={orientation === "horizontal"} class:segmented={variant === "segmented"} data-testid={testid} > @@ -429,13 +480,18 @@
{/if}
-
+ +
diff --git a/libs/web-components/src/components/work-side-menu/WorkSideNotificationPanel.spec.ts b/libs/web-components/src/components/work-side-menu/WorkSideNotificationPanel.spec.ts new file mode 100644 index 0000000000..30502ec35f --- /dev/null +++ b/libs/web-components/src/components/work-side-menu/WorkSideNotificationPanel.spec.ts @@ -0,0 +1,55 @@ +import { render, waitFor } from "@testing-library/svelte"; +import { it, describe, expect, vi } from "vitest"; +import WorkSideNotificationPanelWrapper from "./WorkSideNotificationPanelWrapper.test.svelte"; + +describe("WorkSideNotificationPanel", () => { + it("should render correctly, track items, and handle events", async () => { + const { container } = render(WorkSideNotificationPanelWrapper, { + heading: "My Notifications", + testid: "panel-test", + activeTab: "unread", + }); + + const panel = container.querySelector('[data-testid="panel-test"]'); + expect(panel).toBeTruthy(); + + // Heading + expect(container.querySelector("goa-text")?.textContent).toContain("My Notifications"); + + // Tabs + expect(container.querySelectorAll("goa-tab").length).toBe(3); + + // Footer + const footerButtons = container.querySelectorAll("goa-link-button"); + expect(footerButtons.length).toBe(2); + expect(footerButtons[0].textContent).toContain("View all"); + expect(footerButtons[1].textContent).toContain("Mark all as read"); + + // Slot content renders + expect(container.querySelectorAll("goa-work-side-notification-item").length).toBe(2); + + // Empty state shows (items don't mount as real web components in test env) + expect(container.querySelector(".empty")).toBeTruthy(); + expect(container.querySelector(".subline")?.textContent).toContain("No unread notifications"); + + // -- Events -- + const onViewAll = vi.fn(); + const onClose = vi.fn(); + + panel?.addEventListener("_viewAll", onViewAll); + panel?.addEventListener("goa:work-side-notification-panel:closePopover", onClose); + + // View all + footerButtons[0].dispatchEvent(new CustomEvent("_click", { bubbles: true })); + await waitFor(() => { + expect(onViewAll).toHaveBeenCalledTimes(1); + }); + + // Close button + const closeBtn = container.querySelector("goa-icon-button"); + closeBtn?.dispatchEvent(new CustomEvent("_click", { bubbles: true })); + await waitFor(() => { + expect(onClose).toHaveBeenCalled(); + }); + }); +}); diff --git a/libs/web-components/src/components/work-side-menu/WorkSideNotificationPanel.svelte b/libs/web-components/src/components/work-side-menu/WorkSideNotificationPanel.svelte new file mode 100644 index 0000000000..f0dde3c550 --- /dev/null +++ b/libs/web-components/src/components/work-side-menu/WorkSideNotificationPanel.svelte @@ -0,0 +1,394 @@ + + + + +
+ +
+ {heading} + +
+ + + + + + Unread + {#if _unreadCount > 0} + + {/if} + + + + + Urgent + {#if _urgentCount > 0} + + {/if} + + + + All + + + +
+ {#if _isEmptyState} +
+ + You're all caught up + + {activeTab === "unread" + ? "No unread notifications" + : activeTab === "urgent" + ? "No urgent notifications" + : "No notifications"} + +
+ {/if} + +
+ + + +
+ + diff --git a/libs/web-components/src/components/work-side-menu/WorkSideNotificationPanelWrapper.test.svelte b/libs/web-components/src/components/work-side-menu/WorkSideNotificationPanelWrapper.test.svelte new file mode 100644 index 0000000000..cd9380dc58 --- /dev/null +++ b/libs/web-components/src/components/work-side-menu/WorkSideNotificationPanelWrapper.test.svelte @@ -0,0 +1,26 @@ + + + + + + + + diff --git a/libs/web-components/src/index.ts b/libs/web-components/src/index.ts index 2db7dc3745..afb0223dcc 100644 --- a/libs/web-components/src/index.ts +++ b/libs/web-components/src/index.ts @@ -90,3 +90,5 @@ export * from "./experimental/ExperimentalFormStep.svelte"; export * from "./components/work-side-menu/WorkSideMenu.svelte"; export * from "./components/work-side-menu/WorkSideMenuItem.svelte"; export * from "./components/work-side-menu/WorkSideMenuGroup.svelte"; +export * from "./components/work-side-menu/WorkSideNotificationPanel.svelte"; +export * from "./components/work-side-menu/WorkSideNotificationItem.svelte"; diff --git a/netlify.toml b/netlify.toml index 0c5962c489..e365f3fdf7 100644 --- a/netlify.toml +++ b/netlify.toml @@ -3,5 +3,5 @@ command = "npm ci && cd docs && npm ci && cd .. && npm run build:prod" [build.environment] - NODE_VERSION = "24" + NODE_VERSION = "22" NPM_FLAGS = "--legacy-peer-deps" diff --git a/nginx.conf b/nginx.conf deleted file mode 100644 index 8409da90d3..0000000000 --- a/nginx.conf +++ /dev/null @@ -1,22 +0,0 @@ -events { - worker_connections 1024; -} -http{ - - server { - listen 8080; - - location / { - return 301 https://design.alberta.ca/; - } - } - - server { - listen 8081; - - location / { - return 301 https://design.alberta.ca/; - } - } - -} diff --git a/package-lock.json b/package-lock.json index 29cd8f6b24..ea13490a8e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,119 +9,119 @@ "version": "0.0.0", "license": "Apache-2.0", "dependencies": { - "@angular/animations": "20.1.6", - "@angular/common": "20.3.14", - "@angular/compiler": "^20.3.16", - "@angular/core": "^20.3.16", - "@angular/forms": "20.1.6", - "@angular/platform-browser": "20.1.6", - "@angular/platform-browser-dynamic": "20.1.6", - "@angular/router": "20.1.6", - "@astrojs/mdx": "^4.3.13", - "@astrojs/react": "^4.4.2", - "@nrwl/jest": "19.5.4", - "@swc/helpers": "0.5.11", - "astro": "^5.16.6", - "date-fns": "^3.0.6", - "dompurify": "^3.3.1", - "flexsearch": "^0.8.212", - "highlight.js": "^11.11.1", - "react": "^19.2.3", - "react-dom": "^19.2.3", - "react-router-dom": "^6.30.3", - "rxjs": "~7.8.0", - "style-dictionary": "^5.1.1", - "svelte-routing": "^2.13.0", - "tslib": "^2.3.0", - "zone.js": "0.15.1" + "@angular/animations": "21.2.4", + "@angular/common": "21.2.4", + "@angular/compiler": "21.2.4", + "@angular/core": "21.2.4", + "@angular/forms": "21.2.4", + "@angular/platform-browser": "21.2.4", + "@angular/platform-browser-dynamic": "21.2.4", + "@angular/router": "21.2.4", + "@astrojs/mdx": "4.3.14", + "@astrojs/react": "4.4.2", + "@swc/helpers": "0.5.19", + "astro": "5.18.1", + "date-fns": "3.6.0", + "dompurify": "3.3.3", + "flexsearch": "0.8.212", + "highlight.js": "11.11.1", + "react": "19.2.4", + "react-dom": "19.2.4", + "react-router-dom": "6.30.3", + "rxjs": "7.8.2", + "style-dictionary": "5.3.3", + "svelte-routing": "2.13.0", + "tslib": "2.8.1", + "zone.js": "0.16.1" }, "devDependencies": { - "@abgov/design-tokens": "^1.10.0", - "@abgov/design-tokens-v2": "npm:@abgov/design-tokens@^2.0.0", - "@abgov/nx-release": "^10.0.0", - "@angular-devkit/build-angular": "^20.3.16", - "@angular-devkit/core": "20.1.5", - "@angular-devkit/schematics": "20.1.5", - "@angular-eslint/eslint-plugin": "18.0.1", - "@angular-eslint/eslint-plugin-template": "18.0.1", - "@angular-eslint/template-parser": "18.0.1", - "@angular/cli": "^21.1.3", - "@angular/compiler-cli": "20.1.6", - "@angular/language-service": "20.1.6", - "@astrojs/check": "^0.9.6", - "@babel/core": "^7.14.5", - "@babel/preset-react": "^7.14.5", - "@faker-js/faker": "^8.3.1", - "@nx/angular": "22.3.3", - "@nx/eslint": "22.3.3", - "@nx/eslint-plugin": "22.3.3", - "@nx/jest": "22.3.3", - "@nx/js": "22.3.3", - "@nx/react": "22.3.3", - "@nx/vite": "22.3.3", - "@nx/vitest": "22.3.3", - "@nx/web": "22.3.3", - "@nx/workspace": "22.3.3", - "@schematics/angular": "20.1.5", - "@sveltejs/vite-plugin-svelte": "^3.0.1", - "@swc-node/register": "1.9.2", - "@swc/cli": "0.6.0", - "@swc/core": "1.9.3", - "@testing-library/dom": "^10.1.0", - "@testing-library/jest-dom": "^6.6.3", - "@testing-library/react": "^16.1.0", - "@testing-library/svelte": "^4.0.5", - "@testing-library/user-event": "^14.5.2", + "@abgov/design-tokens": "1.10.0", + "@abgov/design-tokens-v2": "npm:@abgov/design-tokens@2.2.0", + "@abgov/nx-release": "12.0.0", + "@angular-devkit/build-angular": "21.2.2", + "@angular-devkit/core": "21.2.2", + "@angular-devkit/schematics": "21.2.2", + "@angular-eslint/eslint-plugin": "18.4.3", + "@angular-eslint/eslint-plugin-template": "18.4.3", + "@angular-eslint/template-parser": "18.4.3", + "@angular/cli": "21.2.2", + "@angular/compiler-cli": "21.2.4", + "@angular/language-service": "21.2.4", + "@astrojs/check": "0.9.7", + "@babel/core": "7.29.0", + "@babel/preset-react": "7.28.5", + "@faker-js/faker": "8.4.1", + "@nx/angular": "22.5.4", + "@nx/eslint": "22.5.4", + "@nx/eslint-plugin": "22.5.4", + "@nx/jest": "22.5.4", + "@nx/js": "22.5.4", + "@nx/react": "22.5.4", + "@nx/vite": "22.5.4", + "@nx/vitest": "22.5.4", + "@nx/web": "22.5.4", + "@nx/workspace": "22.5.4", + "@schematics/angular": "21.2.2", + "@sveltejs/vite-plugin-svelte": "3.1.2", + "@swc-node/register": "1.11.1", + "@swc/cli": "0.8.0", + "@swc/core": "1.15.18", + "@testing-library/dom": "10.4.1", + "@testing-library/jest-dom": "6.9.1", + "@testing-library/react": "16.3.2", + "@testing-library/svelte": "4.2.3", + "@testing-library/user-event": "14.6.1", "@types/jest": "29.5.14", - "@types/node": "^20.0.0", - "@types/react": "^19.2.7", - "@types/react-dom": "^19.2.3", - "@typescript-eslint/eslint-plugin": "^7.18.0", - "@typescript-eslint/parser": "^7.18.0", - "@typescript-eslint/utils": "^7.18.0", - "@vitejs/plugin-react": "^4.2.1", - "@vitejs/plugin-react-swc": "^3.5.0", - "@vitest/browser": "^4.0.13", - "@vitest/browser-playwright": "^4.0.13", - "@vitest/coverage-v8": "^4.0.13", - "@vitest/ui": "^4.0.13", - "autoprefixer": "^10.4.16", + "@types/node": "20.19.37", + "@types/react": "19.2.14", + "@types/react-dom": "19.2.3", + "@typescript-eslint/eslint-plugin": "7.18.0", + "@typescript-eslint/parser": "7.18.0", + "@typescript-eslint/utils": "7.18.0", + "@vitejs/plugin-react": "4.7.0", + "@vitejs/plugin-react-swc": "3.11.0", + "@vitest/browser": "4.1.0", + "@vitest/browser-playwright": "4.1.0", + "@vitest/coverage-v8": "4.1.0", + "@vitest/ui": "4.1.0", + "autoprefixer": "10.4.27", "eslint": "8.57.1", - "eslint-config-prettier": "10.1.5", - "eslint-plugin-import": "2.31.0", - "eslint-plugin-jsx-a11y": "6.10.1", - "eslint-plugin-react": "7.32.2", - "eslint-plugin-react-hooks": "5.0.0", - "glob": "^12.0.0", - "jest": "^29.7.0", - "jest-environment-jsdom": "^29.7.0", - "jest-preset-angular": "^14.2.4", - "jiti": "2.4.2", - "jsdom": "^26.1.0", - "jsonc-eslint-parser": "^2.1.0", - "ng-packagr": "20.1.0", - "nx": "22.3.3", - "playwright": "^1.50.1", - "postcss": "^8.4.5", - "postcss-import": "~14.1.0", - "postcss-preset-env": "~7.5.0", - "postcss-replace": "^2.0.1", - "postcss-url": "~10.1.3", - "prettier": "^3.2.0", - "prettier-plugin-svelte": "^3.1.2", - "rollup": "^4.9.6", - "semantic-release": "^25.0.2", - "svelte": "^4.2.19", - "svelte-check": "^3.6.2", - "swc-loader": "0.1.15", + "eslint-config-prettier": "10.1.8", + "eslint-plugin-import": "2.32.0", + "eslint-plugin-jsx-a11y": "6.10.2", + "eslint-plugin-react": "7.37.5", + "eslint-plugin-react-hooks": "5.2.0", + "glob": "12.0.0", + "jest": "29.7.0", + "jest-environment-jsdom": "30.3.0", + "jest-preset-angular": "16.1.1", + "jiti": "2.6.1", + "jsdom": "26.1.0", + "jsonc-eslint-parser": "2.4.2", + "ng-packagr": "21.2.0", + "npm-check-updates": "19.6.3", + "nx": "22.5.4", + "playwright": "1.58.2", + "postcss": "8.5.8", + "postcss-import": "14.1.0", + "postcss-preset-env": "7.8.3", + "postcss-replace": "2.0.1", + "postcss-url": "10.1.3", + "prettier": "3.8.1", + "prettier-plugin-svelte": "3.5.1", + "rollup": "4.59.0", + "semantic-release": "25.0.3", + "svelte": "4.2.20", + "svelte-check": "3.8.6", + "swc-loader": "0.2.7", "ts-jest": "29.4.6", - "ts-node": "10.9.1", - "typescript": "5.8.3", - "vite": "~5.4.20", + "ts-node": "10.9.2", + "typescript": "5.9.3", + "vite": "5.4.21", "vite-plugin-dts": "4.5.4", - "vitest": "^4.0.13", - "vitest-browser-react": "^1.0.0", - "vitest-dom": "^0.1.1" + "vitest": "4.1.0", + "vitest-browser-react": "1.0.1", + "vitest-dom": "0.1.1" } }, "node_modules/@abgov/design-tokens": { @@ -132,15 +132,15 @@ }, "node_modules/@abgov/design-tokens-v2": { "name": "@abgov/design-tokens", - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@abgov/design-tokens/-/design-tokens-2.0.0.tgz", - "integrity": "sha512-vmkM3AWHqlvBav1iPYhI9Y8ZTL2c3qTc3whaNdPTFlOpoC4LJR/oMQUgSeafLygSuAHrAr4iuTdK/CUbgVKHtA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@abgov/design-tokens/-/design-tokens-2.2.0.tgz", + "integrity": "sha512-xztjCu92mJAkHa3tWV2yqDKRLxU2GLvqtwR6UpOrk0JbkBn6mcJ4U/dksB5ZZFlVNNPNvc48wwo0t/jIES6Z8A==", "dev": true }, "node_modules/@abgov/nx-release": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@abgov/nx-release/-/nx-release-10.0.0.tgz", - "integrity": "sha512-Lf0RzBix1KNmIrmrzfdsDAT3RlToho0dvoCC+8ORZxwK6QhUGi7+fblDeDCIM/JHnJroWgH4L/33EflUDd2r0w==", + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@abgov/nx-release/-/nx-release-12.0.0.tgz", + "integrity": "sha512-xVeuiW0kKvF+WMgGF2geBOdULW3WOKSeIKl1d9Hui/xyYlJVkG8DxT4RQPiPUEJ0jk0OBXQxX/bKukH5J/CFDQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -150,36 +150,36 @@ "split2": "~4.2.0" }, "peerDependencies": { - "@nx/devkit": "^20.0.0", - "semantic-release": "^23.0.0", + "@nx/devkit": "^22.0.0", + "semantic-release": "^24.0.0", "tslib": "^2.0.0" } }, "node_modules/@actions/core": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@actions/core/-/core-2.0.2.tgz", - "integrity": "sha512-Ast1V7yHbGAhplAsuVlnb/5J8Mtr/Zl6byPPL+Qjq3lmfIgWF1ak1iYfF/079cRERiuTALTXkSuEUdZeDCfGtA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@actions/core/-/core-3.0.0.tgz", + "integrity": "sha512-zYt6cz+ivnTmiT/ksRVriMBOiuoUpDCJJlZ5KPl2/FRdvwU3f7MPh9qftvbkXJThragzUZieit2nyHUyw53Seg==", "dev": true, "license": "MIT", "dependencies": { - "@actions/exec": "^2.0.0", - "@actions/http-client": "^3.0.1" + "@actions/exec": "^3.0.0", + "@actions/http-client": "^4.0.0" } }, "node_modules/@actions/exec": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@actions/exec/-/exec-2.0.0.tgz", - "integrity": "sha512-k8ngrX2voJ/RIN6r9xB82NVqKpnMRtxDoiO+g3olkIUpQNqjArXrCQceduQZCQj3P3xm32pChRLqRrtXTlqhIw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@actions/exec/-/exec-3.0.0.tgz", + "integrity": "sha512-6xH/puSoNBXb72VPlZVm7vQ+svQpFyA96qdDBvhB8eNZOE8LtPf9L4oAsfzK/crCL8YZ+19fKYVnM63Sl+Xzlw==", "dev": true, "license": "MIT", "dependencies": { - "@actions/io": "^2.0.0" + "@actions/io": "^3.0.2" } }, "node_modules/@actions/http-client": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-3.0.2.tgz", - "integrity": "sha512-JP38FYYpyqvUsz+Igqlc/JG6YO9PaKuvqjM3iGvaLqFnJ7TFmcLyy2IDrY0bI0qCQug8E9K+elv5ZNfw62ZJzA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-4.0.0.tgz", + "integrity": "sha512-QuwPsgVMsD6qaPD57GLZi9sqzAZCtiJT8kVBCDpLtxhL5MydQ4gS+DrejtZZPdIYyB1e95uCK9Luyds7ybHI3g==", "dev": true, "license": "MIT", "dependencies": { @@ -188,9 +188,9 @@ } }, "node_modules/@actions/http-client/node_modules/undici": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.23.0.tgz", - "integrity": "sha512-VfQPToRA5FZs/qJxLIinmU59u0r7LXqoJkCzinq3ckNJp3vKEh7jTWN589YQ5+aoAC/TGRLyJLCPKcLQbM8r9g==", + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.24.1.tgz", + "integrity": "sha512-sC+b0tB1whOCzbtlx20fx3WgCXwkW627p4EA9uM+/tNNPkSS+eSEld6pAs9nDv7WbY1UUljBMYPtu9BCOrCWKA==", "dev": true, "license": "MIT", "engines": { @@ -198,9 +198,9 @@ } }, "node_modules/@actions/io": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@actions/io/-/io-2.0.0.tgz", - "integrity": "sha512-Jv33IN09XLO+0HS79aaODsvIRyduiF7NY/F6LYeK5oeUmrsz7aFdRphQjFoESF4jS7lMauDOttKALcpapVDIAg==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@actions/io/-/io-3.0.2.tgz", + "integrity": "sha512-nRBchcMM+QK1pdjO7/idu86rbJI5YHUKCvKs0KxnSYbVe3F51UfGxuZX4Qy/fWlp6l7gWFwIkrOzN+oUK03kfw==", "dev": true, "license": "MIT" }, @@ -212,57 +212,57 @@ "license": "MIT" }, "node_modules/@algolia/abtesting": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/@algolia/abtesting/-/abtesting-1.12.2.tgz", - "integrity": "sha512-oWknd6wpfNrmRcH0vzed3UPX0i17o4kYLM5OMITyMVM2xLgaRbIafoxL0e8mcrNNb0iORCJA0evnNDKRYth5WQ==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@algolia/abtesting/-/abtesting-1.14.1.tgz", + "integrity": "sha512-Dkj0BgPiLAaim9sbQ97UKDFHJE/880wgStAM18U++NaJ/2Cws34J5731ovJifr6E3Pv4T2CqvMXf8qLCC417Ew==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.46.2", - "@algolia/requester-browser-xhr": "5.46.2", - "@algolia/requester-fetch": "5.46.2", - "@algolia/requester-node-http": "5.46.2" + "@algolia/client-common": "5.48.1", + "@algolia/requester-browser-xhr": "5.48.1", + "@algolia/requester-fetch": "5.48.1", + "@algolia/requester-node-http": "5.48.1" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-abtesting": { - "version": "5.46.2", - "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.46.2.tgz", - "integrity": "sha512-oRSUHbylGIuxrlzdPA8FPJuwrLLRavOhAmFGgdAvMcX47XsyM+IOGa9tc7/K5SPvBqn4nhppOCEz7BrzOPWc4A==", + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.48.1.tgz", + "integrity": "sha512-LV5qCJdj+/m9I+Aj91o+glYszrzd7CX6NgKaYdTOj4+tUYfbS62pwYgUfZprYNayhkQpVFcrW8x8ZlIHpS23Vw==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.46.2", - "@algolia/requester-browser-xhr": "5.46.2", - "@algolia/requester-fetch": "5.46.2", - "@algolia/requester-node-http": "5.46.2" + "@algolia/client-common": "5.48.1", + "@algolia/requester-browser-xhr": "5.48.1", + "@algolia/requester-fetch": "5.48.1", + "@algolia/requester-node-http": "5.48.1" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-analytics": { - "version": "5.46.2", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.46.2.tgz", - "integrity": "sha512-EPBN2Oruw0maWOF4OgGPfioTvd+gmiNwx0HmD9IgmlS+l75DatcBkKOPNJN+0z3wBQWUO5oq602ATxIfmTQ8bA==", + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.48.1.tgz", + "integrity": "sha512-/AVoMqHhPm14CcHq7mwB+bUJbfCv+jrxlNvRjXAuO+TQa+V37N8k1b0ijaRBPdmSjULMd8KtJbQyUyabXOu6Kg==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.46.2", - "@algolia/requester-browser-xhr": "5.46.2", - "@algolia/requester-fetch": "5.46.2", - "@algolia/requester-node-http": "5.46.2" + "@algolia/client-common": "5.48.1", + "@algolia/requester-browser-xhr": "5.48.1", + "@algolia/requester-fetch": "5.48.1", + "@algolia/requester-node-http": "5.48.1" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-common": { - "version": "5.46.2", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.46.2.tgz", - "integrity": "sha512-Hj8gswSJNKZ0oyd0wWissqyasm+wTz1oIsv5ZmLarzOZAp3vFEda8bpDQ8PUhO+DfkbiLyVnAxsPe4cGzWtqkg==", + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.48.1.tgz", + "integrity": "sha512-VXO+qu2Ep6ota28ktvBm3sG53wUHS2n7bgLWmce5jTskdlCD0/JrV4tnBm1l7qpla1CeoQb8D7ShFhad+UoSOw==", "dev": true, "license": "MIT", "engines": { @@ -270,151 +270,151 @@ } }, "node_modules/@algolia/client-insights": { - "version": "5.46.2", - "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.46.2.tgz", - "integrity": "sha512-6dBZko2jt8FmQcHCbmNLB0kCV079Mx/DJcySTL3wirgDBUH7xhY1pOuUTLMiGkqM5D8moVZTvTdRKZUJRkrwBA==", + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.48.1.tgz", + "integrity": "sha512-zl+Qyb0nLg+Y5YvKp1Ij+u9OaPaKg2/EPzTwKNiVyOHnQJlFxmXyUZL1EInczAZsEY8hVpPCLtNfhMhfxluXKQ==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.46.2", - "@algolia/requester-browser-xhr": "5.46.2", - "@algolia/requester-fetch": "5.46.2", - "@algolia/requester-node-http": "5.46.2" + "@algolia/client-common": "5.48.1", + "@algolia/requester-browser-xhr": "5.48.1", + "@algolia/requester-fetch": "5.48.1", + "@algolia/requester-node-http": "5.48.1" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-personalization": { - "version": "5.46.2", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.46.2.tgz", - "integrity": "sha512-1waE2Uqh/PHNeDXGn/PM/WrmYOBiUGSVxAWqiJIj73jqPqvfzZgzdakHscIVaDl6Cp+j5dwjsZ5LCgaUr6DtmA==", + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.48.1.tgz", + "integrity": "sha512-r89Qf9Oo9mKWQXumRu/1LtvVJAmEDpn8mHZMc485pRfQUMAwSSrsnaw1tQ3sszqzEgAr1c7rw6fjBI+zrAXTOw==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.46.2", - "@algolia/requester-browser-xhr": "5.46.2", - "@algolia/requester-fetch": "5.46.2", - "@algolia/requester-node-http": "5.46.2" + "@algolia/client-common": "5.48.1", + "@algolia/requester-browser-xhr": "5.48.1", + "@algolia/requester-fetch": "5.48.1", + "@algolia/requester-node-http": "5.48.1" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-query-suggestions": { - "version": "5.46.2", - "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.46.2.tgz", - "integrity": "sha512-EgOzTZkyDcNL6DV0V/24+oBJ+hKo0wNgyrOX/mePBM9bc9huHxIY2352sXmoZ648JXXY2x//V1kropF/Spx83w==", + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.48.1.tgz", + "integrity": "sha512-TPKNPKfghKG/bMSc7mQYD9HxHRUkBZA4q1PEmHgICaSeHQscGqL4wBrKkhfPlDV1uYBKW02pbFMUhsOt7p4ZpA==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.46.2", - "@algolia/requester-browser-xhr": "5.46.2", - "@algolia/requester-fetch": "5.46.2", - "@algolia/requester-node-http": "5.46.2" + "@algolia/client-common": "5.48.1", + "@algolia/requester-browser-xhr": "5.48.1", + "@algolia/requester-fetch": "5.48.1", + "@algolia/requester-node-http": "5.48.1" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-search": { - "version": "5.46.2", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.46.2.tgz", - "integrity": "sha512-ZsOJqu4HOG5BlvIFnMU0YKjQ9ZI6r3C31dg2jk5kMWPSdhJpYL9xa5hEe7aieE+707dXeMI4ej3diy6mXdZpgA==", + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.48.1.tgz", + "integrity": "sha512-4Fu7dnzQyQmMFknYwTiN/HxPbH4DyxvQ1m+IxpPp5oslOgz8m6PG5qhiGbqJzH4HiT1I58ecDiCAC716UyVA8Q==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.46.2", - "@algolia/requester-browser-xhr": "5.46.2", - "@algolia/requester-fetch": "5.46.2", - "@algolia/requester-node-http": "5.46.2" + "@algolia/client-common": "5.48.1", + "@algolia/requester-browser-xhr": "5.48.1", + "@algolia/requester-fetch": "5.48.1", + "@algolia/requester-node-http": "5.48.1" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/ingestion": { - "version": "1.46.2", - "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.46.2.tgz", - "integrity": "sha512-1Uw2OslTWiOFDtt83y0bGiErJYy5MizadV0nHnOoHFWMoDqWW0kQoMFI65pXqRSkVvit5zjXSLik2xMiyQJDWQ==", + "version": "1.48.1", + "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.48.1.tgz", + "integrity": "sha512-/RFq3TqtXDUUawwic/A9xylA2P3LDMO8dNhphHAUOU51b1ZLHrmZ6YYJm3df1APz7xLY1aht6okCQf+/vmrV9w==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.46.2", - "@algolia/requester-browser-xhr": "5.46.2", - "@algolia/requester-fetch": "5.46.2", - "@algolia/requester-node-http": "5.46.2" + "@algolia/client-common": "5.48.1", + "@algolia/requester-browser-xhr": "5.48.1", + "@algolia/requester-fetch": "5.48.1", + "@algolia/requester-node-http": "5.48.1" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/monitoring": { - "version": "1.46.2", - "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.46.2.tgz", - "integrity": "sha512-xk9f+DPtNcddWN6E7n1hyNNsATBCHIqAvVGG2EAGHJc4AFYL18uM/kMTiOKXE/LKDPyy1JhIerrh9oYb7RBrgw==", + "version": "1.48.1", + "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.48.1.tgz", + "integrity": "sha512-Of0jTeAZRyRhC7XzDSjJef0aBkgRcvRAaw0ooYRlOw57APii7lZdq+layuNdeL72BRq1snaJhoMMwkmLIpJScw==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.46.2", - "@algolia/requester-browser-xhr": "5.46.2", - "@algolia/requester-fetch": "5.46.2", - "@algolia/requester-node-http": "5.46.2" + "@algolia/client-common": "5.48.1", + "@algolia/requester-browser-xhr": "5.48.1", + "@algolia/requester-fetch": "5.48.1", + "@algolia/requester-node-http": "5.48.1" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/recommend": { - "version": "5.46.2", - "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.46.2.tgz", - "integrity": "sha512-NApbTPj9LxGzNw4dYnZmj2BoXiAc8NmbbH6qBNzQgXklGklt/xldTvu+FACN6ltFsTzoNU6j2mWNlHQTKGC5+Q==", + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.48.1.tgz", + "integrity": "sha512-bE7JcpFXzxF5zHwj/vkl2eiCBvyR1zQ7aoUdO+GDXxGp0DGw7nI0p8Xj6u8VmRQ+RDuPcICFQcCwRIJT5tDJFw==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.46.2", - "@algolia/requester-browser-xhr": "5.46.2", - "@algolia/requester-fetch": "5.46.2", - "@algolia/requester-node-http": "5.46.2" + "@algolia/client-common": "5.48.1", + "@algolia/requester-browser-xhr": "5.48.1", + "@algolia/requester-fetch": "5.48.1", + "@algolia/requester-node-http": "5.48.1" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/requester-browser-xhr": { - "version": "5.46.2", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.46.2.tgz", - "integrity": "sha512-ekotpCwpSp033DIIrsTpYlGUCF6momkgupRV/FA3m62SreTSZUKjgK6VTNyG7TtYfq9YFm/pnh65bATP/ZWJEg==", + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.48.1.tgz", + "integrity": "sha512-MK3wZ2koLDnvH/AmqIF1EKbJlhRS5j74OZGkLpxI4rYvNi9Jn/C7vb5DytBnQ4KUWts7QsmbdwHkxY5txQHXVw==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.46.2" + "@algolia/client-common": "5.48.1" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/requester-fetch": { - "version": "5.46.2", - "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.46.2.tgz", - "integrity": "sha512-gKE+ZFi/6y7saTr34wS0SqYFDcjHW4Wminv8PDZEi0/mE99+hSrbKgJWxo2ztb5eqGirQTgIh1AMVacGGWM1iw==", + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.48.1.tgz", + "integrity": "sha512-2oDT43Y5HWRSIQMPQI4tA/W+TN/N2tjggZCUsqQV440kxzzoPGsvv9QP1GhQ4CoDa+yn6ygUsGp6Dr+a9sPPSg==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.46.2" + "@algolia/client-common": "5.48.1" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/requester-node-http": { - "version": "5.46.2", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.46.2.tgz", - "integrity": "sha512-ciPihkletp7ttweJ8Zt+GukSVLp2ANJHU+9ttiSxsJZThXc4Y2yJ8HGVWesW5jN1zrsZsezN71KrMx/iZsOYpg==", + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.48.1.tgz", + "integrity": "sha512-xcaCqbhupVWhuBP1nwbk1XNvwrGljozutEiLx06mvqDf3o8cHyEgQSHS4fKJM+UAggaWVnnFW+Nne5aQ8SUJXg==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.46.2" + "@algolia/client-common": "5.48.1" }, "engines": { "node": ">= 14.0.0" @@ -435,118 +435,83 @@ } }, "node_modules/@angular-devkit/architect": { - "version": "0.2003.16", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2003.16.tgz", - "integrity": "sha512-W7FPVhZzIeHVP/duuKepfZU66LpQ0k9YMHFhrGpzaUuHPOwKmza6+pjVvvti3g6jzT8b1uVlb+XlYgNPZ5jrPQ==", + "version": "0.2102.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2102.2.tgz", + "integrity": "sha512-CDvFtXwyBtMRkTQnm+LfBNLL0yLV8ZGskrM1T6VkcGwXGFDott1FxUdj96ViodYsYL5fbJr0MNA6TlLcanV3kQ==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "20.3.16", + "@angular-devkit/core": "21.2.2", "rxjs": "7.8.2" }, - "engines": { - "node": "^20.19.0 || ^22.12.0 || >=24.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular-devkit/architect/node_modules/@angular-devkit/core": { - "version": "20.3.16", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.3.16.tgz", - "integrity": "sha512-6L9Lpe3lbkyz32gzqxZGVC8MhXxXht+yV+4LUsb4+6T/mG/V9lW6UTW0dhwVOS3vpWMEwpy75XHT298t7HcKEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "8.17.1", - "ajv-formats": "3.0.1", - "jsonc-parser": "3.3.1", - "picomatch": "4.0.3", - "rxjs": "7.8.2", - "source-map": "0.7.6" + "bin": { + "architect": "bin/cli.js" }, "engines": { "node": "^20.19.0 || ^22.12.0 || >=24.0.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^4.0.0" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/architect/node_modules/source-map": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", - "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">= 12" } }, "node_modules/@angular-devkit/build-angular": { - "version": "20.3.16", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-20.3.16.tgz", - "integrity": "sha512-SsJmxRnBTrivG3UiRy0gaU1mGupRCAiEKrKlW30oe6Dm0UoIVXDi4srpSEECcng5Obr3jFPzJE6P16/gfp3ZBw==", + "version": "21.2.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-21.2.2.tgz", + "integrity": "sha512-+KaqvraSGvhnSL3fUazHR8297k6lv/pzhV1p2x2mb6r5FyzD/HjYIP2fiIB2DII36YOVli2mgECoY3CmWj6n8Q==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.2003.16", - "@angular-devkit/build-webpack": "0.2003.16", - "@angular-devkit/core": "20.3.16", - "@angular/build": "20.3.16", - "@babel/core": "7.28.3", - "@babel/generator": "7.28.3", + "@angular-devkit/architect": "0.2102.2", + "@angular-devkit/build-webpack": "0.2102.2", + "@angular-devkit/core": "21.2.2", + "@angular/build": "21.2.2", + "@babel/core": "7.29.0", + "@babel/generator": "7.29.1", "@babel/helper-annotate-as-pure": "7.27.3", "@babel/helper-split-export-declaration": "7.24.7", - "@babel/plugin-transform-async-generator-functions": "7.28.0", - "@babel/plugin-transform-async-to-generator": "7.27.1", - "@babel/plugin-transform-runtime": "7.28.3", - "@babel/preset-env": "7.28.3", - "@babel/runtime": "7.28.3", + "@babel/plugin-transform-async-generator-functions": "7.29.0", + "@babel/plugin-transform-async-to-generator": "7.28.6", + "@babel/plugin-transform-runtime": "7.29.0", + "@babel/preset-env": "7.29.0", + "@babel/runtime": "7.28.6", "@discoveryjs/json-ext": "0.6.3", - "@ngtools/webpack": "20.3.16", + "@ngtools/webpack": "21.2.2", "ansi-colors": "4.1.3", - "autoprefixer": "10.4.21", + "autoprefixer": "10.4.27", "babel-loader": "10.0.0", - "browserslist": "^4.21.5", - "copy-webpack-plugin": "13.0.1", - "css-loader": "7.1.2", - "esbuild-wasm": "0.25.9", - "fast-glob": "3.3.3", + "browserslist": "^4.26.0", + "copy-webpack-plugin": "14.0.0", + "css-loader": "7.1.3", + "esbuild-wasm": "0.27.3", "http-proxy-middleware": "3.0.5", "istanbul-lib-instrument": "6.0.3", "jsonc-parser": "3.3.1", "karma-source-map-support": "1.4.0", - "less": "4.4.0", - "less-loader": "12.3.0", + "less": "4.4.2", + "less-loader": "12.3.1", "license-webpack-plugin": "4.0.2", "loader-utils": "3.3.1", - "mini-css-extract-plugin": "2.9.4", - "open": "10.2.0", - "ora": "8.2.0", + "mini-css-extract-plugin": "2.10.0", + "open": "11.0.0", + "ora": "9.3.0", "picomatch": "4.0.3", - "piscina": "5.1.3", + "piscina": "5.1.4", "postcss": "8.5.6", - "postcss-loader": "8.1.1", + "postcss-loader": "8.2.0", "resolve-url-loader": "5.0.0", "rxjs": "7.8.2", - "sass": "1.90.0", - "sass-loader": "16.0.5", - "semver": "7.7.2", + "sass": "1.97.3", + "sass-loader": "16.0.7", + "semver": "7.7.4", "source-map-loader": "5.0.0", "source-map-support": "0.5.21", - "terser": "5.43.1", + "terser": "5.46.0", + "tinyglobby": "0.2.15", "tree-kill": "1.2.2", "tslib": "2.8.1", - "webpack": "5.105.0", - "webpack-dev-middleware": "7.4.2", - "webpack-dev-server": "5.2.2", + "webpack": "5.105.2", + "webpack-dev-middleware": "7.4.5", + "webpack-dev-server": "5.2.3", "webpack-merge": "6.0.1", "webpack-subresource-integrity": "5.1.0" }, @@ -556,25 +521,25 @@ "yarn": ">= 1.13.0" }, "optionalDependencies": { - "esbuild": "0.25.9" + "esbuild": "0.27.3" }, "peerDependencies": { - "@angular/compiler-cli": "^20.0.0", - "@angular/core": "^20.0.0", - "@angular/localize": "^20.0.0", - "@angular/platform-browser": "^20.0.0", - "@angular/platform-server": "^20.0.0", - "@angular/service-worker": "^20.0.0", - "@angular/ssr": "^20.3.16", + "@angular/compiler-cli": "^21.0.0", + "@angular/core": "^21.0.0", + "@angular/localize": "^21.0.0", + "@angular/platform-browser": "^21.0.0", + "@angular/platform-server": "^21.0.0", + "@angular/service-worker": "^21.0.0", + "@angular/ssr": "^21.2.2", "@web/test-runner": "^0.20.0", "browser-sync": "^3.0.2", - "jest": "^29.5.0 || ^30.2.0", - "jest-environment-jsdom": "^29.5.0 || ^30.2.0", + "jest": "^30.2.0", + "jest-environment-jsdom": "^30.2.0", "karma": "^6.3.0", - "ng-packagr": "^20.0.0", + "ng-packagr": "^21.0.0", "protractor": "^7.0.0", "tailwindcss": "^2.0.0 || ^3.0.0 || ^4.0.0", - "typescript": ">=5.8 <6.0" + "typescript": ">=5.9 <6.0" }, "peerDependenciesMeta": { "@angular/core": { @@ -621,79 +586,71 @@ } } }, - "node_modules/@angular-devkit/build-angular/node_modules/@angular-devkit/core": { - "version": "20.3.16", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.3.16.tgz", - "integrity": "sha512-6L9Lpe3lbkyz32gzqxZGVC8MhXxXht+yV+4LUsb4+6T/mG/V9lW6UTW0dhwVOS3vpWMEwpy75XHT298t7HcKEg==", + "node_modules/@angular-devkit/build-angular/node_modules/es-module-lexer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", + "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", "dev": true, - "license": "MIT", + "license": "MIT" + }, + "node_modules/@angular-devkit/build-angular/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "ajv": "8.17.1", - "ajv-formats": "3.0.1", - "jsonc-parser": "3.3.1", - "picomatch": "4.0.3", - "rxjs": "7.8.2", - "source-map": "0.7.6" + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" }, "engines": { - "node": "^20.19.0 || ^22.12.0 || >=24.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^4.0.0" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } + "node": ">=8.0.0" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" } }, - "node_modules/@angular-devkit/build-angular/node_modules/@babel/core": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.3.tgz", - "integrity": "sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ==", + "node_modules/@angular-devkit/build-angular/node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@angular-devkit/build-angular/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.3", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-module-transforms": "^7.28.3", - "@babel/helpers": "^7.28.3", - "@babel/parser": "^7.28.3", - "@babel/template": "^7.27.2", - "@babel/traverse": "^7.28.3", - "@babel/types": "^7.28.2", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" + "node": ">= 0.6" } }, - "node_modules/@angular-devkit/build-angular/node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "node_modules/@angular-devkit/build-angular/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" } }, - "node_modules/@angular-devkit/build-angular/node_modules/autoprefixer": { - "version": "10.4.21", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", - "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", + "node_modules/@angular-devkit/build-angular/node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", "dev": true, "funding": [ { @@ -702,7 +659,7 @@ }, { "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" + "url": "https://tidelift.com/funding/github/npm/postcss" }, { "type": "github", @@ -711,62 +668,71 @@ ], "license": "MIT", "dependencies": { - "browserslist": "^4.24.4", - "caniuse-lite": "^1.0.30001702", - "fraction.js": "^4.3.7", - "normalize-range": "^0.1.2", + "nanoid": "^3.3.11", "picocolors": "^1.1.1", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" + "source-map-js": "^1.2.1" }, "engines": { "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" } }, - "node_modules/@angular-devkit/build-angular/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@angular-devkit/build-angular/node_modules/fraction.js": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "node_modules/@angular-devkit/build-angular/node_modules/webpack": { + "version": "5.105.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.105.2.tgz", + "integrity": "sha512-dRXm0a2qcHPUBEzVk8uph0xWSjV/xZxenQQbLwnwP7caQCYpqG1qddwlyEkIDkYn0K8tvmcrZ+bOrzoQ3HxCDw==", "dev": true, "license": "MIT", + "dependencies": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.8", + "@types/json-schema": "^7.0.15", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.15.0", + "acorn-import-phases": "^1.0.3", + "browserslist": "^4.28.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.19.0", + "es-module-lexer": "^2.0.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.3.1", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^4.3.3", + "tapable": "^2.3.0", + "terser-webpack-plugin": "^5.3.16", + "watchpack": "^2.5.1", + "webpack-sources": "^3.3.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, "engines": { - "node": "*" + "node": ">=10.13.0" }, "funding": { - "type": "patreon", - "url": "https://github.com/sponsors/rawify" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/source-map": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", - "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">= 12" + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } } }, "node_modules/@angular-devkit/build-webpack": { - "version": "0.2003.16", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.2003.16.tgz", - "integrity": "sha512-88c6jTNAzqVinwYswsHOJAinIUSq08PQd1PfRwoH7RXiZt8XzkSmeLmXKchtamSflDXdcnjNd+AZY29b279zDA==", + "version": "0.2102.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.2102.2.tgz", + "integrity": "sha512-5wQmVnpozBCeAMx1SKHSv2GGH3pVZ1WMwX4k0tnsgsHTt8ia24Zxa7P7pAsqkCbpHpa+7/nEjNuW9Teg/isumg==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/architect": "0.2003.16", + "@angular-devkit/architect": "0.2102.2", "rxjs": "7.8.2" }, "engines": { @@ -780,18 +746,18 @@ } }, "node_modules/@angular-devkit/core": { - "version": "20.1.5", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-20.1.5.tgz", - "integrity": "sha512-458Q/pNoXIyUWVbnXktMyc7Ly3MxsYwgQcEIFzzxJu+zDLAt1PwyDe4o+rd8XHwbceW9r0XIlQa78dEjew6MPQ==", + "version": "21.2.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-21.2.2.tgz", + "integrity": "sha512-xUeKGe4BDQpkz0E6fnAPIJXE0y0nqtap0KhJIBhvN7xi3NenIzTmoi6T9Yv5OOBUdLZbOm4SOel8MhdXiIBpAQ==", "dev": true, "license": "MIT", "dependencies": { - "ajv": "8.17.1", + "ajv": "8.18.0", "ajv-formats": "3.0.1", "jsonc-parser": "3.3.1", - "picomatch": "4.0.2", + "picomatch": "4.0.3", "rxjs": "7.8.2", - "source-map": "0.7.4" + "source-map": "0.7.6" }, "engines": { "node": "^20.19.0 || ^22.12.0 || >=24.0.0", @@ -799,7 +765,7 @@ "yarn": ">= 1.13.0" }, "peerDependencies": { - "chokidar": "^4.0.0" + "chokidar": "^5.0.0" }, "peerDependenciesMeta": { "chokidar": { @@ -807,30 +773,17 @@ } } }, - "node_modules/@angular-devkit/core/node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/@angular-devkit/schematics": { - "version": "20.1.5", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-20.1.5.tgz", - "integrity": "sha512-fAxBFNIlete9FiqaqpQuXgjpoXwQRwKjv9MEW7DuciPYd/FFWr0858U2bzuJEk0mFNY3f9Q4vlY/RgDk9HWF2A==", + "version": "21.2.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-21.2.2.tgz", + "integrity": "sha512-CCeyQxGUq+oyGnHd7PfcYIVbj9pRnqjQq0rAojoAqs1BJdtInx9weLBCLy+AjM3NHePeZrnwm+wEVr8apED8kg==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "20.1.5", + "@angular-devkit/core": "21.2.2", "jsonc-parser": "3.3.1", - "magic-string": "0.30.17", - "ora": "8.2.0", + "magic-string": "0.30.21", + "ora": "9.3.0", "rxjs": "7.8.2" }, "engines": { @@ -840,55 +793,66 @@ } }, "node_modules/@angular-eslint/bundled-angular-compiler": { - "version": "18.0.1", - "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-18.0.1.tgz", - "integrity": "sha512-lr4Ysoo28FBOKcJFQUGTMpbWDcak+gyuYvyggp37ERvazE6EDomPFxzEHNqVT9EI9sZ+GDBOoPR+EdFh0ALGNw==", + "version": "18.4.3", + "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-18.4.3.tgz", + "integrity": "sha512-zdrA8mR98X+U4YgHzUKmivRU+PxzwOL/j8G7eTOvBuq8GPzsP+hvak+tyxlgeGm9HsvpFj9ERHLtJ0xDUPs8fg==", "dev": true, "license": "MIT" }, "node_modules/@angular-eslint/eslint-plugin": { - "version": "18.0.1", - "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-18.0.1.tgz", - "integrity": "sha512-pS3SYLa9DA+ENklGxEUlcw6/xCxgDk9fgjyaheuSjDxL3TIh1pTa4V2TptODdcPh7XCYXiVmy+e/w79mXlGzOw==", + "version": "18.4.3", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-18.4.3.tgz", + "integrity": "sha512-AyJbupiwTBR81P6T59v+aULEnPpZBCBxL2S5QFWfAhNCwWhcof4GihvdK2Z87yhvzDGeAzUFSWl/beJfeFa+PA==", "dev": true, "license": "MIT", "dependencies": { - "@angular-eslint/bundled-angular-compiler": "18.0.1", - "@angular-eslint/utils": "18.0.1" + "@angular-eslint/bundled-angular-compiler": "18.4.3", + "@angular-eslint/utils": "18.4.3" }, "peerDependencies": { - "@typescript-eslint/utils": "^7.11.0 || ^8.0.0-alpha.20", + "@typescript-eslint/utils": "^7.11.0 || ^8.0.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": "*" } }, "node_modules/@angular-eslint/eslint-plugin-template": { - "version": "18.0.1", - "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-18.0.1.tgz", - "integrity": "sha512-u/eov/CFBb8l35D8dW78Dx5fBLd8FZFibKN9XQknhzXnDMpISuUOMny5g5/wvYYjqLgqEySXMiHKEAxEup7xtA==", + "version": "18.4.3", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-18.4.3.tgz", + "integrity": "sha512-ijGlX2N01ayMXTpeQivOA31AszO8OEbu9ZQUCxnu9AyMMhxyi2q50bujRChAvN9YXQfdQtbxuajxV6+aiWb5BQ==", "dev": true, "license": "MIT", "dependencies": { - "@angular-eslint/bundled-angular-compiler": "18.0.1", - "@angular-eslint/utils": "18.0.1", - "aria-query": "5.3.0", - "axobject-query": "4.0.0" + "@angular-eslint/bundled-angular-compiler": "18.4.3", + "@angular-eslint/utils": "18.4.3", + "aria-query": "5.3.2", + "axobject-query": "4.1.0" }, "peerDependencies": { - "@typescript-eslint/utils": "^7.11.0 || ^8.0.0-alpha.20", + "@typescript-eslint/types": "^7.11.0 || ^8.0.0", + "@typescript-eslint/utils": "^7.11.0 || ^8.0.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": "*" } }, + "node_modules/@angular-eslint/eslint-plugin-template/node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/@angular-eslint/template-parser": { - "version": "18.0.1", - "resolved": "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-18.0.1.tgz", - "integrity": "sha512-22fKzkWo9Ts8aY/WHL1A6seS2tpltgRRXVfnZnnqvQRyRiuPnx1FC0ly7+QPZkThh8vdLwxU+BvtLq9Uiqh9OQ==", + "version": "18.4.3", + "resolved": "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-18.4.3.tgz", + "integrity": "sha512-JZMPtEB8yNip3kg4WDEWQyObSo2Hwf+opq2ElYuwe85GQkGhfJSJ2CQYo4FSwd+c5MUQAqESNRg9QqGYauDsiw==", "dev": true, "license": "MIT", "dependencies": { - "@angular-eslint/bundled-angular-compiler": "18.0.1", - "eslint-scope": "^8.0.0" + "@angular-eslint/bundled-angular-compiler": "18.4.3", + "eslint-scope": "^8.0.2" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", @@ -896,24 +860,24 @@ } }, "node_modules/@angular-eslint/utils": { - "version": "18.0.1", - "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-18.0.1.tgz", - "integrity": "sha512-Q9lCySqg+9h2cz08+SoWj48cY1i04tL1k3bsQJmF2TsylAw2mSsNGX2X3h9WkdxY7sUoY0mP7MVW1iU54Gobcg==", + "version": "18.4.3", + "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-18.4.3.tgz", + "integrity": "sha512-w0bJ9+ELAEiPBSTPPm9bvDngfu1d8JbzUhvs2vU+z7sIz/HMwUZT5S4naypj2kNN0gZYGYrW0lt+HIbW87zTAQ==", "dev": true, "license": "MIT", "dependencies": { - "@angular-eslint/bundled-angular-compiler": "18.0.1" + "@angular-eslint/bundled-angular-compiler": "18.4.3" }, "peerDependencies": { - "@typescript-eslint/utils": "^7.11.0 || ^8.0.0-alpha.20", + "@typescript-eslint/utils": "^7.11.0 || ^8.0.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": "*" } }, "node_modules/@angular/animations": { - "version": "20.1.6", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-20.1.6.tgz", - "integrity": "sha512-vSU0BP0BzX20HoCE81MKcr9cd6H9zB1qbCNk2J1ulH1C9rXs5ZpeORy+riIJTOZDYLtE0jCsXT3pvVb+nPmADQ==", + "version": "21.2.4", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-21.2.4.tgz", + "integrity": "sha512-hO1P7ks9n7lW3D31bzHohSuoAaj05xJUlK8rZgX8IkH5DLx4qhvfNh0t4bbLuBJLP2r1TaLsQ8KFcemCkFRO2w==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -922,43 +886,43 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/common": "20.1.6", - "@angular/core": "20.1.6" + "@angular/core": "21.2.4" } }, "node_modules/@angular/build": { - "version": "20.3.16", - "resolved": "https://registry.npmjs.org/@angular/build/-/build-20.3.16.tgz", - "integrity": "sha512-p1W3wwMG1Bs4tkPW7ceXO4woO1KCP28sjfpBJg32dIMW3dYSC+iWNmUkYS/wb4YEkqCV0wd6Apnd98mZjL6rNg==", + "version": "21.2.2", + "resolved": "https://registry.npmjs.org/@angular/build/-/build-21.2.2.tgz", + "integrity": "sha512-Vq2eIneNxzhHm1MwEmRqEJDwHU9ODfSRDaMWwtysGMhpoMQmLdfTqkQDmkC2qVUr8mV8Z1i5I+oe5ZJaMr/PlQ==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.2003.16", - "@babel/core": "7.28.3", + "@angular-devkit/architect": "0.2102.2", + "@babel/core": "7.29.0", "@babel/helper-annotate-as-pure": "7.27.3", "@babel/helper-split-export-declaration": "7.24.7", - "@inquirer/confirm": "5.1.14", - "@vitejs/plugin-basic-ssl": "2.1.0", - "beasties": "0.3.5", - "browserslist": "^4.23.0", - "esbuild": "0.25.9", + "@inquirer/confirm": "5.1.21", + "@vitejs/plugin-basic-ssl": "2.1.4", + "beasties": "0.4.1", + "browserslist": "^4.26.0", + "esbuild": "0.27.3", "https-proxy-agent": "7.0.6", "istanbul-lib-instrument": "6.0.3", "jsonc-parser": "3.3.1", - "listr2": "9.0.1", - "magic-string": "0.30.17", + "listr2": "9.0.5", + "magic-string": "0.30.21", "mrmime": "2.0.1", "parse5-html-rewriting-stream": "8.0.0", "picomatch": "4.0.3", - "piscina": "5.1.3", - "rollup": "4.52.3", - "sass": "1.90.0", - "semver": "7.7.2", + "piscina": "5.1.4", + "rolldown": "1.0.0-rc.4", + "sass": "1.97.3", + "semver": "7.7.4", "source-map-support": "0.5.21", - "tinyglobby": "0.2.14", - "vite": "7.1.11", - "watchpack": "2.4.4" + "tinyglobby": "0.2.15", + "undici": "7.22.0", + "vite": "7.3.1", + "watchpack": "2.5.1" }, "engines": { "node": "^20.19.0 || ^22.12.0 || >=24.0.0", @@ -966,25 +930,25 @@ "yarn": ">= 1.13.0" }, "optionalDependencies": { - "lmdb": "3.4.2" + "lmdb": "3.5.1" }, "peerDependencies": { - "@angular/compiler": "^20.0.0", - "@angular/compiler-cli": "^20.0.0", - "@angular/core": "^20.0.0", - "@angular/localize": "^20.0.0", - "@angular/platform-browser": "^20.0.0", - "@angular/platform-server": "^20.0.0", - "@angular/service-worker": "^20.0.0", - "@angular/ssr": "^20.3.16", + "@angular/compiler": "^21.0.0", + "@angular/compiler-cli": "^21.0.0", + "@angular/core": "^21.0.0", + "@angular/localize": "^21.0.0", + "@angular/platform-browser": "^21.0.0", + "@angular/platform-server": "^21.0.0", + "@angular/service-worker": "^21.0.0", + "@angular/ssr": "^21.2.2", "karma": "^6.4.0", "less": "^4.2.0", - "ng-packagr": "^20.0.0", + "ng-packagr": "^21.0.0", "postcss": "^8.4.0", "tailwindcss": "^2.0.0 || ^3.0.0 || ^4.0.0", "tslib": "^2.3.0", - "typescript": ">=5.8 <6.0", - "vitest": "^3.1.1" + "typescript": ">=5.9 <6.0", + "vitest": "^4.0.8" }, "peerDependenciesMeta": { "@angular/core": { @@ -1025,412 +989,14 @@ } } }, - "node_modules/@angular/build/node_modules/@babel/core": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.3.tgz", - "integrity": "sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.3", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-module-transforms": "^7.28.3", - "@babel/helpers": "^7.28.3", - "@babel/parser": "^7.28.3", - "@babel/template": "^7.27.2", - "@babel/traverse": "^7.28.3", - "@babel/types": "^7.28.2", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@angular/build/node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@angular/build/node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.3.tgz", - "integrity": "sha512-h6cqHGZ6VdnwliFG1NXvMPTy/9PS3h8oLh7ImwR+kl+oYnQizgjxsONmmPSb2C66RksfkfIxEVtDSEcJiO0tqw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@angular/build/node_modules/@rollup/rollup-android-arm64": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.3.tgz", - "integrity": "sha512-wd+u7SLT/u6knklV/ifG7gr5Qy4GUbH2hMWcDauPFJzmCZUAJ8L2bTkVXC2niOIxp8lk3iH/QX8kSrUxVZrOVw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@angular/build/node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.3.tgz", - "integrity": "sha512-lj9ViATR1SsqycwFkJCtYfQTheBdvlWJqzqxwc9f2qrcVrQaF/gCuBRTiTolkRWS6KvNxSk4KHZWG7tDktLgjg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@angular/build/node_modules/@rollup/rollup-darwin-x64": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.3.tgz", - "integrity": "sha512-+Dyo7O1KUmIsbzx1l+4V4tvEVnVQqMOIYtrxK7ncLSknl1xnMHLgn7gddJVrYPNZfEB8CIi3hK8gq8bDhb3h5A==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@angular/build/node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.3.tgz", - "integrity": "sha512-u9Xg2FavYbD30g3DSfNhxgNrxhi6xVG4Y6i9Ur1C7xUuGDW3banRbXj+qgnIrwRN4KeJ396jchwy9bCIzbyBEQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@angular/build/node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.3.tgz", - "integrity": "sha512-5M8kyi/OX96wtD5qJR89a/3x5x8x5inXBZO04JWhkQb2JWavOWfjgkdvUqibGJeNNaz1/Z1PPza5/tAPXICI6A==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@angular/build/node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.3.tgz", - "integrity": "sha512-IoerZJ4l1wRMopEHRKOO16e04iXRDyZFZnNZKrWeNquh5d6bucjezgd+OxG03mOMTnS1x7hilzb3uURPkJ0OfA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@angular/build/node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.3.tgz", - "integrity": "sha512-ZYdtqgHTDfvrJHSh3W22TvjWxwOgc3ThK/XjgcNGP2DIwFIPeAPNsQxrJO5XqleSlgDux2VAoWQ5iJrtaC1TbA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@angular/build/node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.3.tgz", - "integrity": "sha512-NcViG7A0YtuFDA6xWSgmFb6iPFzHlf5vcqb2p0lGEbT+gjrEEz8nC/EeDHvx6mnGXnGCC1SeVV+8u+smj0CeGQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@angular/build/node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.3.tgz", - "integrity": "sha512-d3pY7LWno6SYNXRm6Ebsq0DJGoiLXTb83AIPCXl9fmtIQs/rXoS8SJxxUNtFbJ5MiOvs+7y34np77+9l4nfFMw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@angular/build/node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.3.tgz", - "integrity": "sha512-3y5GA0JkBuirLqmjwAKwB0keDlI6JfGYduMlJD/Rl7fvb4Ni8iKdQs1eiunMZJhwDWdCvrcqXRY++VEBbvk6Eg==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@angular/build/node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.3.tgz", - "integrity": "sha512-AUUH65a0p3Q0Yfm5oD2KVgzTKgwPyp9DSXc3UA7DtxhEb/WSPfbG4wqXeSN62OG5gSo18em4xv6dbfcUGXcagw==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@angular/build/node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.3.tgz", - "integrity": "sha512-1makPhFFVBqZE+XFg3Dkq+IkQ7JvmUrwwqaYBL2CE+ZpxPaqkGaiWFEWVGyvTwZace6WLJHwjVh/+CXbKDGPmg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@angular/build/node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.3.tgz", - "integrity": "sha512-OOFJa28dxfl8kLOPMUOQBCO6z3X2SAfzIE276fwT52uXDWUS178KWq0pL7d6p1kz7pkzA0yQwtqL0dEPoVcRWg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@angular/build/node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.3.tgz", - "integrity": "sha512-jMdsML2VI5l+V7cKfZx3ak+SLlJ8fKvLJ0Eoa4b9/vCUrzXKgoKxvHqvJ/mkWhFiyp88nCkM5S2v6nIwRtPcgg==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@angular/build/node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.3.tgz", - "integrity": "sha512-tPgGd6bY2M2LJTA1uGq8fkSPK8ZLYjDjY+ZLK9WHncCnfIz29LIXIqUgzCR0hIefzy6Hpbe8Th5WOSwTM8E7LA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@angular/build/node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.3.tgz", - "integrity": "sha512-BCFkJjgk+WFzP+tcSMXq77ymAPIxsX9lFJWs+2JzuZTLtksJ2o5hvgTdIcZ5+oKzUDMwI0PfWzRBYAydAHF2Mw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@angular/build/node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.3.tgz", - "integrity": "sha512-KTD/EqjZF3yvRaWUJdD1cW+IQBk4fbQaHYJUmP8N4XoKFZilVL8cobFSTDnjTtxWJQ3JYaMgF4nObY/+nYkumA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ] - }, - "node_modules/@angular/build/node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.3.tgz", - "integrity": "sha512-+zteHZdoUYLkyYKObGHieibUFLbttX2r+58l27XZauq0tcWYYuKUwY2wjeCN9oK1Um2YgH2ibd6cnX/wFD7DuA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@angular/build/node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.3.tgz", - "integrity": "sha512-of1iHkTQSo3kr6dTIRX6t81uj/c/b15HXVsPcEElN5sS859qHrOepM5p9G41Hah+CTqSh2r8Bm56dL2z9UQQ7g==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@angular/build/node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.3.tgz", - "integrity": "sha512-s0hybmlHb56mWVZQj8ra9048/WZTPLILKxcvcq+8awSZmyiSUZjjem1AhU3Tf4ZKpYhK4mg36HtHDOe8QJS5PQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@angular/build/node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.3.tgz", - "integrity": "sha512-zGIbEVVXVtauFgl3MRwGWEN36P5ZGenHRMgNw88X5wEhEBpq0XrMEZwOn07+ICrwM17XO5xfMZqh0OldCH5VTA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@angular/build/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@angular/build/node_modules/rollup": { - "version": "4.52.3", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.3.tgz", - "integrity": "sha512-RIDh866U8agLgiIcdpB+COKnlCreHJLfIhWC3LVflku5YHfpnsIKigRZeFfMfCc4dVcqNVfQQ5gO/afOck064A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "1.0.8" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.52.3", - "@rollup/rollup-android-arm64": "4.52.3", - "@rollup/rollup-darwin-arm64": "4.52.3", - "@rollup/rollup-darwin-x64": "4.52.3", - "@rollup/rollup-freebsd-arm64": "4.52.3", - "@rollup/rollup-freebsd-x64": "4.52.3", - "@rollup/rollup-linux-arm-gnueabihf": "4.52.3", - "@rollup/rollup-linux-arm-musleabihf": "4.52.3", - "@rollup/rollup-linux-arm64-gnu": "4.52.3", - "@rollup/rollup-linux-arm64-musl": "4.52.3", - "@rollup/rollup-linux-loong64-gnu": "4.52.3", - "@rollup/rollup-linux-ppc64-gnu": "4.52.3", - "@rollup/rollup-linux-riscv64-gnu": "4.52.3", - "@rollup/rollup-linux-riscv64-musl": "4.52.3", - "@rollup/rollup-linux-s390x-gnu": "4.52.3", - "@rollup/rollup-linux-x64-gnu": "4.52.3", - "@rollup/rollup-linux-x64-musl": "4.52.3", - "@rollup/rollup-openharmony-arm64": "4.52.3", - "@rollup/rollup-win32-arm64-msvc": "4.52.3", - "@rollup/rollup-win32-ia32-msvc": "4.52.3", - "@rollup/rollup-win32-x64-gnu": "4.52.3", - "@rollup/rollup-win32-x64-msvc": "4.52.3", - "fsevents": "~2.3.2" - } - }, "node_modules/@angular/build/node_modules/vite": { - "version": "7.1.11", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.11.tgz", - "integrity": "sha512-uzcxnSDVjAopEUjljkWh8EIrg6tlzrjFUfMcR1EVsRDGwf/ccef0qQPRyOrROwhrTDaApueq+ja+KLPlzR/zdg==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz", + "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", "dev": true, "license": "MIT", "dependencies": { - "esbuild": "^0.25.0", + "esbuild": "^0.27.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", @@ -1498,49 +1064,31 @@ } } }, - "node_modules/@angular/build/node_modules/vite/node_modules/tinyglobby": { - "version": "0.2.15", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "node_modules/@angular/cli": { + "version": "21.2.2", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-21.2.2.tgz", + "integrity": "sha512-eZo8/qX+ZIpIWc0CN+cCX13Lbgi/031wAp8DRVhDDO6SMVtcr/ObOQ2S16+pQdOMXxiG3vby6IhzJuz9WACzMQ==", "dev": true, "license": "MIT", "dependencies": { - "fdir": "^6.5.0", - "picomatch": "^4.0.3" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" - } - }, - "node_modules/@angular/cli": { - "version": "21.1.4", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-21.1.4.tgz", - "integrity": "sha512-XsMHgxTvHGiXXrhYZz3zMZYhYU0gHdpoHKGiEKXwcx+S1KoYbIssyg6oF2Kq49ZaE0OYCTKjnvgDce6ZqdkJ/A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-devkit/architect": "0.2101.4", - "@angular-devkit/core": "21.1.4", - "@angular-devkit/schematics": "21.1.4", + "@angular-devkit/architect": "0.2102.2", + "@angular-devkit/core": "21.2.2", + "@angular-devkit/schematics": "21.2.2", "@inquirer/prompts": "7.10.1", "@listr2/prompt-adapter-inquirer": "3.0.5", "@modelcontextprotocol/sdk": "1.26.0", - "@schematics/angular": "21.1.4", + "@schematics/angular": "21.2.2", "@yarnpkg/lockfile": "1.1.0", - "algoliasearch": "5.46.2", + "algoliasearch": "5.48.1", "ini": "6.0.0", "jsonc-parser": "3.3.1", "listr2": "9.0.5", "npm-package-arg": "13.0.2", - "pacote": "21.0.4", + "pacote": "21.3.1", "parse5-html-rewriting-stream": "8.0.0", - "resolve": "1.22.11", - "semver": "7.7.3", + "semver": "7.7.4", "yargs": "18.0.0", - "zod": "4.3.5" + "zod": "4.3.6" }, "bin": { "ng": "bin/ng.js" @@ -1551,370 +1099,10 @@ "yarn": ">= 1.13.0" } }, - "node_modules/@angular/cli/node_modules/@angular-devkit/architect": { - "version": "0.2101.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2101.4.tgz", - "integrity": "sha512-3yyebORk+ovtO+LfDjIGbGCZhCMDAsyn9vkCljARj3sSshS4blOQBar0g+V3kYAweLT5Gf+rTKbN5jneOkBAFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-devkit/core": "21.1.4", - "rxjs": "7.8.2" - }, - "bin": { - "architect": "bin/cli.js" - }, - "engines": { - "node": "^20.19.0 || ^22.12.0 || >=24.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular/cli/node_modules/@angular-devkit/core": { - "version": "21.1.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-21.1.4.tgz", - "integrity": "sha512-ObPTI5gYCB1jGxTRhcqZ6oQVUBFVJ8GH4LksVuAiz0nFX7xxpzARWvlhq943EtnlovVlUd9I8fM3RQqjfGVVAQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "8.17.1", - "ajv-formats": "3.0.1", - "jsonc-parser": "3.3.1", - "picomatch": "4.0.3", - "rxjs": "7.8.2", - "source-map": "0.7.6" - }, - "engines": { - "node": "^20.19.0 || ^22.12.0 || >=24.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^5.0.0" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@angular/cli/node_modules/@angular-devkit/schematics": { - "version": "21.1.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-21.1.4.tgz", - "integrity": "sha512-Nqq0ioCUxrbEX+L4KOarETcZZJNnJ1mAJ0ubO4VM91qnn8RBBM9SnQ91590TfC34Szk/wh+3+Uj6KUvTJNuegQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-devkit/core": "21.1.4", - "jsonc-parser": "3.3.1", - "magic-string": "0.30.21", - "ora": "9.0.0", - "rxjs": "7.8.2" - }, - "engines": { - "node": "^20.19.0 || ^22.12.0 || >=24.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular/cli/node_modules/@schematics/angular": { - "version": "21.1.4", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-21.1.4.tgz", - "integrity": "sha512-I1zdSNzdbrVCWpeE2NsZQmIoa9m0nlw4INgdGIkqUH6FgwvoGKC0RoOxKAmm6HHVJ48FE/sPI13dwAeK89ow5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-devkit/core": "21.1.4", - "@angular-devkit/schematics": "21.1.4", - "jsonc-parser": "3.3.1" - }, - "engines": { - "node": "^20.19.0 || ^22.12.0 || >=24.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular/cli/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@angular/cli/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@angular/cli/node_modules/chalk": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", - "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@angular/cli/node_modules/cli-spinners": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-3.4.0.tgz", - "integrity": "sha512-bXfOC4QcT1tKXGorxL3wbJm6XJPDqEnij2gQ2m7ESQuE+/z9YFIWnl/5RpTiKWbMq3EVKR4fRLJGn6DVfu0mpw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@angular/cli/node_modules/cli-truncate": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-5.1.1.tgz", - "integrity": "sha512-SroPvNHxUnk+vIW/dOSfNqdy1sPEFkrTk6TUtqLCnBlo3N7TNYYkzzN7uSD6+jVjrdO4+p8nH7JzH6cIvUem6A==", - "dev": true, - "license": "MIT", - "dependencies": { - "slice-ansi": "^7.1.0", - "string-width": "^8.0.0" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@angular/cli/node_modules/emoji-regex": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", - "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", - "dev": true, - "license": "MIT" - }, - "node_modules/@angular/cli/node_modules/eventemitter3": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", - "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@angular/cli/node_modules/is-fullwidth-code-point": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", - "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "get-east-asian-width": "^1.3.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@angular/cli/node_modules/listr2": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-9.0.5.tgz", - "integrity": "sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==", - "dev": true, - "license": "MIT", - "dependencies": { - "cli-truncate": "^5.0.0", - "colorette": "^2.0.20", - "eventemitter3": "^5.0.1", - "log-update": "^6.1.0", - "rfdc": "^1.4.1", - "wrap-ansi": "^9.0.0" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@angular/cli/node_modules/log-symbols": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-7.0.1.tgz", - "integrity": "sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-unicode-supported": "^2.0.0", - "yoctocolors": "^2.1.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@angular/cli/node_modules/magic-string": { - "version": "0.30.21", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", - "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.5" - } - }, - "node_modules/@angular/cli/node_modules/ora": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-9.0.0.tgz", - "integrity": "sha512-m0pg2zscbYgWbqRR6ABga5c3sZdEon7bSgjnlXC64kxtxLOyjRcbbUkLj7HFyy/FTD+P2xdBWu8snGhYI0jc4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^5.6.2", - "cli-cursor": "^5.0.0", - "cli-spinners": "^3.2.0", - "is-interactive": "^2.0.0", - "is-unicode-supported": "^2.1.0", - "log-symbols": "^7.0.1", - "stdin-discarder": "^0.2.2", - "string-width": "^8.1.0", - "strip-ansi": "^7.1.2" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@angular/cli/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@angular/cli/node_modules/slice-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz", - "integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.2.1", - "is-fullwidth-code-point": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/@angular/cli/node_modules/source-map": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", - "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">= 12" - } - }, - "node_modules/@angular/cli/node_modules/string-width": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.1.1.tgz", - "integrity": "sha512-KpqHIdDL9KwYk22wEOg/VIqYbrnLeSApsKT/bSj6Ez7pn3CftUiLAv2Lccpq1ALcpLV9UX1Ppn92npZWu2w/aw==", - "dev": true, - "license": "MIT", - "dependencies": { - "get-east-asian-width": "^1.3.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@angular/cli/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@angular/cli/node_modules/wrap-ansi": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", - "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.2.1", - "string-width": "^7.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@angular/cli/node_modules/wrap-ansi/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@angular/common": { - "version": "20.3.14", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-20.3.14.tgz", - "integrity": "sha512-OOUvjTtnpktJLsNupA+GFT2q5zNocPdpOENA8aSrXvAheNybLjgi+otO3U3sQsvB1VwaoEZ9GT5O3lZlstnA/A==", + "version": "21.2.4", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-21.2.4.tgz", + "integrity": "sha512-NrP6qOuUpo3fqq14UJ1b2bIRtWsfvxh1qLqOyFV4gfBrHhXd0XffU1LUlUw1qp4w1uBSgPJ0/N5bSPUWrAguVg==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -1923,14 +1111,14 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/core": "20.3.14", + "@angular/core": "21.2.4", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/compiler": { - "version": "20.3.16", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-20.3.16.tgz", - "integrity": "sha512-Pt9Ms9GwTThgzdxWBwMfN8cH1JEtQ2DK5dc2yxYtPSaD+WKmG9AVL1PrzIYQEbaKcWk2jxASUHpEWSlNiwo8uw==", + "version": "21.2.4", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-21.2.4.tgz", + "integrity": "sha512-9+ulVK3idIo/Tu4X2ic7/V0+Uj7pqrOAbOuIirYe6Ymm3AjexuFRiGBbfcH0VJhQ5cf8TvIJ1fuh+MI4JiRIxA==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -1940,15 +1128,15 @@ } }, "node_modules/@angular/compiler-cli": { - "version": "20.1.6", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-20.1.6.tgz", - "integrity": "sha512-wskAeqRH46XfYRjaNSE3waeaBrogKghUM82WDDEw0U+CMP/j3BBS0RqILRYJCmuTjQ7RwXaPQBV2m2jAYaHlNg==", + "version": "21.2.4", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-21.2.4.tgz", + "integrity": "sha512-vGjd7DZo/Ox50pQCm5EycmBu91JclimPtZoyNXu/2hSxz3oAkzwiHCwlHwk2g58eheSSp+lYtYRLmHAqSVZLjg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/core": "7.28.0", + "@babel/core": "7.29.0", "@jridgewell/sourcemap-codec": "^1.4.14", - "chokidar": "^4.0.0", + "chokidar": "^5.0.0", "convert-source-map": "^1.5.1", "reflect-metadata": "^0.2.0", "semver": "^7.0.0", @@ -1963,8 +1151,8 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/compiler": "20.1.6", - "typescript": ">=5.8 <5.9" + "@angular/compiler": "21.2.4", + "typescript": ">=5.9 <6.1" }, "peerDependenciesMeta": { "typescript": { @@ -1972,58 +1160,10 @@ } } }, - "node_modules/@angular/compiler-cli/node_modules/@babel/core": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.0.tgz", - "integrity": "sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.0", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-module-transforms": "^7.27.3", - "@babel/helpers": "^7.27.6", - "@babel/parser": "^7.28.0", - "@babel/template": "^7.27.2", - "@babel/traverse": "^7.28.0", - "@babel/types": "^7.28.0", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@angular/compiler-cli/node_modules/@babel/core/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@angular/compiler-cli/node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@angular/core": { - "version": "20.3.16", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-20.3.16.tgz", - "integrity": "sha512-KSFPKvOmWWLCJBbEO+CuRUXfecX2FRuO0jNi9c54ptXMOPHlK1lIojUnyXmMNzjdHgRug8ci9qDuftvC2B7MKg==", + "version": "21.2.4", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-21.2.4.tgz", + "integrity": "sha512-2+gd67ZuXHpGOqeb2o7XZPueEWEP81eJza2tSHkT5QMV8lnYllDEmaNnkPxnIjSLGP1O3PmiXxo4z8ibHkLZwg==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -2032,9 +1172,9 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/compiler": "20.3.16", + "@angular/compiler": "21.2.4", "rxjs": "^6.5.3 || ^7.4.0", - "zone.js": "~0.15.0" + "zone.js": "~0.15.0 || ~0.16.0" }, "peerDependenciesMeta": { "@angular/compiler": { @@ -2046,27 +1186,28 @@ } }, "node_modules/@angular/forms": { - "version": "20.1.6", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-20.1.6.tgz", - "integrity": "sha512-9gLaiX8c2qOCu4jVukATCnSAANJuLKWGLZpZyLdJGHpZWM7ECf6hpsDKOq+AytqqYKWqZvjcI8AujUroU6aUtg==", + "version": "21.2.4", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-21.2.4.tgz", + "integrity": "sha512-1fOhctA9ADEBYjI3nPQUR5dHsK2+UWAjup37Ksldk/k0w8UpD5YsN7JVNvsDMZRFMucKYcGykPblU7pABtsqnQ==", "license": "MIT", "dependencies": { + "@standard-schema/spec": "^1.0.0", "tslib": "^2.3.0" }, "engines": { "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/common": "20.1.6", - "@angular/core": "20.1.6", - "@angular/platform-browser": "20.1.6", + "@angular/common": "21.2.4", + "@angular/core": "21.2.4", + "@angular/platform-browser": "21.2.4", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/language-service": { - "version": "20.1.6", - "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-20.1.6.tgz", - "integrity": "sha512-ItcxUjVkEJCo4QoR2nORjaFEPInJ4z61DE9AaCMVcmENNeXBt+hpqI+mal2ktZvVsV3ah3kskWy4hQUNZIRAdA==", + "version": "21.2.4", + "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-21.2.4.tgz", + "integrity": "sha512-seWlXWhayTwuL62Cfz+Ky/Wv67oYLX+cXplYoIinDVJPgQaU9jXpakLfKq8RwdRXVmgTE0HQ5dyoTozuWgJ8Nw==", "dev": true, "license": "MIT", "engines": { @@ -2074,9 +1215,9 @@ } }, "node_modules/@angular/platform-browser": { - "version": "20.1.6", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-20.1.6.tgz", - "integrity": "sha512-0FmqP1+JdzrT74JZLbf5IpC8nn0AeJ3Mk1IlXRVcK5olyh3SiEZIGBw89mYwmgP3gQqnjoakooTMA3wwy4Evxw==", + "version": "21.2.4", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-21.2.4.tgz", + "integrity": "sha512-1A9e/cQVu+3BkRCktLcO3RZGuw8NOTHw1frUUrpAz+iMyvIT4sDRFbL+U1g8qmOCZqRNC1Pi1HZfZ1kl6kvrcQ==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -2085,9 +1226,9 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/animations": "20.1.6", - "@angular/common": "20.1.6", - "@angular/core": "20.1.6" + "@angular/animations": "21.2.4", + "@angular/common": "21.2.4", + "@angular/core": "21.2.4" }, "peerDependenciesMeta": { "@angular/animations": { @@ -2096,9 +1237,9 @@ } }, "node_modules/@angular/platform-browser-dynamic": { - "version": "20.1.6", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-20.1.6.tgz", - "integrity": "sha512-vAzgQUGppZ6lBpT++hFzCw6K77MfeYwtL/2BxHPWZMsJVrHF2WtbATn0Icgx6vyKixz7eJzDPKhooFSn5o32RQ==", + "version": "21.2.4", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-21.2.4.tgz", + "integrity": "sha512-LRJLnGh4rdgD0+S5xuDd4YRm5bV8WP2e6F1Pe5rIr6N4V9ofgpB0/uOjYy9se99FJZjoyPnpxaKsp8+XA753Zg==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -2107,16 +1248,16 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/common": "20.1.6", - "@angular/compiler": "20.1.6", - "@angular/core": "20.1.6", - "@angular/platform-browser": "20.1.6" + "@angular/common": "21.2.4", + "@angular/compiler": "21.2.4", + "@angular/core": "21.2.4", + "@angular/platform-browser": "21.2.4" } }, "node_modules/@angular/router": { - "version": "20.1.6", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-20.1.6.tgz", - "integrity": "sha512-42eB6UB/uZt5LqBK7sIGV+fnWPWgwlhZDCl7aujv0Tlwx1HgdLW7EbqMYs+2SIrezn4uj0hg+74oy1PL46V7MA==", + "version": "21.2.4", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-21.2.4.tgz", + "integrity": "sha512-OjWze4XT8i2MThcBXMv7ru1k6/5L6QYZbcXuseqimFCHm2avEJ+mXPovY066fMBZJhqbXdjB82OhHAWkIHjglQ==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -2125,9 +1266,9 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" }, "peerDependencies": { - "@angular/common": "20.1.6", - "@angular/core": "20.1.6", - "@angular/platform-browser": "20.1.6", + "@angular/common": "21.2.4", + "@angular/core": "21.2.4", + "@angular/platform-browser": "21.2.4", "rxjs": "^6.5.3 || ^7.4.0" } }, @@ -2153,14 +1294,14 @@ "license": "ISC" }, "node_modules/@astrojs/check": { - "version": "0.9.6", - "resolved": "https://registry.npmjs.org/@astrojs/check/-/check-0.9.6.tgz", - "integrity": "sha512-jlaEu5SxvSgmfGIFfNgcn5/f+29H61NJzEMfAZ82Xopr4XBchXB1GVlcJsE+elUlsYSbXlptZLX+JMG3b/wZEA==", + "version": "0.9.7", + "resolved": "https://registry.npmjs.org/@astrojs/check/-/check-0.9.7.tgz", + "integrity": "sha512-dA7U5/OFg8/xaMUb2vUOOJuuJXnMpHy6F0BM8ZhL7WT5OkTBwJ0GoW38n4fC4CXt+lT9mLWL0y8Pa74tFByBpQ==", "dev": true, "license": "MIT", "dependencies": { "@astrojs/language-server": "^2.16.1", - "chokidar": "^4.0.1", + "chokidar": "^4.0.3", "kleur": "^4.1.5", "yargs": "^17.7.2" }, @@ -2171,6 +1312,22 @@ "typescript": "^5.0.0" } }, + "node_modules/@astrojs/check/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@astrojs/check/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -2188,6 +1345,20 @@ "node": ">=8" } }, + "node_modules/@astrojs/check/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@astrojs/check/node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -2223,41 +1394,41 @@ } }, "node_modules/@astrojs/compiler": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-2.13.0.tgz", - "integrity": "sha512-mqVORhUJViA28fwHYaWmsXSzLO9osbdZ5ImUfxBarqsYdMlPbqAqGJCxsNzvppp1BEzc1mJNjOVvQqeDN8Vspw==", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-2.13.1.tgz", + "integrity": "sha512-f3FN83d2G/v32ipNClRKgYv30onQlMZX1vCeZMjPsMMPl1mDpmbl0+N5BYo4S/ofzqJyS5hvwacEo0CCVDn/Qg==", "license": "MIT" }, "node_modules/@astrojs/internal-helpers": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.7.5.tgz", - "integrity": "sha512-vreGnYSSKhAjFJCWAwe/CNhONvoc5lokxtRoZims+0wa3KbHBdPHSSthJsKxPd8d/aic6lWKpRTYGY/hsgK6EA==", + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.7.6.tgz", + "integrity": "sha512-GOle7smBWKfMSP8osUIGOlB5kaHdQLV3foCsf+5Q9Wsuu+C6Fs3Ez/ttXmhjZ1HkSgsogcM1RXSjjOVieHq16Q==", "license": "MIT" }, "node_modules/@astrojs/language-server": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/@astrojs/language-server/-/language-server-2.16.3.tgz", - "integrity": "sha512-yO5K7RYCMXUfeDlnU6UnmtnoXzpuQc0yhlaCNZ67k1C/MiwwwvMZz+LGa+H35c49w5QBfvtr4w4Zcf5PcH8uYA==", + "version": "2.16.5", + "resolved": "https://registry.npmjs.org/@astrojs/language-server/-/language-server-2.16.5.tgz", + "integrity": "sha512-MEQvrbuiFDEo+LCO4vvYuTr3eZ4IluZ/n4BbUv77AWAJNEj/n0j7VqTvdL1rGloNTIKZTUd46p5RwYKsxQGY8w==", "dev": true, "license": "MIT", "dependencies": { - "@astrojs/compiler": "^2.13.0", - "@astrojs/yaml2ts": "^0.2.2", + "@astrojs/compiler": "^2.13.1", + "@astrojs/yaml2ts": "^0.2.3", "@jridgewell/sourcemap-codec": "^1.5.5", - "@volar/kit": "~2.4.27", - "@volar/language-core": "~2.4.27", - "@volar/language-server": "~2.4.27", - "@volar/language-service": "~2.4.27", + "@volar/kit": "~2.4.28", + "@volar/language-core": "~2.4.28", + "@volar/language-server": "~2.4.28", + "@volar/language-service": "~2.4.28", "muggle-string": "^0.4.1", "tinyglobby": "^0.2.15", - "volar-service-css": "0.0.68", - "volar-service-emmet": "0.0.68", - "volar-service-html": "0.0.68", - "volar-service-prettier": "0.0.68", - "volar-service-typescript": "0.0.68", - "volar-service-typescript-twoslash-queries": "0.0.68", - "volar-service-yaml": "0.0.68", - "vscode-html-languageservice": "^5.6.1", + "volar-service-css": "0.0.70", + "volar-service-emmet": "0.0.70", + "volar-service-html": "0.0.70", + "volar-service-prettier": "0.0.70", + "volar-service-typescript": "0.0.70", + "volar-service-typescript-twoslash-queries": "0.0.70", + "volar-service-yaml": "0.0.70", + "vscode-html-languageservice": "^5.6.2", "vscode-uri": "^3.1.0" }, "bin": { @@ -2276,30 +1447,13 @@ } } }, - "node_modules/@astrojs/language-server/node_modules/tinyglobby": { - "version": "0.2.15", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "fdir": "^6.5.0", - "picomatch": "^4.0.3" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" - } - }, "node_modules/@astrojs/markdown-remark": { - "version": "6.3.10", - "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-6.3.10.tgz", - "integrity": "sha512-kk4HeYR6AcnzC4QV8iSlOfh+N8TZ3MEStxPyenyCtemqn8IpEATBFMTJcfrNW32dgpt6MY3oCkMM/Tv3/I4G3A==", + "version": "6.3.11", + "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-6.3.11.tgz", + "integrity": "sha512-hcaxX/5aC6lQgHeGh1i+aauvSwIT6cfyFjKWvExYSxUhZZBBdvCliOtu06gbQyhbe0pGJNoNmqNlQZ5zYUuIyQ==", "license": "MIT", "dependencies": { - "@astrojs/internal-helpers": "0.7.5", + "@astrojs/internal-helpers": "0.7.6", "@astrojs/prism": "3.3.0", "github-slugger": "^2.0.0", "hast-util-from-html": "^2.0.3", @@ -2313,8 +1467,8 @@ "remark-parse": "^11.0.0", "remark-rehype": "^11.1.2", "remark-smartypants": "^3.0.2", - "shiki": "^3.19.0", - "smol-toml": "^1.5.2", + "shiki": "^3.21.0", + "smol-toml": "^1.6.0", "unified": "^11.0.5", "unist-util-remove-position": "^5.0.0", "unist-util-visit": "^5.0.0", @@ -2322,25 +1476,13 @@ "vfile": "^6.0.3" } }, - "node_modules/@astrojs/markdown-remark/node_modules/js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/@astrojs/mdx": { - "version": "4.3.13", - "resolved": "https://registry.npmjs.org/@astrojs/mdx/-/mdx-4.3.13.tgz", - "integrity": "sha512-IHDHVKz0JfKBy3//52JSiyWv089b7GVSChIXLrlUOoTLWowG3wr2/8hkaEgEyd/vysvNQvGk+QhysXpJW5ve6Q==", + "version": "4.3.14", + "resolved": "https://registry.npmjs.org/@astrojs/mdx/-/mdx-4.3.14.tgz", + "integrity": "sha512-FBrqJQORVm+rkRa2TS5CjU9PBA6hkhrwLVBSS9A77gN2+iehvjq1w6yya/d0YKC7osiVorKkr3Qd9wNbl0ZkGA==", "license": "MIT", "dependencies": { - "@astrojs/markdown-remark": "6.3.10", + "@astrojs/markdown-remark": "6.3.11", "@mdx-js/mdx": "^3.1.1", "acorn": "^8.15.0", "es-module-lexer": "^1.7.0", @@ -2361,15 +1503,6 @@ "astro": "^5.0.0" } }, - "node_modules/@astrojs/mdx/node_modules/source-map": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", - "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", - "license": "BSD-3-Clause", - "engines": { - "node": ">= 12" - } - }, "node_modules/@astrojs/prism": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-3.3.0.tgz", @@ -2494,38 +1627,23 @@ "node": "18.20.8 || ^20.3.0 || >=22.0.0" } }, - "node_modules/@astrojs/telemetry/node_modules/ci-info": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.1.tgz", - "integrity": "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/@astrojs/yaml2ts": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@astrojs/yaml2ts/-/yaml2ts-0.2.2.tgz", - "integrity": "sha512-GOfvSr5Nqy2z5XiwqTouBBpy5FyI6DEe+/g/Mk5am9SjILN1S5fOEvYK0GuWHg98yS/dobP4m8qyqw/URW35fQ==", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@astrojs/yaml2ts/-/yaml2ts-0.2.3.tgz", + "integrity": "sha512-PJzRmgQzUxI2uwpdX2lXSHtP4G8ocp24/t+bZyf5Fy0SZLSF9f9KXZoMlFM/XCGue+B0nH/2IZ7FpBYQATBsCg==", "dev": true, "license": "MIT", "dependencies": { - "yaml": "^2.5.0" + "yaml": "^2.8.2" } }, "node_modules/@babel/code-frame": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" }, @@ -2534,29 +1652,29 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz", - "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", - "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.5", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-module-transforms": "^7.28.3", - "@babel/helpers": "^7.28.4", - "@babel/parser": "^7.28.5", - "@babel/template": "^7.27.2", - "@babel/traverse": "^7.28.5", - "@babel/types": "^7.28.5", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", @@ -2572,22 +1690,6 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/core/node_modules/@babel/generator": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", - "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.28.5", - "@babel/types": "^7.28.5", - "@jridgewell/gen-mapping": "^0.3.12", - "@jridgewell/trace-mapping": "^0.3.28", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/core/node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", @@ -2604,13 +1706,13 @@ } }, "node_modules/@babel/generator": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.3.tgz", - "integrity": "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==", + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", "license": "MIT", "dependencies": { - "@babel/parser": "^7.28.3", - "@babel/types": "^7.28.2", + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -2623,6 +1725,7 @@ "version": "7.27.3", "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "dev": true, "license": "MIT", "dependencies": { "@babel/types": "^7.27.3" @@ -2632,12 +1735,12 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", - "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.27.2", + "@babel/compat-data": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", @@ -2657,17 +1760,18 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.5.tgz", - "integrity": "sha512-q3WC4JfdODypvxArsJQROfupPBq9+lMwjKq7C33GhbFYJsufD0yd/ziwD+hJucLeWsnFPWZjsU2DNFqBPE7jwQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.6.tgz", + "integrity": "sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", "@babel/helper-member-expression-to-functions": "^7.28.5", "@babel/helper-optimise-call-expression": "^7.27.1", - "@babel/helper-replace-supers": "^7.27.1", + "@babel/helper-replace-supers": "^7.28.6", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", - "@babel/traverse": "^7.28.5", + "@babel/traverse": "^7.28.6", "semver": "^6.3.1" }, "engines": { @@ -2681,6 +1785,7 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -2690,6 +1795,7 @@ "version": "7.28.5", "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.28.5.tgz", "integrity": "sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", @@ -2707,22 +1813,24 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz", - "integrity": "sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg==", + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.6.tgz", + "integrity": "sha512-mOAsxeeKkUKayvZR3HeTYD/fICpCPLJrU5ZjelT/PA6WHtNDBOE436YiaEUvHN454bRM3CebhDsIpieCc4texA==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-plugin-utils": "^7.27.1", - "debug": "^4.4.1", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "debug": "^4.4.3", "lodash.debounce": "^4.0.8", - "resolve": "^1.22.10" + "resolve": "^1.22.11" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -2741,6 +1849,7 @@ "version": "7.28.5", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz", "integrity": "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==", + "dev": true, "license": "MIT", "dependencies": { "@babel/traverse": "^7.28.5", @@ -2751,27 +1860,27 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", - "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", "license": "MIT", "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", - "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.28.3" + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -2784,6 +1893,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", + "dev": true, "license": "MIT", "dependencies": { "@babel/types": "^7.27.1" @@ -2793,9 +1903,9 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", - "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", + "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -2805,6 +1915,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz", "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.1", @@ -2819,14 +1930,15 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz", - "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.28.6.tgz", + "integrity": "sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-member-expression-to-functions": "^7.28.5", "@babel/helper-optimise-call-expression": "^7.27.1", - "@babel/traverse": "^7.27.1" + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -2839,6 +1951,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", + "dev": true, "license": "MIT", "dependencies": { "@babel/traverse": "^7.27.1", @@ -2889,39 +2002,40 @@ } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.3.tgz", - "integrity": "sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.6.tgz", + "integrity": "sha512-z+PwLziMNBeSQJonizz2AGnndLsP2DeGHIxDAn+wdHOGuo4Fo1x1HBPPXeE9TAOPHNNWQKCSlA2VZyYyyibDnQ==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.27.2", - "@babel/traverse": "^7.28.3", - "@babel/types": "^7.28.2" + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", - "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz", + "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", "license": "MIT", "dependencies": { - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.4" + "@babel/template": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", - "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", + "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", "license": "MIT", "dependencies": { - "@babel/types": "^7.28.5" + "@babel/types": "^7.29.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -2934,6 +2048,7 @@ "version": "7.28.5", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.28.5.tgz", "integrity": "sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -2950,6 +2065,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz", "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -2965,6 +2081,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz", "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -2980,6 +2097,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz", "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -2994,13 +2112,14 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.3.tgz", - "integrity": "sha512-b6YTX108evsvE4YgWyQ921ZAFFQm3Bn+CA3+ZXlNVnPhx+UfsVURoPjfGAPCjBgrqo30yX/C2nZGX96DxvR9Iw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.6.tgz", + "integrity": "sha512-a0aBScVTlNaiUe35UtfxAN7A/tehvvG4/ByO6+46VPKTRSlfnAFsgKy0FUh+qAkQrDTmhDkT+IBOKlOoMUxQ0g==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.28.3" + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -3010,14 +2129,15 @@ } }, "node_modules/@babel/plugin-proposal-decorators": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.28.0.tgz", - "integrity": "sha512-zOiZqvANjWDUaUS9xMxbMcK/Zccztbe/6ikvUXaG9nsPH3w6qh5UaPGAnirI/WhIbZ8m3OHU0ReyPrknG+ZKeg==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.29.0.tgz", + "integrity": "sha512-CVBVv3VY/XRMxRYq5dwr2DS7/MvqPm23cOCjbwNnVrfOqcWlnefua1uUs0sjdKOGjvPUG633o07uWzJq4oI6dA==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/plugin-syntax-decorators": "^7.27.1" + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/plugin-syntax-decorators": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -3030,6 +2150,7 @@ "version": "7.21.0-placeholder-for-preset-env.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -3042,6 +2163,7 @@ "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -3054,6 +2176,7 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -3066,6 +2189,7 @@ "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" @@ -3078,6 +2202,7 @@ "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" @@ -3090,12 +2215,13 @@ } }, "node_modules/@babel/plugin-syntax-decorators": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.27.1.tgz", - "integrity": "sha512-YMq8Z87Lhl8EGkmb0MwYkt36QnxC+fzCgrl66ereamPlYToRpIk5nUjKUY3QKLWq8mwUB1BgbeXcTJhZOCDg5A==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.28.6.tgz", + "integrity": "sha512-71EYI0ONURHJBL4rSFXnITXqXrrY8q4P0q006DPfN+Rk+ASM+++IBXem/ruokgBZR8YNEWZ8R6B+rCb8VcUTqA==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -3105,12 +2231,13 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz", - "integrity": "sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.28.6.tgz", + "integrity": "sha512-pSJUpFHdx9z5nqTSirOCMtYVP2wFgoWhP0p3g8ONK/4IHhLIBd0B9NYqAvIUAhq+OkhO4VM1tENCt0cjlsNShw==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -3120,12 +2247,13 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", - "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.28.6.tgz", + "integrity": "sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -3138,6 +2266,7 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" @@ -3150,6 +2279,7 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -3159,12 +2289,13 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", - "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz", + "integrity": "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -3177,6 +2308,7 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" @@ -3189,6 +2321,7 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -3201,6 +2334,7 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" @@ -3213,6 +2347,7 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -3225,6 +2360,7 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -3237,6 +2373,7 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -3249,6 +2386,7 @@ "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" @@ -3264,6 +2402,7 @@ "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" @@ -3276,12 +2415,13 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", - "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.28.6.tgz", + "integrity": "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -3294,6 +2434,7 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", @@ -3310,6 +2451,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -3322,14 +2464,15 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.28.0.tgz", - "integrity": "sha512-BEOdvX4+M765icNPZeidyADIvQ1m1gmunXufXxvRESy/jNNyfovIqUyE7MVgGBjWktCoJlzvFA1To2O4ymIO3Q==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.29.0.tgz", + "integrity": "sha512-va0VdWro4zlBr2JsXC+ofCPB2iG12wPtVGTWFx2WLDOM3nYQZZIGP82qku2eW/JR83sD+k2k+CsNtyEbUqhU6w==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-remap-async-to-generator": "^7.27.1", - "@babel/traverse": "^7.28.0" + "@babel/traverse": "^7.29.0" }, "engines": { "node": ">=6.9.0" @@ -3339,13 +2482,14 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz", - "integrity": "sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.28.6.tgz", + "integrity": "sha512-ilTRcmbuXjsMmcZ3HASTe4caH5Tpo93PkTxF9oG2VZsSWsahydmcEHhix9Ik122RcTnZnUzPbmux4wh1swfv7g==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-remap-async-to-generator": "^7.27.1" }, "engines": { @@ -3359,6 +2503,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz", "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -3371,12 +2516,13 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.5.tgz", - "integrity": "sha512-45DmULpySVvmq9Pj3X9B+62Xe+DJGov27QravQJU1LLcapR6/10i+gYVAucGGJpHBp5mYxIMK4nDAT/QDLr47g==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.6.tgz", + "integrity": "sha512-tt/7wOtBmwHPNMPu7ax4pdPz6shjFrmHDghvNC+FG9Qvj7D6mJcoRQIF5dy4njmxR941l6rgtvfSB2zX3VlUIw==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -3386,13 +2532,14 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz", - "integrity": "sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.28.6.tgz", + "integrity": "sha512-dY2wS3I2G7D697VHndN91TJr8/AAfXQNt5ynCTI/MpxMsSzHp+52uNivYT5wCPax3whc47DR8Ba7cmlQMg24bw==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -3402,13 +2549,14 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.3.tgz", - "integrity": "sha512-LtPXlBbRoc4Njl/oh1CeD/3jC+atytbnf/UqLoqTDcEYGUPj022+rvfkbDYieUrSj3CaV4yHDByPE+T2HwfsJg==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.6.tgz", + "integrity": "sha512-rfQ++ghVwTWTqQ7w8qyDxL1XGihjBss4CmTgGRCTAC9RIbhVpyp4fOeZtta0Lbf+dTNIVJer6ych2ibHwkZqsQ==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.28.3", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -3418,17 +2566,18 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.4.tgz", - "integrity": "sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.6.tgz", + "integrity": "sha512-EF5KONAqC5zAqT783iMGuM2ZtmEBy+mJMOKl2BCvPZ2lVrwvXnB6o+OBWCS+CoeCCpVRF2sA2RBKUxvT8tQT5Q==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", - "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-globals": "^7.28.0", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-replace-supers": "^7.27.1", - "@babel/traverse": "^7.28.4" + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-replace-supers": "^7.28.6", + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -3438,13 +2587,14 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz", - "integrity": "sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.28.6.tgz", + "integrity": "sha512-bcc3k0ijhHbc2lEfpFHgx7eYw9KNXqOerKWfzbxEHUGKnS3sz9C4CNL9OiFN1297bDNfUiSO7DaLzbvHQQQ1BQ==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/template": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/template": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -3457,6 +2607,7 @@ "version": "7.28.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.5.tgz", "integrity": "sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -3470,13 +2621,14 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz", - "integrity": "sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.28.6.tgz", + "integrity": "sha512-SljjowuNKB7q5Oayv4FoPzeB74g3QgLt8IVJw9ADvWy3QnUb/01aw8I4AVv8wYnPvQz2GDDZ/g3GhcNyDBI4Bg==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -3489,6 +2641,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz", "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -3501,13 +2654,14 @@ } }, "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz", - "integrity": "sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.29.0.tgz", + "integrity": "sha512-zBPcW2lFGxdiD8PUnPwJjag2J9otbcLQzvbiOzDxpYXyCuYX9agOwMPGn1prVH0a4qzhCKu24rlH4c1f7yA8rw==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -3520,6 +2674,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz", "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -3532,13 +2687,14 @@ } }, "node_modules/@babel/plugin-transform-explicit-resource-management": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.0.tgz", - "integrity": "sha512-K8nhUcn3f6iB+P3gwCv/no7OdzOZQcKchW6N389V6PD8NUWKZHzndOd9sPDVbMoBsbmjMqlB4L9fm+fEFNVlwQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.6.tgz", + "integrity": "sha512-Iao5Konzx2b6g7EPqTy40UZbcdXE126tTxVFr/nAIj+WItNxjKSYTEw3RC+A2/ZetmdJsgueL1KhaMCQHkLPIg==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/plugin-transform-destructuring": "^7.28.0" + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/plugin-transform-destructuring": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -3548,12 +2704,13 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.5.tgz", - "integrity": "sha512-D4WIMaFtwa2NizOp+dnoFjRez/ClKiC2BqqImwKd1X28nqBtZEyCYJ2ozQrrzlxAFrcrjxo39S6khe9RNDlGzw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.6.tgz", + "integrity": "sha512-WitabqiGjV/vJ0aPOLSFfNY1u9U3R7W36B03r5I2KoNix+a3sOhJ3pKFB3R5It9/UiK78NiO0KE9P21cMhlPkw==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -3566,6 +2723,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz", "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -3581,6 +2739,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz", "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -3597,6 +2756,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.27.1", @@ -3611,12 +2771,13 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz", - "integrity": "sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.28.6.tgz", + "integrity": "sha512-Nr+hEN+0geQkzhbdgQVPoqr47lZbm+5fCUmO70722xJZd0Mvb59+33QLImGj6F+DkK3xgDi1YVysP8whD6FQAw==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -3629,6 +2790,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz", "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -3641,12 +2803,13 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.5.tgz", - "integrity": "sha512-axUuqnUTBuXyHGcJEVVh9pORaN6wC5bYfE7FGzPiaWa3syib9m7g+/IT/4VgCOe2Upef43PHzeAvcrVek6QuuA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.6.tgz", + "integrity": "sha512-+anKKair6gpi8VsM/95kmomGNMD0eLz1NQ8+Pfw5sAwWH9fGYXT50E55ZpV0pHUHWf6IUTWPM+f/7AAff+wr9A==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -3659,6 +2822,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz", "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -3674,6 +2838,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz", "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.27.1", @@ -3687,13 +2852,14 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz", - "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.28.6.tgz", + "integrity": "sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -3703,15 +2869,16 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.28.5.tgz", - "integrity": "sha512-vn5Jma98LCOeBy/KpeQhXcV2WZgaRUtjwQmjoBuLNlOmkg0fB5pdvYVeWRYI69wWKwK2cD1QbMiUQnoujWvrew==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.0.tgz", + "integrity": "sha512-PrujnVFbOdUpw4UHiVwKvKRLMMic8+eC0CuNlxjsyZUiBjhFdPsewdXCkveh2KqBA9/waD0W1b4hXSOBQJezpQ==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.28.3", - "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-validator-identifier": "^7.28.5", - "@babel/traverse": "^7.28.5" + "@babel/traverse": "^7.29.0" }, "engines": { "node": ">=6.9.0" @@ -3724,6 +2891,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz", "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.27.1", @@ -3737,13 +2905,14 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz", - "integrity": "sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.29.0.tgz", + "integrity": "sha512-1CZQA5KNAD6ZYQLPw7oi5ewtDNxH/2vuCh+6SmvgDfhumForvs8a1o9n0UrEoBD8HU4djO2yWngTQlXl1NDVEQ==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -3756,6 +2925,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz", "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -3768,12 +2938,13 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz", - "integrity": "sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.28.6.tgz", + "integrity": "sha512-3wKbRgmzYbw24mDJXT7N+ADXw8BC/imU9yo9c9X9NKaLF1fW+e5H1U5QjMUBe4Qo4Ox/o++IyUkl1sVCLgevKg==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -3783,12 +2954,13 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz", - "integrity": "sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.28.6.tgz", + "integrity": "sha512-SJR8hPynj8outz+SlStQSwvziMN4+Bq99it4tMIf5/Caq+3iOc0JtKyse8puvyXkk3eFRIA5ID/XfunGgO5i6w==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -3798,16 +2970,17 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.4.tgz", - "integrity": "sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.6.tgz", + "integrity": "sha512-5rh+JR4JBC4pGkXLAcYdLHZjXudVxWMXbB6u6+E9lRL5TrGVbHt1TjxGbZ8CkmYw9zjkB7jutzOROArsqtncEA==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/plugin-transform-destructuring": "^7.28.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/plugin-transform-destructuring": "^7.28.5", "@babel/plugin-transform-parameters": "^7.27.7", - "@babel/traverse": "^7.28.4" + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -3820,6 +2993,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz", "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -3833,12 +3007,13 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz", - "integrity": "sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.28.6.tgz", + "integrity": "sha512-R8ja/Pyrv0OGAvAXQhSTmWyPJPml+0TMqXlO5w+AsMEiwb2fg3WkOvob7UxFSL3OIttFSGSRFKQsOhJ/X6HQdQ==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -3848,12 +3023,13 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.5.tgz", - "integrity": "sha512-N6fut9IZlPnjPwgiQkXNhb+cT8wQKFlJNqcZkWlcTqkcqx6/kU4ynGmLFoa4LViBSirn05YAwk+sQBbPfxtYzQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.6.tgz", + "integrity": "sha512-A4zobikRGJTsX9uqVFdafzGkqD30t26ck2LmOzAuLL8b2x6k3TIqRiT2xVvA9fNmFeTX484VpsdgmKNA0bS23w==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "engines": { @@ -3867,6 +3043,7 @@ "version": "7.27.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz", "integrity": "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -3879,13 +3056,14 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz", - "integrity": "sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.28.6.tgz", + "integrity": "sha512-piiuapX9CRv7+0st8lmuUlRSmX6mBcVeNQ1b4AYzJxfCMuBfB0vBXDiGSmm03pKJw1v6cZ8KSeM+oUnM6yAExg==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -3895,14 +3073,15 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz", - "integrity": "sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.28.6.tgz", + "integrity": "sha512-b97jvNSOb5+ehyQmBpmhOCiUC5oVK4PMnpRvO7+ymFBoqYjeDHIU9jnrNUuwHOiL9RpGDoKBpSViarV+BU+eVA==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -3915,6 +3094,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz", "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -3959,17 +3139,17 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.27.1.tgz", - "integrity": "sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.28.6.tgz", + "integrity": "sha512-61bxqhiRfAACulXSLd/GxqmAedUSrRZIu/cbaT18T1CetkTmtDN15it7i80ru4DVqRK1WMxQhXs+Lf9kajm5Ow==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/plugin-syntax-jsx": "^7.27.1", - "@babel/types": "^7.27.1" + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/plugin-syntax-jsx": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -4042,12 +3222,13 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.4.tgz", - "integrity": "sha512-+ZEdQlBoRg9m2NnzvEeLgtvBMO4tkFBw5SQIUgLICgTrumLoU7lr+Oghi6km2PFj+dbUt2u1oby2w3BDO9YQnA==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.0.tgz", + "integrity": "sha512-FijqlqMA7DmRdg/aINBSs04y8XNTYw/lr1gJ2WsmBnnaNw1iS43EPkJW+zK7z65auG3AWRFXWj+NcTQwYptUog==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -4057,13 +3238,14 @@ } }, "node_modules/@babel/plugin-transform-regexp-modifiers": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz", - "integrity": "sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.28.6.tgz", + "integrity": "sha512-QGWAepm9qxpaIs7UM9FvUSnCGlb8Ua1RhyM4/veAxLwt3gMat/LSGrZixyuj4I6+Kn9iwvqCyPTtbdxanYoWYg==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -4076,6 +3258,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz", "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -4088,13 +3271,14 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.28.3.tgz", - "integrity": "sha512-Y6ab1kGqZ0u42Zv/4a7l0l72n9DKP/MKoKWaUSBylrhNZO2prYuqFOLbn5aW5SIFXwSH93yfjbgllL8lxuGKLg==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.29.0.tgz", + "integrity": "sha512-jlaRT5dJtMaMCV6fAuLbsQMSwz/QkvaHOHOSXRitGGwSpR1blCY4KUKoyP2tYO8vJcqYe8cEj96cqSztv3uF9w==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", "babel-plugin-polyfill-corejs2": "^0.4.14", "babel-plugin-polyfill-corejs3": "^0.13.0", "babel-plugin-polyfill-regenerator": "^0.6.5", @@ -4111,6 +3295,7 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -4120,6 +3305,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz", "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -4132,12 +3318,13 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz", - "integrity": "sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.28.6.tgz", + "integrity": "sha512-9U4QObUC0FtJl05AsUcodau/RWDytrU6uKgkxu09mLR9HLDAtUMoPuuskm5huQsoktmsYpI+bGmq+iapDcriKA==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "engines": { @@ -4151,6 +3338,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz", "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -4166,6 +3354,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz", "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -4181,6 +3370,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz", "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -4193,16 +3383,17 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.5.tgz", - "integrity": "sha512-x2Qa+v/CuEoX7Dr31iAfr0IhInrVOWZU/2vJMJ00FOR/2nM0BcBEclpaf9sWCDc+v5e9dMrhSH8/atq/kX7+bA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.6.tgz", + "integrity": "sha512-0YWL2RFxOqEm9Efk5PvreamxPME8OyY0wM5wh5lHjF+VtVhdneCWGzZeSqzOfiobVqQaNCd2z0tQvnI9DaPWPw==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", - "@babel/helper-create-class-features-plugin": "^7.28.5", - "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", - "@babel/plugin-syntax-typescript": "^7.27.1" + "@babel/plugin-syntax-typescript": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -4215,6 +3406,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz", "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" @@ -4227,13 +3419,14 @@ } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz", - "integrity": "sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.28.6.tgz", + "integrity": "sha512-4Wlbdl/sIZjzi/8St0evF0gEZrgOswVO6aOzqxh1kDZOl9WmLrHq2HtGhnOJZmHZYKP8WZ1MDLCt5DAWwRo57A==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -4246,6 +3439,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz", "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", @@ -4259,13 +3453,14 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz", - "integrity": "sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.28.6.tgz", + "integrity": "sha512-/wHc/paTUmsDYN7SZkpWxogTOBNnlx7nBQYfy6JJlCT7G3mVhltk3e++N7zV0XfgGsrqBxd4rJQt9H16I21Y1Q==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -4275,80 +3470,81 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.28.3.tgz", - "integrity": "sha512-ROiDcM+GbYVPYBOeCR6uBXKkQpBExLl8k9HO1ygXEyds39j+vCCsjmj7S8GOniZQlEs81QlkdJZe76IpLSiqpg==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.29.0.tgz", + "integrity": "sha512-fNEdfc0yi16lt6IZo2Qxk3knHVdfMYX33czNb4v8yWhemoBhibCpQK/uYHtSKIiO+p/zd3+8fYVXhQdOVV608w==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.28.0", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-plugin-utils": "^7.27.1", + "@babel/compat-data": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.27.1", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.28.5", "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.3", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.6", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-import-assertions": "^7.27.1", - "@babel/plugin-syntax-import-attributes": "^7.27.1", + "@babel/plugin-syntax-import-assertions": "^7.28.6", + "@babel/plugin-syntax-import-attributes": "^7.28.6", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", "@babel/plugin-transform-arrow-functions": "^7.27.1", - "@babel/plugin-transform-async-generator-functions": "^7.28.0", - "@babel/plugin-transform-async-to-generator": "^7.27.1", + "@babel/plugin-transform-async-generator-functions": "^7.29.0", + "@babel/plugin-transform-async-to-generator": "^7.28.6", "@babel/plugin-transform-block-scoped-functions": "^7.27.1", - "@babel/plugin-transform-block-scoping": "^7.28.0", - "@babel/plugin-transform-class-properties": "^7.27.1", - "@babel/plugin-transform-class-static-block": "^7.28.3", - "@babel/plugin-transform-classes": "^7.28.3", - "@babel/plugin-transform-computed-properties": "^7.27.1", - "@babel/plugin-transform-destructuring": "^7.28.0", - "@babel/plugin-transform-dotall-regex": "^7.27.1", + "@babel/plugin-transform-block-scoping": "^7.28.6", + "@babel/plugin-transform-class-properties": "^7.28.6", + "@babel/plugin-transform-class-static-block": "^7.28.6", + "@babel/plugin-transform-classes": "^7.28.6", + "@babel/plugin-transform-computed-properties": "^7.28.6", + "@babel/plugin-transform-destructuring": "^7.28.5", + "@babel/plugin-transform-dotall-regex": "^7.28.6", "@babel/plugin-transform-duplicate-keys": "^7.27.1", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.29.0", "@babel/plugin-transform-dynamic-import": "^7.27.1", - "@babel/plugin-transform-explicit-resource-management": "^7.28.0", - "@babel/plugin-transform-exponentiation-operator": "^7.27.1", + "@babel/plugin-transform-explicit-resource-management": "^7.28.6", + "@babel/plugin-transform-exponentiation-operator": "^7.28.6", "@babel/plugin-transform-export-namespace-from": "^7.27.1", "@babel/plugin-transform-for-of": "^7.27.1", "@babel/plugin-transform-function-name": "^7.27.1", - "@babel/plugin-transform-json-strings": "^7.27.1", + "@babel/plugin-transform-json-strings": "^7.28.6", "@babel/plugin-transform-literals": "^7.27.1", - "@babel/plugin-transform-logical-assignment-operators": "^7.27.1", + "@babel/plugin-transform-logical-assignment-operators": "^7.28.6", "@babel/plugin-transform-member-expression-literals": "^7.27.1", "@babel/plugin-transform-modules-amd": "^7.27.1", - "@babel/plugin-transform-modules-commonjs": "^7.27.1", - "@babel/plugin-transform-modules-systemjs": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.28.6", + "@babel/plugin-transform-modules-systemjs": "^7.29.0", "@babel/plugin-transform-modules-umd": "^7.27.1", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.29.0", "@babel/plugin-transform-new-target": "^7.27.1", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.27.1", - "@babel/plugin-transform-numeric-separator": "^7.27.1", - "@babel/plugin-transform-object-rest-spread": "^7.28.0", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.28.6", + "@babel/plugin-transform-numeric-separator": "^7.28.6", + "@babel/plugin-transform-object-rest-spread": "^7.28.6", "@babel/plugin-transform-object-super": "^7.27.1", - "@babel/plugin-transform-optional-catch-binding": "^7.27.1", - "@babel/plugin-transform-optional-chaining": "^7.27.1", + "@babel/plugin-transform-optional-catch-binding": "^7.28.6", + "@babel/plugin-transform-optional-chaining": "^7.28.6", "@babel/plugin-transform-parameters": "^7.27.7", - "@babel/plugin-transform-private-methods": "^7.27.1", - "@babel/plugin-transform-private-property-in-object": "^7.27.1", + "@babel/plugin-transform-private-methods": "^7.28.6", + "@babel/plugin-transform-private-property-in-object": "^7.28.6", "@babel/plugin-transform-property-literals": "^7.27.1", - "@babel/plugin-transform-regenerator": "^7.28.3", - "@babel/plugin-transform-regexp-modifiers": "^7.27.1", + "@babel/plugin-transform-regenerator": "^7.29.0", + "@babel/plugin-transform-regexp-modifiers": "^7.28.6", "@babel/plugin-transform-reserved-words": "^7.27.1", "@babel/plugin-transform-shorthand-properties": "^7.27.1", - "@babel/plugin-transform-spread": "^7.27.1", + "@babel/plugin-transform-spread": "^7.28.6", "@babel/plugin-transform-sticky-regex": "^7.27.1", "@babel/plugin-transform-template-literals": "^7.27.1", "@babel/plugin-transform-typeof-symbol": "^7.27.1", "@babel/plugin-transform-unicode-escapes": "^7.27.1", - "@babel/plugin-transform-unicode-property-regex": "^7.27.1", + "@babel/plugin-transform-unicode-property-regex": "^7.28.6", "@babel/plugin-transform-unicode-regex": "^7.27.1", - "@babel/plugin-transform-unicode-sets-regex": "^7.27.1", + "@babel/plugin-transform-unicode-sets-regex": "^7.28.6", "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.14", - "babel-plugin-polyfill-corejs3": "^0.13.0", - "babel-plugin-polyfill-regenerator": "^0.6.5", - "core-js-compat": "^3.43.0", + "babel-plugin-polyfill-corejs2": "^0.4.15", + "babel-plugin-polyfill-corejs3": "^0.14.0", + "babel-plugin-polyfill-regenerator": "^0.6.6", + "core-js-compat": "^3.48.0", "semver": "^6.3.1" }, "engines": { @@ -4358,10 +3554,25 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/preset-env/node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.14.0.tgz", + "integrity": "sha512-AvDcMxJ34W4Wgy4KBIIePQTAOP1Ie2WFwkQp3dB7FQ/f0lI5+nM96zUnYEOE1P9sEg0es5VCP0HxiWu5fUHZAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.6", + "core-js-compat": "^3.48.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, "node_modules/@babel/preset-env/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -4371,6 +3582,7 @@ "version": "0.1.6-no-external-plugins", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", @@ -4406,6 +3618,7 @@ "version": "7.28.5", "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.28.5.tgz", "integrity": "sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", @@ -4422,66 +3635,51 @@ } }, "node_modules/@babel/runtime": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.3.tgz", - "integrity": "sha512-9uIQ10o0WGdpP6GDhXcdOJPJuDgFtIDtN/9+ArJQ2NAfAmiuhTQdzkaTGR33v43GYS2UrSA0eX2pPPHoFVvpxA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz", + "integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/template": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.2", - "@babel/types": "^7.27.1" + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", - "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.5", + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.5", - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.5", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", "debug": "^4.3.1" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/traverse/node_modules/@babel/generator": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", - "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.28.5", - "@babel/types": "^7.28.5", - "@jridgewell/gen-mapping": "^0.3.12", - "@jridgewell/trace-mapping": "^0.3.28", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/types": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", - "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.27.1", @@ -4495,12 +3693,20 @@ "version": "0.2.3", "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@blazediff/core": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@blazediff/core/-/core-1.9.1.tgz", + "integrity": "sha512-ehg3jIkYKulZh+8om/O25vkvSsXXwC+skXmyA87FFx6A/45eqOkZsBltMw/TVteb0mloiGT8oGRTcjRAz66zaA==", + "dev": true, "license": "MIT" }, "node_modules/@borewit/text-codec": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@borewit/text-codec/-/text-codec-0.1.1.tgz", - "integrity": "sha512-5L/uBxmjaCIX5h8Z+uu+kA9BQLkc/Wl06UGR5ajNRxu+/XjonB5i8JpgFMrPj3LXTCPA0pv8yxUvbUi+QthGGA==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@borewit/text-codec/-/text-codec-0.2.1.tgz", + "integrity": "sha512-k7vvKPbf7J2fZ5klGRD9AeKfUvojuZIQ3BT5u7Jfv+puwXkUBUT5PVyMDfJZpy30CBDXGMgw7fguK/lpOMBvgw==", "dev": true, "license": "MIT", "funding": { @@ -4509,9 +3715,9 @@ } }, "node_modules/@bufbuild/protobuf": { - "version": "2.10.2", - "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.10.2.tgz", - "integrity": "sha512-uFsRXwIGyu+r6AMdz+XijIIZJYpoWeYzILt5yZ2d3mCjQrWUTVpVD9WL/jZAbvp+Ed04rOhrsk7FiTcEDseB5A==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.11.0.tgz", + "integrity": "sha512-sBXGT13cpmPR5BMgHE6UEEfEaShh5Ror6rfN3yEK5si7QVrtZg8LEPQb0VVhiLRUslD2yLnXtnRzG035J/mZXQ==", "dev": true, "license": "(Apache-2.0 AND BSD-3-Clause)" }, @@ -4525,18 +3731,18 @@ } }, "node_modules/@bundled-es-modules/glob": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/@bundled-es-modules/glob/-/glob-11.0.3.tgz", - "integrity": "sha512-rt+1650YhlwRkkj67YMZQj5LXWZiavpHQg8K6jDcZBPbrBIooHbKOQvvxKJsKM80H1oHengEbIymfw3mn4FkUw==", - "license": "ISC", + "version": "13.0.6", + "resolved": "https://registry.npmjs.org/@bundled-es-modules/glob/-/glob-13.0.6.tgz", + "integrity": "sha512-x9nR2e1pt8LF0yLPC6yz/aUoiN7qJJwZ1znLxIXCxGyH+8BI+yO/sklBdn1+QbUyWXQBM+CjfZz3IhqtgIoDVg==", + "license": "MIT", "dependencies": { "buffer": "^6.0.3", "events": "^3.3.0", - "glob": "^11.0.3", + "glob": "^13.0.6", "path": "^0.12.7", "stream": "^0.0.3", "string_decoder": "^1.3.0", - "url": "^0.11.3" + "url": "^0.11.4" } }, "node_modules/@bundled-es-modules/glob/node_modules/string_decoder": { @@ -4564,11 +3770,19 @@ } }, "node_modules/@bundled-es-modules/memfs/node_modules/memfs": { - "version": "4.51.0", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.51.0.tgz", - "integrity": "sha512-4zngfkVM/GpIhC8YazOsM6E8hoB33NP0BCESPOA6z7qaL6umPJNqkO8CNYaLV2FB2MV6H1O3x2luHHOSqppv+A==", + "version": "4.56.11", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.56.11.tgz", + "integrity": "sha512-/GodtwVeKVIHZKLUSr2ZdOxKBC5hHki4JNCU22DoCGPEHr5o2PD5U721zvESKyWwCfTfavFl9WZYgA13OAYK0g==", "license": "Apache-2.0", "dependencies": { + "@jsonjoy.com/fs-core": "4.56.11", + "@jsonjoy.com/fs-fsa": "4.56.11", + "@jsonjoy.com/fs-node": "4.56.11", + "@jsonjoy.com/fs-node-builtins": "4.56.11", + "@jsonjoy.com/fs-node-to-fsa": "4.56.11", + "@jsonjoy.com/fs-node-utils": "4.56.11", + "@jsonjoy.com/fs-print": "4.56.11", + "@jsonjoy.com/fs-snapshot": "4.56.11", "@jsonjoy.com/json-pack": "^1.11.0", "@jsonjoy.com/util": "^1.9.0", "glob-to-regex.js": "^1.0.1", @@ -4579,6 +3793,9 @@ "funding": { "type": "github", "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, "node_modules/@capsizecss/unpack": { @@ -4608,6 +3825,7 @@ "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "0.3.9" @@ -4620,6 +3838,7 @@ "version": "0.3.9", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", @@ -4741,6 +3960,27 @@ "node": ">=18" } }, + "node_modules/@csstools/postcss-cascade-layers": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz", + "integrity": "sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==", + "dev": true, + "license": "CC0-1.0", + "dependencies": { + "@csstools/selector-specificity": "^2.0.2", + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, "node_modules/@csstools/postcss-color-function": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz", @@ -4844,6 +4084,26 @@ "postcss": "^8.2" } }, + "node_modules/@csstools/postcss-nested-calc": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz", + "integrity": "sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==", + "dev": true, + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, "node_modules/@csstools/postcss-normalize-display-values": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz", @@ -4921,6 +4181,46 @@ "postcss": "^8.2" } }, + "node_modules/@csstools/postcss-text-decoration-shorthand": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz", + "integrity": "sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==", + "dev": true, + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-trigonometric-functions": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz", + "integrity": "sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==", + "dev": true, + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, "node_modules/@csstools/postcss-unset-value": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz", @@ -5028,9 +4328,10 @@ "license": "MIT" }, "node_modules/@emnapi/core": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.7.1.tgz", - "integrity": "sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.8.1.tgz", + "integrity": "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==", + "dev": true, "license": "MIT", "dependencies": { "@emnapi/wasi-threads": "1.1.0", @@ -5038,9 +4339,10 @@ } }, "node_modules/@emnapi/runtime": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.7.1.tgz", - "integrity": "sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.8.1.tgz", + "integrity": "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==", + "devOptional": true, "license": "MIT", "dependencies": { "tslib": "^2.4.0" @@ -5050,15 +4352,16 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz", "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==", + "dev": true, "license": "MIT", "dependencies": { "tslib": "^2.4.0" } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", - "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.0.tgz", + "integrity": "sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==", "cpu": [ "ppc64" ], @@ -5072,9 +4375,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", - "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.0.tgz", + "integrity": "sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==", "cpu": [ "arm" ], @@ -5088,9 +4391,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", - "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.0.tgz", + "integrity": "sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==", "cpu": [ "arm64" ], @@ -5104,9 +4407,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", - "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.0.tgz", + "integrity": "sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==", "cpu": [ "x64" ], @@ -5120,9 +4423,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", - "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.0.tgz", + "integrity": "sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==", "cpu": [ "arm64" ], @@ -5136,9 +4439,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", - "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.0.tgz", + "integrity": "sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==", "cpu": [ "x64" ], @@ -5152,9 +4455,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", - "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.0.tgz", + "integrity": "sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==", "cpu": [ "arm64" ], @@ -5168,9 +4471,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", - "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.0.tgz", + "integrity": "sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==", "cpu": [ "x64" ], @@ -5184,9 +4487,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", - "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.0.tgz", + "integrity": "sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==", "cpu": [ "arm" ], @@ -5200,9 +4503,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", - "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.0.tgz", + "integrity": "sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==", "cpu": [ "arm64" ], @@ -5216,9 +4519,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", - "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.0.tgz", + "integrity": "sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==", "cpu": [ "ia32" ], @@ -5232,9 +4535,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", - "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.0.tgz", + "integrity": "sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==", "cpu": [ "loong64" ], @@ -5248,9 +4551,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", - "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.0.tgz", + "integrity": "sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==", "cpu": [ "mips64el" ], @@ -5264,9 +4567,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", - "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.0.tgz", + "integrity": "sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==", "cpu": [ "ppc64" ], @@ -5280,9 +4583,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", - "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.0.tgz", + "integrity": "sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==", "cpu": [ "riscv64" ], @@ -5296,9 +4599,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", - "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.0.tgz", + "integrity": "sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==", "cpu": [ "s390x" ], @@ -5312,9 +4615,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", - "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.0.tgz", + "integrity": "sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==", "cpu": [ "x64" ], @@ -5328,9 +4631,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", - "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.0.tgz", + "integrity": "sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==", "cpu": [ "arm64" ], @@ -5344,9 +4647,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", - "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.0.tgz", + "integrity": "sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==", "cpu": [ "x64" ], @@ -5360,9 +4663,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", - "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.0.tgz", + "integrity": "sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==", "cpu": [ "arm64" ], @@ -5376,9 +4679,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", - "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.0.tgz", + "integrity": "sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==", "cpu": [ "x64" ], @@ -5391,26 +4694,10 @@ "node": ">=18" } }, - "node_modules/@esbuild/openharmony-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", - "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": ">=18" - } - }, "node_modules/@esbuild/sunos-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", - "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.0.tgz", + "integrity": "sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==", "cpu": [ "x64" ], @@ -5424,9 +4711,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", - "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.0.tgz", + "integrity": "sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==", "cpu": [ "arm64" ], @@ -5440,9 +4727,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", - "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.0.tgz", + "integrity": "sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==", "cpu": [ "ia32" ], @@ -5456,9 +4743,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", - "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.0.tgz", + "integrity": "sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==", "cpu": [ "x64" ], @@ -5472,9 +4759,9 @@ } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", - "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5525,9 +4812,9 @@ } }, "node_modules/@eslint/eslintrc/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", "dev": true, "license": "MIT", "dependencies": { @@ -5541,6 +4828,13 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/@eslint/eslintrc/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", @@ -5568,19 +4862,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -5589,9 +4870,9 @@ "license": "MIT" }, "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, "license": "ISC", "dependencies": { @@ -5641,10 +4922,31 @@ "npm": ">=6.14.13" } }, + "node_modules/@gar/promise-retry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@gar/promise-retry/-/promise-retry-1.0.2.tgz", + "integrity": "sha512-Lm/ZLhDZcBECta3TmCQSngiQykFdfw+QtI1/GYMsZd4l3nG+P8WLB16XuS7WaBGLQ+9E+cOcWQsth9cayuGt8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "retry": "^0.13.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@harperfast/extended-iterable": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@harperfast/extended-iterable/-/extended-iterable-1.0.3.tgz", + "integrity": "sha512-sSAYhQca3rDWtQUHSAPeO7axFIUJOI6hn1gjRC5APVE1a90tuyT8f5WIgRsFhhWA7htNkju2veB9eWL6YHi/Lw==", + "dev": true, + "license": "Apache-2.0", + "optional": true + }, "node_modules/@hono/node-server": { - "version": "1.19.9", - "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.9.tgz", - "integrity": "sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw==", + "version": "1.19.10", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.10.tgz", + "integrity": "sha512-hZ7nOssGqRgyV3FVVQdfi+U4q02uB23bpnYpdvNXkYTRRyWx84b7yf1ans+dnJ/7h41sGL3CeQTfO+ZGxuO+Iw==", "dev": true, "license": "MIT", "engines": { @@ -5670,6 +4972,13 @@ "node": ">=10.10.0" } }, + "node_modules/@humanwhocodes/config-array/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", @@ -5682,9 +4991,9 @@ } }, "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, "license": "ISC", "dependencies": { @@ -5717,9 +5026,9 @@ "license": "BSD-3-Clause" }, "node_modules/@img/colour": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.0.0.tgz", - "integrity": "sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", + "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==", "license": "MIT", "optional": true, "engines": { @@ -6218,231 +5527,6 @@ } }, "node_modules/@inquirer/confirm": { - "version": "5.1.14", - "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.14.tgz", - "integrity": "sha512-5yR4IBfe0kXe59r1YCTG8WXkUbl7Z35HK87Sw+WUyGD8wNUx7JvY7laahzeytyE1oLn74bQnL7hstctQxisQ8Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.15", - "@inquirer/type": "^3.0.8" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/core": { - "version": "10.3.2", - "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.3.2.tgz", - "integrity": "sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/ansi": "^1.0.2", - "@inquirer/figures": "^1.0.15", - "@inquirer/type": "^3.0.10", - "cli-width": "^4.1.0", - "mute-stream": "^2.0.0", - "signal-exit": "^4.1.0", - "wrap-ansi": "^6.2.0", - "yoctocolors-cjs": "^2.1.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/editor": { - "version": "4.2.23", - "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.23.tgz", - "integrity": "sha512-aLSROkEwirotxZ1pBaP8tugXRFCxW94gwrQLxXfrZsKkfjOYC1aRvAZuhpJOb5cu4IBTJdsCigUlf2iCOu4ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.3.2", - "@inquirer/external-editor": "^1.0.3", - "@inquirer/type": "^3.0.10" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/expand": { - "version": "4.0.23", - "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.23.tgz", - "integrity": "sha512-nRzdOyFYnpeYTTR2qFwEVmIWypzdAx/sIkCMeTNTcflFOovfqUk+HcFhQQVBftAh9gmGrpFj6QcGEqrDMDOiew==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.3.2", - "@inquirer/type": "^3.0.10", - "yoctocolors-cjs": "^2.1.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/external-editor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.3.tgz", - "integrity": "sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==", - "dev": true, - "license": "MIT", - "dependencies": { - "chardet": "^2.1.1", - "iconv-lite": "^0.7.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/figures": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.15.tgz", - "integrity": "sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/@inquirer/input": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.3.1.tgz", - "integrity": "sha512-kN0pAM4yPrLjJ1XJBjDxyfDduXOuQHrBB8aLDMueuwUGn+vNpF7Gq7TvyVxx8u4SHlFFj4trmj+a2cbpG4Jn1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.3.2", - "@inquirer/type": "^3.0.10" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/number": { - "version": "3.0.23", - "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.23.tgz", - "integrity": "sha512-5Smv0OK7K0KUzUfYUXDXQc9jrf8OHo4ktlEayFlelCjwMXz0299Y8OrI+lj7i4gCBY15UObk76q0QtxjzFcFcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.3.2", - "@inquirer/type": "^3.0.10" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/password": { - "version": "4.0.23", - "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.23.tgz", - "integrity": "sha512-zREJHjhT5vJBMZX/IUbyI9zVtVfOLiTO66MrF/3GFZYZ7T4YILW5MSkEYHceSii/KtRk+4i3RE7E1CUXA2jHcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/ansi": "^1.0.2", - "@inquirer/core": "^10.3.2", - "@inquirer/type": "^3.0.10" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/prompts": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.10.1.tgz", - "integrity": "sha512-Dx/y9bCQcXLI5ooQ5KyvA4FTgeo2jYj/7plWfV5Ak5wDPKQZgudKez2ixyfz7tKXzcJciTxqLeK7R9HItwiByg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/checkbox": "^4.3.2", - "@inquirer/confirm": "^5.1.21", - "@inquirer/editor": "^4.2.23", - "@inquirer/expand": "^4.0.23", - "@inquirer/input": "^4.3.1", - "@inquirer/number": "^3.0.23", - "@inquirer/password": "^4.0.23", - "@inquirer/rawlist": "^4.1.11", - "@inquirer/search": "^3.2.2", - "@inquirer/select": "^4.4.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/prompts/node_modules/@inquirer/confirm": { "version": "5.1.21", "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.21.tgz", "integrity": "sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==", @@ -6464,15 +5548,20 @@ } } }, - "node_modules/@inquirer/rawlist": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.1.11.tgz", - "integrity": "sha512-+LLQB8XGr3I5LZN/GuAHo+GpDJegQwuPARLChlMICNdwW7OwV2izlCSCxN6cqpL0sMXmbKbFcItJgdQq5EBXTw==", + "node_modules/@inquirer/core": { + "version": "10.3.2", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.3.2.tgz", + "integrity": "sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^10.3.2", + "@inquirer/ansi": "^1.0.2", + "@inquirer/figures": "^1.0.15", "@inquirer/type": "^3.0.10", + "cli-width": "^4.1.0", + "mute-stream": "^2.0.0", + "signal-exit": "^4.1.0", + "wrap-ansi": "^6.2.0", "yoctocolors-cjs": "^2.1.3" }, "engines": { @@ -6487,17 +5576,16 @@ } } }, - "node_modules/@inquirer/search": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.2.2.tgz", - "integrity": "sha512-p2bvRfENXCZdWF/U2BXvnSI9h+tuA8iNqtUKb9UWbmLYCRQxd8WkvwWvYn+3NgYaNwdUkHytJMGG4MMLucI1kA==", + "node_modules/@inquirer/editor": { + "version": "4.2.23", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.23.tgz", + "integrity": "sha512-aLSROkEwirotxZ1pBaP8tugXRFCxW94gwrQLxXfrZsKkfjOYC1aRvAZuhpJOb5cu4IBTJdsCigUlf2iCOu4ZDQ==", "dev": true, "license": "MIT", "dependencies": { "@inquirer/core": "^10.3.2", - "@inquirer/figures": "^1.0.15", - "@inquirer/type": "^3.0.10", - "yoctocolors-cjs": "^2.1.3" + "@inquirer/external-editor": "^1.0.3", + "@inquirer/type": "^3.0.10" }, "engines": { "node": ">=18" @@ -6511,16 +5599,14 @@ } } }, - "node_modules/@inquirer/select": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.4.2.tgz", - "integrity": "sha512-l4xMuJo55MAe+N7Qr4rX90vypFwCajSakx59qe/tMaC1aEHWLyw68wF4o0A4SLAY4E0nd+Vt+EyskeDIqu1M6w==", + "node_modules/@inquirer/expand": { + "version": "4.0.23", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.23.tgz", + "integrity": "sha512-nRzdOyFYnpeYTTR2qFwEVmIWypzdAx/sIkCMeTNTcflFOovfqUk+HcFhQQVBftAh9gmGrpFj6QcGEqrDMDOiew==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/ansi": "^1.0.2", "@inquirer/core": "^10.3.2", - "@inquirer/figures": "^1.0.15", "@inquirer/type": "^3.0.10", "yoctocolors-cjs": "^2.1.3" }, @@ -6536,12 +5622,16 @@ } } }, - "node_modules/@inquirer/type": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.10.tgz", - "integrity": "sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==", + "node_modules/@inquirer/external-editor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.3.tgz", + "integrity": "sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==", "dev": true, "license": "MIT", + "dependencies": { + "chardet": "^2.1.1", + "iconv-lite": "^0.7.0" + }, "engines": { "node": ">=18" }, @@ -6554,98 +5644,210 @@ } } }, - "node_modules/@isaacs/balanced-match": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", - "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", + "node_modules/@inquirer/figures": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.15.tgz", + "integrity": "sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==", + "dev": true, "license": "MIT", "engines": { - "node": "20 || >=22" + "node": ">=18" } }, - "node_modules/@isaacs/brace-expansion": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.1.tgz", - "integrity": "sha512-WMz71T1JS624nWj2n2fnYAuPovhv7EUhk69R6i9dsVyzxt5eM3bjwvgk9L+APE1TRscGysAVMANkB0jh0LQZrQ==", + "node_modules/@inquirer/input": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.3.1.tgz", + "integrity": "sha512-kN0pAM4yPrLjJ1XJBjDxyfDduXOuQHrBB8aLDMueuwUGn+vNpF7Gq7TvyVxx8u4SHlFFj4trmj+a2cbpG4Jn1g==", + "dev": true, "license": "MIT", "dependencies": { - "@isaacs/balanced-match": "^4.0.1" + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" }, "engines": { - "node": "20 || >=22" + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "license": "ISC", + "node_modules/@inquirer/number": { + "version": "3.0.23", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.23.tgz", + "integrity": "sha512-5Smv0OK7K0KUzUfYUXDXQc9jrf8OHo4ktlEayFlelCjwMXz0299Y8OrI+lj7i4gCBY15UObk76q0QtxjzFcFcg==", + "dev": true, + "license": "MIT", "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" }, "engines": { - "node": ">=12" + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "node_modules/@inquirer/password": { + "version": "4.0.23", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.23.tgz", + "integrity": "sha512-zREJHjhT5vJBMZX/IUbyI9zVtVfOLiTO66MrF/3GFZYZ7T4YILW5MSkEYHceSii/KtRk+4i3RE7E1CUXA2jHcA==", + "dev": true, "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" + }, "engines": { - "node": ">=12" + "node": ">=18" }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "node_modules/@inquirer/prompts": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.10.1.tgz", + "integrity": "sha512-Dx/y9bCQcXLI5ooQ5KyvA4FTgeo2jYj/7plWfV5Ak5wDPKQZgudKez2ixyfz7tKXzcJciTxqLeK7R9HItwiByg==", + "dev": true, "license": "MIT", + "dependencies": { + "@inquirer/checkbox": "^4.3.2", + "@inquirer/confirm": "^5.1.21", + "@inquirer/editor": "^4.2.23", + "@inquirer/expand": "^4.0.23", + "@inquirer/input": "^4.3.1", + "@inquirer/number": "^3.0.23", + "@inquirer/password": "^4.0.23", + "@inquirer/rawlist": "^4.1.11", + "@inquirer/search": "^3.2.2", + "@inquirer/select": "^4.4.2" + }, "engines": { - "node": ">=12" + "node": ">=18" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "node_modules/@inquirer/rawlist": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.1.11.tgz", + "integrity": "sha512-+LLQB8XGr3I5LZN/GuAHo+GpDJegQwuPARLChlMICNdwW7OwV2izlCSCxN6cqpL0sMXmbKbFcItJgdQq5EBXTw==", + "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" }, "engines": { - "node": ">=12" + "node": ">=18" }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "node_modules/@inquirer/search": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.2.2.tgz", + "integrity": "sha512-p2bvRfENXCZdWF/U2BXvnSI9h+tuA8iNqtUKb9UWbmLYCRQxd8WkvwWvYn+3NgYaNwdUkHytJMGG4MMLucI1kA==", + "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" + "@inquirer/core": "^10.3.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" }, "engines": { - "node": ">=12" + "node": ">=18" }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/select": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.4.2.tgz", + "integrity": "sha512-l4xMuJo55MAe+N7Qr4rX90vypFwCajSakx59qe/tMaC1aEHWLyw68wF4o0A4SLAY4E0nd+Vt+EyskeDIqu1M6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/type": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.10.tgz", + "integrity": "sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@isaacs/cliui": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-9.0.0.tgz", + "integrity": "sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" } }, "node_modules/@isaacs/fs-minipass": { @@ -6665,6 +5867,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, "license": "ISC", "dependencies": { "camelcase": "^5.3.1", @@ -6677,10 +5880,21 @@ "node": ">=8" } }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -6690,6 +5904,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, "license": "MIT", "dependencies": { "locate-path": "^5.0.0", @@ -6699,10 +5914,25 @@ "node": ">=8" } }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, "license": "MIT", "dependencies": { "p-locate": "^4.1.0" @@ -6715,6 +5945,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, "license": "MIT", "dependencies": { "p-try": "^2.0.0" @@ -6730,6 +5961,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, "license": "MIT", "dependencies": { "p-limit": "^2.2.0" @@ -6742,26 +5974,28 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/@jest/console": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", - "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-30.2.0.tgz", + "integrity": "sha512-+O1ifRjkvYIkBqASKWgLxrpEhQAAE7hY77ALLUufSk5717KfOShg6IbqLmdsLMPdUiFvA2kTs0R7YZy+l0IzZQ==", + "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", + "@jest/types": "30.2.0", "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", + "chalk": "^4.1.2", + "jest-message-util": "30.2.0", + "jest-util": "30.2.0", "slash": "^3.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/@jest/core": { @@ -6812,55 +6046,29 @@ } } }, - "node_modules/@jest/core/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/core/node_modules/pretty-format": { + "node_modules/@jest/core/node_modules/@jest/console": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", "dev": true, "license": "MIT", "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/core/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/diff-sequences": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/diff-sequences/-/diff-sequences-30.0.1.tgz", - "integrity": "sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/environment": { + "node_modules/@jest/core/node_modules/@jest/environment": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dev": true, "license": "MIT", "dependencies": { "@jest/fake-timers": "^29.7.0", @@ -6872,10 +6080,11 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/expect": { + "node_modules/@jest/core/node_modules/@jest/expect": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, "license": "MIT", "dependencies": { "expect": "^29.7.0", @@ -6885,22 +6094,11 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/expect-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", - "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", - "license": "MIT", - "dependencies": { - "jest-get-type": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/fake-timers": { + "node_modules/@jest/core/node_modules/@jest/fake-timers": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", @@ -6914,20 +6112,11 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/get-type": { - "version": "30.1.0", - "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.1.0.tgz", - "integrity": "sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/globals": { + "node_modules/@jest/core/node_modules/@jest/globals": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "dev": true, "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", @@ -6939,34 +6128,11 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/pattern": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.0.1.tgz", - "integrity": "sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "jest-regex-util": "30.0.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/pattern/node_modules/jest-regex-util": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-30.0.1.tgz", - "integrity": "sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/reporters": { + "node_modules/@jest/core/node_modules/@jest/reporters": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "dev": true, "license": "MIT", "dependencies": { "@bcoe/v8-coverage": "^0.2.3", @@ -7006,10 +6172,11 @@ } } }, - "node_modules/@jest/schemas": { + "node_modules/@jest/core/node_modules/@jest/schemas": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, "license": "MIT", "dependencies": { "@sinclair/typebox": "^0.27.8" @@ -7018,65 +6185,11 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/snapshot-utils": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/@jest/snapshot-utils/-/snapshot-utils-30.2.0.tgz", - "integrity": "sha512-0aVxM3RH6DaiLcjj/b0KrIBZhSX1373Xci4l3cW5xiUWPctZ59zQ7jj4rqcJQ/Z8JuN/4wX3FpJSa3RssVvCug==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "30.2.0", - "chalk": "^4.1.2", - "graceful-fs": "^4.2.11", - "natural-compare": "^1.4.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/snapshot-utils/node_modules/@jest/schemas": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.5.tgz", - "integrity": "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.34.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/snapshot-utils/node_modules/@jest/types": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.2.0.tgz", - "integrity": "sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/pattern": "30.0.1", - "@jest/schemas": "30.0.5", - "@types/istanbul-lib-coverage": "^2.0.6", - "@types/istanbul-reports": "^3.0.4", - "@types/node": "*", - "@types/yargs": "^17.0.33", - "chalk": "^4.1.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/snapshot-utils/node_modules/@sinclair/typebox": { - "version": "0.34.47", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.47.tgz", - "integrity": "sha512-ZGIBQ+XDvO5JQku9wmwtabcVTHJsgSWAHYtVuM9pBNNR5E88v6Jcj/llpmsjivig5X8A8HHOb4/mbEKPS5EvAw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/source-map": { + "node_modules/@jest/core/node_modules/@jest/source-map": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.18", @@ -7087,10 +6200,11 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/test-result": { + "node_modules/@jest/core/node_modules/@jest/test-result": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, "license": "MIT", "dependencies": { "@jest/console": "^29.7.0", @@ -7102,10 +6216,11 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/test-sequencer": { + "node_modules/@jest/core/node_modules/@jest/test-sequencer": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, "license": "MIT", "dependencies": { "@jest/test-result": "^29.7.0", @@ -7117,10 +6232,11 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/transform": { + "node_modules/@jest/core/node_modules/@jest/transform": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", @@ -7143,16 +6259,11 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/transform/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "license": "MIT" - }, - "node_modules/@jest/types": { + "node_modules/@jest/core/node_modules/@jest/types": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, "license": "MIT", "dependencies": { "@jest/schemas": "^29.6.3", @@ -7166,1373 +6277,1777 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" - } + "node_modules/@jest/core/node_modules/@sinclair/typebox": { + "version": "0.27.10", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.10.tgz", + "integrity": "sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==", + "dev": true, + "license": "MIT" }, - "node_modules/@jridgewell/remapping": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", - "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", - "license": "MIT", + "node_modules/@jest/core/node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" + "@sinonjs/commons": "^3.0.0" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "node_modules/@jest/core/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, "license": "MIT", "engines": { - "node": ">=6.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", - "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", + "node_modules/@jest/core/node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@jsonjoy.com/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", - "license": "Apache-2.0", - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@jsonjoy.com/buffers": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz", - "integrity": "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==", - "license": "Apache-2.0", - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@jsonjoy.com/codegen": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-1.0.0.tgz", - "integrity": "sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==", - "license": "Apache-2.0", "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { - "tslib": "2" + "@babel/core": "^7.8.0" } }, - "node_modules/@jsonjoy.com/json-pack": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.21.0.tgz", - "integrity": "sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg==", - "license": "Apache-2.0", + "node_modules/@jest/core/node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@jsonjoy.com/base64": "^1.1.2", - "@jsonjoy.com/buffers": "^1.2.0", - "@jsonjoy.com/codegen": "^1.0.0", - "@jsonjoy.com/json-pointer": "^1.0.2", - "@jsonjoy.com/util": "^1.9.0", - "hyperdyperid": "^1.2.0", - "thingies": "^2.5.0", - "tree-dump": "^1.1.0" + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" }, "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "node": ">=8" } }, - "node_modules/@jsonjoy.com/json-pointer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-1.0.2.tgz", - "integrity": "sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg==", - "license": "Apache-2.0", + "node_modules/@jest/core/node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@jsonjoy.com/codegen": "^1.0.0", - "@jsonjoy.com/util": "^1.9.0" + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" }, "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "node": ">=8" } }, - "node_modules/@jsonjoy.com/util": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.9.0.tgz", - "integrity": "sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ==", - "license": "Apache-2.0", + "node_modules/@jest/core/node_modules/babel-plugin-istanbul/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@jest/core/node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, + "license": "MIT", "dependencies": { - "@jsonjoy.com/buffers": "^1.0.0", - "@jsonjoy.com/codegen": "^1.0.0" + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" }, "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", - "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@listr2/prompt-adapter-inquirer": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@listr2/prompt-adapter-inquirer/-/prompt-adapter-inquirer-3.0.5.tgz", - "integrity": "sha512-WELs+hj6xcilkloBXYf9XXK8tYEnKsgLj01Xl5ONUJpKjmT5hGVUzNUS5tooUxs7pGMrw+jFD/41WpqW4V3LDA==", + "node_modules/@jest/core/node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/type": "^3.0.8" + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" }, "engines": { - "node": ">=20.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { - "@inquirer/prompts": ">= 3 < 8", - "listr2": "9.0.5" + "@babel/core": "^7.0.0" } }, - "node_modules/@lmdb/lmdb-darwin-arm64": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.4.2.tgz", - "integrity": "sha512-NK80WwDoODyPaSazKbzd3NEJ3ygePrkERilZshxBViBARNz21rmediktGHExoj9n5t9+ChlgLlxecdFKLCuCKg==", - "cpu": [ - "arm64" - ], + "node_modules/@jest/core/node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@lmdb/lmdb-darwin-x64": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.4.2.tgz", - "integrity": "sha512-zevaowQNmrp3U7Fz1s9pls5aIgpKRsKb3dZWDINtLiozh3jZI9fBrI19lYYBxqdyiIyNdlyiidPnwPShj4aK+w==", - "cpu": [ - "x64" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } ], - "dev": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] + "engines": { + "node": ">=8" + } }, - "node_modules/@lmdb/lmdb-linux-arm": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.4.2.tgz", - "integrity": "sha512-OmHCULY17rkx/RoCoXlzU7LyR8xqrksgdYWwtYa14l/sseezZ8seKWXcogHcjulBddER5NnEFV4L/Jtr2nyxeg==", - "cpu": [ - "arm" - ], + "node_modules/@jest/core/node_modules/cjs-module-lexer": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", + "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "license": "MIT" }, - "node_modules/@lmdb/lmdb-linux-arm64": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.4.2.tgz", - "integrity": "sha512-ZBEfbNZdkneebvZs98Lq30jMY8V9IJzckVeigGivV7nTHJc+89Ctomp1kAIWKlwIG0ovCDrFI448GzFPORANYg==", - "cpu": [ - "arm64" - ], + "node_modules/@jest/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "license": "MIT" }, - "node_modules/@lmdb/lmdb-linux-x64": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.4.2.tgz", - "integrity": "sha512-vL9nM17C77lohPYE4YaAQvfZCSVJSryE4fXdi8M7uWPBnU+9DJabgKVAeyDb84ZM2vcFseoBE4/AagVtJeRE7g==", - "cpu": [ - "x64" - ], + "node_modules/@jest/core/node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "license": "BSD-3-Clause", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } }, - "node_modules/@lmdb/lmdb-win32-arm64": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-arm64/-/lmdb-win32-arm64-3.4.2.tgz", - "integrity": "sha512-SXWjdBfNDze4ZPeLtYIzsIeDJDJ/SdsA0pEXcUBayUIMO0FQBHfVZZyHXQjjHr4cvOAzANBgIiqaXRwfMhzmLw==", - "cpu": [ - "arm64" - ], + "node_modules/@jest/core/node_modules/jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ] + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, - "node_modules/@lmdb/lmdb-win32-x64": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.4.2.tgz", - "integrity": "sha512-IY+r3bxKW6Q6sIPiMC0L533DEfRJSXibjSI3Ft/w9Q8KQBNqEIvUFXt+09wV8S5BRk0a8uSF19YWxuRwEfI90g==", - "cpu": [ - "x64" - ], + "node_modules/@jest/core/node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@mdx-js/mdx": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.1.1.tgz", - "integrity": "sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==", - "license": "MIT", "dependencies": { - "@types/estree": "^1.0.0", - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdx": "^2.0.0", - "acorn": "^8.0.0", - "collapse-white-space": "^2.0.0", - "devlop": "^1.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "estree-util-scope": "^1.0.0", - "estree-walker": "^3.0.0", - "hast-util-to-jsx-runtime": "^2.0.0", - "markdown-extensions": "^2.0.0", - "recma-build-jsx": "^1.0.0", - "recma-jsx": "^1.0.0", - "recma-stringify": "^1.0.0", - "rehype-recma": "^1.0.0", - "remark-mdx": "^3.0.0", - "remark-parse": "^11.0.0", - "remark-rehype": "^11.0.0", - "source-map": "^0.7.0", - "unified": "^11.0.0", - "unist-util-position-from-estree": "^2.0.0", - "unist-util-stringify-position": "^4.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0" + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } } }, - "node_modules/@mdx-js/mdx/node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "node_modules/@jest/core/node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "dev": true, "license": "MIT", "dependencies": { - "@types/estree": "^1.0.0" + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@microsoft/api-extractor": { - "version": "7.56.3", - "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.56.3.tgz", - "integrity": "sha512-fRqok4aRNq5GpgGBv2fKlSSKbirPKTJ75vQefthB5x9dwt4Zz+AezUzdc1p/AG4wUBIgmhjcEwn/Rj+N4Wh4Mw==", + "node_modules/@jest/core/node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", "dev": true, "license": "MIT", "dependencies": { - "@microsoft/api-extractor-model": "7.32.2", - "@microsoft/tsdoc": "~0.16.0", - "@microsoft/tsdoc-config": "~0.18.0", - "@rushstack/node-core-library": "5.19.1", - "@rushstack/rig-package": "0.6.0", - "@rushstack/terminal": "0.21.0", - "@rushstack/ts-command-line": "5.2.0", - "diff": "~8.0.2", - "lodash": "~4.17.23", - "minimatch": "10.1.2", - "resolve": "~1.22.1", - "semver": "~7.5.4", - "source-map": "~0.6.1", - "typescript": "5.8.2" + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" }, - "bin": { - "api-extractor": "bin/api-extractor" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@microsoft/api-extractor-model": { - "version": "7.32.2", - "resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.32.2.tgz", - "integrity": "sha512-Ussc25rAalc+4JJs9HNQE7TuO9y6jpYQX9nWD1DhqUzYPBr3Lr7O9intf+ZY8kD5HnIqeIRJX7ccCT0QyBy2Ww==", + "node_modules/@jest/core/node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", "dev": true, "license": "MIT", "dependencies": { - "@microsoft/tsdoc": "~0.16.0", - "@microsoft/tsdoc-config": "~0.18.0", - "@rushstack/node-core-library": "5.19.1" + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@microsoft/api-extractor/node_modules/diff": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.3.tgz", - "integrity": "sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==", + "node_modules/@jest/core/node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, "engines": { - "node": ">=0.3.1" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" } }, - "node_modules/@microsoft/api-extractor/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/@jest/core/node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { - "node": ">=10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@microsoft/api-extractor/node_modules/minimatch": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.2.tgz", - "integrity": "sha512-fu656aJ0n2kcXwsnwnv9g24tkU5uSmOlTjd6WyyaKm2Z+h1qmY6bAjrcaIxF/BslFqbZ8UBtbJi7KgQOZD2PTw==", + "node_modules/@jest/core/node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, - "license": "BlueOak-1.0.0", + "license": "MIT", "dependencies": { - "@isaacs/brace-expansion": "^5.0.1" + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" }, "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@microsoft/api-extractor/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "node_modules/@jest/core/node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" }, "engines": { - "node": ">=10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@microsoft/api-extractor/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/@jest/core/node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@microsoft/api-extractor/node_modules/typescript": { - "version": "5.8.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz", - "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==", + "node_modules/@jest/core/node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" }, "engines": { - "node": ">=14.17" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@microsoft/api-extractor/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, - "node_modules/@microsoft/tsdoc": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.16.0.tgz", - "integrity": "sha512-xgAyonlVVS+q7Vc7qLW0UrJU7rSFcETRWsqdXZtjzRU8dF+6CkozTK4V4y1LwOX7j8r/vHphjDeMeGI4tNGeGA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@microsoft/tsdoc-config": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.18.0.tgz", - "integrity": "sha512-8N/vClYyfOH+l4fLkkr9+myAoR6M7akc8ntBJ4DJdWH2b09uVfr71+LTMpNyG19fNqWDg8KEDZhx5wxuqHyGjw==", + "node_modules/@jest/core/node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", "dev": true, "license": "MIT", "dependencies": { - "@microsoft/tsdoc": "0.16.0", - "ajv": "~8.12.0", - "jju": "~1.4.0", - "resolve": "~1.22.2" + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@microsoft/tsdoc-config/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "node_modules/@jest/core/node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", "dev": true, "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@modelcontextprotocol/sdk": { - "version": "1.26.0", - "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.26.0.tgz", - "integrity": "sha512-Y5RmPncpiDtTXDbLKswIJzTqu2hyBKxTNsgKqKclDbhIgg1wgtf1fRuvxgTnRfcnxtvvgbIEcqUOzZrJ6iSReg==", + "node_modules/@jest/core/node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", "dev": true, "license": "MIT", "dependencies": { - "@hono/node-server": "^1.19.9", - "ajv": "^8.17.1", - "ajv-formats": "^3.0.1", - "content-type": "^1.0.5", - "cors": "^2.8.5", - "cross-spawn": "^7.0.5", - "eventsource": "^3.0.2", - "eventsource-parser": "^3.0.0", - "express": "^5.2.1", - "express-rate-limit": "^8.2.1", - "hono": "^4.11.4", - "jose": "^6.1.3", - "json-schema-typed": "^8.0.2", - "pkce-challenge": "^5.0.0", - "raw-body": "^3.0.0", - "zod": "^3.25 || ^4.0", - "zod-to-json-schema": "^3.25.1" + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" }, "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@cfworker/json-schema": "^4.1.1", - "zod": "^3.25 || ^4.0" - }, - "peerDependenciesMeta": { - "@cfworker/json-schema": { - "optional": true - }, - "zod": { - "optional": false - } + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@module-federation/bridge-react-webpack-plugin": { - "version": "0.21.6", - "resolved": "https://registry.npmjs.org/@module-federation/bridge-react-webpack-plugin/-/bridge-react-webpack-plugin-0.21.6.tgz", - "integrity": "sha512-lJMmdhD4VKVkeg8RHb+Jwe6Ou9zKVgjtb1inEURDG/sSS2ksdZA8pVKLYbRPRbdmjr193Y8gJfqFbI2dqoyc/g==", + "node_modules/@jest/core/node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/sdk": "0.21.6", - "@types/semver": "7.5.8", - "semver": "7.6.3" - } - }, - "node_modules/@module-federation/bridge-react-webpack-plugin/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" }, "engines": { - "node": ">=10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@module-federation/cli": { - "version": "0.21.6", - "resolved": "https://registry.npmjs.org/@module-federation/cli/-/cli-0.21.6.tgz", - "integrity": "sha512-qNojnlc8pTyKtK7ww3i/ujLrgWwgXqnD5DcDPsjADVIpu7STaoaVQ0G5GJ7WWS/ajXw6EyIAAGW/AMFh4XUxsQ==", + "node_modules/@jest/core/node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/dts-plugin": "0.21.6", - "@module-federation/sdk": "0.21.6", - "chalk": "3.0.0", - "commander": "11.1.0", - "jiti": "2.4.2" - }, - "bin": { - "mf": "bin/mf.js" + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" }, "engines": { - "node": ">=16.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@module-federation/cli/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "node_modules/@jest/core/node_modules/jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@module-federation/data-prefetch": { - "version": "0.21.6", - "resolved": "https://registry.npmjs.org/@module-federation/data-prefetch/-/data-prefetch-0.21.6.tgz", - "integrity": "sha512-8HD7ZhtWZ9vl6i3wA7M8cEeCRdtvxt09SbMTfqIPm+5eb/V4ijb8zGTYSRhNDb5RCB+BAixaPiZOWKXJ63/rVw==", + "node_modules/@jest/core/node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/runtime": "0.21.6", - "@module-federation/sdk": "0.21.6", - "fs-extra": "9.1.0" + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@module-federation/dts-plugin": { - "version": "0.21.6", - "resolved": "https://registry.npmjs.org/@module-federation/dts-plugin/-/dts-plugin-0.21.6.tgz", - "integrity": "sha512-YIsDk8/7QZIWn0I1TAYULniMsbyi2LgKTi9OInzVmZkwMC6644x/ratTWBOUDbdY1Co+feNkoYeot1qIWv2L7w==", + "node_modules/@jest/core/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/error-codes": "0.21.6", - "@module-federation/managers": "0.21.6", - "@module-federation/sdk": "0.21.6", - "@module-federation/third-party-dts-extractor": "0.21.6", - "adm-zip": "^0.5.10", - "ansi-colors": "^4.1.3", - "axios": "^1.12.0", - "chalk": "3.0.0", - "fs-extra": "9.1.0", - "isomorphic-ws": "5.0.0", - "koa": "3.0.3", - "lodash.clonedeepwith": "4.5.0", - "log4js": "6.9.1", - "node-schedule": "2.1.1", - "rambda": "^9.1.0", - "ws": "8.18.0" + "yocto-queue": "^0.1.0" }, - "peerDependencies": { - "typescript": "^4.9.0 || ^5.0.0", - "vue-tsc": ">=1.0.24" + "engines": { + "node": ">=10" }, - "peerDependenciesMeta": { - "vue-tsc": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@module-federation/dts-plugin/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "node_modules/@jest/core/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=8" + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/@module-federation/enhanced": { - "version": "0.21.6", - "resolved": "https://registry.npmjs.org/@module-federation/enhanced/-/enhanced-0.21.6.tgz", - "integrity": "sha512-8PFQxtmXc6ukBC4CqGIoc96M2Ly9WVwCPu4Ffvt+K/SB6rGbeFeZoYAwREV1zGNMJ5v5ly6+AHIEOBxNuSnzSg==", + "node_modules/@jest/core/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/bridge-react-webpack-plugin": "0.21.6", - "@module-federation/cli": "0.21.6", - "@module-federation/data-prefetch": "0.21.6", - "@module-federation/dts-plugin": "0.21.6", - "@module-federation/error-codes": "0.21.6", - "@module-federation/inject-external-runtime-core-plugin": "0.21.6", - "@module-federation/managers": "0.21.6", - "@module-federation/manifest": "0.21.6", - "@module-federation/rspack": "0.21.6", - "@module-federation/runtime-tools": "0.21.6", - "@module-federation/sdk": "0.21.6", - "btoa": "^1.2.1", - "schema-utils": "^4.3.0", - "upath": "2.0.1" - }, - "bin": { - "mf": "bin/mf.js" - }, - "peerDependencies": { - "typescript": "^4.9.0 || ^5.0.0", - "vue-tsc": ">=1.0.24", - "webpack": "^5.0.0" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - }, - "vue-tsc": { - "optional": true + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core/node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" }, - "webpack": { - "optional": true + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" } - } + ], + "license": "MIT" }, - "node_modules/@module-federation/error-codes": { - "version": "0.21.6", - "resolved": "https://registry.npmjs.org/@module-federation/error-codes/-/error-codes-0.21.6.tgz", - "integrity": "sha512-MLJUCQ05KnoVl8xd6xs9a5g2/8U+eWmVxg7xiBMeR0+7OjdWUbHwcwgVFatRIwSZvFgKHfWEiI7wsU1q1XbTRQ==", + "node_modules/@jest/core/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "dev": true, "license": "MIT" }, - "node_modules/@module-federation/inject-external-runtime-core-plugin": { - "version": "0.21.6", - "resolved": "https://registry.npmjs.org/@module-federation/inject-external-runtime-core-plugin/-/inject-external-runtime-core-plugin-0.21.6.tgz", - "integrity": "sha512-DJQne7NQ988AVi3QB8byn12FkNb+C2lBeU1NRf8/WbL0gmHsr6kW8hiEJCm8LYaURwtsQqtsEV7i+8+51qjSmQ==", + "node_modules/@jest/core/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true, - "license": "MIT", - "peerDependencies": { - "@module-federation/runtime-tools": "0.21.6" + "license": "ISC" + }, + "node_modules/@jest/core/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@module-federation/managers": { - "version": "0.21.6", - "resolved": "https://registry.npmjs.org/@module-federation/managers/-/managers-0.21.6.tgz", - "integrity": "sha512-BeV6m2/7kF5MDVz9JJI5T8h8lMosnXkH2bOxxFewcra7ZjvDOgQu7WIio0mgk5l1zjNPvnEVKhnhrenEdcCiWg==", + "node_modules/@jest/core/node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/sdk": "0.21.6", - "find-pkg": "2.0.0", - "fs-extra": "9.1.0" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "node_modules/@module-federation/manifest": { - "version": "0.21.6", - "resolved": "https://registry.npmjs.org/@module-federation/manifest/-/manifest-0.21.6.tgz", - "integrity": "sha512-yg93+I1qjRs5B5hOSvjbjmIoI2z3th8/yst9sfwvx4UDOG1acsE3HHMyPN0GdoIGwplC/KAnU5NmUz4tREUTGQ==", + "node_modules/@jest/core/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/dts-plugin": "0.21.6", - "@module-federation/managers": "0.21.6", - "@module-federation/sdk": "0.21.6", - "chalk": "3.0.0", - "find-pkg": "2.0.0" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/@module-federation/manifest/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "node_modules/@jest/core/node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@jest/core/node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@jest/diff-sequences": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/diff-sequences/-/diff-sequences-30.0.1.tgz", + "integrity": "sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/environment": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.2.0.tgz", + "integrity": "sha512-/QPTL7OBJQ5ac09UDRa3EQes4gt1FTEG/8jZ/4v5IVzx+Cv7dLxlVIvfvSVRiiX2drWyXeBjkMSR8hvOWSog5g==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@jest/fake-timers": "30.2.0", + "@jest/types": "30.2.0", + "@types/node": "*", + "jest-mock": "30.2.0" }, "engines": { - "node": ">=8" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@module-federation/node": { - "version": "2.7.26", - "resolved": "https://registry.npmjs.org/@module-federation/node/-/node-2.7.26.tgz", - "integrity": "sha512-C7aIABSxbZKOvVDMIivmV9Q/aOVh9xpUv+y+nwSWuQr9v2pgmMzVK3rxWoeusmkpaENia8h5AWNpYjcrMi+O9g==", + "node_modules/@jest/environment-jsdom-abstract": { + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/@jest/environment-jsdom-abstract/-/environment-jsdom-abstract-30.3.0.tgz", + "integrity": "sha512-0hNFs5N6We3DMCwobzI0ydhkY10sT1tZSC0AAiy+0g2Dt/qEWgrcV5BrMxPczhe41cxW4qm6X+jqZaUdpZIajA==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/enhanced": "0.22.0", - "@module-federation/runtime": "0.22.0", - "@module-federation/sdk": "0.22.0", - "btoa": "1.2.1", - "encoding": "^0.1.13", - "node-fetch": "2.7.0" + "@jest/environment": "30.3.0", + "@jest/fake-timers": "30.3.0", + "@jest/types": "30.3.0", + "@types/jsdom": "^21.1.7", + "@types/node": "*", + "jest-mock": "30.3.0", + "jest-util": "30.3.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" }, "peerDependencies": { - "react": "^16||^17||^18||^19", - "react-dom": "^16||^17||^18||^19", - "webpack": "^5.40.0" + "canvas": "^3.0.0", + "jsdom": "*" }, "peerDependenciesMeta": { - "next": { - "optional": true - }, - "react": { - "optional": true - }, - "react-dom": { + "canvas": { "optional": true } } }, - "node_modules/@module-federation/node/node_modules/@module-federation/bridge-react-webpack-plugin": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/@module-federation/bridge-react-webpack-plugin/-/bridge-react-webpack-plugin-0.22.0.tgz", - "integrity": "sha512-OzMBBbUhOMbDVX/wkVDxaOshgyUdxv+kRQDtxl1/ipV5GXTjs1tpS4NHtDwiJi0qKeG0AvnvGCrPu7bjMOcAVw==", + "node_modules/@jest/environment-jsdom-abstract/node_modules/@jest/environment": { + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.3.0.tgz", + "integrity": "sha512-SlLSF4Be735yQXyh2+mctBOzNDx5s5uLv88/j8Qn1wH679PDcwy67+YdADn8NJnGjzlXtN62asGH/T4vWOkfaw==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/sdk": "0.22.0", - "@types/semver": "7.5.8", - "semver": "7.6.3" + "@jest/fake-timers": "30.3.0", + "@jest/types": "30.3.0", + "@types/node": "*", + "jest-mock": "30.3.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@module-federation/node/node_modules/@module-federation/cli": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/@module-federation/cli/-/cli-0.22.0.tgz", - "integrity": "sha512-kdeDg6HuOqJYKtPeoupWQg6wLZT7B+AwMDwMjwhcKHxKEmKFPImbJLymBWEgmKTktZKh1ERtEOplwFt9u5iEBA==", + "node_modules/@jest/environment-jsdom-abstract/node_modules/@jest/fake-timers": { + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.3.0.tgz", + "integrity": "sha512-WUQDs8SOP9URStX1DzhD425CqbN/HxUYCTwVrT8sTVBfMvFqYt/s61EK5T05qnHu0po6RitXIvP9otZxYDzTGQ==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/dts-plugin": "0.22.0", - "@module-federation/sdk": "0.22.0", - "chalk": "3.0.0", - "commander": "11.1.0", - "jiti": "2.4.2" - }, - "bin": { - "mf": "bin/mf.js" + "@jest/types": "30.3.0", + "@sinonjs/fake-timers": "^15.0.0", + "@types/node": "*", + "jest-message-util": "30.3.0", + "jest-mock": "30.3.0", + "jest-util": "30.3.0" }, "engines": { - "node": ">=16.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@module-federation/node/node_modules/@module-federation/data-prefetch": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/@module-federation/data-prefetch/-/data-prefetch-0.22.0.tgz", - "integrity": "sha512-NESR/5Wcn9unPY18oQSSXlbXTnMbUFwqqvSZnpJt5vBb/8QlcJEiPnxERZqKhKrIS6GTD8KneHPRCOQsP6Xcqw==", + "node_modules/@jest/environment-jsdom-abstract/node_modules/@jest/types": { + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz", + "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/runtime": "0.22.0", - "@module-federation/sdk": "0.22.0", - "fs-extra": "9.1.0" + "@jest/pattern": "30.0.1", + "@jest/schemas": "30.0.5", + "@types/istanbul-lib-coverage": "^2.0.6", + "@types/istanbul-reports": "^3.0.4", + "@types/node": "*", + "@types/yargs": "^17.0.33", + "chalk": "^4.1.2" }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@module-federation/node/node_modules/@module-federation/dts-plugin": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/@module-federation/dts-plugin/-/dts-plugin-0.22.0.tgz", - "integrity": "sha512-lj5YtUZz0moaT1XziM0OyizE0mIhMa8W65RUiX/+UZ4iNK/KMs4e/CGpfhEt2Lj9+j6KYSzI2+676d+73j/kag==", + "node_modules/@jest/environment-jsdom-abstract/node_modules/@sinonjs/fake-timers": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-15.1.1.tgz", + "integrity": "sha512-cO5W33JgAPbOh07tvZjUOJ7oWhtaqGHiZw+11DPbyqh2kHTBc3eF/CjJDeQ4205RLQsX6rxCuYOroFQwl7JDRw==", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "dependencies": { - "@module-federation/error-codes": "0.22.0", - "@module-federation/managers": "0.22.0", - "@module-federation/sdk": "0.22.0", - "@module-federation/third-party-dts-extractor": "0.22.0", - "adm-zip": "^0.5.10", - "ansi-colors": "^4.1.3", - "axios": "^1.12.0", - "chalk": "3.0.0", - "fs-extra": "9.1.0", - "isomorphic-ws": "5.0.0", - "koa": "3.0.3", - "lodash.clonedeepwith": "4.5.0", - "log4js": "6.9.1", - "node-schedule": "2.1.1", - "rambda": "^9.1.0", - "ws": "8.18.0" + "@sinonjs/commons": "^3.0.1" + } + }, + "node_modules/@jest/environment-jsdom-abstract/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" }, - "peerDependencies": { - "typescript": "^4.9.0 || ^5.0.0", - "vue-tsc": ">=1.0.24" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/environment-jsdom-abstract/node_modules/jest-message-util": { + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.3.0.tgz", + "integrity": "sha512-Z/j4Bo+4ySJ+JPJN3b2Qbl9hDq3VrXmnjjGEWD/x0BCXeOXPTV1iZYYzl2X8c1MaCOL+ewMyNBcm88sboE6YWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@jest/types": "30.3.0", + "@types/stack-utils": "^2.0.3", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "picomatch": "^4.0.3", + "pretty-format": "30.3.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.6" }, - "peerDependenciesMeta": { - "vue-tsc": { - "optional": true - } + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@module-federation/node/node_modules/@module-federation/enhanced": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/@module-federation/enhanced/-/enhanced-0.22.0.tgz", - "integrity": "sha512-OysyO6xbhpP+CeOEDp2v6HyFcVT5wWAdQrfga3jhlFUAdIR7nZZ2albysnF2CGn/xyU050Ss74ttgy7GiKi5fQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@module-federation/bridge-react-webpack-plugin": "0.22.0", - "@module-federation/cli": "0.22.0", - "@module-federation/data-prefetch": "0.22.0", - "@module-federation/dts-plugin": "0.22.0", - "@module-federation/error-codes": "0.22.0", - "@module-federation/inject-external-runtime-core-plugin": "0.22.0", - "@module-federation/managers": "0.22.0", - "@module-federation/manifest": "0.22.0", - "@module-federation/rspack": "0.22.0", - "@module-federation/runtime-tools": "0.22.0", - "@module-federation/sdk": "0.22.0", - "btoa": "^1.2.1", - "schema-utils": "^4.3.0", - "upath": "2.0.1" + "node_modules/@jest/environment-jsdom-abstract/node_modules/jest-mock": { + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.3.0.tgz", + "integrity": "sha512-OTzICK8CpE+t4ndhKrwlIdbM6Pn8j00lvmSmq5ejiO+KxukbLjgOflKWMn3KE34EZdQm5RqTuKj+5RIEniYhog==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.3.0", + "@types/node": "*", + "jest-util": "30.3.0" }, - "bin": { - "mf": "bin/mf.js" + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/environment-jsdom-abstract/node_modules/jest-util": { + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.3.0.tgz", + "integrity": "sha512-/jZDa00a3Sz7rdyu55NLrQCIrbyIkbBxareejQI315f/i8HjYN+ZWsDLLpoQSiUIEIyZF/R8fDg3BmB8AtHttg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.3.0", + "@types/node": "*", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "graceful-fs": "^4.2.11", + "picomatch": "^4.0.3" }, - "peerDependencies": { - "typescript": "^4.9.0 || ^5.0.0", - "vue-tsc": ">=1.0.24", - "webpack": "^5.0.0" + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/environment-jsdom-abstract/node_modules/pretty-format": { + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.3.0.tgz", + "integrity": "sha512-oG4T3wCbfeuvljnyAzhBvpN45E8iOTXCU/TD3zXW80HA3dQ4ahdqMkWGiPWZvjpQwlbyHrPTWUAqUzGzv4l1JQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "30.0.5", + "ansi-styles": "^5.2.0", + "react-is": "^18.3.1" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - }, - "vue-tsc": { - "optional": true - }, - "webpack": { - "optional": true - } + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@module-federation/node/node_modules/@module-federation/error-codes": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/@module-federation/error-codes/-/error-codes-0.22.0.tgz", - "integrity": "sha512-xF9SjnEy7vTdx+xekjPCV5cIHOGCkdn3pIxo9vU7gEZMIw0SvAEdsy6Uh17xaCpm8V0FWvR0SZoK9Ik6jGOaug==", + "node_modules/@jest/environment-jsdom-abstract/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "dev": true, "license": "MIT" }, - "node_modules/@module-federation/node/node_modules/@module-federation/inject-external-runtime-core-plugin": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/@module-federation/inject-external-runtime-core-plugin/-/inject-external-runtime-core-plugin-0.22.0.tgz", - "integrity": "sha512-zeN6XiLV9l0tAsZzQxHLEQM28sWiijmIBp9CiIDc4iqk2f/kgCSqiBWTiNcS4sZODzupPkktaWsC5+5eWk0ENQ==", + "node_modules/@jest/expect": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-30.2.0.tgz", + "integrity": "sha512-V9yxQK5erfzx99Sf+7LbhBwNWEZ9eZay8qQ9+JSC0TrMR1pMDHLMY+BnVPacWU6Jamrh252/IKo4F1Xn/zfiqA==", "dev": true, "license": "MIT", - "peerDependencies": { - "@module-federation/runtime-tools": "0.22.0" + "dependencies": { + "expect": "30.2.0", + "jest-snapshot": "30.2.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@module-federation/node/node_modules/@module-federation/managers": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/@module-federation/managers/-/managers-0.22.0.tgz", - "integrity": "sha512-Ptv8gEUihPBeoQEpsKq3GZUEB4y/hqG83mKw5NrKpXMIfcoF6SZjcknXz5LuN7NF3xMi1XHYU74z/nKzr+izew==", + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/sdk": "0.22.0", - "find-pkg": "2.0.0", - "fs-extra": "9.1.0" + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@module-federation/node/node_modules/@module-federation/manifest": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/@module-federation/manifest/-/manifest-0.22.0.tgz", - "integrity": "sha512-Exv+frMkRGKDs3KKXeBBKcHvL7nNTk5Yt2ftEvxCUIRPC16Ebvy6RcQvFFvbvmOhuM/If6j6E/aZu5Z9oau6xw==", + "node_modules/@jest/expect/node_modules/@jest/expect-utils": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.2.0.tgz", + "integrity": "sha512-1JnRfhqpD8HGpOmQp180Fo9Zt69zNtC+9lR+kT7NVL05tNXIi+QC8Csz7lfidMoVLPD3FnOtcmp0CEFnxExGEA==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/dts-plugin": "0.22.0", - "@module-federation/managers": "0.22.0", - "@module-federation/sdk": "0.22.0", - "chalk": "3.0.0", - "find-pkg": "2.0.0" + "@jest/get-type": "30.1.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@module-federation/node/node_modules/@module-federation/rspack": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/@module-federation/rspack/-/rspack-0.22.0.tgz", - "integrity": "sha512-PvDlFxzCbufArZvt6wSLsJNm20hdDsz/4X04YAxAZfp/dTECZghZsebLcR7nHOzOwR2gCX8vv+gB3r+5MheobA==", + "node_modules/@jest/expect/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "license": "MIT", - "dependencies": { - "@module-federation/bridge-react-webpack-plugin": "0.22.0", - "@module-federation/dts-plugin": "0.22.0", - "@module-federation/inject-external-runtime-core-plugin": "0.22.0", - "@module-federation/managers": "0.22.0", - "@module-federation/manifest": "0.22.0", - "@module-federation/runtime-tools": "0.22.0", - "@module-federation/sdk": "0.22.0", - "btoa": "1.2.1" + "engines": { + "node": ">=10" }, - "peerDependencies": { - "@rspack/core": ">=0.7", - "typescript": "^4.9.0 || ^5.0.0", - "vue-tsc": ">=1.0.24" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/expect/node_modules/expect": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-30.2.0.tgz", + "integrity": "sha512-u/feCi0GPsI+988gU2FLcsHyAHTU0MX1Wg68NhAnN7z/+C5wqG+CY8J53N9ioe8RXgaoz0nBR/TYMf3AycUuPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/expect-utils": "30.2.0", + "@jest/get-type": "30.1.0", + "jest-matcher-utils": "30.2.0", + "jest-message-util": "30.2.0", + "jest-mock": "30.2.0", + "jest-util": "30.2.0" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - }, - "vue-tsc": { - "optional": true - } + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@module-federation/node/node_modules/@module-federation/runtime": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/@module-federation/runtime/-/runtime-0.22.0.tgz", - "integrity": "sha512-38g5iPju2tPC3KHMPxRKmy4k4onNp6ypFPS1eKGsNLUkXgHsPMBFqAjDw96iEcjri91BrahG4XcdyKi97xZzlA==", + "node_modules/@jest/expect/node_modules/jest-diff": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.2.0.tgz", + "integrity": "sha512-dQHFo3Pt4/NLlG5z4PxZ/3yZTZ1C7s9hveiOj+GCN+uT109NC2QgsoVZsVOAvbJ3RgKkvyLGXZV9+piDpWbm6A==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/error-codes": "0.22.0", - "@module-federation/runtime-core": "0.22.0", - "@module-federation/sdk": "0.22.0" + "@jest/diff-sequences": "30.0.1", + "@jest/get-type": "30.1.0", + "chalk": "^4.1.2", + "pretty-format": "30.2.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@module-federation/node/node_modules/@module-federation/runtime-core": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/@module-federation/runtime-core/-/runtime-core-0.22.0.tgz", - "integrity": "sha512-GR1TcD6/s7zqItfhC87zAp30PqzvceoeDGYTgF3Vx2TXvsfDrhP6Qw9T4vudDQL3uJRne6t7CzdT29YyVxlgIA==", + "node_modules/@jest/expect/node_modules/jest-matcher-utils": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.2.0.tgz", + "integrity": "sha512-dQ94Nq4dbzmUWkQ0ANAWS9tBRfqCrn0bV9AMYdOi/MHW726xn7eQmMeRTpX2ViC00bpNaWXq+7o4lIQ3AX13Hg==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/error-codes": "0.22.0", - "@module-federation/sdk": "0.22.0" + "@jest/get-type": "30.1.0", + "chalk": "^4.1.2", + "jest-diff": "30.2.0", + "pretty-format": "30.2.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@module-federation/node/node_modules/@module-federation/runtime-tools": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/@module-federation/runtime-tools/-/runtime-tools-0.22.0.tgz", - "integrity": "sha512-4ScUJ/aUfEernb+4PbLdhM/c60VHl698Gn1gY21m9vyC1Ucn69fPCA1y2EwcCB7IItseRMoNhdcWQnzt/OPCNA==", + "node_modules/@jest/expect/node_modules/pretty-format": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.2.0.tgz", + "integrity": "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/runtime": "0.22.0", - "@module-federation/webpack-bundler-runtime": "0.22.0" + "@jest/schemas": "30.0.5", + "ansi-styles": "^5.2.0", + "react-is": "^18.3.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@module-federation/node/node_modules/@module-federation/sdk": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/@module-federation/sdk/-/sdk-0.22.0.tgz", - "integrity": "sha512-x4aFNBKn2KVQRuNVC5A7SnrSCSqyfIWmm1DvubjbO9iKFe7ith5niw8dqSFBekYBg2Fwy+eMg4sEFNVvCAdo6g==", + "node_modules/@jest/expect/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "dev": true, "license": "MIT" }, - "node_modules/@module-federation/node/node_modules/@module-federation/third-party-dts-extractor": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/@module-federation/third-party-dts-extractor/-/third-party-dts-extractor-0.22.0.tgz", - "integrity": "sha512-3y2DZdeEjArNKDqA1Ds32Q6A5RATcsmywCXyQaWcfaScprpmzfEWiDkeD/nzoA/0+4ePY8OEinJ4hLtoMNLbLQ==", + "node_modules/@jest/fake-timers": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.2.0.tgz", + "integrity": "sha512-HI3tRLjRxAbBy0VO8dqqm7Hb2mIa8d5bg/NJkyQcOk7V118ObQML8RC5luTF/Zsg4474a+gDvhce7eTnP4GhYw==", "dev": true, "license": "MIT", "dependencies": { - "find-pkg": "2.0.0", - "fs-extra": "9.1.0", - "resolve": "1.22.8" + "@jest/types": "30.2.0", + "@sinonjs/fake-timers": "^13.0.0", + "@types/node": "*", + "jest-message-util": "30.2.0", + "jest-mock": "30.2.0", + "jest-util": "30.2.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@module-federation/node/node_modules/@module-federation/webpack-bundler-runtime": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/@module-federation/webpack-bundler-runtime/-/webpack-bundler-runtime-0.22.0.tgz", - "integrity": "sha512-aM8gCqXu+/4wBmJtVeMeeMN5guw3chf+2i6HajKtQv7SJfxV/f4IyNQJUeUQu9HfiAZHjqtMV5Lvq/Lvh8LdyA==", + "node_modules/@jest/get-type": { + "version": "30.1.0", + "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.1.0.tgz", + "integrity": "sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==", "dev": true, "license": "MIT", - "dependencies": { - "@module-federation/runtime": "0.22.0", - "@module-federation/sdk": "0.22.0" + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@module-federation/node/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "node_modules/@jest/globals": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-30.2.0.tgz", + "integrity": "sha512-b63wmnKPaK+6ZZfpYhz9K61oybvbI1aMcIs80++JI1O1rR1vaxHUCNqo3ITu6NU0d4V34yZFoHMn/uoKr/Rwfw==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@jest/environment": "30.2.0", + "@jest/expect": "30.2.0", + "@jest/types": "30.2.0", + "jest-mock": "30.2.0" }, "engines": { - "node": ">=8" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@module-federation/node/node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "node_modules/@jest/pattern": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.0.1.tgz", + "integrity": "sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==", "dev": true, "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/@module-federation/node/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "@types/node": "*", + "jest-regex-util": "30.0.1" }, "engines": { - "node": ">=10" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@module-federation/rspack": { - "version": "0.21.6", - "resolved": "https://registry.npmjs.org/@module-federation/rspack/-/rspack-0.21.6.tgz", - "integrity": "sha512-SB+z1P+Bqe3R6geZje9dp0xpspX6uash+zO77nodmUy8PTTBlkL7800Cq2FMLKUdoTZHJTBVXf0K6CqQWSlItg==", + "node_modules/@jest/reporters": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-30.2.0.tgz", + "integrity": "sha512-DRyW6baWPqKMa9CzeiBjHwjd8XeAyco2Vt8XbcLFjiwCOEKOvy82GJ8QQnJE9ofsxCMPjH4MfH8fCWIHHDKpAQ==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/bridge-react-webpack-plugin": "0.21.6", - "@module-federation/dts-plugin": "0.21.6", - "@module-federation/inject-external-runtime-core-plugin": "0.21.6", - "@module-federation/managers": "0.21.6", - "@module-federation/manifest": "0.21.6", - "@module-federation/runtime-tools": "0.21.6", - "@module-federation/sdk": "0.21.6", - "btoa": "1.2.1" + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "30.2.0", + "@jest/test-result": "30.2.0", + "@jest/transform": "30.2.0", + "@jest/types": "30.2.0", + "@jridgewell/trace-mapping": "^0.3.25", + "@types/node": "*", + "chalk": "^4.1.2", + "collect-v8-coverage": "^1.0.2", + "exit-x": "^0.2.2", + "glob": "^10.3.10", + "graceful-fs": "^4.2.11", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^5.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "30.2.0", + "jest-util": "30.2.0", + "jest-worker": "30.2.0", + "slash": "^3.0.0", + "string-length": "^4.0.2", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" }, "peerDependencies": { - "@rspack/core": ">=0.7", - "typescript": "^4.9.0 || ^5.0.0", - "vue-tsc": ">=1.0.24" + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "peerDependenciesMeta": { - "typescript": { - "optional": true - }, - "vue-tsc": { + "node-notifier": { "optional": true } } }, - "node_modules/@module-federation/runtime": { - "version": "0.21.6", - "resolved": "https://registry.npmjs.org/@module-federation/runtime/-/runtime-0.21.6.tgz", - "integrity": "sha512-+caXwaQqwTNh+CQqyb4mZmXq7iEemRDrTZQGD+zyeH454JAYnJ3s/3oDFizdH6245pk+NiqDyOOkHzzFQorKhQ==", + "node_modules/@jest/schemas": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.5.tgz", + "integrity": "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/error-codes": "0.21.6", - "@module-federation/runtime-core": "0.21.6", - "@module-federation/sdk": "0.21.6" + "@sinclair/typebox": "^0.34.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@module-federation/runtime-core": { - "version": "0.21.6", - "resolved": "https://registry.npmjs.org/@module-federation/runtime-core/-/runtime-core-0.21.6.tgz", - "integrity": "sha512-5Hd1Y5qp5lU/aTiK66lidMlM/4ji2gr3EXAtJdreJzkY+bKcI5+21GRcliZ4RAkICmvdxQU5PHPL71XmNc7Lsw==", + "node_modules/@jest/snapshot-utils": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/snapshot-utils/-/snapshot-utils-30.2.0.tgz", + "integrity": "sha512-0aVxM3RH6DaiLcjj/b0KrIBZhSX1373Xci4l3cW5xiUWPctZ59zQ7jj4rqcJQ/Z8JuN/4wX3FpJSa3RssVvCug==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/error-codes": "0.21.6", - "@module-federation/sdk": "0.21.6" + "@jest/types": "30.2.0", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "natural-compare": "^1.4.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@module-federation/runtime-tools": { - "version": "0.21.6", - "resolved": "https://registry.npmjs.org/@module-federation/runtime-tools/-/runtime-tools-0.21.6.tgz", - "integrity": "sha512-fnP+ZOZTFeBGiTAnxve+axGmiYn2D60h86nUISXjXClK3LUY1krUfPgf6MaD4YDJ4i51OGXZWPekeMe16pkd8Q==", + "node_modules/@jest/source-map": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-30.0.1.tgz", + "integrity": "sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/runtime": "0.21.6", - "@module-federation/webpack-bundler-runtime": "0.21.6" + "@jridgewell/trace-mapping": "^0.3.25", + "callsites": "^3.1.0", + "graceful-fs": "^4.2.11" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@module-federation/sdk": { - "version": "0.21.6", - "resolved": "https://registry.npmjs.org/@module-federation/sdk/-/sdk-0.21.6.tgz", - "integrity": "sha512-x6hARETb8iqHVhEsQBysuWpznNZViUh84qV2yE7AD+g7uIzHKiYdoWqj10posbo5XKf/147qgWDzKZoKoEP2dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@module-federation/third-party-dts-extractor": { - "version": "0.21.6", - "resolved": "https://registry.npmjs.org/@module-federation/third-party-dts-extractor/-/third-party-dts-extractor-0.21.6.tgz", - "integrity": "sha512-Il6x4hLsvCgZNk1DFwuMBNeoxD1BsZ5AW2BI/nUgu0k5FiAvfcz1OFawRFEHtaM/kVrCsymMOW7pCao90DaX3A==", + "node_modules/@jest/test-result": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-30.2.0.tgz", + "integrity": "sha512-RF+Z+0CCHkARz5HT9mcQCBulb1wgCP3FBvl9VFokMX27acKphwyQsNuWH3c+ojd1LeWBLoTYoxF0zm6S/66mjg==", "dev": true, "license": "MIT", "dependencies": { - "find-pkg": "2.0.0", - "fs-extra": "9.1.0", - "resolve": "1.22.8" + "@jest/console": "30.2.0", + "@jest/types": "30.2.0", + "@types/istanbul-lib-coverage": "^2.0.6", + "collect-v8-coverage": "^1.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@module-federation/third-party-dts-extractor/node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "node_modules/@jest/test-sequencer": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-30.2.0.tgz", + "integrity": "sha512-wXKgU/lk8fKXMu/l5Hog1R61bL4q5GCdT6OJvdAFz1P+QrpoFuLU68eoKuVc4RbrTtNnTL5FByhWdLgOPSph+Q==", "dev": true, "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" + "@jest/test-result": "30.2.0", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.2.0", + "slash": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@module-federation/webpack-bundler-runtime": { - "version": "0.21.6", - "resolved": "https://registry.npmjs.org/@module-federation/webpack-bundler-runtime/-/webpack-bundler-runtime-0.21.6.tgz", - "integrity": "sha512-7zIp3LrcWbhGuFDTUMLJ2FJvcwjlddqhWGxi/MW3ur1a+HaO8v5tF2nl+vElKmbG1DFLU/52l3PElVcWf/YcsQ==", + "node_modules/@jest/transform": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-30.2.0.tgz", + "integrity": "sha512-XsauDV82o5qXbhalKxD7p4TZYYdwcaEXC77PPD2HixEFF+6YGppjrAAQurTl2ECWcEomHBMMNS9AH3kcCFx8jA==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/runtime": "0.21.6", - "@module-federation/sdk": "0.21.6" + "@babel/core": "^7.27.4", + "@jest/types": "30.2.0", + "@jridgewell/trace-mapping": "^0.3.25", + "babel-plugin-istanbul": "^7.0.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": "30.2.0", + "jest-regex-util": "30.0.1", + "jest-util": "30.2.0", + "micromatch": "^4.0.8", + "pirates": "^4.0.7", + "slash": "^3.0.0", + "write-file-atomic": "^5.0.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.3.tgz", - "integrity": "sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw==", - "cpu": [ - "arm64" - ], + "node_modules/@jest/transform/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] + "license": "MIT" }, - "node_modules/@msgpackr-extract/msgpackr-extract-darwin-x64": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.3.tgz", - "integrity": "sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw==", - "cpu": [ - "x64" - ], + "node_modules/@jest/types": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.2.0.tgz", + "integrity": "sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] + "dependencies": { + "@jest/pattern": "30.0.1", + "@jest/schemas": "30.0.5", + "@types/istanbul-lib-coverage": "^2.0.6", + "@types/istanbul-reports": "^3.0.4", + "@types/node": "*", + "@types/yargs": "^17.0.33", + "chalk": "^4.1.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } }, - "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.3.tgz", - "integrity": "sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw==", - "cpu": [ - "arm" - ], - "dev": true, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } }, - "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm64": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.3.tgz", - "integrity": "sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg==", - "cpu": [ - "arm64" - ], - "dev": true, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } }, - "node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.3.tgz", - "integrity": "sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "engines": { + "node": ">=6.0.0" + } }, - "node_modules/@msgpackr-extract/msgpackr-extract-win32-x64": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.3.tgz", - "integrity": "sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ==", - "cpu": [ - "x64" - ], + "node_modules/@jridgewell/source-map": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ] + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } }, - "node_modules/@napi-rs/nice": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice/-/nice-1.1.1.tgz", - "integrity": "sha512-xJIPs+bYuc9ASBl+cvGsKbGrJmS6fAKaSZCnT0lhahT5rhA2VVy9/EcIgd2JhtEuFOJNx7UHNn/qiTPTY4nrQw==", - "dev": true, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "license": "MIT", - "optional": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@jsonjoy.com/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", + "license": "Apache-2.0", "engines": { - "node": ">= 10" + "node": ">=10.0" }, "funding": { "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" + "url": "https://github.com/sponsors/streamich" }, - "optionalDependencies": { - "@napi-rs/nice-android-arm-eabi": "1.1.1", - "@napi-rs/nice-android-arm64": "1.1.1", - "@napi-rs/nice-darwin-arm64": "1.1.1", - "@napi-rs/nice-darwin-x64": "1.1.1", - "@napi-rs/nice-freebsd-x64": "1.1.1", - "@napi-rs/nice-linux-arm-gnueabihf": "1.1.1", - "@napi-rs/nice-linux-arm64-gnu": "1.1.1", - "@napi-rs/nice-linux-arm64-musl": "1.1.1", - "@napi-rs/nice-linux-ppc64-gnu": "1.1.1", - "@napi-rs/nice-linux-riscv64-gnu": "1.1.1", - "@napi-rs/nice-linux-s390x-gnu": "1.1.1", - "@napi-rs/nice-linux-x64-gnu": "1.1.1", - "@napi-rs/nice-linux-x64-musl": "1.1.1", - "@napi-rs/nice-openharmony-arm64": "1.1.1", - "@napi-rs/nice-win32-arm64-msvc": "1.1.1", - "@napi-rs/nice-win32-ia32-msvc": "1.1.1", - "@napi-rs/nice-win32-x64-msvc": "1.1.1" + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@napi-rs/nice-android-arm-eabi": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm-eabi/-/nice-android-arm-eabi-1.1.1.tgz", - "integrity": "sha512-kjirL3N6TnRPv5iuHw36wnucNqXAO46dzK9oPb0wj076R5Xm8PfUVA9nAFB5ZNMmfJQJVKACAPd/Z2KYMppthw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], + "node_modules/@jsonjoy.com/buffers": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-17.67.0.tgz", + "integrity": "sha512-tfExRpYxBvi32vPs9ZHaTjSP4fHAfzSmcahOfNxtvGHcyJel+aibkPlGeBB+7AoC6hL7lXIE++8okecBxx7lcw==", + "license": "Apache-2.0", "engines": { - "node": ">= 10" + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, - "node_modules/@napi-rs/nice-android-arm64": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm64/-/nice-android-arm64-1.1.1.tgz", - "integrity": "sha512-blG0i7dXgbInN5urONoUCNf+DUEAavRffrO7fZSeoRMJc5qD+BJeNcpr54msPF6qfDD6kzs9AQJogZvT2KD5nw==", - "cpu": [ - "arm64" - ], + "node_modules/@jsonjoy.com/codegen": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-1.0.0.tgz", + "integrity": "sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-core": { + "version": "4.56.11", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-core/-/fs-core-4.56.11.tgz", + "integrity": "sha512-wThHjzUp01ImIjfCwhs+UnFkeGPFAymwLEkOtenHewaKe2pTP12p6r1UuwikA9NEvNf9Vlck92r8fb8n/MWM5w==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-node-builtins": "4.56.11", + "@jsonjoy.com/fs-node-utils": "4.56.11", + "thingies": "^2.5.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-fsa": { + "version": "4.56.11", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-fsa/-/fs-fsa-4.56.11.tgz", + "integrity": "sha512-ZYlF3XbMayyp97xEN8ZvYutU99PCHjM64mMZvnCseXkCJXJDVLAwlF8Q/7q/xiWQRsv3pQBj1WXHd9eEyYcaCQ==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-core": "4.56.11", + "@jsonjoy.com/fs-node-builtins": "4.56.11", + "@jsonjoy.com/fs-node-utils": "4.56.11", + "thingies": "^2.5.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-node": { + "version": "4.56.11", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node/-/fs-node-4.56.11.tgz", + "integrity": "sha512-D65YrnP6wRuZyEWoSFnBJSr5zARVpVBGctnhie4rCsMuGXNzX7IHKaOt85/Aj7SSoG1N2+/xlNjWmkLvZ2H3Tg==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-core": "4.56.11", + "@jsonjoy.com/fs-node-builtins": "4.56.11", + "@jsonjoy.com/fs-node-utils": "4.56.11", + "@jsonjoy.com/fs-print": "4.56.11", + "@jsonjoy.com/fs-snapshot": "4.56.11", + "glob-to-regex.js": "^1.0.0", + "thingies": "^2.5.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-node-builtins": { + "version": "4.56.11", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.56.11.tgz", + "integrity": "sha512-CNmt3a0zMCIhniFLXtzPWuUxXFU+U+2VyQiIrgt/rRVeEJNrMQUABaRbVxR0Ouw1LyR9RjaEkPM6nYpED+y43A==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-node-to-fsa": { + "version": "4.56.11", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.56.11.tgz", + "integrity": "sha512-5OzGdvJDgZVo+xXWEYo72u81zpOWlxlbG4d4nL+hSiW+LKlua/dldNgPrpWxtvhgyntmdFQad2UTxFyGjJAGhA==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-fsa": "4.56.11", + "@jsonjoy.com/fs-node-builtins": "4.56.11", + "@jsonjoy.com/fs-node-utils": "4.56.11" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-node-utils": { + "version": "4.56.11", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.56.11.tgz", + "integrity": "sha512-JADOZFDA3wRfsuxkT0+MYc4F9hJO2PYDaY66kRTG6NqGX3+bqmKu66YFYAbII/tEmQWPZeHoClUB23rtQM9UPg==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-node-builtins": "4.56.11" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-print": { + "version": "4.56.11", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-print/-/fs-print-4.56.11.tgz", + "integrity": "sha512-rnaKRgCRIn8JGTjxhS0JPE38YM3Pj/H7SW4/tglhIPbfKEkky7dpPayNKV2qy25SZSL15oFVgH/62dMZ/z7cyA==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-node-utils": "4.56.11", + "tree-dump": "^1.1.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot": { + "version": "4.56.11", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.56.11.tgz", + "integrity": "sha512-IIldPX+cIRQuUol9fQzSS3hqyECxVpYMJQMqdU3dCKZFRzEl1rkIkw4P6y7Oh493sI7YdxZlKr/yWdzEWZ1wGQ==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/buffers": "^17.65.0", + "@jsonjoy.com/fs-node-utils": "4.56.11", + "@jsonjoy.com/json-pack": "^17.65.0", + "@jsonjoy.com/util": "^17.65.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/base64": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-17.67.0.tgz", + "integrity": "sha512-5SEsJGsm15aP8TQGkDfJvz9axgPwAEm98S5DxOuYe8e1EbfajcDmgeXXzccEjh+mLnjqEKrkBdjHWS5vFNwDdw==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/codegen": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-17.67.0.tgz", + "integrity": "sha512-idnkUplROpdBOV0HMcwhsCUS5TRUi9poagdGs70A6S4ux9+/aPuKbh8+UYRTLYQHtXvAdNfQWXDqZEx5k4Dj2Q==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/json-pack": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-17.67.0.tgz", + "integrity": "sha512-t0ejURcGaZsn1ClbJ/3kFqSOjlryd92eQY465IYrezsXmPcfHPE/av4twRSxf6WE+TkZgLY+71vCZbiIiFKA/w==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/base64": "17.67.0", + "@jsonjoy.com/buffers": "17.67.0", + "@jsonjoy.com/codegen": "17.67.0", + "@jsonjoy.com/json-pointer": "17.67.0", + "@jsonjoy.com/util": "17.67.0", + "hyperdyperid": "^1.2.0", + "thingies": "^2.5.0", + "tree-dump": "^1.1.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/json-pointer": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-17.67.0.tgz", + "integrity": "sha512-+iqOFInH+QZGmSuaybBUNdh7yvNrXvqR+h3wjXm0N/3JK1EyyFAeGJvqnmQL61d1ARLlk/wJdFKSL+LHJ1eaUA==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/util": "17.67.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/util": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-17.67.0.tgz", + "integrity": "sha512-6+8xBaz1rLSohlGh68D1pdw3AwDi9xydm8QNlAFkvnavCJYSze+pxoW2VKP8p308jtlMRLs5NTHfPlZLd4w7ew==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/buffers": "17.67.0", + "@jsonjoy.com/codegen": "17.67.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pack": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.21.0.tgz", + "integrity": "sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/base64": "^1.1.2", + "@jsonjoy.com/buffers": "^1.2.0", + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/json-pointer": "^1.0.2", + "@jsonjoy.com/util": "^1.9.0", + "hyperdyperid": "^1.2.0", + "thingies": "^2.5.0", + "tree-dump": "^1.1.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pack/node_modules/@jsonjoy.com/buffers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz", + "integrity": "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pointer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-1.0.2.tgz", + "integrity": "sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/util": "^1.9.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/util": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.9.0.tgz", + "integrity": "sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/buffers": "^1.0.0", + "@jsonjoy.com/codegen": "^1.0.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/util/node_modules/@jsonjoy.com/buffers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz", + "integrity": "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@listr2/prompt-adapter-inquirer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@listr2/prompt-adapter-inquirer/-/prompt-adapter-inquirer-3.0.5.tgz", + "integrity": "sha512-WELs+hj6xcilkloBXYf9XXK8tYEnKsgLj01Xl5ONUJpKjmT5hGVUzNUS5tooUxs7pGMrw+jFD/41WpqW4V3LDA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "android" - ], + "dependencies": { + "@inquirer/type": "^3.0.8" + }, "engines": { - "node": ">= 10" + "node": ">=20.0.0" + }, + "peerDependencies": { + "@inquirer/prompts": ">= 3 < 8", + "listr2": "9.0.5" } }, - "node_modules/@napi-rs/nice-darwin-arm64": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-arm64/-/nice-darwin-arm64-1.1.1.tgz", - "integrity": "sha512-s/E7w45NaLqTGuOjC2p96pct4jRfo61xb9bU1unM/MJ/RFkKlJyJDx7OJI/O0ll/hrfpqKopuAFDV8yo0hfT7A==", + "node_modules/@lmdb/lmdb-darwin-arm64": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.5.1.tgz", + "integrity": "sha512-tpfN4kKrrMpQ+If1l8bhmoNkECJi0iOu6AEdrTJvWVC+32sLxTARX5Rsu579mPImRP9YFWfWgeRQ5oav7zApQQ==", "cpu": [ "arm64" ], @@ -8541,15 +8056,12 @@ "optional": true, "os": [ "darwin" - ], - "engines": { - "node": ">= 10" - } + ] }, - "node_modules/@napi-rs/nice-darwin-x64": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-x64/-/nice-darwin-x64-1.1.1.tgz", - "integrity": "sha512-dGoEBnVpsdcC+oHHmW1LRK5eiyzLwdgNQq3BmZIav+9/5WTZwBYX7r5ZkQC07Nxd3KHOCkgbHSh4wPkH1N1LiQ==", + "node_modules/@lmdb/lmdb-darwin-x64": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.5.1.tgz", + "integrity": "sha512-+a2tTfc3rmWhLAolFUWRgJtpSuu+Fw/yjn4rF406NMxhfjbMuiOUTDRvRlMFV+DzyjkwnokisskHbCWkS3Ly5w==", "cpu": [ "x64" ], @@ -8558,185 +8070,54 @@ "optional": true, "os": [ "darwin" - ], - "engines": { - "node": ">= 10" - } + ] }, - "node_modules/@napi-rs/nice-freebsd-x64": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-freebsd-x64/-/nice-freebsd-x64-1.1.1.tgz", - "integrity": "sha512-kHv4kEHAylMYmlNwcQcDtXjklYp4FCf0b05E+0h6nDHsZ+F0bDe04U/tXNOqrx5CmIAth4vwfkjjUmp4c4JktQ==", + "node_modules/@lmdb/lmdb-linux-arm": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.5.1.tgz", + "integrity": "sha512-0EgcE6reYr8InjD7V37EgXcYrloqpxVPINy3ig1MwDSbl6LF/vXTYRH9OE1Ti1D8YZnB35ZH9aTcdfSb5lql2A==", "cpu": [ - "x64" + "arm" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10" - } + "linux" + ] }, - "node_modules/@napi-rs/nice-linux-arm-gnueabihf": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm-gnueabihf/-/nice-linux-arm-gnueabihf-1.1.1.tgz", - "integrity": "sha512-E1t7K0efyKXZDoZg1LzCOLxgolxV58HCkaEkEvIYQx12ht2pa8hoBo+4OB3qh7e+QiBlp1SRf+voWUZFxyhyqg==", + "node_modules/@lmdb/lmdb-linux-arm64": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.5.1.tgz", + "integrity": "sha512-aoERa5B6ywXdyFeYGQ1gbQpkMkDbEo45qVoXE5QpIRavqjnyPwjOulMkmkypkmsbJ5z4Wi0TBztON8agCTG0Vg==", "cpu": [ - "arm" + "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "linux" - ], - "engines": { - "node": ">= 10" - } + ] }, - "node_modules/@napi-rs/nice-linux-arm64-gnu": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-gnu/-/nice-linux-arm64-gnu-1.1.1.tgz", - "integrity": "sha512-CIKLA12DTIZlmTaaKhQP88R3Xao+gyJxNWEn04wZwC2wmRapNnxCUZkVwggInMJvtVElA+D4ZzOU5sX4jV+SmQ==", + "node_modules/@lmdb/lmdb-linux-x64": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.5.1.tgz", + "integrity": "sha512-SqNDY1+vpji7bh0sFH5wlWyFTOzjbDOl0/kB5RLLYDAFyd/uw3n7wyrmas3rYPpAW7z18lMOi1yKlTPv967E3g==", "cpu": [ - "arm64" + "x64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice-linux-arm64-musl": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-musl/-/nice-linux-arm64-musl-1.1.1.tgz", - "integrity": "sha512-+2Rzdb3nTIYZ0YJF43qf2twhqOCkiSrHx2Pg6DJaCPYhhaxbLcdlV8hCRMHghQ+EtZQWGNcS2xF4KxBhSGeutg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice-linux-ppc64-gnu": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-ppc64-gnu/-/nice-linux-ppc64-gnu-1.1.1.tgz", - "integrity": "sha512-4FS8oc0GeHpwvv4tKciKkw3Y4jKsL7FRhaOeiPei0X9T4Jd619wHNe4xCLmN2EMgZoeGg+Q7GY7BsvwKpL22Tg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice-linux-riscv64-gnu": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-riscv64-gnu/-/nice-linux-riscv64-gnu-1.1.1.tgz", - "integrity": "sha512-HU0nw9uD4FO/oGCCk409tCi5IzIZpH2agE6nN4fqpwVlCn5BOq0MS1dXGjXaG17JaAvrlpV5ZeyZwSon10XOXw==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice-linux-s390x-gnu": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-s390x-gnu/-/nice-linux-s390x-gnu-1.1.1.tgz", - "integrity": "sha512-2YqKJWWl24EwrX0DzCQgPLKQBxYDdBxOHot1KWEq7aY2uYeX+Uvtv4I8xFVVygJDgf6/92h9N3Y43WPx8+PAgQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice-linux-x64-gnu": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-gnu/-/nice-linux-x64-gnu-1.1.1.tgz", - "integrity": "sha512-/gaNz3R92t+dcrfCw/96pDopcmec7oCcAQ3l/M+Zxr82KT4DljD37CpgrnXV+pJC263JkW572pdbP3hP+KjcIg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice-linux-x64-musl": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-musl/-/nice-linux-x64-musl-1.1.1.tgz", - "integrity": "sha512-xScCGnyj/oppsNPMnevsBe3pvNaoK7FGvMjT35riz9YdhB2WtTG47ZlbxtOLpjeO9SqqQ2J2igCmz6IJOD5JYw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice-openharmony-arm64": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-openharmony-arm64/-/nice-openharmony-arm64-1.1.1.tgz", - "integrity": "sha512-6uJPRVwVCLDeoOaNyeiW0gp2kFIM4r7PL2MczdZQHkFi9gVlgm+Vn+V6nTWRcu856mJ2WjYJiumEajfSm7arPQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": ">= 10" - } + ] }, - "node_modules/@napi-rs/nice-win32-arm64-msvc": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-arm64-msvc/-/nice-win32-arm64-msvc-1.1.1.tgz", - "integrity": "sha512-uoTb4eAvM5B2aj/z8j+Nv8OttPf2m+HVx3UjA5jcFxASvNhQriyCQF1OB1lHL43ZhW+VwZlgvjmP5qF3+59atA==", + "node_modules/@lmdb/lmdb-win32-arm64": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-arm64/-/lmdb-win32-arm64-3.5.1.tgz", + "integrity": "sha512-50v0O1Lt37cwrmR9vWZK5hRW0Aw+KEmxJJ75fge/zIYdvNKB/0bSMSVR5Uc2OV9JhosIUyklOmrEvavwNJ8D6w==", "cpu": [ "arm64" ], @@ -8745,32 +8126,12 @@ "optional": true, "os": [ "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice-win32-ia32-msvc": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-ia32-msvc/-/nice-win32-ia32-msvc-1.1.1.tgz", - "integrity": "sha512-CNQqlQT9MwuCsg1Vd/oKXiuH+TcsSPJmlAFc5frFyX/KkOh0UpBLEj7aoY656d5UKZQMQFP7vJNa1DNUNORvug==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } + ] }, - "node_modules/@napi-rs/nice-win32-x64-msvc": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-x64-msvc/-/nice-win32-x64-msvc-1.1.1.tgz", - "integrity": "sha512-vB+4G/jBQCAh0jelMTY3+kgFy00Hlx2f2/1zjMoH821IbplbWZOkLiTYXQkygNTzQJTq5cvwBDgn2ppHD+bglQ==", + "node_modules/@lmdb/lmdb-win32-x64": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.5.1.tgz", + "integrity": "sha512-qwosvPyl+zpUlp3gRb7UcJ3H8S28XHCzkv0Y0EgQToXjQP91ZD67EHSCDmaLjtKhe+GVIW5om1KUpzVLA0l6pg==", "cpu": [ "x64" ], @@ -8779,1907 +8140,1172 @@ "optional": true, "os": [ "win32" - ], - "engines": { - "node": ">= 10" - } + ] }, - "node_modules/@napi-rs/wasm-runtime": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.0.7.tgz", - "integrity": "sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw==", - "dev": true, + "node_modules/@mdx-js/mdx": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.1.1.tgz", + "integrity": "sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==", "license": "MIT", - "optional": true, "dependencies": { - "@emnapi/core": "^1.5.0", - "@emnapi/runtime": "^1.5.0", - "@tybys/wasm-util": "^0.10.1" - } - }, - "node_modules/@ngtools/webpack": { - "version": "20.3.16", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-20.3.16.tgz", - "integrity": "sha512-yXxo0CKkCa9SuP05OskOeFt9l1wirCzh7MhwW1S18Rpi6cyPbV1bc7GEz05+dfi5Ee8Dlbx3sbmdty0xtHvFQw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^20.19.0 || ^22.12.0 || >=24.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" + "@types/estree": "^1.0.0", + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdx": "^2.0.0", + "acorn": "^8.0.0", + "collapse-white-space": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "estree-util-scope": "^1.0.0", + "estree-walker": "^3.0.0", + "hast-util-to-jsx-runtime": "^2.0.0", + "markdown-extensions": "^2.0.0", + "recma-build-jsx": "^1.0.0", + "recma-jsx": "^1.0.0", + "recma-stringify": "^1.0.0", + "rehype-recma": "^1.0.0", + "remark-mdx": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.0.0", + "source-map": "^0.7.0", + "unified": "^11.0.0", + "unist-util-position-from-estree": "^2.0.0", + "unist-util-stringify-position": "^4.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" }, - "peerDependencies": { - "@angular/compiler-cli": "^20.0.0", - "typescript": ">=5.8 <6.0", - "webpack": "^5.54.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "node_modules/@microsoft/api-extractor": { + "version": "7.57.7", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.57.7.tgz", + "integrity": "sha512-kmnmVs32MFWbV5X6BInC1/TfCs7y1ugwxv1xHsAIj/DyUfoe7vtO0alRUgbQa57+yRGHBBjlNcEk33SCAt5/dA==", + "dev": true, "license": "MIT", "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "@microsoft/api-extractor-model": "7.33.4", + "@microsoft/tsdoc": "~0.16.0", + "@microsoft/tsdoc-config": "~0.18.1", + "@rushstack/node-core-library": "5.20.3", + "@rushstack/rig-package": "0.7.2", + "@rushstack/terminal": "0.22.3", + "@rushstack/ts-command-line": "5.3.3", + "diff": "~8.0.2", + "lodash": "~4.17.23", + "minimatch": "10.2.3", + "resolve": "~1.22.1", + "semver": "~7.5.4", + "source-map": "~0.6.1", + "typescript": "5.8.2" }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "license": "MIT", - "engines": { - "node": ">= 8" + "bin": { + "api-extractor": "bin/api-extractor" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "node_modules/@microsoft/api-extractor-model": { + "version": "7.33.4", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.33.4.tgz", + "integrity": "sha512-u1LTaNTikZAQ9uK6KG1Ms7nvNedsnODnspq/gH2dcyETWvH4hVNGNDvRAEutH66kAmxA4/necElqGNs1FggC8w==", + "dev": true, "license": "MIT", "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" + "@microsoft/tsdoc": "~0.16.0", + "@microsoft/tsdoc-config": "~0.18.1", + "@rushstack/node-core-library": "5.20.3" } }, - "node_modules/@npmcli/agent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-4.0.0.tgz", - "integrity": "sha512-kAQTcEN9E8ERLVg5AsGwLNoFb+oEG6engbqAU2P43gD4JEIkNGMHdVQ096FsOAAYpZPB0RSt0zgInKIAS1l5QA==", + "node_modules/@microsoft/api-extractor/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "license": "ISC", "dependencies": { - "agent-base": "^7.1.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.1", - "lru-cache": "^11.2.1", - "socks-proxy-agent": "^8.0.3" + "yallist": "^4.0.0" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=10" } }, - "node_modules/@npmcli/agent/node_modules/lru-cache": { - "version": "11.2.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.5.tgz", - "integrity": "sha512-vFrFJkWtJvJnD5hg+hJvVE8Lh/TcMzKnTgCWmtBipwI5yLX/iX+5UB2tfuyODF5E7k9xEzMdYgGqaSb1c0c5Yw==", + "node_modules/@microsoft/api-extractor/node_modules/minimatch": { + "version": "10.2.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.3.tgz", + "integrity": "sha512-Rwi3pnapEqirPSbWbrZaa6N3nmqq4Xer/2XooiOKyV3q12ML06f7MOuc5DVH8ONZIFhwIYQ3yzPH4nt7iWHaTg==", "dev": true, "license": "BlueOak-1.0.0", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@npmcli/fs": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-5.0.0.tgz", - "integrity": "sha512-7OsC1gNORBEawOa5+j2pXN9vsicaIOH5cPXxoR6fJOmH6/EXpJB2CajXOu1fPRFun2m1lktEFX11+P89hqO/og==", - "dev": true, - "license": "ISC", "dependencies": { - "semver": "^7.3.5" + "brace-expansion": "^5.0.2" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@npmcli/git": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-7.0.1.tgz", - "integrity": "sha512-+XTFxK2jJF/EJJ5SoAzXk3qwIDfvFc5/g+bD274LZ7uY7LE8sTfG6Z8rOanPl2ZEvZWqNvmEdtXC25cE54VcoA==", + "node_modules/@microsoft/api-extractor/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "license": "ISC", "dependencies": { - "@npmcli/promise-spawn": "^9.0.0", - "ini": "^6.0.0", - "lru-cache": "^11.2.1", - "npm-pick-manifest": "^11.0.1", - "proc-log": "^6.0.0", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^6.0.0" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/@npmcli/git/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16" + "node": ">=10" } }, - "node_modules/@npmcli/git/node_modules/lru-cache": { - "version": "11.2.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.5.tgz", - "integrity": "sha512-vFrFJkWtJvJnD5hg+hJvVE8Lh/TcMzKnTgCWmtBipwI5yLX/iX+5UB2tfuyODF5E7k9xEzMdYgGqaSb1c0c5Yw==", + "node_modules/@microsoft/api-extractor/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "license": "BlueOak-1.0.0", + "license": "BSD-3-Clause", "engines": { - "node": "20 || >=22" + "node": ">=0.10.0" } }, - "node_modules/@npmcli/git/node_modules/which": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-6.0.0.tgz", - "integrity": "sha512-f+gEpIKMR9faW/JgAgPK1D7mekkFoqbmiwvNzuhsHetni20QSgzg9Vhn0g2JSJkkfehQnqdUAx7/e15qS1lPxg==", + "node_modules/@microsoft/api-extractor/node_modules/typescript": { + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz", + "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==", "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^3.1.1" - }, + "license": "Apache-2.0", "bin": { - "node-which": "bin/which.js" + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=14.17" } }, - "node_modules/@npmcli/installed-package-contents": { + "node_modules/@microsoft/api-extractor/node_modules/yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-4.0.0.tgz", - "integrity": "sha512-yNyAdkBxB72gtZ4GrwXCM0ZUedo9nIbOMKfGjt6Cu6DXf0p8y1PViZAKDC8q8kv/fufx0WTjRBdSlyrvnP7hmA==", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true, - "license": "ISC", - "dependencies": { - "npm-bundled": "^5.0.0", - "npm-normalize-package-bin": "^5.0.0" - }, - "bin": { - "installed-package-contents": "bin/index.js" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } + "license": "ISC" }, - "node_modules/@npmcli/node-gyp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-5.0.0.tgz", - "integrity": "sha512-uuG5HZFXLfyFKqg8QypsmgLQW7smiRjVc45bqD/ofZZcR/uxEjgQU8qDPv0s9TEeMUiAAU/GC5bR6++UdTirIQ==", + "node_modules/@microsoft/tsdoc": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.16.0.tgz", + "integrity": "sha512-xgAyonlVVS+q7Vc7qLW0UrJU7rSFcETRWsqdXZtjzRU8dF+6CkozTK4V4y1LwOX7j8r/vHphjDeMeGI4tNGeGA==", "dev": true, - "license": "ISC", - "engines": { - "node": "^20.17.0 || >=22.9.0" - } + "license": "MIT" }, - "node_modules/@npmcli/package-json": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-7.0.4.tgz", - "integrity": "sha512-0wInJG3j/K40OJt/33ax47WfWMzZTm6OQxB9cDhTt5huCP2a9g2GnlsxmfN+PulItNPIpPrZ+kfwwUil7eHcZQ==", + "node_modules/@microsoft/tsdoc-config": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.18.1.tgz", + "integrity": "sha512-9brPoVdfN9k9g0dcWkFeA7IH9bbcttzDJlXvkf8b2OBzd5MueR1V2wkKBL0abn0otvmkHJC6aapBOTJDDeMCZg==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "@npmcli/git": "^7.0.0", - "glob": "^13.0.0", - "hosted-git-info": "^9.0.0", - "json-parse-even-better-errors": "^5.0.0", - "proc-log": "^6.0.0", - "semver": "^7.5.3", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" + "@microsoft/tsdoc": "0.16.0", + "ajv": "~8.18.0", + "jju": "~1.4.0", + "resolve": "~1.22.2" } }, - "node_modules/@npmcli/promise-spawn": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-9.0.1.tgz", - "integrity": "sha512-OLUaoqBuyxeTqUvjA3FZFiXUfYC1alp3Sa99gW3EUDz3tZ3CbXDdcZ7qWKBzicrJleIgucoWamWH1saAmH/l2Q==", + "node_modules/@modelcontextprotocol/sdk": { + "version": "1.26.0", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.26.0.tgz", + "integrity": "sha512-Y5RmPncpiDtTXDbLKswIJzTqu2hyBKxTNsgKqKclDbhIgg1wgtf1fRuvxgTnRfcnxtvvgbIEcqUOzZrJ6iSReg==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "which": "^6.0.0" + "@hono/node-server": "^1.19.9", + "ajv": "^8.17.1", + "ajv-formats": "^3.0.1", + "content-type": "^1.0.5", + "cors": "^2.8.5", + "cross-spawn": "^7.0.5", + "eventsource": "^3.0.2", + "eventsource-parser": "^3.0.0", + "express": "^5.2.1", + "express-rate-limit": "^8.2.1", + "hono": "^4.11.4", + "jose": "^6.1.3", + "json-schema-typed": "^8.0.2", + "pkce-challenge": "^5.0.0", + "raw-body": "^3.0.0", + "zod": "^3.25 || ^4.0", + "zod-to-json-schema": "^3.25.1" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=18" + }, + "peerDependencies": { + "@cfworker/json-schema": "^4.1.1", + "zod": "^3.25 || ^4.0" + }, + "peerDependenciesMeta": { + "@cfworker/json-schema": { + "optional": true + }, + "zod": { + "optional": false + } } }, - "node_modules/@npmcli/promise-spawn/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "node_modules/@module-federation/bridge-react-webpack-plugin": { + "version": "0.21.6", + "resolved": "https://registry.npmjs.org/@module-federation/bridge-react-webpack-plugin/-/bridge-react-webpack-plugin-0.21.6.tgz", + "integrity": "sha512-lJMmdhD4VKVkeg8RHb+Jwe6Ou9zKVgjtb1inEURDG/sSS2ksdZA8pVKLYbRPRbdmjr193Y8gJfqFbI2dqoyc/g==", "dev": true, - "license": "ISC", - "engines": { - "node": ">=16" + "license": "MIT", + "dependencies": { + "@module-federation/sdk": "0.21.6", + "@types/semver": "7.5.8", + "semver": "7.6.3" } }, - "node_modules/@npmcli/promise-spawn/node_modules/which": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-6.0.0.tgz", - "integrity": "sha512-f+gEpIKMR9faW/JgAgPK1D7mekkFoqbmiwvNzuhsHetni20QSgzg9Vhn0g2JSJkkfehQnqdUAx7/e15qS1lPxg==", + "node_modules/@module-federation/bridge-react-webpack-plugin/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, "license": "ISC", - "dependencies": { - "isexe": "^3.1.1" - }, "bin": { - "node-which": "bin/which.js" + "semver": "bin/semver.js" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=10" } }, - "node_modules/@npmcli/redact": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-4.0.0.tgz", - "integrity": "sha512-gOBg5YHMfZy+TfHArfVogwgfBeQnKbbGo3pSUyK/gSI0AVu+pEiDVcKlQb0D8Mg1LNRZILZ6XG8I5dJ4KuAd9Q==", + "node_modules/@module-federation/cli": { + "version": "0.21.6", + "resolved": "https://registry.npmjs.org/@module-federation/cli/-/cli-0.21.6.tgz", + "integrity": "sha512-qNojnlc8pTyKtK7ww3i/ujLrgWwgXqnD5DcDPsjADVIpu7STaoaVQ0G5GJ7WWS/ajXw6EyIAAGW/AMFh4XUxsQ==", "dev": true, - "license": "ISC", + "license": "MIT", + "dependencies": { + "@module-federation/dts-plugin": "0.21.6", + "@module-federation/sdk": "0.21.6", + "chalk": "3.0.0", + "commander": "11.1.0", + "jiti": "2.4.2" + }, + "bin": { + "mf": "bin/mf.js" + }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=16.0.0" } }, - "node_modules/@npmcli/run-script": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-10.0.3.tgz", - "integrity": "sha512-ER2N6itRkzWbbtVmZ9WKaWxVlKlOeBFF1/7xx+KA5J1xKa4JjUwBdb6tDpk0v1qA+d+VDwHI9qmLcXSWcmi+Rw==", + "node_modules/@module-federation/cli/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "@npmcli/node-gyp": "^5.0.0", - "@npmcli/package-json": "^7.0.0", - "@npmcli/promise-spawn": "^9.0.0", - "node-gyp": "^12.1.0", - "proc-log": "^6.0.0", - "which": "^6.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=8" } }, - "node_modules/@npmcli/run-script/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "node_modules/@module-federation/cli/node_modules/jiti": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", + "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", "dev": true, - "license": "ISC", - "engines": { - "node": ">=16" + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" } }, - "node_modules/@npmcli/run-script/node_modules/which": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-6.0.0.tgz", - "integrity": "sha512-f+gEpIKMR9faW/JgAgPK1D7mekkFoqbmiwvNzuhsHetni20QSgzg9Vhn0g2JSJkkfehQnqdUAx7/e15qS1lPxg==", + "node_modules/@module-federation/data-prefetch": { + "version": "0.21.6", + "resolved": "https://registry.npmjs.org/@module-federation/data-prefetch/-/data-prefetch-0.21.6.tgz", + "integrity": "sha512-8HD7ZhtWZ9vl6i3wA7M8cEeCRdtvxt09SbMTfqIPm+5eb/V4ijb8zGTYSRhNDb5RCB+BAixaPiZOWKXJ63/rVw==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "isexe": "^3.1.1" + "@module-federation/runtime": "0.21.6", + "@module-federation/sdk": "0.21.6", + "fs-extra": "9.1.0" }, - "bin": { - "node-which": "bin/which.js" + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@module-federation/dts-plugin": { + "version": "0.21.6", + "resolved": "https://registry.npmjs.org/@module-federation/dts-plugin/-/dts-plugin-0.21.6.tgz", + "integrity": "sha512-YIsDk8/7QZIWn0I1TAYULniMsbyi2LgKTi9OInzVmZkwMC6644x/ratTWBOUDbdY1Co+feNkoYeot1qIWv2L7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@module-federation/error-codes": "0.21.6", + "@module-federation/managers": "0.21.6", + "@module-federation/sdk": "0.21.6", + "@module-federation/third-party-dts-extractor": "0.21.6", + "adm-zip": "^0.5.10", + "ansi-colors": "^4.1.3", + "axios": "^1.12.0", + "chalk": "3.0.0", + "fs-extra": "9.1.0", + "isomorphic-ws": "5.0.0", + "koa": "3.0.3", + "lodash.clonedeepwith": "4.5.0", + "log4js": "6.9.1", + "node-schedule": "2.1.1", + "rambda": "^9.1.0", + "ws": "8.18.0" }, - "engines": { - "node": "^20.17.0 || >=22.9.0" + "peerDependencies": { + "typescript": "^4.9.0 || ^5.0.0", + "vue-tsc": ">=1.0.24" + }, + "peerDependenciesMeta": { + "vue-tsc": { + "optional": true + } } }, - "node_modules/@nrwl/devkit": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-19.5.4.tgz", - "integrity": "sha512-T3cRQErKfEyrx9x+xsnY4kg5+vmwPn3UQY1GwsPuuhqYeJn2NAQFzb8gcnZ6mSTqughum3eqp2nNDmpUkWO7tg==", + "node_modules/@module-federation/dts-plugin/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, "license": "MIT", "dependencies": { - "@nx/devkit": "19.5.4" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@nrwl/devkit/node_modules/@nx/devkit": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-19.5.4.tgz", - "integrity": "sha512-0TG2iU0xVRuElLP2aLeRSKUynsC+UgHqE/FJW2IcglHngs2/Duw2A4HDUVVOxztkEQPmp736qkYSwFO0nlOGxg==", + "node_modules/@module-federation/enhanced": { + "version": "0.21.6", + "resolved": "https://registry.npmjs.org/@module-federation/enhanced/-/enhanced-0.21.6.tgz", + "integrity": "sha512-8PFQxtmXc6ukBC4CqGIoc96M2Ly9WVwCPu4Ffvt+K/SB6rGbeFeZoYAwREV1zGNMJ5v5ly6+AHIEOBxNuSnzSg==", + "dev": true, "license": "MIT", "dependencies": { - "@nrwl/devkit": "19.5.4", - "ejs": "^3.1.7", - "enquirer": "~2.3.6", - "ignore": "^5.0.4", - "minimatch": "9.0.3", - "semver": "^7.5.3", - "tmp": "~0.2.1", - "tslib": "^2.3.0", - "yargs-parser": "21.1.1" + "@module-federation/bridge-react-webpack-plugin": "0.21.6", + "@module-federation/cli": "0.21.6", + "@module-federation/data-prefetch": "0.21.6", + "@module-federation/dts-plugin": "0.21.6", + "@module-federation/error-codes": "0.21.6", + "@module-federation/inject-external-runtime-core-plugin": "0.21.6", + "@module-federation/managers": "0.21.6", + "@module-federation/manifest": "0.21.6", + "@module-federation/rspack": "0.21.6", + "@module-federation/runtime-tools": "0.21.6", + "@module-federation/sdk": "0.21.6", + "btoa": "^1.2.1", + "schema-utils": "^4.3.0", + "upath": "2.0.1" + }, + "bin": { + "mf": "bin/mf.js" }, "peerDependencies": { - "nx": ">= 17 <= 20" + "typescript": "^4.9.0 || ^5.0.0", + "vue-tsc": ">=1.0.24", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "vue-tsc": { + "optional": true + }, + "webpack": { + "optional": true + } } }, - "node_modules/@nrwl/jest": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/@nrwl/jest/-/jest-19.5.4.tgz", - "integrity": "sha512-dlu7LBtD4RYavMZ0sBz9NqkYc1YbMYDM/637xDWRdZV17tG7214ATyA0YgVb15UisTkWQpns2tLBXQ/UbkJvFA==", + "node_modules/@module-federation/error-codes": { + "version": "0.21.6", + "resolved": "https://registry.npmjs.org/@module-federation/error-codes/-/error-codes-0.21.6.tgz", + "integrity": "sha512-MLJUCQ05KnoVl8xd6xs9a5g2/8U+eWmVxg7xiBMeR0+7OjdWUbHwcwgVFatRIwSZvFgKHfWEiI7wsU1q1XbTRQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@module-federation/inject-external-runtime-core-plugin": { + "version": "0.21.6", + "resolved": "https://registry.npmjs.org/@module-federation/inject-external-runtime-core-plugin/-/inject-external-runtime-core-plugin-0.21.6.tgz", + "integrity": "sha512-DJQne7NQ988AVi3QB8byn12FkNb+C2lBeU1NRf8/WbL0gmHsr6kW8hiEJCm8LYaURwtsQqtsEV7i+8+51qjSmQ==", + "dev": true, "license": "MIT", - "dependencies": { - "@nx/jest": "19.5.4" + "peerDependencies": { + "@module-federation/runtime-tools": "0.21.6" } }, - "node_modules/@nrwl/jest/node_modules/@napi-rs/wasm-runtime": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.4.tgz", - "integrity": "sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ==", + "node_modules/@module-federation/managers": { + "version": "0.21.6", + "resolved": "https://registry.npmjs.org/@module-federation/managers/-/managers-0.21.6.tgz", + "integrity": "sha512-BeV6m2/7kF5MDVz9JJI5T8h8lMosnXkH2bOxxFewcra7ZjvDOgQu7WIio0mgk5l1zjNPvnEVKhnhrenEdcCiWg==", + "dev": true, "license": "MIT", "dependencies": { - "@emnapi/core": "^1.1.0", - "@emnapi/runtime": "^1.1.0", - "@tybys/wasm-util": "^0.9.0" + "@module-federation/sdk": "0.21.6", + "find-pkg": "2.0.0", + "fs-extra": "9.1.0" } }, - "node_modules/@nrwl/jest/node_modules/@nx/devkit": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-19.5.4.tgz", - "integrity": "sha512-0TG2iU0xVRuElLP2aLeRSKUynsC+UgHqE/FJW2IcglHngs2/Duw2A4HDUVVOxztkEQPmp736qkYSwFO0nlOGxg==", + "node_modules/@module-federation/manifest": { + "version": "0.21.6", + "resolved": "https://registry.npmjs.org/@module-federation/manifest/-/manifest-0.21.6.tgz", + "integrity": "sha512-yg93+I1qjRs5B5hOSvjbjmIoI2z3th8/yst9sfwvx4UDOG1acsE3HHMyPN0GdoIGwplC/KAnU5NmUz4tREUTGQ==", + "dev": true, "license": "MIT", "dependencies": { - "@nrwl/devkit": "19.5.4", - "ejs": "^3.1.7", - "enquirer": "~2.3.6", - "ignore": "^5.0.4", - "minimatch": "9.0.3", - "semver": "^7.5.3", - "tmp": "~0.2.1", - "tslib": "^2.3.0", - "yargs-parser": "21.1.1" - }, - "peerDependencies": { - "nx": ">= 17 <= 20" + "@module-federation/dts-plugin": "0.21.6", + "@module-federation/managers": "0.21.6", + "@module-federation/sdk": "0.21.6", + "chalk": "3.0.0", + "find-pkg": "2.0.0" } }, - "node_modules/@nrwl/jest/node_modules/@nx/jest": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/@nx/jest/-/jest-19.5.4.tgz", - "integrity": "sha512-u05B4j5pfGs+lnRrlpW6s2xECSkBOileroTITUp8xl0/GQnFyBAgFolu2iqH9M/e4+gykzMEsHyK/eZrPUt20A==", + "node_modules/@module-federation/manifest/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, "license": "MIT", "dependencies": { - "@jest/reporters": "^29.4.1", - "@jest/test-result": "^29.4.1", - "@nrwl/jest": "19.5.4", - "@nx/devkit": "19.5.4", - "@nx/js": "19.5.4", - "@phenomnomnominal/tsquery": "~5.0.1", - "chalk": "^4.1.0", - "identity-obj-proxy": "3.0.0", - "jest-config": "^29.4.1", - "jest-resolve": "^29.4.1", - "jest-util": "^29.4.1", - "minimatch": "9.0.3", - "resolve.exports": "1.1.0", - "tslib": "^2.3.0", - "yargs-parser": "21.1.1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@nrwl/jest/node_modules/@nx/js": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/@nx/js/-/js-19.5.4.tgz", - "integrity": "sha512-PkilOEL/JyQrZjTeuPc1Z+LfJ3kr6/Lxas/hzAjENh2mleNjaDgDVP4/2KxvHexP09wu6BARNDdsK1sXMhpPyA==", + "node_modules/@module-federation/node": { + "version": "2.7.33", + "resolved": "https://registry.npmjs.org/@module-federation/node/-/node-2.7.33.tgz", + "integrity": "sha512-ATR5zu7qUb8wasOyIYrbVfoPb00c7wC9F66g/GeSJwV1O9SvhR5r4rsfCSQ3uB8/Y7VCeHz0w8DZSqMRkuoHYQ==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/core": "^7.23.2", - "@babel/plugin-proposal-decorators": "^7.22.7", - "@babel/plugin-transform-class-properties": "^7.22.5", - "@babel/plugin-transform-runtime": "^7.23.2", - "@babel/preset-env": "^7.23.2", - "@babel/preset-typescript": "^7.22.5", - "@babel/runtime": "^7.22.6", - "@nrwl/js": "19.5.4", - "@nx/devkit": "19.5.4", - "@nx/workspace": "19.5.4", - "babel-plugin-const-enum": "^1.0.1", - "babel-plugin-macros": "^2.8.0", - "babel-plugin-transform-typescript-metadata": "^0.3.1", - "chalk": "^4.1.0", - "columnify": "^1.6.0", - "detect-port": "^1.5.1", - "fast-glob": "3.2.7", - "fs-extra": "^11.1.0", - "ignore": "^5.0.4", - "js-tokens": "^4.0.0", - "minimatch": "9.0.3", - "npm-package-arg": "11.0.1", - "npm-run-path": "^4.0.1", - "ora": "5.3.0", - "semver": "^7.5.3", - "source-map-support": "0.5.19", - "ts-node": "10.9.1", - "tsconfig-paths": "^4.1.2", - "tslib": "^2.3.0" + "@module-federation/enhanced": "2.1.0", + "@module-federation/runtime": "2.1.0", + "@module-federation/sdk": "2.1.0", + "btoa": "1.2.1", + "encoding": "^0.1.13", + "node-fetch": "2.7.0" }, "peerDependencies": { - "verdaccio": "^5.0.4" + "webpack": "^5.40.0" }, "peerDependenciesMeta": { - "verdaccio": { + "webpack": { "optional": true } } }, - "node_modules/@nrwl/jest/node_modules/@nx/nx-darwin-arm64": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-19.5.4.tgz", - "integrity": "sha512-s+OmSsYUtECmEKAdzSsYoO9vamx+njiP72eSZusmTh7fCJg+dW3dcifRkUf3h1dcM53hffXcmxKEoWxZMAeuXw==", - "cpu": [ - "arm64" - ], + "node_modules/@module-federation/node/node_modules/@module-federation/bridge-react-webpack-plugin": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@module-federation/bridge-react-webpack-plugin/-/bridge-react-webpack-plugin-2.1.0.tgz", + "integrity": "sha512-c/iiwLwxHDG5i227v2GQ84JRPWHU+d2uhxhZhbxIAQ5uRe6kbtj8O4uPUfEq+iabiqqtUwTLbcpUFFy1bLllYA==", + "dev": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" + "dependencies": { + "@module-federation/sdk": "2.1.0", + "@types/semver": "7.5.8", + "semver": "7.6.3" } }, - "node_modules/@nrwl/jest/node_modules/@nx/nx-darwin-x64": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-19.5.4.tgz", - "integrity": "sha512-GjA6aThF9P7FR3OdNZn4g9c1bJeQMOdQmo2jaBaGmUPnOIZSEWinHkvh5g8vDg+jNwRdHKK84jJWWW0/o73iYQ==", - "cpu": [ - "x64" - ], + "node_modules/@module-federation/node/node_modules/@module-federation/cli": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@module-federation/cli/-/cli-2.1.0.tgz", + "integrity": "sha512-VbMJMEfP1vp/693HbQTMYqMu73Qbv23aJEW9/NhmVkRXkfjBtNfP+mROSFjJVQsWhYyU5vy8kBX7DQS/mvZGBg==", + "dev": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], + "dependencies": { + "@module-federation/dts-plugin": "2.1.0", + "@module-federation/sdk": "2.1.0", + "chalk": "3.0.0", + "commander": "11.1.0", + "jiti": "2.4.2" + }, + "bin": { + "mf": "bin/mf.js" + }, "engines": { - "node": ">= 10" + "node": ">=16.0.0" } }, - "node_modules/@nrwl/jest/node_modules/@nx/nx-freebsd-x64": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-19.5.4.tgz", - "integrity": "sha512-KPVTmg2NpvON3+sh2pNWv2GJow5CL3fX2xBo4cI9D50DDZOD4fB68S2v5q6nLC1QWOwQcC0PLnSpoKaDB0PgQg==", - "cpu": [ - "x64" - ], + "node_modules/@module-federation/node/node_modules/@module-federation/data-prefetch": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@module-federation/data-prefetch/-/data-prefetch-2.1.0.tgz", + "integrity": "sha512-/rHwtZEknzujpCoXChZcy29vD7zNY2b/XfAcOpCkMVfWyQiNhppKxeyjA6FnPEp64NAOLzj2XxaadceXa1eFeA==", + "dev": true, "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10" + "dependencies": { + "@module-federation/runtime": "2.1.0", + "@module-federation/sdk": "2.1.0", + "fs-extra": "9.1.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } } }, - "node_modules/@nrwl/jest/node_modules/@nx/nx-linux-arm-gnueabihf": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-19.5.4.tgz", - "integrity": "sha512-a535HwxVhTS+ngcoFxrsqmggpsKWquubILZhIeY/q+XW6nX61FEb/EqlMkc+aJLHD1LQBGax1W+j7YvTA/66Lw==", - "cpu": [ - "arm" - ], + "node_modules/@module-federation/node/node_modules/@module-federation/dts-plugin": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@module-federation/dts-plugin/-/dts-plugin-2.1.0.tgz", + "integrity": "sha512-2ubWFjF72i3Z5TM2G8hg6SOS6dB0v7PRLXPUMNoVMBxHGxiFG/F0xryZ2UYFwLA2hcNmf60LNP30F1tJhsH4wg==", + "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" + "dependencies": { + "@module-federation/error-codes": "2.1.0", + "@module-federation/managers": "2.1.0", + "@module-federation/sdk": "2.1.0", + "@module-federation/third-party-dts-extractor": "2.1.0", + "adm-zip": "^0.5.10", + "ansi-colors": "^4.1.3", + "axios": "^1.12.0", + "chalk": "3.0.0", + "fs-extra": "9.1.0", + "isomorphic-ws": "5.0.0", + "lodash.clonedeepwith": "4.5.0", + "log4js": "6.9.1", + "node-schedule": "2.1.1", + "rambda": "^9.1.0", + "ws": "8.18.0" + }, + "peerDependencies": { + "typescript": "^4.9.0 || ^5.0.0", + "vue-tsc": ">=1.0.24" + }, + "peerDependenciesMeta": { + "vue-tsc": { + "optional": true + } } }, - "node_modules/@nrwl/jest/node_modules/@nx/nx-linux-arm64-gnu": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-19.5.4.tgz", - "integrity": "sha512-eRu/IoPB68MQeEmfyub+P79eDYvXOyNa706rp0JnDHL5LMw12kPF3MIeqc/v7o6xWakGHCSnTCulcqsl8HXryg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" + "node_modules/@module-federation/node/node_modules/@module-federation/enhanced": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@module-federation/enhanced/-/enhanced-2.1.0.tgz", + "integrity": "sha512-nWCe31vzYLGsT3DYf2cKtxSjUDLWVgErZeDEB8cddtuA3c4npSdKeG8P/bI9GtRph5ybIUFbyAMtuKPPhMahOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@module-federation/bridge-react-webpack-plugin": "2.1.0", + "@module-federation/cli": "2.1.0", + "@module-federation/data-prefetch": "2.1.0", + "@module-federation/dts-plugin": "2.1.0", + "@module-federation/error-codes": "2.1.0", + "@module-federation/inject-external-runtime-core-plugin": "2.1.0", + "@module-federation/managers": "2.1.0", + "@module-federation/manifest": "2.1.0", + "@module-federation/rspack": "2.1.0", + "@module-federation/runtime-tools": "2.1.0", + "@module-federation/sdk": "2.1.0", + "btoa": "^1.2.1", + "schema-utils": "^4.3.0", + "upath": "2.0.1" + }, + "bin": { + "mf": "bin/mf.js" + }, + "peerDependencies": { + "typescript": "^4.9.0 || ^5.0.0", + "vue-tsc": ">=1.0.24", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "vue-tsc": { + "optional": true + }, + "webpack": { + "optional": true + } } }, - "node_modules/@nrwl/jest/node_modules/@nx/nx-linux-arm64-musl": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-19.5.4.tgz", - "integrity": "sha512-r5NNVngNwTe+zpUAAZAgCezDkjc0pi2zrr8VwiaRZsmVjhHtvvsXJgo1ONw5s2HjKoKuTFEa5jKTUlAHkaQ7Kg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } + "node_modules/@module-federation/node/node_modules/@module-federation/error-codes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@module-federation/error-codes/-/error-codes-2.1.0.tgz", + "integrity": "sha512-W+uCmPsFuV+15E1S7JUB1AeUDBFqKjJ2hImXdBNYx7T1CGM6awS/veooXqNoP7iM/kwKjtpTQPIeccWLrq76Mg==", + "dev": true, + "license": "MIT" }, - "node_modules/@nrwl/jest/node_modules/@nx/nx-linux-x64-gnu": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-19.5.4.tgz", - "integrity": "sha512-8TWwjyp/bK2a/CHK2HuC7I8iITC9ytEvfru8/kw1mSyoK4kSDlzkL/1uDl536ULXLWORulfEzaGb61GynVc1vg==", - "cpu": [ - "x64" - ], + "node_modules/@module-federation/node/node_modules/@module-federation/inject-external-runtime-core-plugin": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@module-federation/inject-external-runtime-core-plugin/-/inject-external-runtime-core-plugin-2.1.0.tgz", + "integrity": "sha512-okAVRH/9rROh1fBSKF7Li/Ia8bQhgz38AfVvUSzVu32/HCvdjpfddQtPFFxvmi2oayPgUDY4Qy8RXT1pUlBqpA==", + "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" + "peerDependencies": { + "@module-federation/runtime-tools": "2.1.0" } }, - "node_modules/@nrwl/jest/node_modules/@nx/nx-linux-x64-musl": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-19.5.4.tgz", - "integrity": "sha512-5Pf32iv9nnmSV/oOHd9k/5L45m3BooSj096G/ejAN3BHMr4CZIMhjDcQq9ZX7pAZFchU5zL0+dNClK70QfA7PA==", - "cpu": [ - "x64" - ], + "node_modules/@module-federation/node/node_modules/@module-federation/managers": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@module-federation/managers/-/managers-2.1.0.tgz", + "integrity": "sha512-8HX721e3uuDSURtnOpj6Zy/+Qc4IM5no9hMPODYdGjrYe2YUmXY4/5JScSVnFeYm+zBPw6y9QoufeG9g2jrWBg==", + "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" + "dependencies": { + "@module-federation/sdk": "2.1.0", + "find-pkg": "2.0.0", + "fs-extra": "9.1.0" } }, - "node_modules/@nrwl/jest/node_modules/@nx/nx-win32-arm64-msvc": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-19.5.4.tgz", - "integrity": "sha512-fyKGfde4Pq9r5qQMLIleujq7B5ta86y8RSPUruoN6zaGrNg6waqbpMdZUjjsg9L7PP9RPaMHPMubC21OnQQomQ==", - "cpu": [ - "arm64" - ], + "node_modules/@module-federation/node/node_modules/@module-federation/manifest": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@module-federation/manifest/-/manifest-2.1.0.tgz", + "integrity": "sha512-icIUhMG4FwaFZyBmVjadkdqscNb98iXrITTVeMeAxJcrnZltSBBSEHepfpfeW+tHW+wMmr+lWFnAbSCepV73+A==", + "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" + "dependencies": { + "@module-federation/dts-plugin": "2.1.0", + "@module-federation/managers": "2.1.0", + "@module-federation/sdk": "2.1.0", + "chalk": "3.0.0", + "find-pkg": "2.0.0" } }, - "node_modules/@nrwl/jest/node_modules/@nx/nx-win32-x64-msvc": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-19.5.4.tgz", - "integrity": "sha512-gcAr5zZQKiAxHZ7iUOVeMLf/KIh4EFbF07Q0uSmgGmUJL1u3mZTjeG57V1AMZbTQESGY43rgoymqVYkghc5Jlw==", - "cpu": [ - "x64" - ], + "node_modules/@module-federation/node/node_modules/@module-federation/rspack": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@module-federation/rspack/-/rspack-2.1.0.tgz", + "integrity": "sha512-bojG6yIoWsta7CDdKZ3nrTn1IKT98algUGG5/uyR6nhyOxsu7CJpf17kcLUqTKdBwN9S8qZOjycXGDeEX//N3w==", + "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" + "dependencies": { + "@module-federation/bridge-react-webpack-plugin": "2.1.0", + "@module-federation/dts-plugin": "2.1.0", + "@module-federation/inject-external-runtime-core-plugin": "2.1.0", + "@module-federation/managers": "2.1.0", + "@module-federation/manifest": "2.1.0", + "@module-federation/runtime-tools": "2.1.0", + "@module-federation/sdk": "2.1.0", + "btoa": "1.2.1" + }, + "peerDependencies": { + "@rspack/core": "^0.7.0 || ^1.0.0 || ^2.0.0-0", + "typescript": "^4.9.0 || ^5.0.0", + "vue-tsc": ">=1.0.24" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "vue-tsc": { + "optional": true + } } }, - "node_modules/@nrwl/jest/node_modules/@nx/workspace": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/@nx/workspace/-/workspace-19.5.4.tgz", - "integrity": "sha512-GI3uMJYwPxjPGHA0UuXZtIqf/fgiCDq63Ns7zpdzwaeOvQbtHySFVV6zclXx/3dXjJsBpEiOYNKPGf17jqx6Dw==", + "node_modules/@module-federation/node/node_modules/@module-federation/runtime": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@module-federation/runtime/-/runtime-2.1.0.tgz", + "integrity": "sha512-Cs6H6vAQrLeD7tWW3nI7Z9EdvhcFcbqQdYWJ2SaN1X/eX2YvgHJe8sRxa7K7zlVRV5QZEPKgQCbrUfef+d5xqQ==", + "dev": true, "license": "MIT", "dependencies": { - "@nrwl/workspace": "19.5.4", - "@nx/devkit": "19.5.4", - "chalk": "^4.1.0", - "enquirer": "~2.3.6", - "nx": "19.5.4", - "tslib": "^2.3.0", - "yargs-parser": "21.1.1" + "@module-federation/error-codes": "2.1.0", + "@module-federation/runtime-core": "2.1.0", + "@module-federation/sdk": "2.1.0" } }, - "node_modules/@nrwl/jest/node_modules/@tybys/wasm-util": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.9.0.tgz", - "integrity": "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==", + "node_modules/@module-federation/node/node_modules/@module-federation/runtime-core": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@module-federation/runtime-core/-/runtime-core-2.1.0.tgz", + "integrity": "sha512-9W+wV5s7PTMnSFCmyNvItnOf3VRYSxAPMZQ91bOT4GdwHTO23dfmC57o0SiqXw+ri/XOQVA8gd/p8TDwDDYx6A==", + "dev": true, "license": "MIT", "dependencies": { - "tslib": "^2.4.0" + "@module-federation/error-codes": "2.1.0", + "@module-federation/sdk": "2.1.0" } }, - "node_modules/@nrwl/jest/node_modules/@yarnpkg/parsers": { - "version": "3.0.0-rc.46", - "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz", - "integrity": "sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q==", - "license": "BSD-2-Clause", + "node_modules/@module-federation/node/node_modules/@module-federation/runtime-tools": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@module-federation/runtime-tools/-/runtime-tools-2.1.0.tgz", + "integrity": "sha512-2pOyGOiWIGG0+fE0jBY6pRYVH4+G/gFiP9KnyVDp6zj3leFRdePtlIZDa4O0X1dQcMOMmOORrx+TLRZeygbCnw==", + "dev": true, + "license": "MIT", "dependencies": { - "js-yaml": "^3.10.0", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=14.15.0" + "@module-federation/runtime": "2.1.0", + "@module-federation/webpack-bundler-runtime": "2.1.0" } }, - "node_modules/@nrwl/jest/node_modules/babel-plugin-macros": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz", - "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==", + "node_modules/@module-federation/node/node_modules/@module-federation/sdk": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@module-federation/sdk/-/sdk-2.1.0.tgz", + "integrity": "sha512-HhiSo1X+t2+r5lxU+JBVsJdE2IJZOaD1e0linw+4bLlEy8uIgXhGttF9+9rAnRKWlhn6R8E23ionwBCuSLVeXQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@module-federation/node/node_modules/@module-federation/third-party-dts-extractor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@module-federation/third-party-dts-extractor/-/third-party-dts-extractor-2.1.0.tgz", + "integrity": "sha512-w/hn0J+gw+lEfsXTR3DsbtcxpAndMZJ2PHnQTFn2s5BujNL18FcStaoz0tDpcJAVxi2iQZATJ3bGrlO2t2aDjQ==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/runtime": "^7.7.2", - "cosmiconfig": "^6.0.0", - "resolve": "^1.12.0" + "find-pkg": "2.0.0", + "fs-extra": "9.1.0", + "resolve": "1.22.8" } }, - "node_modules/@nrwl/jest/node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "node_modules/@module-federation/node/node_modules/@module-federation/webpack-bundler-runtime": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@module-federation/webpack-bundler-runtime/-/webpack-bundler-runtime-2.1.0.tgz", + "integrity": "sha512-yThI7cPanvH5eobaeFUsQ51sjllA3nyN/8OxfSdlbeTogLF4K8tkCr6H7QW+alE9lXxOzI2BTCxMV6NJBKWmTQ==", + "dev": true, "license": "MIT", "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" + "@module-federation/runtime": "2.1.0", + "@module-federation/sdk": "2.1.0" } }, - "node_modules/@nrwl/jest/node_modules/cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "node_modules/@module-federation/node/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, "license": "MIT", "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { "node": ">=8" } }, - "node_modules/@nrwl/jest/node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "node_modules/@module-federation/node/node_modules/jiti": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", + "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", + "dev": true, "license": "MIT", - "engines": { - "node": ">=8" + "bin": { + "jiti": "lib/jiti-cli.mjs" } }, - "node_modules/@nrwl/jest/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/@nrwl/jest/node_modules/fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "node_modules/@module-federation/node/node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, "license": "MIT", "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@nrwl/jest/node_modules/fs-extra": { - "version": "11.3.2", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", - "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "bin": { + "resolve": "bin/resolve" }, - "engines": { - "node": ">=14.14" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@nrwl/jest/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/@module-federation/node/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">= 6" + "node": ">=10" } }, - "node_modules/@nrwl/jest/node_modules/hosted-git-info": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", - "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", - "license": "ISC", - "dependencies": { - "lru-cache": "^10.0.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@nrwl/jest/node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@nrwl/jest/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@nrwl/jest/node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@nrwl/jest/node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@nrwl/jest/node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@nrwl/jest/node_modules/jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "license": "MIT" - }, - "node_modules/@nrwl/jest/node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@nrwl/jest/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "license": "ISC" - }, - "node_modules/@nrwl/jest/node_modules/npm-package-arg": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.1.tgz", - "integrity": "sha512-M7s1BD4NxdAvBKUPqqRW957Xwcl/4Zvo8Aj+ANrzvIPzGJZElrH7Z//rSaec2ORcND6FHHLnZeY8qgTpXDMFQQ==", - "license": "ISC", - "dependencies": { - "hosted-git-info": "^7.0.0", - "proc-log": "^3.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@nrwl/jest/node_modules/nx": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/nx/-/nx-19.5.4.tgz", - "integrity": "sha512-zfxIFe+29Na6GKlmPPzQhCjnBv5HoLaT43mYZdHh3BPrVOzWBCXNwxWROG1ZK9IcUepwySWq7NI/H3w8BGPEGg==", - "hasInstallScript": true, + "node_modules/@module-federation/rspack": { + "version": "0.21.6", + "resolved": "https://registry.npmjs.org/@module-federation/rspack/-/rspack-0.21.6.tgz", + "integrity": "sha512-SB+z1P+Bqe3R6geZje9dp0xpspX6uash+zO77nodmUy8PTTBlkL7800Cq2FMLKUdoTZHJTBVXf0K6CqQWSlItg==", + "dev": true, "license": "MIT", "dependencies": { - "@napi-rs/wasm-runtime": "0.2.4", - "@nrwl/tao": "19.5.4", - "@yarnpkg/lockfile": "^1.1.0", - "@yarnpkg/parsers": "3.0.0-rc.46", - "@zkochan/js-yaml": "0.0.7", - "axios": "^1.7.2", - "chalk": "^4.1.0", - "cli-cursor": "3.1.0", - "cli-spinners": "2.6.1", - "cliui": "^8.0.1", - "dotenv": "~16.4.5", - "dotenv-expand": "~11.0.6", - "enquirer": "~2.3.6", - "figures": "3.2.0", - "flat": "^5.0.2", - "front-matter": "^4.0.2", - "fs-extra": "^11.1.0", - "ignore": "^5.0.4", - "jest-diff": "^29.4.1", - "jsonc-parser": "3.2.0", - "lines-and-columns": "~2.0.3", - "minimatch": "9.0.3", - "node-machine-id": "1.1.12", - "npm-run-path": "^4.0.1", - "open": "^8.4.0", - "ora": "5.3.0", - "semver": "^7.5.3", - "string-width": "^4.2.3", - "strong-log-transformer": "^2.1.0", - "tar-stream": "~2.2.0", - "tmp": "~0.2.1", - "tsconfig-paths": "^4.1.2", - "tslib": "^2.3.0", - "yargs": "^17.6.2", - "yargs-parser": "21.1.1" - }, - "bin": { - "nx": "bin/nx.js", - "nx-cloud": "bin/nx-cloud.js" - }, - "optionalDependencies": { - "@nx/nx-darwin-arm64": "19.5.4", - "@nx/nx-darwin-x64": "19.5.4", - "@nx/nx-freebsd-x64": "19.5.4", - "@nx/nx-linux-arm-gnueabihf": "19.5.4", - "@nx/nx-linux-arm64-gnu": "19.5.4", - "@nx/nx-linux-arm64-musl": "19.5.4", - "@nx/nx-linux-x64-gnu": "19.5.4", - "@nx/nx-linux-x64-musl": "19.5.4", - "@nx/nx-win32-arm64-msvc": "19.5.4", - "@nx/nx-win32-x64-msvc": "19.5.4" + "@module-federation/bridge-react-webpack-plugin": "0.21.6", + "@module-federation/dts-plugin": "0.21.6", + "@module-federation/inject-external-runtime-core-plugin": "0.21.6", + "@module-federation/managers": "0.21.6", + "@module-federation/manifest": "0.21.6", + "@module-federation/runtime-tools": "0.21.6", + "@module-federation/sdk": "0.21.6", + "btoa": "1.2.1" }, "peerDependencies": { - "@swc-node/register": "^1.8.0", - "@swc/core": "^1.3.85" + "@rspack/core": ">=0.7", + "typescript": "^4.9.0 || ^5.0.0", + "vue-tsc": ">=1.0.24" }, "peerDependenciesMeta": { - "@swc-node/register": { + "typescript": { "optional": true }, - "@swc/core": { + "vue-tsc": { "optional": true } } }, - "node_modules/@nrwl/jest/node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "license": "MIT", - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@nrwl/jest/node_modules/ora": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.3.0.tgz", - "integrity": "sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==", - "license": "MIT", - "dependencies": { - "bl": "^4.0.3", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "log-symbols": "^4.0.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@nrwl/jest/node_modules/proc-log": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", - "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@nrwl/jest/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "node_modules/@module-federation/runtime": { + "version": "0.21.6", + "resolved": "https://registry.npmjs.org/@module-federation/runtime/-/runtime-0.21.6.tgz", + "integrity": "sha512-+caXwaQqwTNh+CQqyb4mZmXq7iEemRDrTZQGD+zyeH454JAYnJ3s/3oDFizdH6245pk+NiqDyOOkHzzFQorKhQ==", + "dev": true, "license": "MIT", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@nrwl/jest/node_modules/resolve.exports": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", - "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", - "license": "MIT", - "engines": { - "node": ">=10" + "@module-federation/error-codes": "0.21.6", + "@module-federation/runtime-core": "0.21.6", + "@module-federation/sdk": "0.21.6" } }, - "node_modules/@nrwl/jest/node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "node_modules/@module-federation/runtime-core": { + "version": "0.21.6", + "resolved": "https://registry.npmjs.org/@module-federation/runtime-core/-/runtime-core-0.21.6.tgz", + "integrity": "sha512-5Hd1Y5qp5lU/aTiK66lidMlM/4ji2gr3EXAtJdreJzkY+bKcI5+21GRcliZ4RAkICmvdxQU5PHPL71XmNc7Lsw==", + "dev": true, "license": "MIT", "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@nrwl/jest/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "license": "ISC" - }, - "node_modules/@nrwl/jest/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" + "@module-federation/error-codes": "0.21.6", + "@module-federation/sdk": "0.21.6" } }, - "node_modules/@nrwl/jest/node_modules/source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "node_modules/@module-federation/runtime-tools": { + "version": "0.21.6", + "resolved": "https://registry.npmjs.org/@module-federation/runtime-tools/-/runtime-tools-0.21.6.tgz", + "integrity": "sha512-fnP+ZOZTFeBGiTAnxve+axGmiYn2D60h86nUISXjXClK3LUY1krUfPgf6MaD4YDJ4i51OGXZWPekeMe16pkd8Q==", + "dev": true, "license": "MIT", "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "@module-federation/runtime": "0.21.6", + "@module-federation/webpack-bundler-runtime": "0.21.6" } }, - "node_modules/@nrwl/jest/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } + "node_modules/@module-federation/sdk": { + "version": "0.21.6", + "resolved": "https://registry.npmjs.org/@module-federation/sdk/-/sdk-0.21.6.tgz", + "integrity": "sha512-x6hARETb8iqHVhEsQBysuWpznNZViUh84qV2yE7AD+g7uIzHKiYdoWqj10posbo5XKf/147qgWDzKZoKoEP2dw==", + "dev": true, + "license": "MIT" }, - "node_modules/@nrwl/jest/node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "node_modules/@module-federation/third-party-dts-extractor": { + "version": "0.21.6", + "resolved": "https://registry.npmjs.org/@module-federation/third-party-dts-extractor/-/third-party-dts-extractor-0.21.6.tgz", + "integrity": "sha512-Il6x4hLsvCgZNk1DFwuMBNeoxD1BsZ5AW2BI/nUgu0k5FiAvfcz1OFawRFEHtaM/kVrCsymMOW7pCao90DaX3A==", + "dev": true, "license": "MIT", "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@nrwl/jest/node_modules/validate-npm-package-name": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", - "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@nrwl/jest/node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "license": "ISC", - "engines": { - "node": ">= 6" + "find-pkg": "2.0.0", + "fs-extra": "9.1.0", + "resolve": "1.22.8" } }, - "node_modules/@nrwl/jest/node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "node_modules/@module-federation/third-party-dts-extractor/node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, "license": "MIT", "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@nrwl/js": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/@nrwl/js/-/js-19.5.4.tgz", - "integrity": "sha512-LIhqrS8hSvVkZp5Qu0Cu0oiNaZjKPOpx9cDn0YKT+XmELdhjywZjcNBv8m9jE27wMX5ritVoVGiPLGUnpQlQmw==", - "license": "MIT", - "dependencies": { - "@nx/js": "19.5.4" - } - }, - "node_modules/@nrwl/js/node_modules/@napi-rs/wasm-runtime": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.4.tgz", - "integrity": "sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ==", - "license": "MIT", - "dependencies": { - "@emnapi/core": "^1.1.0", - "@emnapi/runtime": "^1.1.0", - "@tybys/wasm-util": "^0.9.0" - } - }, - "node_modules/@nrwl/js/node_modules/@nx/devkit": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-19.5.4.tgz", - "integrity": "sha512-0TG2iU0xVRuElLP2aLeRSKUynsC+UgHqE/FJW2IcglHngs2/Duw2A4HDUVVOxztkEQPmp736qkYSwFO0nlOGxg==", - "license": "MIT", - "dependencies": { - "@nrwl/devkit": "19.5.4", - "ejs": "^3.1.7", - "enquirer": "~2.3.6", - "ignore": "^5.0.4", - "minimatch": "9.0.3", - "semver": "^7.5.3", - "tmp": "~0.2.1", - "tslib": "^2.3.0", - "yargs-parser": "21.1.1" + "bin": { + "resolve": "bin/resolve" }, - "peerDependencies": { - "nx": ">= 17 <= 20" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@nrwl/js/node_modules/@nx/js": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/@nx/js/-/js-19.5.4.tgz", - "integrity": "sha512-PkilOEL/JyQrZjTeuPc1Z+LfJ3kr6/Lxas/hzAjENh2mleNjaDgDVP4/2KxvHexP09wu6BARNDdsK1sXMhpPyA==", + "node_modules/@module-federation/webpack-bundler-runtime": { + "version": "0.21.6", + "resolved": "https://registry.npmjs.org/@module-federation/webpack-bundler-runtime/-/webpack-bundler-runtime-0.21.6.tgz", + "integrity": "sha512-7zIp3LrcWbhGuFDTUMLJ2FJvcwjlddqhWGxi/MW3ur1a+HaO8v5tF2nl+vElKmbG1DFLU/52l3PElVcWf/YcsQ==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/core": "^7.23.2", - "@babel/plugin-proposal-decorators": "^7.22.7", - "@babel/plugin-transform-class-properties": "^7.22.5", - "@babel/plugin-transform-runtime": "^7.23.2", - "@babel/preset-env": "^7.23.2", - "@babel/preset-typescript": "^7.22.5", - "@babel/runtime": "^7.22.6", - "@nrwl/js": "19.5.4", - "@nx/devkit": "19.5.4", - "@nx/workspace": "19.5.4", - "babel-plugin-const-enum": "^1.0.1", - "babel-plugin-macros": "^2.8.0", - "babel-plugin-transform-typescript-metadata": "^0.3.1", - "chalk": "^4.1.0", - "columnify": "^1.6.0", - "detect-port": "^1.5.1", - "fast-glob": "3.2.7", - "fs-extra": "^11.1.0", - "ignore": "^5.0.4", - "js-tokens": "^4.0.0", - "minimatch": "9.0.3", - "npm-package-arg": "11.0.1", - "npm-run-path": "^4.0.1", - "ora": "5.3.0", - "semver": "^7.5.3", - "source-map-support": "0.5.19", - "ts-node": "10.9.1", - "tsconfig-paths": "^4.1.2", - "tslib": "^2.3.0" - }, - "peerDependencies": { - "verdaccio": "^5.0.4" - }, - "peerDependenciesMeta": { - "verdaccio": { - "optional": true - } + "@module-federation/runtime": "0.21.6", + "@module-federation/sdk": "0.21.6" } }, - "node_modules/@nrwl/js/node_modules/@nx/nx-darwin-arm64": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-19.5.4.tgz", - "integrity": "sha512-s+OmSsYUtECmEKAdzSsYoO9vamx+njiP72eSZusmTh7fCJg+dW3dcifRkUf3h1dcM53hffXcmxKEoWxZMAeuXw==", + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.3.tgz", + "integrity": "sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw==", "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ "darwin" - ], - "engines": { - "node": ">= 10" - } + ] }, - "node_modules/@nrwl/js/node_modules/@nx/nx-darwin-x64": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-19.5.4.tgz", - "integrity": "sha512-GjA6aThF9P7FR3OdNZn4g9c1bJeQMOdQmo2jaBaGmUPnOIZSEWinHkvh5g8vDg+jNwRdHKK84jJWWW0/o73iYQ==", + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.3.tgz", + "integrity": "sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw==", "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nrwl/js/node_modules/@nx/nx-freebsd-x64": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-19.5.4.tgz", - "integrity": "sha512-KPVTmg2NpvON3+sh2pNWv2GJow5CL3fX2xBo4cI9D50DDZOD4fB68S2v5q6nLC1QWOwQcC0PLnSpoKaDB0PgQg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10" - } + ] }, - "node_modules/@nrwl/js/node_modules/@nx/nx-linux-arm-gnueabihf": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-19.5.4.tgz", - "integrity": "sha512-a535HwxVhTS+ngcoFxrsqmggpsKWquubILZhIeY/q+XW6nX61FEb/EqlMkc+aJLHD1LQBGax1W+j7YvTA/66Lw==", + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.3.tgz", + "integrity": "sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw==", "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ "linux" - ], - "engines": { - "node": ">= 10" - } + ] }, - "node_modules/@nrwl/js/node_modules/@nx/nx-linux-arm64-gnu": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-19.5.4.tgz", - "integrity": "sha512-eRu/IoPB68MQeEmfyub+P79eDYvXOyNa706rp0JnDHL5LMw12kPF3MIeqc/v7o6xWakGHCSnTCulcqsl8HXryg==", + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.3.tgz", + "integrity": "sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg==", "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ "linux" - ], - "engines": { - "node": ">= 10" - } + ] }, - "node_modules/@nrwl/js/node_modules/@nx/nx-linux-arm64-musl": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-19.5.4.tgz", - "integrity": "sha512-r5NNVngNwTe+zpUAAZAgCezDkjc0pi2zrr8VwiaRZsmVjhHtvvsXJgo1ONw5s2HjKoKuTFEa5jKTUlAHkaQ7Kg==", + "node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.3.tgz", + "integrity": "sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==", "cpu": [ - "arm64" + "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ "linux" - ], - "engines": { - "node": ">= 10" - } + ] }, - "node_modules/@nrwl/js/node_modules/@nx/nx-linux-x64-gnu": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-19.5.4.tgz", - "integrity": "sha512-8TWwjyp/bK2a/CHK2HuC7I8iITC9ytEvfru8/kw1mSyoK4kSDlzkL/1uDl536ULXLWORulfEzaGb61GynVc1vg==", + "node_modules/@msgpackr-extract/msgpackr-extract-win32-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.3.tgz", + "integrity": "sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ==", "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ - "linux" - ], + "win32" + ] + }, + "node_modules/@napi-rs/nice": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice/-/nice-1.1.1.tgz", + "integrity": "sha512-xJIPs+bYuc9ASBl+cvGsKbGrJmS6fAKaSZCnT0lhahT5rhA2VVy9/EcIgd2JhtEuFOJNx7UHNn/qiTPTY4nrQw==", + "dev": true, + "license": "MIT", + "optional": true, "engines": { "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "optionalDependencies": { + "@napi-rs/nice-android-arm-eabi": "1.1.1", + "@napi-rs/nice-android-arm64": "1.1.1", + "@napi-rs/nice-darwin-arm64": "1.1.1", + "@napi-rs/nice-darwin-x64": "1.1.1", + "@napi-rs/nice-freebsd-x64": "1.1.1", + "@napi-rs/nice-linux-arm-gnueabihf": "1.1.1", + "@napi-rs/nice-linux-arm64-gnu": "1.1.1", + "@napi-rs/nice-linux-arm64-musl": "1.1.1", + "@napi-rs/nice-linux-ppc64-gnu": "1.1.1", + "@napi-rs/nice-linux-riscv64-gnu": "1.1.1", + "@napi-rs/nice-linux-s390x-gnu": "1.1.1", + "@napi-rs/nice-linux-x64-gnu": "1.1.1", + "@napi-rs/nice-linux-x64-musl": "1.1.1", + "@napi-rs/nice-openharmony-arm64": "1.1.1", + "@napi-rs/nice-win32-arm64-msvc": "1.1.1", + "@napi-rs/nice-win32-ia32-msvc": "1.1.1", + "@napi-rs/nice-win32-x64-msvc": "1.1.1" } }, - "node_modules/@nrwl/js/node_modules/@nx/nx-linux-x64-musl": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-19.5.4.tgz", - "integrity": "sha512-5Pf32iv9nnmSV/oOHd9k/5L45m3BooSj096G/ejAN3BHMr4CZIMhjDcQq9ZX7pAZFchU5zL0+dNClK70QfA7PA==", + "node_modules/@napi-rs/nice-android-arm-eabi": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm-eabi/-/nice-android-arm-eabi-1.1.1.tgz", + "integrity": "sha512-kjirL3N6TnRPv5iuHw36wnucNqXAO46dzK9oPb0wj076R5Xm8PfUVA9nAFB5ZNMmfJQJVKACAPd/Z2KYMppthw==", "cpu": [ - "x64" + "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ - "linux" + "android" ], "engines": { "node": ">= 10" } }, - "node_modules/@nrwl/js/node_modules/@nx/nx-win32-arm64-msvc": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-19.5.4.tgz", - "integrity": "sha512-fyKGfde4Pq9r5qQMLIleujq7B5ta86y8RSPUruoN6zaGrNg6waqbpMdZUjjsg9L7PP9RPaMHPMubC21OnQQomQ==", + "node_modules/@napi-rs/nice-android-arm64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm64/-/nice-android-arm64-1.1.1.tgz", + "integrity": "sha512-blG0i7dXgbInN5urONoUCNf+DUEAavRffrO7fZSeoRMJc5qD+BJeNcpr54msPF6qfDD6kzs9AQJogZvT2KD5nw==", "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ - "win32" + "android" ], "engines": { "node": ">= 10" } }, - "node_modules/@nrwl/js/node_modules/@nx/nx-win32-x64-msvc": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-19.5.4.tgz", - "integrity": "sha512-gcAr5zZQKiAxHZ7iUOVeMLf/KIh4EFbF07Q0uSmgGmUJL1u3mZTjeG57V1AMZbTQESGY43rgoymqVYkghc5Jlw==", + "node_modules/@napi-rs/nice-darwin-arm64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-arm64/-/nice-darwin-arm64-1.1.1.tgz", + "integrity": "sha512-s/E7w45NaLqTGuOjC2p96pct4jRfo61xb9bU1unM/MJ/RFkKlJyJDx7OJI/O0ll/hrfpqKopuAFDV8yo0hfT7A==", "cpu": [ - "x64" + "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ - "win32" + "darwin" ], "engines": { "node": ">= 10" } }, - "node_modules/@nrwl/js/node_modules/@nx/workspace": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/@nx/workspace/-/workspace-19.5.4.tgz", - "integrity": "sha512-GI3uMJYwPxjPGHA0UuXZtIqf/fgiCDq63Ns7zpdzwaeOvQbtHySFVV6zclXx/3dXjJsBpEiOYNKPGf17jqx6Dw==", - "license": "MIT", - "dependencies": { - "@nrwl/workspace": "19.5.4", - "@nx/devkit": "19.5.4", - "chalk": "^4.1.0", - "enquirer": "~2.3.6", - "nx": "19.5.4", - "tslib": "^2.3.0", - "yargs-parser": "21.1.1" - } - }, - "node_modules/@nrwl/js/node_modules/@tybys/wasm-util": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.9.0.tgz", - "integrity": "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==", - "license": "MIT", - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@nrwl/js/node_modules/@yarnpkg/parsers": { - "version": "3.0.0-rc.46", - "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz", - "integrity": "sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q==", - "license": "BSD-2-Clause", - "dependencies": { - "js-yaml": "^3.10.0", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=14.15.0" - } - }, - "node_modules/@nrwl/js/node_modules/babel-plugin-macros": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz", - "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.7.2", - "cosmiconfig": "^6.0.0", - "resolve": "^1.12.0" - } - }, - "node_modules/@nrwl/js/node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "license": "MIT", - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@nrwl/js/node_modules/cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "license": "MIT", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@nrwl/js/node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@nrwl/js/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/@nrwl/js/node_modules/fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@nrwl/js/node_modules/fs-extra": { - "version": "11.3.2", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", - "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/@nrwl/js/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@nrwl/js/node_modules/hosted-git-info": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", - "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", - "license": "ISC", - "dependencies": { - "lru-cache": "^10.0.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@nrwl/js/node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@nrwl/js/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@nrwl/js/node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@nrwl/js/node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@nrwl/js/node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@nrwl/js/node_modules/jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "license": "MIT" - }, - "node_modules/@nrwl/js/node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@nrwl/js/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "license": "ISC" - }, - "node_modules/@nrwl/js/node_modules/npm-package-arg": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.1.tgz", - "integrity": "sha512-M7s1BD4NxdAvBKUPqqRW957Xwcl/4Zvo8Aj+ANrzvIPzGJZElrH7Z//rSaec2ORcND6FHHLnZeY8qgTpXDMFQQ==", - "license": "ISC", - "dependencies": { - "hosted-git-info": "^7.0.0", - "proc-log": "^3.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@nrwl/js/node_modules/nx": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/nx/-/nx-19.5.4.tgz", - "integrity": "sha512-zfxIFe+29Na6GKlmPPzQhCjnBv5HoLaT43mYZdHh3BPrVOzWBCXNwxWROG1ZK9IcUepwySWq7NI/H3w8BGPEGg==", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "@napi-rs/wasm-runtime": "0.2.4", - "@nrwl/tao": "19.5.4", - "@yarnpkg/lockfile": "^1.1.0", - "@yarnpkg/parsers": "3.0.0-rc.46", - "@zkochan/js-yaml": "0.0.7", - "axios": "^1.7.2", - "chalk": "^4.1.0", - "cli-cursor": "3.1.0", - "cli-spinners": "2.6.1", - "cliui": "^8.0.1", - "dotenv": "~16.4.5", - "dotenv-expand": "~11.0.6", - "enquirer": "~2.3.6", - "figures": "3.2.0", - "flat": "^5.0.2", - "front-matter": "^4.0.2", - "fs-extra": "^11.1.0", - "ignore": "^5.0.4", - "jest-diff": "^29.4.1", - "jsonc-parser": "3.2.0", - "lines-and-columns": "~2.0.3", - "minimatch": "9.0.3", - "node-machine-id": "1.1.12", - "npm-run-path": "^4.0.1", - "open": "^8.4.0", - "ora": "5.3.0", - "semver": "^7.5.3", - "string-width": "^4.2.3", - "strong-log-transformer": "^2.1.0", - "tar-stream": "~2.2.0", - "tmp": "~0.2.1", - "tsconfig-paths": "^4.1.2", - "tslib": "^2.3.0", - "yargs": "^17.6.2", - "yargs-parser": "21.1.1" - }, - "bin": { - "nx": "bin/nx.js", - "nx-cloud": "bin/nx-cloud.js" - }, - "optionalDependencies": { - "@nx/nx-darwin-arm64": "19.5.4", - "@nx/nx-darwin-x64": "19.5.4", - "@nx/nx-freebsd-x64": "19.5.4", - "@nx/nx-linux-arm-gnueabihf": "19.5.4", - "@nx/nx-linux-arm64-gnu": "19.5.4", - "@nx/nx-linux-arm64-musl": "19.5.4", - "@nx/nx-linux-x64-gnu": "19.5.4", - "@nx/nx-linux-x64-musl": "19.5.4", - "@nx/nx-win32-arm64-msvc": "19.5.4", - "@nx/nx-win32-x64-msvc": "19.5.4" - }, - "peerDependencies": { - "@swc-node/register": "^1.8.0", - "@swc/core": "^1.3.85" - }, - "peerDependenciesMeta": { - "@swc-node/register": { - "optional": true - }, - "@swc/core": { - "optional": true - } - } - }, - "node_modules/@nrwl/js/node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "license": "MIT", - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@nrwl/js/node_modules/ora": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.3.0.tgz", - "integrity": "sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==", - "license": "MIT", - "dependencies": { - "bl": "^4.0.3", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "log-symbols": "^4.0.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@nrwl/js/node_modules/proc-log": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", - "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@nrwl/js/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@nrwl/js/node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "license": "MIT", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@nrwl/js/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "license": "ISC" - }, - "node_modules/@nrwl/js/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@nrwl/js/node_modules/source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/@nrwl/js/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@nrwl/js/node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "node_modules/@napi-rs/nice-darwin-x64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-x64/-/nice-darwin-x64-1.1.1.tgz", + "integrity": "sha512-dGoEBnVpsdcC+oHHmW1LRK5eiyzLwdgNQq3BmZIav+9/5WTZwBYX7r5ZkQC07Nxd3KHOCkgbHSh4wPkH1N1LiQ==", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@nrwl/js/node_modules/validate-npm-package-name": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", - "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@nrwl/js/node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "license": "ISC", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">= 6" + "node": ">= 10" } }, - "node_modules/@nrwl/js/node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "node_modules/@napi-rs/nice-freebsd-x64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-freebsd-x64/-/nice-freebsd-x64-1.1.1.tgz", + "integrity": "sha512-kHv4kEHAylMYmlNwcQcDtXjklYp4FCf0b05E+0h6nDHsZ+F0bDe04U/tXNOqrx5CmIAth4vwfkjjUmp4c4JktQ==", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=12" - } - }, - "node_modules/@nrwl/tao": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-19.5.4.tgz", - "integrity": "sha512-LNCi+2Rb17wNkUUdX2OQPRv9qOrstlmuAAA9VVcIcW78NdybjgWWvMIhf4NrAkjn7/uALrZdv22zyiGekmheDw==", - "license": "MIT", - "dependencies": { - "nx": "19.5.4", - "tslib": "^2.3.0" - }, - "bin": { - "tao": "index.js" - } - }, - "node_modules/@nrwl/tao/node_modules/@napi-rs/wasm-runtime": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.4.tgz", - "integrity": "sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ==", - "license": "MIT", - "dependencies": { - "@emnapi/core": "^1.1.0", - "@emnapi/runtime": "^1.1.0", - "@tybys/wasm-util": "^0.9.0" + "node": ">= 10" } }, - "node_modules/@nrwl/tao/node_modules/@nx/nx-darwin-arm64": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-19.5.4.tgz", - "integrity": "sha512-s+OmSsYUtECmEKAdzSsYoO9vamx+njiP72eSZusmTh7fCJg+dW3dcifRkUf3h1dcM53hffXcmxKEoWxZMAeuXw==", + "node_modules/@napi-rs/nice-linux-arm-gnueabihf": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm-gnueabihf/-/nice-linux-arm-gnueabihf-1.1.1.tgz", + "integrity": "sha512-E1t7K0efyKXZDoZg1LzCOLxgolxV58HCkaEkEvIYQx12ht2pa8hoBo+4OB3qh7e+QiBlp1SRf+voWUZFxyhyqg==", "cpu": [ - "arm64" + "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ - "darwin" + "linux" ], "engines": { "node": ">= 10" } }, - "node_modules/@nrwl/tao/node_modules/@nx/nx-darwin-x64": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-19.5.4.tgz", - "integrity": "sha512-GjA6aThF9P7FR3OdNZn4g9c1bJeQMOdQmo2jaBaGmUPnOIZSEWinHkvh5g8vDg+jNwRdHKK84jJWWW0/o73iYQ==", + "node_modules/@napi-rs/nice-linux-arm64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-gnu/-/nice-linux-arm64-gnu-1.1.1.tgz", + "integrity": "sha512-CIKLA12DTIZlmTaaKhQP88R3Xao+gyJxNWEn04wZwC2wmRapNnxCUZkVwggInMJvtVElA+D4ZzOU5sX4jV+SmQ==", "cpu": [ - "x64" + "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ - "darwin" + "linux" ], "engines": { "node": ">= 10" } }, - "node_modules/@nrwl/tao/node_modules/@nx/nx-freebsd-x64": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-19.5.4.tgz", - "integrity": "sha512-KPVTmg2NpvON3+sh2pNWv2GJow5CL3fX2xBo4cI9D50DDZOD4fB68S2v5q6nLC1QWOwQcC0PLnSpoKaDB0PgQg==", + "node_modules/@napi-rs/nice-linux-arm64-musl": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-musl/-/nice-linux-arm64-musl-1.1.1.tgz", + "integrity": "sha512-+2Rzdb3nTIYZ0YJF43qf2twhqOCkiSrHx2Pg6DJaCPYhhaxbLcdlV8hCRMHghQ+EtZQWGNcS2xF4KxBhSGeutg==", "cpu": [ - "x64" + "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ - "freebsd" + "linux" ], "engines": { "node": ">= 10" } }, - "node_modules/@nrwl/tao/node_modules/@nx/nx-linux-arm-gnueabihf": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-19.5.4.tgz", - "integrity": "sha512-a535HwxVhTS+ngcoFxrsqmggpsKWquubILZhIeY/q+XW6nX61FEb/EqlMkc+aJLHD1LQBGax1W+j7YvTA/66Lw==", + "node_modules/@napi-rs/nice-linux-ppc64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-ppc64-gnu/-/nice-linux-ppc64-gnu-1.1.1.tgz", + "integrity": "sha512-4FS8oc0GeHpwvv4tKciKkw3Y4jKsL7FRhaOeiPei0X9T4Jd619wHNe4xCLmN2EMgZoeGg+Q7GY7BsvwKpL22Tg==", "cpu": [ - "arm" + "ppc64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -10689,13 +9315,14 @@ "node": ">= 10" } }, - "node_modules/@nrwl/tao/node_modules/@nx/nx-linux-arm64-gnu": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-19.5.4.tgz", - "integrity": "sha512-eRu/IoPB68MQeEmfyub+P79eDYvXOyNa706rp0JnDHL5LMw12kPF3MIeqc/v7o6xWakGHCSnTCulcqsl8HXryg==", + "node_modules/@napi-rs/nice-linux-riscv64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-riscv64-gnu/-/nice-linux-riscv64-gnu-1.1.1.tgz", + "integrity": "sha512-HU0nw9uD4FO/oGCCk409tCi5IzIZpH2agE6nN4fqpwVlCn5BOq0MS1dXGjXaG17JaAvrlpV5ZeyZwSon10XOXw==", "cpu": [ - "arm64" + "riscv64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -10705,13 +9332,14 @@ "node": ">= 10" } }, - "node_modules/@nrwl/tao/node_modules/@nx/nx-linux-arm64-musl": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-19.5.4.tgz", - "integrity": "sha512-r5NNVngNwTe+zpUAAZAgCezDkjc0pi2zrr8VwiaRZsmVjhHtvvsXJgo1ONw5s2HjKoKuTFEa5jKTUlAHkaQ7Kg==", + "node_modules/@napi-rs/nice-linux-s390x-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-s390x-gnu/-/nice-linux-s390x-gnu-1.1.1.tgz", + "integrity": "sha512-2YqKJWWl24EwrX0DzCQgPLKQBxYDdBxOHot1KWEq7aY2uYeX+Uvtv4I8xFVVygJDgf6/92h9N3Y43WPx8+PAgQ==", "cpu": [ - "arm64" + "s390x" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -10721,13 +9349,14 @@ "node": ">= 10" } }, - "node_modules/@nrwl/tao/node_modules/@nx/nx-linux-x64-gnu": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-19.5.4.tgz", - "integrity": "sha512-8TWwjyp/bK2a/CHK2HuC7I8iITC9ytEvfru8/kw1mSyoK4kSDlzkL/1uDl536ULXLWORulfEzaGb61GynVc1vg==", + "node_modules/@napi-rs/nice-linux-x64-gnu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-gnu/-/nice-linux-x64-gnu-1.1.1.tgz", + "integrity": "sha512-/gaNz3R92t+dcrfCw/96pDopcmec7oCcAQ3l/M+Zxr82KT4DljD37CpgrnXV+pJC263JkW572pdbP3hP+KjcIg==", "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -10737,13 +9366,14 @@ "node": ">= 10" } }, - "node_modules/@nrwl/tao/node_modules/@nx/nx-linux-x64-musl": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-19.5.4.tgz", - "integrity": "sha512-5Pf32iv9nnmSV/oOHd9k/5L45m3BooSj096G/ejAN3BHMr4CZIMhjDcQq9ZX7pAZFchU5zL0+dNClK70QfA7PA==", + "node_modules/@napi-rs/nice-linux-x64-musl": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-musl/-/nice-linux-x64-musl-1.1.1.tgz", + "integrity": "sha512-xScCGnyj/oppsNPMnevsBe3pvNaoK7FGvMjT35riz9YdhB2WtTG47ZlbxtOLpjeO9SqqQ2J2igCmz6IJOD5JYw==", "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -10753,29 +9383,31 @@ "node": ">= 10" } }, - "node_modules/@nrwl/tao/node_modules/@nx/nx-win32-arm64-msvc": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-19.5.4.tgz", - "integrity": "sha512-fyKGfde4Pq9r5qQMLIleujq7B5ta86y8RSPUruoN6zaGrNg6waqbpMdZUjjsg9L7PP9RPaMHPMubC21OnQQomQ==", + "node_modules/@napi-rs/nice-openharmony-arm64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-openharmony-arm64/-/nice-openharmony-arm64-1.1.1.tgz", + "integrity": "sha512-6uJPRVwVCLDeoOaNyeiW0gp2kFIM4r7PL2MczdZQHkFi9gVlgm+Vn+V6nTWRcu856mJ2WjYJiumEajfSm7arPQ==", "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ - "win32" + "openharmony" ], "engines": { "node": ">= 10" } }, - "node_modules/@nrwl/tao/node_modules/@nx/nx-win32-x64-msvc": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-19.5.4.tgz", - "integrity": "sha512-gcAr5zZQKiAxHZ7iUOVeMLf/KIh4EFbF07Q0uSmgGmUJL1u3mZTjeG57V1AMZbTQESGY43rgoymqVYkghc5Jlw==", + "node_modules/@napi-rs/nice-win32-arm64-msvc": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-arm64-msvc/-/nice-win32-arm64-msvc-1.1.1.tgz", + "integrity": "sha512-uoTb4eAvM5B2aj/z8j+Nv8OttPf2m+HVx3UjA5jcFxASvNhQriyCQF1OB1lHL43ZhW+VwZlgvjmP5qF3+59atA==", "cpu": [ - "x64" + "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -10785,998 +9417,454 @@ "node": ">= 10" } }, - "node_modules/@nrwl/tao/node_modules/@tybys/wasm-util": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.9.0.tgz", - "integrity": "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==", - "license": "MIT", - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@nrwl/tao/node_modules/@yarnpkg/parsers": { - "version": "3.0.0-rc.46", - "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz", - "integrity": "sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q==", - "license": "BSD-2-Clause", - "dependencies": { - "js-yaml": "^3.10.0", - "tslib": "^2.4.0" - }, + "node_modules/@napi-rs/nice-win32-ia32-msvc": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-ia32-msvc/-/nice-win32-ia32-msvc-1.1.1.tgz", + "integrity": "sha512-CNQqlQT9MwuCsg1Vd/oKXiuH+TcsSPJmlAFc5frFyX/KkOh0UpBLEj7aoY656d5UKZQMQFP7vJNa1DNUNORvug==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=14.15.0" + "node": ">= 10" } }, - "node_modules/@nrwl/tao/node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "node_modules/@napi-rs/nice-win32-x64-msvc": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-x64-msvc/-/nice-win32-x64-msvc-1.1.1.tgz", + "integrity": "sha512-vB+4G/jBQCAh0jelMTY3+kgFy00Hlx2f2/1zjMoH821IbplbWZOkLiTYXQkygNTzQJTq5cvwBDgn2ppHD+bglQ==", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "restore-cursor": "^3.1.0" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=8" + "node": ">= 10" } }, - "node_modules/@nrwl/tao/node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.0.7.tgz", + "integrity": "sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw==", + "dev": true, "license": "MIT", - "engines": { - "node": ">=8" + "optional": true, + "dependencies": { + "@emnapi/core": "^1.5.0", + "@emnapi/runtime": "^1.5.0", + "@tybys/wasm-util": "^0.10.1" } }, - "node_modules/@nrwl/tao/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/@nrwl/tao/node_modules/fs-extra": { - "version": "11.3.2", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", - "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", + "node_modules/@ngtools/webpack": { + "version": "21.2.2", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-21.2.2.tgz", + "integrity": "sha512-EnDlYg0KWqtvJ2FBIFR03nBHRhs8JFtb4yrdnL5zt7OP6mlRpCcFJ+kXwm6v9OVTEIsKKRdPRe0qpSYOAOdo6w==", + "dev": true, "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, "engines": { - "node": ">=14.14" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^21.0.0", + "typescript": ">=5.9 <6.0", + "webpack": "^5.54.0" } }, - "node_modules/@nrwl/tao/node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "dev": true, "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, "engines": { - "node": ">=8" + "node": ">= 16" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@nrwl/tao/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, "engines": { - "node": ">=8" + "node": ">= 8" } }, - "node_modules/@nrwl/tao/node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 8" } }, - "node_modules/@nrwl/tao/node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, "license": "MIT", - "engines": { - "node": ">=10" + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 8" } }, - "node_modules/@nrwl/tao/node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "license": "MIT", + "node_modules/@npmcli/agent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-4.0.0.tgz", + "integrity": "sha512-kAQTcEN9E8ERLVg5AsGwLNoFb+oEG6engbqAU2P43gD4JEIkNGMHdVQ096FsOAAYpZPB0RSt0zgInKIAS1l5QA==", + "dev": true, + "license": "ISC", "dependencies": { - "is-docker": "^2.0.0" + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^11.2.1", + "socks-proxy-agent": "^8.0.3" }, "engines": { - "node": ">=8" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@nrwl/tao/node_modules/jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "license": "MIT" + "node_modules/@npmcli/agent/node_modules/lru-cache": { + "version": "11.2.6", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.6.tgz", + "integrity": "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } }, - "node_modules/@nrwl/tao/node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "license": "MIT", + "node_modules/@npmcli/fs": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-5.0.0.tgz", + "integrity": "sha512-7OsC1gNORBEawOa5+j2pXN9vsicaIOH5cPXxoR6fJOmH6/EXpJB2CajXOu1fPRFun2m1lktEFX11+P89hqO/og==", + "dev": true, + "license": "ISC", "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" + "semver": "^7.3.5" }, "engines": { - "node": ">=10" + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/git": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-7.0.2.tgz", + "integrity": "sha512-oeolHDjExNAJAnlYP2qzNjMX/Xi9bmu78C9dIGr4xjobrSKbuMYCph8lTzn4vnW3NjIqVmw/f8BCfouqyJXlRg==", + "dev": true, + "license": "ISC", + "dependencies": { + "@gar/promise-retry": "^1.0.0", + "@npmcli/promise-spawn": "^9.0.0", + "ini": "^6.0.0", + "lru-cache": "^11.2.1", + "npm-pick-manifest": "^11.0.1", + "proc-log": "^6.0.0", + "semver": "^7.3.5", + "which": "^6.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@nrwl/tao/node_modules/nx": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/nx/-/nx-19.5.4.tgz", - "integrity": "sha512-zfxIFe+29Na6GKlmPPzQhCjnBv5HoLaT43mYZdHh3BPrVOzWBCXNwxWROG1ZK9IcUepwySWq7NI/H3w8BGPEGg==", - "hasInstallScript": true, - "license": "MIT", + "node_modules/@npmcli/git/node_modules/isexe": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-4.0.0.tgz", + "integrity": "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=20" + } + }, + "node_modules/@npmcli/git/node_modules/lru-cache": { + "version": "11.2.6", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.6.tgz", + "integrity": "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@npmcli/git/node_modules/which": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-6.0.1.tgz", + "integrity": "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==", + "dev": true, + "license": "ISC", "dependencies": { - "@napi-rs/wasm-runtime": "0.2.4", - "@nrwl/tao": "19.5.4", - "@yarnpkg/lockfile": "^1.1.0", - "@yarnpkg/parsers": "3.0.0-rc.46", - "@zkochan/js-yaml": "0.0.7", - "axios": "^1.7.2", - "chalk": "^4.1.0", - "cli-cursor": "3.1.0", - "cli-spinners": "2.6.1", - "cliui": "^8.0.1", - "dotenv": "~16.4.5", - "dotenv-expand": "~11.0.6", - "enquirer": "~2.3.6", - "figures": "3.2.0", - "flat": "^5.0.2", - "front-matter": "^4.0.2", - "fs-extra": "^11.1.0", - "ignore": "^5.0.4", - "jest-diff": "^29.4.1", - "jsonc-parser": "3.2.0", - "lines-and-columns": "~2.0.3", - "minimatch": "9.0.3", - "node-machine-id": "1.1.12", - "npm-run-path": "^4.0.1", - "open": "^8.4.0", - "ora": "5.3.0", - "semver": "^7.5.3", - "string-width": "^4.2.3", - "strong-log-transformer": "^2.1.0", - "tar-stream": "~2.2.0", - "tmp": "~0.2.1", - "tsconfig-paths": "^4.1.2", - "tslib": "^2.3.0", - "yargs": "^17.6.2", - "yargs-parser": "21.1.1" + "isexe": "^4.0.0" }, "bin": { - "nx": "bin/nx.js", - "nx-cloud": "bin/nx-cloud.js" - }, - "optionalDependencies": { - "@nx/nx-darwin-arm64": "19.5.4", - "@nx/nx-darwin-x64": "19.5.4", - "@nx/nx-freebsd-x64": "19.5.4", - "@nx/nx-linux-arm-gnueabihf": "19.5.4", - "@nx/nx-linux-arm64-gnu": "19.5.4", - "@nx/nx-linux-arm64-musl": "19.5.4", - "@nx/nx-linux-x64-gnu": "19.5.4", - "@nx/nx-linux-x64-musl": "19.5.4", - "@nx/nx-win32-arm64-msvc": "19.5.4", - "@nx/nx-win32-x64-msvc": "19.5.4" - }, - "peerDependencies": { - "@swc-node/register": "^1.8.0", - "@swc/core": "^1.3.85" + "node-which": "bin/which.js" }, - "peerDependenciesMeta": { - "@swc-node/register": { - "optional": true - }, - "@swc/core": { - "optional": true - } + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@nrwl/tao/node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "license": "MIT", + "node_modules/@npmcli/installed-package-contents": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-4.0.0.tgz", + "integrity": "sha512-yNyAdkBxB72gtZ4GrwXCM0ZUedo9nIbOMKfGjt6Cu6DXf0p8y1PViZAKDC8q8kv/fufx0WTjRBdSlyrvnP7hmA==", + "dev": true, + "license": "ISC", "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" + "npm-bundled": "^5.0.0", + "npm-normalize-package-bin": "^5.0.0" }, - "engines": { - "node": ">=12" + "bin": { + "installed-package-contents": "bin/index.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@nrwl/tao/node_modules/ora": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.3.0.tgz", - "integrity": "sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==", - "license": "MIT", - "dependencies": { - "bl": "^4.0.3", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "log-symbols": "^4.0.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, + "node_modules/@npmcli/node-gyp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-5.0.0.tgz", + "integrity": "sha512-uuG5HZFXLfyFKqg8QypsmgLQW7smiRjVc45bqD/ofZZcR/uxEjgQU8qDPv0s9TEeMUiAAU/GC5bR6++UdTirIQ==", + "dev": true, + "license": "ISC", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@nrwl/tao/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", + "node_modules/@npmcli/package-json": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-7.0.5.tgz", + "integrity": "sha512-iVuTlG3ORq2iaVa1IWUxAO/jIp77tUKBhoMjuzYW2kL4MLN1bi/ofqkZ7D7OOwh8coAx1/S2ge0rMdGv8sLSOQ==", + "dev": true, + "license": "ISC", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "@npmcli/git": "^7.0.0", + "glob": "^13.0.0", + "hosted-git-info": "^9.0.0", + "json-parse-even-better-errors": "^5.0.0", + "proc-log": "^6.0.0", + "semver": "^7.5.3", + "spdx-expression-parse": "^4.0.0" }, "engines": { - "node": ">= 6" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@nrwl/tao/node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "license": "MIT", + "node_modules/@npmcli/promise-spawn": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-9.0.1.tgz", + "integrity": "sha512-OLUaoqBuyxeTqUvjA3FZFiXUfYC1alp3Sa99gW3EUDz3tZ3CbXDdcZ7qWKBzicrJleIgucoWamWH1saAmH/l2Q==", + "dev": true, + "license": "ISC", "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" + "which": "^6.0.0" }, "engines": { - "node": ">=8" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@nrwl/tao/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "license": "ISC" + "node_modules/@npmcli/promise-spawn/node_modules/isexe": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-4.0.0.tgz", + "integrity": "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=20" + } }, - "node_modules/@nrwl/tao/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", + "node_modules/@npmcli/promise-spawn/node_modules/which": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-6.0.1.tgz", + "integrity": "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==", + "dev": true, + "license": "ISC", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "isexe": "^4.0.0" + }, + "bin": { + "node-which": "bin/which.js" }, "engines": { - "node": ">=8" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@nrwl/tao/node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "license": "MIT", + "node_modules/@npmcli/redact": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-4.0.0.tgz", + "integrity": "sha512-gOBg5YHMfZy+TfHArfVogwgfBeQnKbbGo3pSUyK/gSI0AVu+pEiDVcKlQb0D8Mg1LNRZILZ6XG8I5dJ4KuAd9Q==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/run-script": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-10.0.4.tgz", + "integrity": "sha512-mGUWr1uMnf0le2TwfOZY4SFxZGXGfm4Jtay/nwAa2FLNAKXUoUwaGwBMNH36UHPtinWfTSJ3nqFQr0091CxVGg==", + "dev": true, + "license": "ISC", "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" + "@npmcli/node-gyp": "^5.0.0", + "@npmcli/package-json": "^7.0.0", + "@npmcli/promise-spawn": "^9.0.0", + "node-gyp": "^12.1.0", + "proc-log": "^6.0.0" }, "engines": { - "node": ">=6" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@nrwl/tao/node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "node_modules/@nx/angular": { + "version": "22.5.4", + "resolved": "https://registry.npmjs.org/@nx/angular/-/angular-22.5.4.tgz", + "integrity": "sha512-JHDB6syIJLei0AqbJb/W31yLABBwGN99wrVuoFSk5CpgPy5AVzmlNYCIWnUycuCJyWB4NeMcJ9hiS2ycrbizNQ==", + "dev": true, "license": "MIT", "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" + "@nx/devkit": "22.5.4", + "@nx/eslint": "22.5.4", + "@nx/js": "22.5.4", + "@nx/module-federation": "22.5.4", + "@nx/rspack": "22.5.4", + "@nx/web": "22.5.4", + "@nx/webpack": "22.5.4", + "@nx/workspace": "22.5.4", + "@phenomnomnominal/tsquery": "~6.1.4", + "@typescript-eslint/type-utils": "^8.0.0", + "enquirer": "~2.3.6", + "magic-string": "~0.30.2", + "picocolors": "^1.1.0", + "picomatch": "4.0.2", + "semver": "^7.6.3", + "tslib": "^2.3.0", + "webpack-merge": "^5.8.0" }, - "engines": { - "node": ">=12" + "peerDependencies": { + "@angular-devkit/build-angular": ">= 19.0.0 < 22.0.0", + "@angular-devkit/core": ">= 19.0.0 < 22.0.0", + "@angular-devkit/schematics": ">= 19.0.0 < 22.0.0", + "@angular/build": ">= 19.0.0 < 22.0.0", + "@schematics/angular": ">= 19.0.0 < 22.0.0", + "ng-packagr": ">= 19.0.0 < 22.0.0", + "rxjs": "^6.5.3 || ^7.5.0" + }, + "peerDependenciesMeta": { + "@angular-devkit/build-angular": { + "optional": true + }, + "@angular/build": { + "optional": true + }, + "ng-packagr": { + "optional": true + } } }, - "node_modules/@nrwl/workspace": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/@nrwl/workspace/-/workspace-19.5.4.tgz", - "integrity": "sha512-0vrhaotIhuNbP5qeKBC0xC9sEZfpPfUG27lf/mVWdkRCreJXFrIJL+R74care9gnDr9ZFR8a1LalYB1JuG5QWA==", + "node_modules/@nx/angular/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, "license": "MIT", - "dependencies": { - "@nx/workspace": "19.5.4" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/@nrwl/workspace/node_modules/@napi-rs/wasm-runtime": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.4.tgz", - "integrity": "sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ==", + "node_modules/@nx/angular/node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "dev": true, "license": "MIT", "dependencies": { - "@emnapi/core": "^1.1.0", - "@emnapi/runtime": "^1.1.0", - "@tybys/wasm-util": "^0.9.0" + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" } }, - "node_modules/@nrwl/workspace/node_modules/@nx/devkit": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-19.5.4.tgz", - "integrity": "sha512-0TG2iU0xVRuElLP2aLeRSKUynsC+UgHqE/FJW2IcglHngs2/Duw2A4HDUVVOxztkEQPmp736qkYSwFO0nlOGxg==", + "node_modules/@nx/devkit": { + "version": "22.5.4", + "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-22.5.4.tgz", + "integrity": "sha512-+QCmpQZQmEGvi8IurC6bOgUTk+Q0dQo7wkp6V04lskXBztSyasBS0BGy5ic90kY05UlQUd++zRA1VY0jc+Yz5Q==", + "dev": true, "license": "MIT", "dependencies": { - "@nrwl/devkit": "19.5.4", + "@zkochan/js-yaml": "0.0.7", "ejs": "^3.1.7", "enquirer": "~2.3.6", - "ignore": "^5.0.4", - "minimatch": "9.0.3", - "semver": "^7.5.3", - "tmp": "~0.2.1", + "minimatch": "10.2.4", + "semver": "^7.6.3", "tslib": "^2.3.0", "yargs-parser": "21.1.1" }, "peerDependencies": { - "nx": ">= 17 <= 20" - } - }, - "node_modules/@nrwl/workspace/node_modules/@nx/nx-darwin-arm64": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-19.5.4.tgz", - "integrity": "sha512-s+OmSsYUtECmEKAdzSsYoO9vamx+njiP72eSZusmTh7fCJg+dW3dcifRkUf3h1dcM53hffXcmxKEoWxZMAeuXw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" + "nx": ">= 21 <= 23 || ^22.0.0-0" } }, - "node_modules/@nrwl/workspace/node_modules/@nx/nx-darwin-x64": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-19.5.4.tgz", - "integrity": "sha512-GjA6aThF9P7FR3OdNZn4g9c1bJeQMOdQmo2jaBaGmUPnOIZSEWinHkvh5g8vDg+jNwRdHKK84jJWWW0/o73iYQ==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], + "node_modules/@nx/devkit/node_modules/minimatch": { + "version": "10.2.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", + "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.2" + }, "engines": { - "node": ">= 10" + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@nrwl/workspace/node_modules/@nx/nx-freebsd-x64": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-19.5.4.tgz", - "integrity": "sha512-KPVTmg2NpvON3+sh2pNWv2GJow5CL3fX2xBo4cI9D50DDZOD4fB68S2v5q6nLC1QWOwQcC0PLnSpoKaDB0PgQg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nrwl/workspace/node_modules/@nx/nx-linux-arm-gnueabihf": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-19.5.4.tgz", - "integrity": "sha512-a535HwxVhTS+ngcoFxrsqmggpsKWquubILZhIeY/q+XW6nX61FEb/EqlMkc+aJLHD1LQBGax1W+j7YvTA/66Lw==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nrwl/workspace/node_modules/@nx/nx-linux-arm64-gnu": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-19.5.4.tgz", - "integrity": "sha512-eRu/IoPB68MQeEmfyub+P79eDYvXOyNa706rp0JnDHL5LMw12kPF3MIeqc/v7o6xWakGHCSnTCulcqsl8HXryg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nrwl/workspace/node_modules/@nx/nx-linux-arm64-musl": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-19.5.4.tgz", - "integrity": "sha512-r5NNVngNwTe+zpUAAZAgCezDkjc0pi2zrr8VwiaRZsmVjhHtvvsXJgo1ONw5s2HjKoKuTFEa5jKTUlAHkaQ7Kg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nrwl/workspace/node_modules/@nx/nx-linux-x64-gnu": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-19.5.4.tgz", - "integrity": "sha512-8TWwjyp/bK2a/CHK2HuC7I8iITC9ytEvfru8/kw1mSyoK4kSDlzkL/1uDl536ULXLWORulfEzaGb61GynVc1vg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nrwl/workspace/node_modules/@nx/nx-linux-x64-musl": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-19.5.4.tgz", - "integrity": "sha512-5Pf32iv9nnmSV/oOHd9k/5L45m3BooSj096G/ejAN3BHMr4CZIMhjDcQq9ZX7pAZFchU5zL0+dNClK70QfA7PA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nrwl/workspace/node_modules/@nx/nx-win32-arm64-msvc": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-19.5.4.tgz", - "integrity": "sha512-fyKGfde4Pq9r5qQMLIleujq7B5ta86y8RSPUruoN6zaGrNg6waqbpMdZUjjsg9L7PP9RPaMHPMubC21OnQQomQ==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nrwl/workspace/node_modules/@nx/nx-win32-x64-msvc": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-19.5.4.tgz", - "integrity": "sha512-gcAr5zZQKiAxHZ7iUOVeMLf/KIh4EFbF07Q0uSmgGmUJL1u3mZTjeG57V1AMZbTQESGY43rgoymqVYkghc5Jlw==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nrwl/workspace/node_modules/@nx/workspace": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/@nx/workspace/-/workspace-19.5.4.tgz", - "integrity": "sha512-GI3uMJYwPxjPGHA0UuXZtIqf/fgiCDq63Ns7zpdzwaeOvQbtHySFVV6zclXx/3dXjJsBpEiOYNKPGf17jqx6Dw==", - "license": "MIT", - "dependencies": { - "@nrwl/workspace": "19.5.4", - "@nx/devkit": "19.5.4", - "chalk": "^4.1.0", - "enquirer": "~2.3.6", - "nx": "19.5.4", - "tslib": "^2.3.0", - "yargs-parser": "21.1.1" - } - }, - "node_modules/@nrwl/workspace/node_modules/@tybys/wasm-util": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.9.0.tgz", - "integrity": "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==", - "license": "MIT", - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@nrwl/workspace/node_modules/@yarnpkg/parsers": { - "version": "3.0.0-rc.46", - "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz", - "integrity": "sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q==", - "license": "BSD-2-Clause", - "dependencies": { - "js-yaml": "^3.10.0", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=14.15.0" - } - }, - "node_modules/@nrwl/workspace/node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "license": "MIT", - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@nrwl/workspace/node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@nrwl/workspace/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/@nrwl/workspace/node_modules/fs-extra": { - "version": "11.3.2", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", - "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/@nrwl/workspace/node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@nrwl/workspace/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@nrwl/workspace/node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@nrwl/workspace/node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@nrwl/workspace/node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@nrwl/workspace/node_modules/jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "license": "MIT" - }, - "node_modules/@nrwl/workspace/node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@nrwl/workspace/node_modules/nx": { - "version": "19.5.4", - "resolved": "https://registry.npmjs.org/nx/-/nx-19.5.4.tgz", - "integrity": "sha512-zfxIFe+29Na6GKlmPPzQhCjnBv5HoLaT43mYZdHh3BPrVOzWBCXNwxWROG1ZK9IcUepwySWq7NI/H3w8BGPEGg==", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "@napi-rs/wasm-runtime": "0.2.4", - "@nrwl/tao": "19.5.4", - "@yarnpkg/lockfile": "^1.1.0", - "@yarnpkg/parsers": "3.0.0-rc.46", - "@zkochan/js-yaml": "0.0.7", - "axios": "^1.7.2", - "chalk": "^4.1.0", - "cli-cursor": "3.1.0", - "cli-spinners": "2.6.1", - "cliui": "^8.0.1", - "dotenv": "~16.4.5", - "dotenv-expand": "~11.0.6", - "enquirer": "~2.3.6", - "figures": "3.2.0", - "flat": "^5.0.2", - "front-matter": "^4.0.2", - "fs-extra": "^11.1.0", - "ignore": "^5.0.4", - "jest-diff": "^29.4.1", - "jsonc-parser": "3.2.0", - "lines-and-columns": "~2.0.3", - "minimatch": "9.0.3", - "node-machine-id": "1.1.12", - "npm-run-path": "^4.0.1", - "open": "^8.4.0", - "ora": "5.3.0", - "semver": "^7.5.3", - "string-width": "^4.2.3", - "strong-log-transformer": "^2.1.0", - "tar-stream": "~2.2.0", - "tmp": "~0.2.1", - "tsconfig-paths": "^4.1.2", - "tslib": "^2.3.0", - "yargs": "^17.6.2", - "yargs-parser": "21.1.1" - }, - "bin": { - "nx": "bin/nx.js", - "nx-cloud": "bin/nx-cloud.js" - }, - "optionalDependencies": { - "@nx/nx-darwin-arm64": "19.5.4", - "@nx/nx-darwin-x64": "19.5.4", - "@nx/nx-freebsd-x64": "19.5.4", - "@nx/nx-linux-arm-gnueabihf": "19.5.4", - "@nx/nx-linux-arm64-gnu": "19.5.4", - "@nx/nx-linux-arm64-musl": "19.5.4", - "@nx/nx-linux-x64-gnu": "19.5.4", - "@nx/nx-linux-x64-musl": "19.5.4", - "@nx/nx-win32-arm64-msvc": "19.5.4", - "@nx/nx-win32-x64-msvc": "19.5.4" - }, - "peerDependencies": { - "@swc-node/register": "^1.8.0", - "@swc/core": "^1.3.85" - }, - "peerDependenciesMeta": { - "@swc-node/register": { - "optional": true - }, - "@swc/core": { - "optional": true - } - } - }, - "node_modules/@nrwl/workspace/node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "license": "MIT", - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@nrwl/workspace/node_modules/ora": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.3.0.tgz", - "integrity": "sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==", - "license": "MIT", - "dependencies": { - "bl": "^4.0.3", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "log-symbols": "^4.0.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@nrwl/workspace/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@nrwl/workspace/node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "license": "MIT", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@nrwl/workspace/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "license": "ISC" - }, - "node_modules/@nrwl/workspace/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@nrwl/workspace/node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "license": "MIT", - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@nrwl/workspace/node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "license": "MIT", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@nx/angular": { - "version": "22.3.3", - "resolved": "https://registry.npmjs.org/@nx/angular/-/angular-22.3.3.tgz", - "integrity": "sha512-XE1grDPwpHySUSDMjgzgyjk/k6WjwooBXl19uilUR4solAPzlrz46qdyjzAPpEhvNAk0YsXflewgPebyuX5P2w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nx/devkit": "22.3.3", - "@nx/eslint": "22.3.3", - "@nx/js": "22.3.3", - "@nx/module-federation": "22.3.3", - "@nx/rspack": "22.3.3", - "@nx/web": "22.3.3", - "@nx/webpack": "22.3.3", - "@nx/workspace": "22.3.3", - "@phenomnomnominal/tsquery": "~5.0.1", - "@typescript-eslint/type-utils": "^8.0.0", - "enquirer": "~2.3.6", - "magic-string": "~0.30.2", - "picocolors": "^1.1.0", - "picomatch": "4.0.2", - "semver": "^7.6.3", - "tslib": "^2.3.0", - "webpack-merge": "^5.8.0" - }, - "peerDependencies": { - "@angular-devkit/build-angular": ">= 19.0.0 < 22.0.0", - "@angular-devkit/core": ">= 19.0.0 < 22.0.0", - "@angular-devkit/schematics": ">= 19.0.0 < 22.0.0", - "@angular/build": ">= 19.0.0 < 22.0.0", - "@schematics/angular": ">= 19.0.0 < 22.0.0", - "ng-packagr": ">= 19.0.0 < 22.0.0", - "rxjs": "^6.5.3 || ^7.5.0" - }, - "peerDependenciesMeta": { - "@angular-devkit/build-angular": { - "optional": true - }, - "@angular/build": { - "optional": true - }, - "ng-packagr": { - "optional": true - } - } - }, - "node_modules/@nx/angular/node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/@nx/angular/node_modules/webpack-merge": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", - "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", - "dev": true, - "license": "MIT", - "dependencies": { - "clone-deep": "^4.0.1", - "flat": "^5.0.2", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@nx/devkit": { - "version": "22.3.3", - "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-22.3.3.tgz", - "integrity": "sha512-/hxcdhE+QDalsWEbJurHtZh9aY27taHeImbCVJnogwv85H3RbAE+0YuKXGInutfLszAs7phwzli71yq+d2P45Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@zkochan/js-yaml": "0.0.7", - "ejs": "^3.1.7", - "enquirer": "~2.3.6", - "minimatch": "9.0.3", - "semver": "^7.6.3", - "tslib": "^2.3.0", - "yargs-parser": "21.1.1" - }, - "peerDependencies": { - "nx": ">= 21 <= 23 || ^22.0.0-0" - } - }, - "node_modules/@nx/eslint": { - "version": "22.3.3", - "resolved": "https://registry.npmjs.org/@nx/eslint/-/eslint-22.3.3.tgz", - "integrity": "sha512-iG/LvrYf2CFAm2A0kfmRU4VeCTAN5PjUw8xc6oD1zfQ/KTmE/gFG2P1aJBo2mTIyzk9k8ZI0dqIhPLdl/AAtxg==", - "dev": true, + "node_modules/@nx/eslint": { + "version": "22.5.4", + "resolved": "https://registry.npmjs.org/@nx/eslint/-/eslint-22.5.4.tgz", + "integrity": "sha512-LMFpyep6N5Se7v5Ck2icZPBa3krWcuGYpubzjEuG35dQm2f/Fr+vLNfQWvfHiF+gP3eSYuJJPI/E38ifTZ/J5A==", + "dev": true, "license": "MIT", "dependencies": { - "@nx/devkit": "22.3.3", - "@nx/js": "22.3.3", + "@nx/devkit": "22.5.4", + "@nx/js": "22.5.4", "semver": "^7.6.3", "tslib": "^2.3.0", "typescript": "~5.9.2" }, "peerDependencies": { "@zkochan/js-yaml": "0.0.7", - "eslint": "^8.0.0 || ^9.0.0" + "eslint": "^8.0.0 || ^9.0.0 || ^10.0.0" }, "peerDependenciesMeta": { "@zkochan/js-yaml": { @@ -11785,15 +9873,15 @@ } }, "node_modules/@nx/eslint-plugin": { - "version": "22.3.3", - "resolved": "https://registry.npmjs.org/@nx/eslint-plugin/-/eslint-plugin-22.3.3.tgz", - "integrity": "sha512-UGAqvYUlKGupBUsO9ppEzYkai1VrrFrUkzHPOVUu5JM4zYGN30ruoO+j3K5OXu5jQLGCmOVfAQD3jzqT2balmw==", + "version": "22.5.4", + "resolved": "https://registry.npmjs.org/@nx/eslint-plugin/-/eslint-plugin-22.5.4.tgz", + "integrity": "sha512-nbbSnqxR9JQbqsJJUsJcpGtbqLulYOJG1CQdQ0xP3wntK6qu6XDzosopIMHO8MXNQlDp14hAPavE5hKMQwuawA==", "dev": true, "license": "MIT", "dependencies": { - "@nx/devkit": "22.3.3", - "@nx/js": "22.3.3", - "@phenomnomnominal/tsquery": "~5.0.1", + "@nx/devkit": "22.5.4", + "@nx/js": "22.5.4", + "@phenomnomnominal/tsquery": "~6.1.4", "@typescript-eslint/type-utils": "^8.0.0", "@typescript-eslint/utils": "^8.0.0", "chalk": "^4.1.0", @@ -11814,14 +9902,14 @@ } }, "node_modules/@nx/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { - "version": "8.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.47.0.tgz", - "integrity": "sha512-a0TTJk4HXMkfpFkL9/WaGTNuv7JWfFTQFJd6zS9dVAjKsojmv9HT55xzbEpnZoY+VUb+YXLMp+ihMLz/UlZfDg==", + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.56.1.tgz", + "integrity": "sha512-YAi4VDKcIZp0O4tz/haYKhmIDZFEUPOreKbfdAN3SzUDMcPhJ8QI99xQXqX+HoUVq8cs85eRKnD+rne2UAnj2w==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.47.0", - "@typescript-eslint/visitor-keys": "8.47.0" + "@typescript-eslint/types": "8.56.1", + "@typescript-eslint/visitor-keys": "8.56.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -11832,9 +9920,9 @@ } }, "node_modules/@nx/eslint-plugin/node_modules/@typescript-eslint/types": { - "version": "8.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.47.0.tgz", - "integrity": "sha512-nHAE6bMKsizhA2uuYZbEbmp5z2UpffNrPEqiKIeN7VsV6UY/roxanWfoRrf6x/k9+Obf+GQdkm0nPU+vnMXo9A==", + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.56.1.tgz", + "integrity": "sha512-dbMkdIUkIkchgGDIv7KLUpa0Mda4IYjo4IAMJUZ+3xNoUXxMsk9YtKpTHSChRS85o+H9ftm51gsK1dZReY9CVw==", "dev": true, "license": "MIT", "engines": { @@ -11846,22 +9934,21 @@ } }, "node_modules/@nx/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.47.0.tgz", - "integrity": "sha512-k6ti9UepJf5NpzCjH31hQNLHQWupTRPhZ+KFF8WtTuTpy7uHPfeg2NM7cP27aCGajoEplxJDFVCEm9TGPYyiVg==", + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.56.1.tgz", + "integrity": "sha512-qzUL1qgalIvKWAf9C1HpvBjif+Vm6rcT5wZd4VoMb9+Km3iS3Cv9DY6dMRMDtPnwRAFyAi7YXJpTIEXLvdfPxg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.47.0", - "@typescript-eslint/tsconfig-utils": "8.47.0", - "@typescript-eslint/types": "8.47.0", - "@typescript-eslint/visitor-keys": "8.47.0", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^2.1.0" + "@typescript-eslint/project-service": "8.56.1", + "@typescript-eslint/tsconfig-utils": "8.56.1", + "@typescript-eslint/types": "8.56.1", + "@typescript-eslint/visitor-keys": "8.56.1", + "debug": "^4.4.3", + "minimatch": "^10.2.2", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.4.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -11874,33 +9961,17 @@ "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/@nx/eslint-plugin/node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@nx/eslint-plugin/node_modules/@typescript-eslint/utils": { - "version": "8.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.47.0.tgz", - "integrity": "sha512-g7XrNf25iL4TJOiPqatNuaChyqt49a/onq5YsJ9+hXeugK+41LVg7AxikMfM02PC6jbNtZLCJj6AUcQXJS/jGQ==", + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.56.1.tgz", + "integrity": "sha512-HPAVNIME3tABJ61siYlHzSWCGtOoeP2RTIaHXFMPqjrQKCGB9OgUVdiNgH7TJS2JNIQ5qQ4RsAUDuGaGme/KOA==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.47.0", - "@typescript-eslint/types": "8.47.0", - "@typescript-eslint/typescript-estree": "8.47.0" + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.56.1", + "@typescript-eslint/types": "8.56.1", + "@typescript-eslint/typescript-estree": "8.56.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -11910,19 +9981,19 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@nx/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.47.0.tgz", - "integrity": "sha512-SIV3/6eftCy1bNzCQoPmbWsRLujS8t5iDIZ4spZOBHqrM+yfX2ogg8Tt3PDTAVKw3sSCiUgg30uOAvK2r9zGjQ==", + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.56.1.tgz", + "integrity": "sha512-KiROIzYdEV85YygXw6BI/Dx4fnBlFQu6Mq4QE4MOH9fFnhohw6wX/OAvDY2/C+ut0I3RSPKenvZJIVYqJNkhEw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.47.0", - "eslint-visitor-keys": "^4.2.1" + "@typescript-eslint/types": "8.56.1", + "eslint-visitor-keys": "^5.0.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -11933,22 +10004,38 @@ } }, "node_modules/@nx/eslint-plugin/node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", "dev": true, "license": "Apache-2.0", "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^20.19.0 || ^22.13.0 || >=24" }, "funding": { "url": "https://opencollective.com/eslint" } }, + "node_modules/@nx/eslint-plugin/node_modules/minimatch": { + "version": "10.2.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", + "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@nx/eslint-plugin/node_modules/ts-api-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", - "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.4.0.tgz", + "integrity": "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==", "dev": true, "license": "MIT", "engines": { @@ -11958,37 +10045,23 @@ "typescript": ">=4.8.4" } }, - "node_modules/@nx/eslint/node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, "node_modules/@nx/jest": { - "version": "22.3.3", - "resolved": "https://registry.npmjs.org/@nx/jest/-/jest-22.3.3.tgz", - "integrity": "sha512-BC+5E6oAM6h9x67UCtpsapfLRTwqVLtoG39f5tVZNVZ4a1spdMh0tPHRPtu2hSlsHHtaYsmTvjz5L+N7UguAtA==", + "version": "22.5.4", + "resolved": "https://registry.npmjs.org/@nx/jest/-/jest-22.5.4.tgz", + "integrity": "sha512-jUPj6e++F49x/P8O+vrsLs34AnUjNMK1H8wQ5vKl3XhsCNV1j0ADoCfsIdLHPXnJ7PUd3QOVwn2I9KNT7mAzBA==", "dev": true, "license": "MIT", "dependencies": { "@jest/reporters": "^30.0.2", "@jest/test-result": "^30.0.2", - "@nx/devkit": "22.3.3", - "@nx/js": "22.3.3", - "@phenomnomnominal/tsquery": "~5.0.1", + "@nx/devkit": "22.5.4", + "@nx/js": "22.5.4", + "@phenomnomnominal/tsquery": "~6.1.4", "identity-obj-proxy": "3.0.0", "jest-config": "^30.0.2", "jest-resolve": "^30.0.2", "jest-util": "^30.0.2", - "minimatch": "9.0.3", + "minimatch": "10.2.4", "picocolors": "^1.1.0", "resolve.exports": "2.0.3", "semver": "^7.6.3", @@ -11996,1000 +10069,954 @@ "yargs-parser": "21.1.1" } }, - "node_modules/@nx/jest/node_modules/@jest/console": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-30.2.0.tgz", - "integrity": "sha512-+O1ifRjkvYIkBqASKWgLxrpEhQAAE7hY77ALLUufSk5717KfOShg6IbqLmdsLMPdUiFvA2kTs0R7YZy+l0IzZQ==", + "node_modules/@nx/jest/node_modules/minimatch": { + "version": "10.2.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", + "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", "dev": true, - "license": "MIT", + "license": "BlueOak-1.0.0", "dependencies": { - "@jest/types": "30.2.0", - "@types/node": "*", - "chalk": "^4.1.2", - "jest-message-util": "30.2.0", - "jest-util": "30.2.0", - "slash": "^3.0.0" + "brace-expansion": "^5.0.2" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@nx/jest/node_modules/@jest/environment": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.2.0.tgz", - "integrity": "sha512-/QPTL7OBJQ5ac09UDRa3EQes4gt1FTEG/8jZ/4v5IVzx+Cv7dLxlVIvfvSVRiiX2drWyXeBjkMSR8hvOWSog5g==", + "node_modules/@nx/js": { + "version": "22.5.4", + "resolved": "https://registry.npmjs.org/@nx/js/-/js-22.5.4.tgz", + "integrity": "sha512-RPGDQjPm68ml5vKOk2RhRgNUM51qyMfIkRsKSxTWy0EpMOa7ud0I2bPQyNDMkqP04w8I5GZPD8O8opesDrdmtg==", "dev": true, "license": "MIT", "dependencies": { - "@jest/fake-timers": "30.2.0", - "@jest/types": "30.2.0", - "@types/node": "*", - "jest-mock": "30.2.0" + "@babel/core": "^7.23.2", + "@babel/plugin-proposal-decorators": "^7.22.7", + "@babel/plugin-transform-class-properties": "^7.22.5", + "@babel/plugin-transform-runtime": "^7.23.2", + "@babel/preset-env": "^7.23.2", + "@babel/preset-typescript": "^7.22.5", + "@babel/runtime": "^7.22.6", + "@nx/devkit": "22.5.4", + "@nx/workspace": "22.5.4", + "@zkochan/js-yaml": "0.0.7", + "babel-plugin-const-enum": "^1.0.1", + "babel-plugin-macros": "^3.1.0", + "babel-plugin-transform-typescript-metadata": "^0.3.1", + "chalk": "^4.1.0", + "columnify": "^1.6.0", + "detect-port": "^1.5.1", + "ignore": "^5.0.4", + "js-tokens": "^4.0.0", + "jsonc-parser": "3.2.0", + "npm-run-path": "^4.0.1", + "picocolors": "^1.1.0", + "picomatch": "4.0.2", + "semver": "^7.6.3", + "source-map-support": "0.5.19", + "tinyglobby": "^0.2.12", + "tslib": "^2.3.0" }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "peerDependencies": { + "verdaccio": "^6.0.5" + }, + "peerDependenciesMeta": { + "verdaccio": { + "optional": true + } } }, - "node_modules/@nx/jest/node_modules/@jest/expect": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-30.2.0.tgz", - "integrity": "sha512-V9yxQK5erfzx99Sf+7LbhBwNWEZ9eZay8qQ9+JSC0TrMR1pMDHLMY+BnVPacWU6Jamrh252/IKo4F1Xn/zfiqA==", + "node_modules/@nx/js/node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@nx/js/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "dev": true, "license": "MIT", - "dependencies": { - "expect": "30.2.0", - "jest-snapshot": "30.2.0" + "engines": { + "node": ">=12" }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@nx/js/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=0.10.0" } }, - "node_modules/@nx/jest/node_modules/@jest/expect-utils": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.2.0.tgz", - "integrity": "sha512-1JnRfhqpD8HGpOmQp180Fo9Zt69zNtC+9lR+kT7NVL05tNXIi+QC8Csz7lfidMoVLPD3FnOtcmp0CEFnxExGEA==", + "node_modules/@nx/js/node_modules/source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/get-type": "30.1.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "node_modules/@nx/jest/node_modules/@jest/fake-timers": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.2.0.tgz", - "integrity": "sha512-HI3tRLjRxAbBy0VO8dqqm7Hb2mIa8d5bg/NJkyQcOk7V118ObQML8RC5luTF/Zsg4474a+gDvhce7eTnP4GhYw==", + "node_modules/@nx/module-federation": { + "version": "22.5.4", + "resolved": "https://registry.npmjs.org/@nx/module-federation/-/module-federation-22.5.4.tgz", + "integrity": "sha512-rjYSxbKMrrRHQOh+25GlNI91cads+PyHe1LVNn3/S1NTZH20PObtt+KRuppj6L2Mjg3/gK0WfQoMrvFNRiV48A==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "30.2.0", - "@sinonjs/fake-timers": "^13.0.0", - "@types/node": "*", - "jest-message-util": "30.2.0", - "jest-mock": "30.2.0", - "jest-util": "30.2.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "@module-federation/enhanced": "^0.21.2", + "@module-federation/node": "^2.7.21", + "@module-federation/sdk": "^0.21.2", + "@nx/devkit": "22.5.4", + "@nx/js": "22.5.4", + "@nx/web": "22.5.4", + "@rspack/core": "1.6.8", + "express": "^4.21.2", + "http-proxy-middleware": "^3.0.5", + "picocolors": "^1.1.0", + "tslib": "^2.3.0", + "webpack": "^5.101.3" } }, - "node_modules/@nx/jest/node_modules/@jest/globals": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-30.2.0.tgz", - "integrity": "sha512-b63wmnKPaK+6ZZfpYhz9K61oybvbI1aMcIs80++JI1O1rR1vaxHUCNqo3ITu6NU0d4V34yZFoHMn/uoKr/Rwfw==", + "node_modules/@nx/module-federation/node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/environment": "30.2.0", - "@jest/expect": "30.2.0", - "@jest/types": "30.2.0", - "jest-mock": "30.2.0" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">= 0.6" } }, - "node_modules/@nx/jest/node_modules/@jest/reporters": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-30.2.0.tgz", - "integrity": "sha512-DRyW6baWPqKMa9CzeiBjHwjd8XeAyco2Vt8XbcLFjiwCOEKOvy82GJ8QQnJE9ofsxCMPjH4MfH8fCWIHHDKpAQ==", + "node_modules/@nx/module-federation/node_modules/body-parser": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", + "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", "dev": true, "license": "MIT", "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "30.2.0", - "@jest/test-result": "30.2.0", - "@jest/transform": "30.2.0", - "@jest/types": "30.2.0", - "@jridgewell/trace-mapping": "^0.3.25", - "@types/node": "*", - "chalk": "^4.1.2", - "collect-v8-coverage": "^1.0.2", - "exit-x": "^0.2.2", - "glob": "^10.3.10", - "graceful-fs": "^4.2.11", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^6.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^5.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "30.2.0", - "jest-util": "30.2.0", - "jest-worker": "30.2.0", - "slash": "^3.0.0", - "string-length": "^4.0.2", - "v8-to-istanbul": "^9.0.1" + "bytes": "~3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "~1.2.0", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "on-finished": "~2.4.1", + "qs": "~6.14.0", + "raw-body": "~2.5.3", + "type-is": "~1.6.18", + "unpipe": "~1.0.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/@nx/jest/node_modules/@jest/schemas": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.5.tgz", - "integrity": "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==", + "node_modules/@nx/module-federation/node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", "dev": true, "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.34.0" - }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">= 0.6" } }, - "node_modules/@nx/jest/node_modules/@jest/source-map": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-30.0.1.tgz", - "integrity": "sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg==", + "node_modules/@nx/module-federation/node_modules/cookie-signature": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", + "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@nx/module-federation/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.25", - "callsites": "^3.1.0", - "graceful-fs": "^4.2.11" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "ms": "2.0.0" } }, - "node_modules/@nx/jest/node_modules/@jest/test-result": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-30.2.0.tgz", - "integrity": "sha512-RF+Z+0CCHkARz5HT9mcQCBulb1wgCP3FBvl9VFokMX27acKphwyQsNuWH3c+ojd1LeWBLoTYoxF0zm6S/66mjg==", + "node_modules/@nx/module-federation/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/@nx/module-federation/node_modules/express": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", + "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", "dev": true, "license": "MIT", "dependencies": { - "@jest/console": "30.2.0", - "@jest/types": "30.2.0", - "@types/istanbul-lib-coverage": "^2.0.6", - "collect-v8-coverage": "^1.0.2" + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "~1.20.3", + "content-disposition": "~0.5.4", + "content-type": "~1.0.4", + "cookie": "~0.7.1", + "cookie-signature": "~1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.3.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "~0.1.12", + "proxy-addr": "~2.0.7", + "qs": "~6.14.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "~0.19.0", + "serve-static": "~1.16.2", + "setprototypeof": "1.2.0", + "statuses": "~2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/@nx/jest/node_modules/@jest/test-sequencer": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-30.2.0.tgz", - "integrity": "sha512-wXKgU/lk8fKXMu/l5Hog1R61bL4q5GCdT6OJvdAFz1P+QrpoFuLU68eoKuVc4RbrTtNnTL5FByhWdLgOPSph+Q==", + "node_modules/@nx/module-federation/node_modules/finalhandler": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", + "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", "dev": true, "license": "MIT", "dependencies": { - "@jest/test-result": "30.2.0", - "graceful-fs": "^4.2.11", - "jest-haste-map": "30.2.0", - "slash": "^3.0.0" + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "statuses": "~2.0.2", + "unpipe": "~1.0.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">= 0.8" } }, - "node_modules/@nx/jest/node_modules/@jest/transform": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-30.2.0.tgz", - "integrity": "sha512-XsauDV82o5qXbhalKxD7p4TZYYdwcaEXC77PPD2HixEFF+6YGppjrAAQurTl2ECWcEomHBMMNS9AH3kcCFx8jA==", + "node_modules/@nx/module-federation/node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "dev": true, "license": "MIT", - "dependencies": { - "@babel/core": "^7.27.4", - "@jest/types": "30.2.0", - "@jridgewell/trace-mapping": "^0.3.25", - "babel-plugin-istanbul": "^7.0.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": "30.2.0", - "jest-regex-util": "30.0.1", - "jest-util": "30.2.0", - "micromatch": "^4.0.8", - "pirates": "^4.0.7", - "slash": "^3.0.0", - "write-file-atomic": "^5.0.1" - }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">= 0.6" } }, - "node_modules/@nx/jest/node_modules/@jest/types": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.2.0.tgz", - "integrity": "sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg==", + "node_modules/@nx/module-federation/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "license": "MIT", "dependencies": { - "@jest/pattern": "30.0.1", - "@jest/schemas": "30.0.5", - "@types/istanbul-lib-coverage": "^2.0.6", - "@types/istanbul-reports": "^3.0.4", - "@types/node": "*", - "@types/yargs": "^17.0.33", - "chalk": "^4.1.2" + "safer-buffer": ">= 2.1.2 < 3" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=0.10.0" } }, - "node_modules/@nx/jest/node_modules/@sinclair/typebox": { - "version": "0.34.47", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.47.tgz", - "integrity": "sha512-ZGIBQ+XDvO5JQku9wmwtabcVTHJsgSWAHYtVuM9pBNNR5E88v6Jcj/llpmsjivig5X8A8HHOb4/mbEKPS5EvAw==", + "node_modules/@nx/module-federation/node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, - "node_modules/@nx/jest/node_modules/@sinonjs/fake-timers": { - "version": "13.0.5", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz", - "integrity": "sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==", + "node_modules/@nx/module-federation/node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.1" + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@nx/jest/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/@nx/module-federation/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">= 0.6" } }, - "node_modules/@nx/jest/node_modules/babel-jest": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-30.2.0.tgz", - "integrity": "sha512-0YiBEOxWqKkSQWL9nNGGEgndoeL0ZpWrbLMNL5u/Kaxrli3Eaxlt3ZtIDktEvXt4L/R9r3ODr2zKwGM/2BjxVw==", + "node_modules/@nx/module-federation/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/transform": "30.2.0", - "@types/babel__core": "^7.20.5", - "babel-plugin-istanbul": "^7.0.1", - "babel-preset-jest": "30.2.0", - "chalk": "^4.1.2", - "graceful-fs": "^4.2.11", - "slash": "^3.0.0" + "mime-db": "1.52.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.11.0 || ^8.0.0-0" + "node": ">= 0.6" } }, - "node_modules/@nx/jest/node_modules/babel-plugin-istanbul": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-7.0.1.tgz", - "integrity": "sha512-D8Z6Qm8jCvVXtIRkBnqNHX0zJ37rQcFJ9u8WOS6tkYOsRdHBzypCstaxWiu5ZIlqQtviRYbgnRLSoCEvjqcqbA==", + "node_modules/@nx/module-federation/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "dev": true, - "license": "BSD-3-Clause", - "workspaces": [ - "test/babel-8" - ], - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.3", - "istanbul-lib-instrument": "^6.0.2", - "test-exclude": "^6.0.0" - }, + "license": "MIT", "engines": { - "node": ">=12" + "node": ">= 0.6" } }, - "node_modules/@nx/jest/node_modules/babel-plugin-jest-hoist": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-30.2.0.tgz", - "integrity": "sha512-ftzhzSGMUnOzcCXd6WHdBGMyuwy15Wnn0iyyWGKgBDLxf9/s5ABuraCSpBX2uG0jUg4rqJnxsLc5+oYBqoxVaA==", + "node_modules/@nx/module-federation/node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", "dev": true, - "license": "MIT", + "license": "MIT" + }, + "node_modules/@nx/module-federation/node_modules/qs": { + "version": "6.14.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz", + "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@types/babel__core": "^7.20.5" + "side-channel": "^1.1.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@nx/jest/node_modules/babel-preset-jest": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-30.2.0.tgz", - "integrity": "sha512-US4Z3NOieAQumwFnYdUWKvUKh8+YSnS/gB3t6YBiz0bskpu7Pine8pPCheNxlPEW4wnUkma2a94YuW2q3guvCQ==", + "node_modules/@nx/module-federation/node_modules/raw-body": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", + "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", "dev": true, "license": "MIT", "dependencies": { - "babel-plugin-jest-hoist": "30.2.0", - "babel-preset-current-node-syntax": "^1.2.0" + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.11.0 || ^8.0.0-beta.1" + "node": ">= 0.8" } }, - "node_modules/@nx/jest/node_modules/ci-info": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.1.tgz", - "integrity": "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==", + "node_modules/@nx/module-federation/node_modules/send": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", + "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], "license": "MIT", + "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" + }, "engines": { - "node": ">=8" + "node": ">= 0.8.0" } }, - "node_modules/@nx/jest/node_modules/cjs-module-lexer": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.2.0.tgz", - "integrity": "sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@nx/jest/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@nx/jest/node_modules/expect": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-30.2.0.tgz", - "integrity": "sha512-u/feCi0GPsI+988gU2FLcsHyAHTU0MX1Wg68NhAnN7z/+C5wqG+CY8J53N9ioe8RXgaoz0nBR/TYMf3AycUuPw==", + "node_modules/@nx/module-federation/node_modules/serve-static": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", + "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", "dev": true, "license": "MIT", "dependencies": { - "@jest/expect-utils": "30.2.0", - "@jest/get-type": "30.1.0", - "jest-matcher-utils": "30.2.0", - "jest-message-util": "30.2.0", - "jest-mock": "30.2.0", - "jest-util": "30.2.0" + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "~0.19.1" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">= 0.8.0" } }, - "node_modules/@nx/jest/node_modules/istanbul-lib-source-maps": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", - "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", + "node_modules/@nx/module-federation/node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.23", - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0" + "media-typer": "0.3.0", + "mime-types": "~2.1.24" }, "engines": { - "node": ">=10" + "node": ">= 0.6" } }, - "node_modules/@nx/jest/node_modules/jest-circus": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-30.2.0.tgz", - "integrity": "sha512-Fh0096NC3ZkFx05EP2OXCxJAREVxj1BcW/i6EWqqymcgYKWjyyDpral3fMxVcHXg6oZM7iULer9wGRFvfpl+Tg==", + "node_modules/@nx/nx-darwin-arm64": { + "version": "22.5.4", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-22.5.4.tgz", + "integrity": "sha512-Ib9znwSLQZSZ/9hhg5ODplpNhE/RhGVXzdfRj6YonTuWSj/kH3dLMio+4JEkjRdTQVm06cDW0KdwSgnwovqMGg==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@jest/environment": "30.2.0", - "@jest/expect": "30.2.0", - "@jest/test-result": "30.2.0", - "@jest/types": "30.2.0", - "@types/node": "*", - "chalk": "^4.1.2", - "co": "^4.6.0", - "dedent": "^1.6.0", - "is-generator-fn": "^2.1.0", - "jest-each": "30.2.0", - "jest-matcher-utils": "30.2.0", - "jest-message-util": "30.2.0", - "jest-runtime": "30.2.0", - "jest-snapshot": "30.2.0", - "jest-util": "30.2.0", - "p-limit": "^3.1.0", - "pretty-format": "30.2.0", - "pure-rand": "^7.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.6" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } + "optional": true, + "os": [ + "darwin" + ] }, - "node_modules/@nx/jest/node_modules/jest-config": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-30.2.0.tgz", - "integrity": "sha512-g4WkyzFQVWHtu6uqGmQR4CQxz/CH3yDSlhzXMWzNjDx843gYjReZnMRanjRCq5XZFuQrGDxgUaiYWE8BRfVckA==", + "node_modules/@nx/nx-darwin-x64": { + "version": "22.5.4", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-22.5.4.tgz", + "integrity": "sha512-DjyXuQMc93MPU2XdRsJYjzbv1tgCzMi+zm7O0gc4x3h+ECFjKkjzQBg67pqGdhE3TV27MAlVRKrgHStyK9iigg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@nx/nx-freebsd-x64": { + "version": "22.5.4", + "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-22.5.4.tgz", + "integrity": "sha512-DhxdP8AhIfN0yCtFhZQcbp32MVN3L7UiTotYqqnOgwW922NRGSd5e+KEAWiJVrIO6TdgnI7prxpg1hfQQK0WDw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@nx/nx-linux-arm-gnueabihf": { + "version": "22.5.4", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-22.5.4.tgz", + "integrity": "sha512-pv1x1afTaLAOxPxVhQneLeXgjclp11f9ORxR7jA4E86bSgc9OL92dLSCkXtLQzqPNOej6SZ2fO+PPHVMZwtaPQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@nx/nx-linux-arm64-gnu": { + "version": "22.5.4", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-22.5.4.tgz", + "integrity": "sha512-mPji9PzleWPvXpmFDKaXpTymRgZkk/hW8JHGhvEZpKHHXMYgTGWC+BqOEM2A4dYC4bu4fi9RrteL7aouRRWJoQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@nx/nx-linux-arm64-musl": { + "version": "22.5.4", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-22.5.4.tgz", + "integrity": "sha512-hF/HvEhbCjcFpTgY7RbP1tUTbp0M1adZq4ckyW8mwhDWQ/MDsc8FnOHwCO3Bzy9ZeJM0zQUES6/m0Onz8geaEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@nx/nx-linux-x64-gnu": { + "version": "22.5.4", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-22.5.4.tgz", + "integrity": "sha512-1+vicSYEOtc7CNMoRCjo59no4gFe8w2nGIT127wk1yeW3EJzRVNlOA7Deu10NUUbzLeOvHc8EFOaU7clT+F7XQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@nx/nx-linux-x64-musl": { + "version": "22.5.4", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-22.5.4.tgz", + "integrity": "sha512-/KjndxVB14yU0SJOhqADHOWoTy4Y45h5RjW3cxcXlPSJZz7ar1FnlLne1rWMMMUttepc8ku+3T//SGKi2eu+Nw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@nx/nx-win32-arm64-msvc": { + "version": "22.5.4", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-22.5.4.tgz", + "integrity": "sha512-CrYt9FwhjOI6ZNy/G6YHLJmZuXCFJ24BCxugPXiZ7knDx7eGrr7owGgfht4SSiK3KCX40CvWCBJfqR4ZSgaSUA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@nx/nx-win32-x64-msvc": { + "version": "22.5.4", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-22.5.4.tgz", + "integrity": "sha512-g5YByv4XsYwsYZvFe24A9bvfhZA+mwtIQt6qZtEVduZTT1hfhIsq0LXGHhkGoFLYwRMXSracWOqkalY0KT4IQw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@nx/react": { + "version": "22.5.4", + "resolved": "https://registry.npmjs.org/@nx/react/-/react-22.5.4.tgz", + "integrity": "sha512-QWQF4rZMtSABWTRdksjK4YQaCKZW+PRfYOskebwb8OtaoRFeEZwPeN0RvQFRGInhZJfDQRJhKMKy5YHdVvuTaw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/core": "^7.27.4", - "@jest/get-type": "30.1.0", - "@jest/pattern": "30.0.1", - "@jest/test-sequencer": "30.2.0", - "@jest/types": "30.2.0", - "babel-jest": "30.2.0", - "chalk": "^4.1.2", - "ci-info": "^4.2.0", - "deepmerge": "^4.3.1", - "glob": "^10.3.10", - "graceful-fs": "^4.2.11", - "jest-circus": "30.2.0", - "jest-docblock": "30.2.0", - "jest-environment-node": "30.2.0", - "jest-regex-util": "30.0.1", - "jest-resolve": "30.2.0", - "jest-runner": "30.2.0", - "jest-util": "30.2.0", - "jest-validate": "30.2.0", - "micromatch": "^4.0.8", - "parse-json": "^5.2.0", - "pretty-format": "30.2.0", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "esbuild-register": ">=3.4.0", - "ts-node": ">=9.0.0" + "@nx/devkit": "22.5.4", + "@nx/eslint": "22.5.4", + "@nx/js": "22.5.4", + "@nx/module-federation": "22.5.4", + "@nx/rollup": "22.5.4", + "@nx/web": "22.5.4", + "@phenomnomnominal/tsquery": "~6.1.4", + "@svgr/webpack": "^8.0.1", + "express": "^4.21.2", + "http-proxy-middleware": "^3.0.5", + "minimatch": "10.2.4", + "picocolors": "^1.1.0", + "semver": "^7.6.3", + "tslib": "^2.3.0" }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "esbuild-register": { - "optional": true - }, - "ts-node": { - "optional": true - } + "optionalDependencies": { + "@nx/vite": "22.5.4" } }, - "node_modules/@nx/jest/node_modules/jest-diff": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.2.0.tgz", - "integrity": "sha512-dQHFo3Pt4/NLlG5z4PxZ/3yZTZ1C7s9hveiOj+GCN+uT109NC2QgsoVZsVOAvbJ3RgKkvyLGXZV9+piDpWbm6A==", + "node_modules/@nx/react/node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/diff-sequences": "30.0.1", - "@jest/get-type": "30.1.0", - "chalk": "^4.1.2", - "pretty-format": "30.2.0" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">= 0.6" } }, - "node_modules/@nx/jest/node_modules/jest-docblock": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-30.2.0.tgz", - "integrity": "sha512-tR/FFgZKS1CXluOQzZvNH3+0z9jXr3ldGSD8bhyuxvlVUwbeLOGynkunvlTMxchC5urrKndYiwCFC0DLVjpOCA==", + "node_modules/@nx/react/node_modules/body-parser": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", + "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", "dev": true, "license": "MIT", "dependencies": { - "detect-newline": "^3.1.0" + "bytes": "~3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "~1.2.0", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "on-finished": "~2.4.1", + "qs": "~6.14.0", + "raw-body": "~2.5.3", + "type-is": "~1.6.18", + "unpipe": "~1.0.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/@nx/jest/node_modules/jest-each": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-30.2.0.tgz", - "integrity": "sha512-lpWlJlM7bCUf1mfmuqTA8+j2lNURW9eNafOy99knBM01i5CQeY5UH1vZjgT9071nDJac1M4XsbyI44oNOdhlDQ==", + "node_modules/@nx/react/node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", "dev": true, "license": "MIT", - "dependencies": { - "@jest/get-type": "30.1.0", - "@jest/types": "30.2.0", - "chalk": "^4.1.2", - "jest-util": "30.2.0", - "pretty-format": "30.2.0" - }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">= 0.6" } }, - "node_modules/@nx/jest/node_modules/jest-environment-node": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-30.2.0.tgz", - "integrity": "sha512-ElU8v92QJ9UrYsKrxDIKCxu6PfNj4Hdcktcn0JX12zqNdqWHB0N+hwOnnBBXvjLd2vApZtuLUGs1QSY+MsXoNA==", + "node_modules/@nx/react/node_modules/cookie-signature": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", + "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@nx/react/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "license": "MIT", "dependencies": { - "@jest/environment": "30.2.0", - "@jest/fake-timers": "30.2.0", - "@jest/types": "30.2.0", - "@types/node": "*", - "jest-mock": "30.2.0", - "jest-util": "30.2.0", - "jest-validate": "30.2.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "ms": "2.0.0" } }, - "node_modules/@nx/jest/node_modules/jest-haste-map": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-30.2.0.tgz", - "integrity": "sha512-sQA/jCb9kNt+neM0anSj6eZhLZUIhQgwDt7cPGjumgLM4rXsfb9kpnlacmvZz3Q5tb80nS+oG/if+NBKrHC+Xw==", + "node_modules/@nx/react/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/@nx/react/node_modules/express": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", + "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "30.2.0", - "@types/node": "*", - "anymatch": "^3.1.3", - "fb-watchman": "^2.0.2", - "graceful-fs": "^4.2.11", - "jest-regex-util": "30.0.1", - "jest-util": "30.2.0", - "jest-worker": "30.2.0", - "micromatch": "^4.0.8", - "walker": "^1.0.8" + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "~1.20.3", + "content-disposition": "~0.5.4", + "content-type": "~1.0.4", + "cookie": "~0.7.1", + "cookie-signature": "~1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.3.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "~0.1.12", + "proxy-addr": "~2.0.7", + "qs": "~6.14.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "~0.19.0", + "serve-static": "~1.16.2", + "setprototypeof": "1.2.0", + "statuses": "~2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">= 0.10.0" }, - "optionalDependencies": { - "fsevents": "^2.3.3" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/@nx/jest/node_modules/jest-leak-detector": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-30.2.0.tgz", - "integrity": "sha512-M6jKAjyzjHG0SrQgwhgZGy9hFazcudwCNovY/9HPIicmNSBuockPSedAP9vlPK6ONFJ1zfyH/M2/YYJxOz5cdQ==", + "node_modules/@nx/react/node_modules/finalhandler": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", + "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", "dev": true, "license": "MIT", "dependencies": { - "@jest/get-type": "30.1.0", - "pretty-format": "30.2.0" + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "statuses": "~2.0.2", + "unpipe": "~1.0.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">= 0.8" } }, - "node_modules/@nx/jest/node_modules/jest-matcher-utils": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.2.0.tgz", - "integrity": "sha512-dQ94Nq4dbzmUWkQ0ANAWS9tBRfqCrn0bV9AMYdOi/MHW726xn7eQmMeRTpX2ViC00bpNaWXq+7o4lIQ3AX13Hg==", + "node_modules/@nx/react/node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "dev": true, "license": "MIT", - "dependencies": { - "@jest/get-type": "30.1.0", - "chalk": "^4.1.2", - "jest-diff": "30.2.0", - "pretty-format": "30.2.0" - }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">= 0.6" } }, - "node_modules/@nx/jest/node_modules/jest-message-util": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.2.0.tgz", - "integrity": "sha512-y4DKFLZ2y6DxTWD4cDe07RglV88ZiNEdlRfGtqahfbIjfsw1nMCPx49Uev4IA/hWn3sDKyAnSPwoYSsAEdcimw==", + "node_modules/@nx/react/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", - "@jest/types": "30.2.0", - "@types/stack-utils": "^2.0.3", - "chalk": "^4.1.2", - "graceful-fs": "^4.2.11", - "micromatch": "^4.0.8", - "pretty-format": "30.2.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.6" + "safer-buffer": ">= 2.1.2 < 3" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">=0.10.0" } }, - "node_modules/@nx/jest/node_modules/jest-mock": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.2.0.tgz", - "integrity": "sha512-JNNNl2rj4b5ICpmAcq+WbLH83XswjPbjH4T7yvGzfAGCPh1rw+xVNbtk+FnRslvt9lkCcdn9i1oAoKUuFsOxRw==", + "node_modules/@nx/react/node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "dev": true, "license": "MIT", - "dependencies": { - "@jest/types": "30.2.0", - "@types/node": "*", - "jest-util": "30.2.0" - }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">= 0.6" } }, - "node_modules/@nx/jest/node_modules/jest-regex-util": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-30.0.1.tgz", - "integrity": "sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==", + "node_modules/@nx/react/node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", "dev": true, "license": "MIT", - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@nx/jest/node_modules/jest-resolve": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-30.2.0.tgz", - "integrity": "sha512-TCrHSxPlx3tBY3hWNtRQKbtgLhsXa1WmbJEqBlTBrGafd5fiQFByy2GNCEoGR+Tns8d15GaL9cxEzKOO3GEb2A==", + "node_modules/@nx/react/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, "license": "MIT", - "dependencies": { - "chalk": "^4.1.2", - "graceful-fs": "^4.2.11", - "jest-haste-map": "30.2.0", - "jest-pnp-resolver": "^1.2.3", - "jest-util": "30.2.0", - "jest-validate": "30.2.0", - "slash": "^3.0.0", - "unrs-resolver": "^1.7.11" - }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">= 0.6" } }, - "node_modules/@nx/jest/node_modules/jest-runner": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-30.2.0.tgz", - "integrity": "sha512-PqvZ2B2XEyPEbclp+gV6KO/F1FIFSbIwewRgmROCMBo/aZ6J1w8Qypoj2pEOcg3G2HzLlaP6VUtvwCI8dM3oqQ==", + "node_modules/@nx/react/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/console": "30.2.0", - "@jest/environment": "30.2.0", - "@jest/test-result": "30.2.0", - "@jest/transform": "30.2.0", - "@jest/types": "30.2.0", - "@types/node": "*", - "chalk": "^4.1.2", - "emittery": "^0.13.1", - "exit-x": "^0.2.2", - "graceful-fs": "^4.2.11", - "jest-docblock": "30.2.0", - "jest-environment-node": "30.2.0", - "jest-haste-map": "30.2.0", - "jest-leak-detector": "30.2.0", - "jest-message-util": "30.2.0", - "jest-resolve": "30.2.0", - "jest-runtime": "30.2.0", - "jest-util": "30.2.0", - "jest-watcher": "30.2.0", - "jest-worker": "30.2.0", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" + "mime-db": "1.52.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">= 0.6" } }, - "node_modules/@nx/jest/node_modules/jest-runtime": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-30.2.0.tgz", - "integrity": "sha512-p1+GVX/PJqTucvsmERPMgCPvQJpFt4hFbM+VN3n8TMo47decMUcJbt+rgzwrEme0MQUA/R+1de2axftTHkKckg==", + "node_modules/@nx/react/node_modules/minimatch": { + "version": "10.2.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", + "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", "dev": true, - "license": "MIT", + "license": "BlueOak-1.0.0", "dependencies": { - "@jest/environment": "30.2.0", - "@jest/fake-timers": "30.2.0", - "@jest/globals": "30.2.0", - "@jest/source-map": "30.0.1", - "@jest/test-result": "30.2.0", - "@jest/transform": "30.2.0", - "@jest/types": "30.2.0", - "@types/node": "*", - "chalk": "^4.1.2", - "cjs-module-lexer": "^2.1.0", - "collect-v8-coverage": "^1.0.2", - "glob": "^10.3.10", - "graceful-fs": "^4.2.11", - "jest-haste-map": "30.2.0", - "jest-message-util": "30.2.0", - "jest-mock": "30.2.0", - "jest-regex-util": "30.0.1", - "jest-resolve": "30.2.0", - "jest-snapshot": "30.2.0", - "jest-util": "30.2.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" + "brace-expansion": "^5.0.2" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@nx/jest/node_modules/jest-snapshot": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-30.2.0.tgz", - "integrity": "sha512-5WEtTy2jXPFypadKNpbNkZ72puZCa6UjSr/7djeecHWOu7iYhSXSnHScT8wBz3Rn8Ena5d5RYRcsyKIeqG1IyA==", + "node_modules/@nx/react/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "dev": true, "license": "MIT", - "dependencies": { - "@babel/core": "^7.27.4", - "@babel/generator": "^7.27.5", - "@babel/plugin-syntax-jsx": "^7.27.1", - "@babel/plugin-syntax-typescript": "^7.27.1", - "@babel/types": "^7.27.3", - "@jest/expect-utils": "30.2.0", - "@jest/get-type": "30.1.0", - "@jest/snapshot-utils": "30.2.0", - "@jest/transform": "30.2.0", - "@jest/types": "30.2.0", - "babel-preset-current-node-syntax": "^1.2.0", - "chalk": "^4.1.2", - "expect": "30.2.0", - "graceful-fs": "^4.2.11", - "jest-diff": "30.2.0", - "jest-matcher-utils": "30.2.0", - "jest-message-util": "30.2.0", - "jest-util": "30.2.0", - "pretty-format": "30.2.0", - "semver": "^7.7.2", - "synckit": "^0.11.8" - }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">= 0.6" } }, - "node_modules/@nx/jest/node_modules/jest-util": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.2.0.tgz", - "integrity": "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA==", + "node_modules/@nx/react/node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "30.2.0", - "@types/node": "*", - "chalk": "^4.1.2", - "ci-info": "^4.2.0", - "graceful-fs": "^4.2.11", - "picomatch": "^4.0.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } + "license": "MIT" }, - "node_modules/@nx/jest/node_modules/jest-validate": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-30.2.0.tgz", - "integrity": "sha512-FBGWi7dP2hpdi8nBoWxSsLvBFewKAg0+uSQwBaof4Y4DPgBabXgpSYC5/lR7VmnIlSpASmCi/ntRWPbv7089Pw==", + "node_modules/@nx/react/node_modules/qs": { + "version": "6.14.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz", + "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "dependencies": { - "@jest/get-type": "30.1.0", - "@jest/types": "30.2.0", - "camelcase": "^6.3.0", - "chalk": "^4.1.2", - "leven": "^3.1.0", - "pretty-format": "30.2.0" + "side-channel": "^1.1.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@nx/jest/node_modules/jest-watcher": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-30.2.0.tgz", - "integrity": "sha512-PYxa28dxJ9g777pGm/7PrbnMeA0Jr7osHP9bS7eJy9DuAjMgdGtxgf0uKMyoIsTWAkIbUW5hSDdJ3urmgXBqxg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/test-result": "30.2.0", - "@jest/types": "30.2.0", - "@types/node": "*", - "ansi-escapes": "^4.3.2", - "chalk": "^4.1.2", - "emittery": "^0.13.1", - "jest-util": "30.2.0", - "string-length": "^4.0.2" + "node": ">=0.6" }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@nx/jest/node_modules/jest-worker": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-30.2.0.tgz", - "integrity": "sha512-0Q4Uk8WF7BUwqXHuAjc23vmopWJw5WH7w2tqBoUOZpOjW/ZnR44GXXd1r82RvnmI2GZge3ivrYXk/BE2+VtW2g==", + "node_modules/@nx/react/node_modules/raw-body": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", + "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", "dev": true, "license": "MIT", "dependencies": { - "@types/node": "*", - "@ungap/structured-clone": "^1.3.0", - "jest-util": "30.2.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.1.1" + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">= 0.8" } }, - "node_modules/@nx/jest/node_modules/pretty-format": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.2.0.tgz", - "integrity": "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==", + "node_modules/@nx/react/node_modules/send": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", + "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", "dev": true, "license": "MIT", "dependencies": { - "@jest/schemas": "30.0.5", - "ansi-styles": "^5.2.0", - "react-is": "^18.3.1" + "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" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@nx/jest/node_modules/pure-rand": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-7.0.1.tgz", - "integrity": "sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ], - "license": "MIT" - }, - "node_modules/@nx/jest/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@nx/jest/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@nx/jest/node_modules/source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "node": ">= 0.8.0" } }, - "node_modules/@nx/jest/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "node_modules/@nx/react/node_modules/serve-static": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", + "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "~0.19.1" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "node": ">= 0.8.0" } }, - "node_modules/@nx/jest/node_modules/write-file-atomic": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", - "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", + "node_modules/@nx/react/node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^4.0.1" + "media-typer": "0.3.0", + "mime-types": "~2.1.24" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">= 0.6" } }, - "node_modules/@nx/js": { - "version": "22.3.3", - "resolved": "https://registry.npmjs.org/@nx/js/-/js-22.3.3.tgz", - "integrity": "sha512-L3MOb8cLc2TIg2R3hGC9FLlcuVqlqST/fztmOihw9wS3lo52E4v2gP/BpYGfRh/u9r6Ekm6LF03Or+VwYzPuzA==", + "node_modules/@nx/rollup": { + "version": "22.5.4", + "resolved": "https://registry.npmjs.org/@nx/rollup/-/rollup-22.5.4.tgz", + "integrity": "sha512-SM4oe2qChid6gy5YynaXavHI0J5Ugfr/Su2TLFxaXNTCB6Wb0wONGhbhGFl90rma1xhAp4SMGQYxtQaReWMi9A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/core": "^7.23.2", - "@babel/plugin-proposal-decorators": "^7.22.7", - "@babel/plugin-transform-class-properties": "^7.22.5", - "@babel/plugin-transform-runtime": "^7.23.2", - "@babel/preset-env": "^7.23.2", - "@babel/preset-typescript": "^7.22.5", - "@babel/runtime": "^7.22.6", - "@nx/devkit": "22.3.3", - "@nx/workspace": "22.3.3", - "@zkochan/js-yaml": "0.0.7", - "babel-plugin-const-enum": "^1.0.1", - "babel-plugin-macros": "^3.1.0", - "babel-plugin-transform-typescript-metadata": "^0.3.1", - "chalk": "^4.1.0", - "columnify": "^1.6.0", - "detect-port": "^1.5.1", - "ignore": "^5.0.4", - "js-tokens": "^4.0.0", - "jsonc-parser": "3.2.0", - "npm-run-path": "^4.0.1", + "@nx/devkit": "22.5.4", + "@nx/js": "22.5.4", + "@rollup/plugin-babel": "^6.0.4", + "@rollup/plugin-commonjs": "^25.0.7", + "@rollup/plugin-image": "^3.0.3", + "@rollup/plugin-json": "^6.1.0", + "@rollup/plugin-node-resolve": "^15.2.3", + "@rollup/plugin-typescript": "^12.1.0", + "autoprefixer": "^10.4.9", + "concat-with-sourcemaps": "^1.1.0", "picocolors": "^1.1.0", "picomatch": "4.0.2", - "semver": "^7.6.3", - "source-map-support": "0.5.19", - "tinyglobby": "^0.2.12", + "postcss": "^8.4.38", + "postcss-modules": "^6.0.1", + "rollup": "^4.14.0", + "rollup-plugin-typescript2": "^0.36.0", "tslib": "^2.3.0" - }, - "peerDependencies": { - "verdaccio": "^6.0.5" - }, - "peerDependenciesMeta": { - "verdaccio": { - "optional": true - } } }, - "node_modules/@nx/js/node_modules/jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@nx/js/node_modules/picomatch": { + "node_modules/@nx/rollup/node_modules/picomatch": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", @@ -13002,49 +11029,51 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/@nx/js/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@nx/js/node_modules/source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/@nx/module-federation": { - "version": "22.3.3", - "resolved": "https://registry.npmjs.org/@nx/module-federation/-/module-federation-22.3.3.tgz", - "integrity": "sha512-bo0qsW0hDhuyS/WnHQ1nndHcd7VeuMS3bxCwPJkPm8+qsVhWT88GO9WoYnlvdpx/LfTT/N6k1AOVOKAygRuUNQ==", + "node_modules/@nx/rspack": { + "version": "22.5.4", + "resolved": "https://registry.npmjs.org/@nx/rspack/-/rspack-22.5.4.tgz", + "integrity": "sha512-qk2d10JOFEBsK1lY4goQ+RhsOMan8Z6PV07VuLKq1wVLzHMlgH1XSmWRBpk2P0P8I7Vy1e8M+tRRsbna5Xf+AQ==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/enhanced": "^0.21.2", - "@module-federation/node": "^2.7.21", - "@module-federation/sdk": "^0.21.2", - "@nx/devkit": "22.3.3", - "@nx/js": "22.3.3", - "@nx/web": "22.3.3", - "@rspack/core": "^1.5.2", + "@nx/devkit": "22.5.4", + "@nx/js": "22.5.4", + "@nx/module-federation": "22.5.4", + "@nx/web": "22.5.4", + "@phenomnomnominal/tsquery": "~6.1.4", + "@rspack/core": "1.6.8", + "@rspack/dev-server": "^1.1.4", + "@rspack/plugin-react-refresh": "^1.0.0", + "autoprefixer": "^10.4.9", + "browserslist": "^4.26.0", + "css-loader": "^6.4.0", + "enquirer": "~2.3.6", "express": "^4.21.2", "http-proxy-middleware": "^3.0.5", + "less-loader": "^11.1.0", + "license-webpack-plugin": "^4.0.2", + "loader-utils": "^2.0.3", + "parse5": "4.0.0", "picocolors": "^1.1.0", + "postcss": "^8.4.38", + "postcss-import": "~14.1.0", + "postcss-loader": "^8.1.1", + "sass": "^1.85.0", + "sass-embedded": "^1.83.4", + "sass-loader": "^16.0.4", + "source-map-loader": "^5.0.0", + "style-loader": "^3.3.0", + "ts-checker-rspack-plugin": "^1.1.1", "tslib": "^2.3.0", - "webpack": "^5.101.3" + "webpack": "^5.101.3", + "webpack-node-externals": "^3.0.0" + }, + "peerDependencies": { + "@module-federation/enhanced": "^0.21.2", + "@module-federation/node": "^2.7.21" } }, - "node_modules/@nx/module-federation/node_modules/accepts": { + "node_modules/@nx/rspack/node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", @@ -13058,7 +11087,7 @@ "node": ">= 0.6" } }, - "node_modules/@nx/module-federation/node_modules/body-parser": { + "node_modules/@nx/rspack/node_modules/body-parser": { "version": "1.20.4", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", @@ -13083,14 +11112,60 @@ "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/@nx/module-federation/node_modules/cookie-signature": { + "node_modules/@nx/rspack/node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@nx/rspack/node_modules/cookie-signature": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", "dev": true, "license": "MIT" }, - "node_modules/@nx/module-federation/node_modules/debug": { + "node_modules/@nx/rspack/node_modules/css-loader": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz", + "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.33", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/@nx/rspack/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", @@ -13100,14 +11175,14 @@ "ms": "2.0.0" } }, - "node_modules/@nx/module-federation/node_modules/debug/node_modules/ms": { + "node_modules/@nx/rspack/node_modules/debug/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true, "license": "MIT" }, - "node_modules/@nx/module-federation/node_modules/express": { + "node_modules/@nx/rspack/node_modules/express": { "version": "4.22.1", "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", @@ -13154,7 +11229,7 @@ "url": "https://opencollective.com/express" } }, - "node_modules/@nx/module-federation/node_modules/finalhandler": { + "node_modules/@nx/rspack/node_modules/finalhandler": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", @@ -13173,7 +11248,7 @@ "node": ">= 0.8" } }, - "node_modules/@nx/module-federation/node_modules/fresh": { + "node_modules/@nx/rspack/node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", @@ -13183,41 +11258,53 @@ "node": ">= 0.6" } }, - "node_modules/@nx/module-federation/node_modules/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "node_modules/@nx/rspack/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "license": "MIT", "dependencies": { - "depd": "~2.0.0", - "inherits": "~2.0.4", - "setprototypeof": "~1.2.0", - "statuses": "~2.0.2", - "toidentifier": "~1.0.1" + "safer-buffer": ">= 2.1.2 < 3" }, "engines": { - "node": ">= 0.8" + "node": ">=0.10.0" + } + }, + "node_modules/@nx/rspack/node_modules/less-loader": { + "version": "11.1.4", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-11.1.4.tgz", + "integrity": "sha512-6/GrYaB6QcW6Vj+/9ZPgKKs6G10YZai/l/eJ4SLwbzqNTBsAqt5hSLVF47TgsiBxV1P6eAU0GYRH3YRuQU9V3A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.15.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/express" + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "less": "^3.5.0 || ^4.0.0", + "webpack": "^5.0.0" } }, - "node_modules/@nx/module-federation/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "node_modules/@nx/rspack/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", "dev": true, "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" }, "engines": { - "node": ">=0.10.0" + "node": ">=8.9.0" } }, - "node_modules/@nx/module-federation/node_modules/media-typer": { + "node_modules/@nx/rspack/node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", @@ -13227,7 +11314,7 @@ "node": ">= 0.6" } }, - "node_modules/@nx/module-federation/node_modules/merge-descriptors": { + "node_modules/@nx/rspack/node_modules/merge-descriptors": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", @@ -13237,7 +11324,7 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@nx/module-federation/node_modules/mime-db": { + "node_modules/@nx/rspack/node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", @@ -13247,7 +11334,7 @@ "node": ">= 0.6" } }, - "node_modules/@nx/module-federation/node_modules/mime-types": { + "node_modules/@nx/rspack/node_modules/mime-types": { "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", @@ -13260,7 +11347,7 @@ "node": ">= 0.6" } }, - "node_modules/@nx/module-federation/node_modules/negotiator": { + "node_modules/@nx/rspack/node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", @@ -13270,14 +11357,30 @@ "node": ">= 0.6" } }, - "node_modules/@nx/module-federation/node_modules/path-to-regexp": { + "node_modules/@nx/rspack/node_modules/path-to-regexp": { "version": "0.1.12", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", "dev": true, "license": "MIT" }, - "node_modules/@nx/module-federation/node_modules/raw-body": { + "node_modules/@nx/rspack/node_modules/qs": { + "version": "6.14.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz", + "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@nx/rspack/node_modules/raw-body": { "version": "2.5.3", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", @@ -13293,7 +11396,7 @@ "node": ">= 0.8" } }, - "node_modules/@nx/module-federation/node_modules/send": { + "node_modules/@nx/rspack/node_modules/send": { "version": "0.19.2", "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", @@ -13318,7 +11421,7 @@ "node": ">= 0.8.0" } }, - "node_modules/@nx/module-federation/node_modules/serve-static": { + "node_modules/@nx/rspack/node_modules/serve-static": { "version": "1.16.3", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", @@ -13334,7 +11437,7 @@ "node": ">= 0.8.0" } }, - "node_modules/@nx/module-federation/node_modules/type-is": { + "node_modules/@nx/rspack/node_modules/type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", @@ -13348,1699 +11451,1538 @@ "node": ">= 0.6" } }, - "node_modules/@nx/nx-darwin-arm64": { - "version": "22.3.3", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-22.3.3.tgz", - "integrity": "sha512-zBAGFGLal09CxhQkdMpOVwcwa9Y01aFm88jTTn35s/DdIWsfngmPzz0t4mG7u2D05q7TJfGQ31pIf5GkNUjo6g==", - "cpu": [ - "arm64" - ], + "node_modules/@nx/vite": { + "version": "22.5.4", + "resolved": "https://registry.npmjs.org/@nx/vite/-/vite-22.5.4.tgz", + "integrity": "sha512-9HPaDp4SHzGFg1ABQQIsPjVFKPqLYrbIC8CLrsb4cLkK3BGMB+GSn4rTtP82rMmley0I2nHFkIzdXmbJvKcsPg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] + "dependencies": { + "@nx/devkit": "22.5.4", + "@nx/js": "22.5.4", + "@nx/vitest": "22.5.4", + "@phenomnomnominal/tsquery": "~6.1.4", + "ajv": "^8.0.0", + "enquirer": "~2.3.6", + "picomatch": "4.0.2", + "semver": "^7.6.3", + "tsconfig-paths": "^4.1.2", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0", + "vitest": "^1.3.1 || ^2.0.0 || ^3.0.0 || ^4.0.0" + } }, - "node_modules/@nx/nx-darwin-x64": { - "version": "22.3.3", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-22.3.3.tgz", - "integrity": "sha512-6ZQ6rMqH8NY4Jz+Gc89D5bIH2NxZb5S/vaA4yJ9RrqAfl4QWchNFD5na+aRivSd+UdsYLPKKl6qohet5SE6vOg==", - "cpu": [ - "x64" - ], + "node_modules/@nx/vite/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } }, - "node_modules/@nx/nx-freebsd-x64": { - "version": "22.3.3", - "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-22.3.3.tgz", - "integrity": "sha512-J/PP5pIOQtR7ZzrFwP6d6h0yfY7r9EravG2m940GsgzGbtZGYIDqnh5Wdt+4uBWPH8VpdNOwFqH0afELtJA3MA==", - "cpu": [ - "x64" - ], + "node_modules/@nx/vitest": { + "version": "22.5.4", + "resolved": "https://registry.npmjs.org/@nx/vitest/-/vitest-22.5.4.tgz", + "integrity": "sha512-ppXeq3akwrwv0ftqeFK3VX2s9E70px5H335e81wnFtUmD/LZLB7CyGVM9cDJMTgXdQFcYq90C8fbsPgDSnoc/w==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] + "dependencies": { + "@nx/devkit": "22.5.4", + "@nx/js": "22.5.4", + "@phenomnomnominal/tsquery": "~6.1.4", + "semver": "^7.6.3", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0", + "vitest": "^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + }, + "vitest": { + "optional": true + } + } }, - "node_modules/@nx/nx-linux-arm-gnueabihf": { - "version": "22.3.3", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-22.3.3.tgz", - "integrity": "sha512-/zn0altzM15S7qAgXMaB41vHkEn18HyTVUvRrjmmwaVqk9WfmDmqOQlGWoJ6XCbpvKQ8bh14RyhR9LGw1JJkNA==", - "cpu": [ - "arm" - ], + "node_modules/@nx/web": { + "version": "22.5.4", + "resolved": "https://registry.npmjs.org/@nx/web/-/web-22.5.4.tgz", + "integrity": "sha512-GH4+TLdFiw4RSUgPwn0KWcu6yHfMu23umidrgVgq9Dmj0fn3i/yfxvfdhMQ6aDiZr831b4tIbTQ7JLNd92ilIQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@nx/nx-linux-arm64-gnu": { - "version": "22.3.3", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-22.3.3.tgz", - "integrity": "sha512-NmPeCexWIZHW9RM3lDdFENN9C3WtlQ5L4RSNFESIjreS921rgePhulsszYdGnHdcnKPYlBBJnX/NxVsfioBbnQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@nx/nx-linux-arm64-musl": { - "version": "22.3.3", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-22.3.3.tgz", - "integrity": "sha512-K02U88Q0dpvCfmSXXvY7KbYQSa1m+mkYeqDBRHp11yHk1GoIqaHp8oEWda7FV4gsriNExPSS5tX1/QGVoLZrCw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@nx/nx-linux-x64-gnu": { - "version": "22.3.3", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-22.3.3.tgz", - "integrity": "sha512-04TEbvgwRaB9ifr39YwJmWh3RuXb4Ry4m84SOJyjNXAfPrepcWgfIQn1VL2ul1Ybq+P023dLO9ME8uqFh6j1YQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@nx/nx-linux-x64-musl": { - "version": "22.3.3", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-22.3.3.tgz", - "integrity": "sha512-uxBXx5q+S5OGatbYDxnamsKXRKlYn+Eq1nrCAHaf8rIfRoHlDiRV2PqtWuF+O2pxR5FWKpvr+/sZtt9rAf7KMw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "dependencies": { + "@nx/devkit": "22.5.4", + "@nx/js": "22.5.4", + "detect-port": "^1.5.1", + "http-server": "^14.1.0", + "picocolors": "^1.1.0", + "tslib": "^2.3.0" + } }, - "node_modules/@nx/nx-win32-arm64-msvc": { - "version": "22.3.3", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-22.3.3.tgz", - "integrity": "sha512-aOwlfD6ZA1K6hjZtbhBSp7s1yi3sHbMpLCa4stXzfhCCpKUv46HU/EdiWdE1N8AsyNFemPZFq81k1VTowcACdg==", - "cpu": [ - "arm64" - ], + "node_modules/@nx/webpack": { + "version": "22.5.4", + "resolved": "https://registry.npmjs.org/@nx/webpack/-/webpack-22.5.4.tgz", + "integrity": "sha512-2yfnad1Rwh+VT6L5iCMfTMwtPETxedcjPLMoNpyDmZg7dJj5+Xx51ZibygBefLwCBpZV0xnOZPBxR7xGpQqpSA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ] + "dependencies": { + "@babel/core": "^7.23.2", + "@nx/devkit": "22.5.4", + "@nx/js": "22.5.4", + "@phenomnomnominal/tsquery": "~6.1.4", + "ajv": "^8.12.0", + "autoprefixer": "^10.4.9", + "babel-loader": "^9.1.2", + "browserslist": "^4.26.0", + "copy-webpack-plugin": "^10.2.4", + "css-loader": "^6.4.0", + "css-minimizer-webpack-plugin": "^5.0.0", + "fork-ts-checker-webpack-plugin": "7.2.13", + "less": "^4.1.3", + "less-loader": "^11.1.0", + "license-webpack-plugin": "^4.0.2", + "loader-utils": "^2.0.3", + "mini-css-extract-plugin": "~2.4.7", + "parse5": "4.0.0", + "picocolors": "^1.1.0", + "postcss": "^8.4.38", + "postcss-import": "~14.1.0", + "postcss-loader": "^6.1.1", + "rxjs": "^7.8.0", + "sass": "^1.85.0", + "sass-embedded": "^1.83.4", + "sass-loader": "^16.0.4", + "source-map-loader": "^5.0.0", + "style-loader": "^3.3.0", + "terser-webpack-plugin": "^5.3.3", + "ts-loader": "^9.3.1", + "tsconfig-paths-webpack-plugin": "4.2.0", + "tslib": "^2.3.0", + "webpack": "^5.101.3", + "webpack-dev-server": "^5.2.1", + "webpack-node-externals": "^3.0.0", + "webpack-subresource-integrity": "^5.1.0" + } }, - "node_modules/@nx/nx-win32-x64-msvc": { - "version": "22.3.3", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-22.3.3.tgz", - "integrity": "sha512-EDR8BtqeDvVNQ+kPwnfeSfmerYetitU3tDkxOMIybjKJDh69U2JwTB8n9ARwNaZQbNk7sCGNRUSZFTbAAUKvuQ==", - "cpu": [ - "x64" - ], + "node_modules/@nx/webpack/node_modules/array-union": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz", + "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ] + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/@nx/react": { - "version": "22.3.3", - "resolved": "https://registry.npmjs.org/@nx/react/-/react-22.3.3.tgz", - "integrity": "sha512-rbnI34j2UwvS8K5I6KS1IkndYI5psRV+jV7+NfVhfBpDLzEW4NU7WB1IVuK7t1grrLKFfTs7GKw5cTSX33hnNg==", + "node_modules/@nx/webpack/node_modules/babel-loader": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.2.1.tgz", + "integrity": "sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==", "dev": true, "license": "MIT", "dependencies": { - "@nx/devkit": "22.3.3", - "@nx/eslint": "22.3.3", - "@nx/js": "22.3.3", - "@nx/module-federation": "22.3.3", - "@nx/rollup": "22.3.3", - "@nx/web": "22.3.3", - "@phenomnomnominal/tsquery": "~5.0.1", - "@svgr/webpack": "^8.0.1", - "express": "^4.21.2", - "file-loader": "^6.2.0", - "http-proxy-middleware": "^3.0.5", - "minimatch": "9.0.3", - "picocolors": "^1.1.0", - "semver": "^7.6.3", - "tslib": "^2.3.0" + "find-cache-dir": "^4.0.0", + "schema-utils": "^4.0.0" }, - "optionalDependencies": { - "@nx/vite": "22.3.3" + "engines": { + "node": ">= 14.15.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0", + "webpack": ">=5" } }, - "node_modules/@nx/react/node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "node_modules/@nx/webpack/node_modules/copy-webpack-plugin": { + "version": "10.2.4", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-10.2.4.tgz", + "integrity": "sha512-xFVltahqlsRcyyJqQbDY6EYTtyQZF9rf+JPjwHObLdPFMEISqkFkr7mFoVOC6BfYS/dNThyoQKvziugm+OnwBg==", "dev": true, "license": "MIT", "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" + "fast-glob": "^3.2.7", + "glob-parent": "^6.0.1", + "globby": "^12.0.2", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" }, "engines": { - "node": ">= 0.6" + "node": ">= 12.20.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" } }, - "node_modules/@nx/react/node_modules/body-parser": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", - "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", + "node_modules/@nx/webpack/node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", "dev": true, "license": "MIT", "dependencies": { - "bytes": "~3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "~1.2.0", - "http-errors": "~2.0.1", - "iconv-lite": "~0.4.24", - "on-finished": "~2.4.1", - "qs": "~6.14.0", - "raw-body": "~2.5.3", - "type-is": "~1.6.18", - "unpipe": "~1.0.0" + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">=10" } }, - "node_modules/@nx/react/node_modules/body-parser/node_modules/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "node_modules/@nx/webpack/node_modules/css-loader": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz", + "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", "dev": true, "license": "MIT", "dependencies": { - "depd": "~2.0.0", - "inherits": "~2.0.4", - "setprototypeof": "~1.2.0", - "statuses": "~2.0.2", - "toidentifier": "~1.0.1" + "icss-utils": "^5.1.0", + "postcss": "^8.4.33", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.5.4" }, "engines": { - "node": ">= 0.8" + "node": ">= 12.13.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/@nx/react/node_modules/body-parser/node_modules/statuses": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", - "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } } }, - "node_modules/@nx/react/node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@nx/react/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/@nx/webpack/node_modules/find-cache-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", + "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.0.0" + "common-path-prefix": "^3.0.0", + "pkg-dir": "^7.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@nx/react/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, - "node_modules/@nx/react/node_modules/express": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", - "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", + "node_modules/@nx/webpack/node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", "dev": true, "license": "MIT", "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "~1.20.3", - "content-disposition": "~0.5.4", - "content-type": "~1.0.4", - "cookie": "~0.7.1", - "cookie-signature": "~1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.3.1", - "fresh": "~0.5.2", - "http-errors": "~2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "~2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "~0.1.12", - "proxy-addr": "~2.0.7", - "qs": "~6.14.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "~0.19.0", - "serve-static": "~1.16.2", - "setprototypeof": "1.2.0", - "statuses": "~2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" }, "engines": { - "node": ">= 0.10.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@nx/react/node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "node_modules/@nx/webpack/node_modules/globby": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-12.2.0.tgz", + "integrity": "sha512-wiSuFQLZ+urS9x2gGPl1H5drc5twabmm4m2gTR27XDFyjUHJUNsS8o/2aKyIF6IoBaR630atdher0XJ5g6OMmA==", "dev": true, "license": "MIT", "dependencies": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" + "array-union": "^3.0.1", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.7", + "ignore": "^5.1.9", + "merge2": "^1.4.1", + "slash": "^4.0.0" }, "engines": { - "node": ">= 0.8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@nx/react/node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "node_modules/@nx/webpack/node_modules/less-loader": { + "version": "11.1.4", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-11.1.4.tgz", + "integrity": "sha512-6/GrYaB6QcW6Vj+/9ZPgKKs6G10YZai/l/eJ4SLwbzqNTBsAqt5hSLVF47TgsiBxV1P6eAU0GYRH3YRuQU9V3A==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "less": "^3.5.0 || ^4.0.0", + "webpack": "^5.0.0" } }, - "node_modules/@nx/react/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "node_modules/@nx/webpack/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", "dev": true, "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" }, "engines": { - "node": ">=0.10.0" + "node": ">=8.9.0" } }, - "node_modules/@nx/react/node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "node_modules/@nx/webpack/node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", "dev": true, "license": "MIT", + "dependencies": { + "p-locate": "^6.0.0" + }, "engines": { - "node": ">= 0.6" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@nx/react/node_modules/merge-descriptors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "node_modules/@nx/webpack/node_modules/mini-css-extract-plugin": { + "version": "2.4.7", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.4.7.tgz", + "integrity": "sha512-euWmddf0sk9Nv1O0gfeeUAvAkoSlWncNLF77C0TP2+WoPvy8mAHKOzMajcCz2dzvyt3CNgxb1obIEVFIRxaipg==", "dev": true, "license": "MIT", + "dependencies": { + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" } }, - "node_modules/@nx/react/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "node_modules/@nx/webpack/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", "dev": true, "license": "MIT", + "dependencies": { + "yocto-queue": "^1.0.0" + }, "engines": { - "node": ">= 0.6" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@nx/react/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "node_modules/@nx/webpack/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", "dev": true, "license": "MIT", "dependencies": { - "mime-db": "1.52.0" + "p-limit": "^4.0.0" }, "engines": { - "node": ">= 0.6" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@nx/react/node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "node_modules/@nx/webpack/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.6" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, - "node_modules/@nx/react/node_modules/path-to-regexp": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@nx/react/node_modules/raw-body": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", - "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", + "node_modules/@nx/webpack/node_modules/pkg-dir": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", + "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", "dev": true, "license": "MIT", "dependencies": { - "bytes": "~3.1.2", - "http-errors": "~2.0.1", - "iconv-lite": "~0.4.24", - "unpipe": "~1.0.0" + "find-up": "^6.3.0" }, "engines": { - "node": ">= 0.8" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@nx/react/node_modules/raw-body/node_modules/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "node_modules/@nx/webpack/node_modules/postcss-loader": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", + "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", "dev": true, "license": "MIT", "dependencies": { - "depd": "~2.0.0", - "inherits": "~2.0.4", - "setprototypeof": "~1.2.0", - "statuses": "~2.0.2", - "toidentifier": "~1.0.1" + "cosmiconfig": "^7.0.0", + "klona": "^2.0.5", + "semver": "^7.3.5" }, "engines": { - "node": ">= 0.8" + "node": ">= 12.13.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/express" + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" } }, - "node_modules/@nx/react/node_modules/raw-body/node_modules/statuses": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", - "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "node_modules/@nx/webpack/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@nx/react/node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "node_modules/@nx/webpack/node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/@nx/workspace": { + "version": "22.5.4", + "resolved": "https://registry.npmjs.org/@nx/workspace/-/workspace-22.5.4.tgz", + "integrity": "sha512-TZeuCDy+VN/5zqMYxHw15HKe2Ppcb9WBOebz4bmXE206c8Aop3S9QeLfys00Uobt9ZaYh9QUeN0iFsZm7TNv0w==", "dev": true, "license": "MIT", "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" + "@nx/devkit": "22.5.4", + "@zkochan/js-yaml": "0.0.7", + "chalk": "^4.1.0", + "enquirer": "~2.3.6", + "nx": "22.5.4", + "picomatch": "4.0.2", + "semver": "^7.6.3", + "tslib": "^2.3.0", + "yargs-parser": "21.1.1" } }, - "node_modules/@nx/react/node_modules/send/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "node_modules/@nx/workspace/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/@nx/react/node_modules/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "node_modules/@octokit/auth-token": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-6.0.0.tgz", + "integrity": "sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w==", "dev": true, "license": "MIT", - "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.19.0" - }, "engines": { - "node": ">= 0.8.0" + "node": ">= 20" } }, - "node_modules/@nx/react/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "node_modules/@octokit/core": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-7.0.6.tgz", + "integrity": "sha512-DhGl4xMVFGVIyMwswXeyzdL4uXD5OGILGX5N8Y+f6W7LhC1Ze2poSNrkF/fedpVDHEEZ+PHFW0vL14I+mm8K3Q==", "dev": true, "license": "MIT", + "dependencies": { + "@octokit/auth-token": "^6.0.0", + "@octokit/graphql": "^9.0.3", + "@octokit/request": "^10.0.6", + "@octokit/request-error": "^7.0.2", + "@octokit/types": "^16.0.0", + "before-after-hook": "^4.0.0", + "universal-user-agent": "^7.0.0" + }, "engines": { - "node": ">= 0.8" + "node": ">= 20" } }, - "node_modules/@nx/react/node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "node_modules/@octokit/endpoint": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-11.0.3.tgz", + "integrity": "sha512-FWFlNxghg4HrXkD3ifYbS/IdL/mDHjh9QcsNyhQjN8dplUoZbejsdpmuqdA76nxj2xoWPs7p8uX2SNr9rYu0Ag==", "dev": true, "license": "MIT", "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" + "@octokit/types": "^16.0.0", + "universal-user-agent": "^7.0.2" }, "engines": { - "node": ">= 0.6" + "node": ">= 20" } }, - "node_modules/@nx/rollup": { - "version": "22.3.3", - "resolved": "https://registry.npmjs.org/@nx/rollup/-/rollup-22.3.3.tgz", - "integrity": "sha512-BJdOHx0CcZ6YMvn7quKTfh9C/X7X9s1e2XAZv+LC2vxiRdxN80w4cq04yZE8i5PPpQNC6SG3OWIG6eDlkJhw5A==", + "node_modules/@octokit/graphql": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-9.0.3.tgz", + "integrity": "sha512-grAEuupr/C1rALFnXTv6ZQhFuL1D8G5y8CN04RgrO4FIPMrtm+mcZzFG7dcBm+nq+1ppNixu+Jd78aeJOYxlGA==", "dev": true, "license": "MIT", "dependencies": { - "@nx/devkit": "22.3.3", - "@nx/js": "22.3.3", - "@rollup/plugin-babel": "^6.0.4", - "@rollup/plugin-commonjs": "^25.0.7", - "@rollup/plugin-image": "^3.0.3", - "@rollup/plugin-json": "^6.1.0", - "@rollup/plugin-node-resolve": "^15.2.3", - "@rollup/plugin-typescript": "^12.1.0", - "autoprefixer": "^10.4.9", - "picocolors": "^1.1.0", - "picomatch": "4.0.2", - "postcss": "^8.4.38", - "rollup": "^4.14.0", - "rollup-plugin-postcss": "^4.0.2", - "rollup-plugin-typescript2": "^0.36.0", - "tslib": "^2.3.0" + "@octokit/request": "^10.0.6", + "@octokit/types": "^16.0.0", + "universal-user-agent": "^7.0.0" + }, + "engines": { + "node": ">= 20" } }, - "node_modules/@nx/rollup/node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "node_modules/@octokit/openapi-types": { + "version": "27.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-27.0.0.tgz", + "integrity": "sha512-whrdktVs1h6gtR+09+QsNk2+FO+49j6ga1c55YZudfEG+oKJVvJLQi3zkOm5JjiUXAagWK2tI2kTGKJ2Ys7MGA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@octokit/plugin-paginate-rest": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-14.0.0.tgz", + "integrity": "sha512-fNVRE7ufJiAA3XUrha2omTA39M6IXIc6GIZLvlbsm8QOQCYvpq/LkMNGyFlB1d8hTDzsAXa3OKtybdMAYsV/fw==", "dev": true, "license": "MIT", + "dependencies": { + "@octokit/types": "^16.0.0" + }, "engines": { - "node": ">=12" + "node": ">= 20" }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "peerDependencies": { + "@octokit/core": ">=6" } }, - "node_modules/@nx/rspack": { - "version": "22.3.3", - "resolved": "https://registry.npmjs.org/@nx/rspack/-/rspack-22.3.3.tgz", - "integrity": "sha512-5GDYYeUctJTzWX3DYSvVQvbK+GMB9PX9m4FmjNRCaxVGWZAe1LM7oQz61vj501m+CbkXxh1+hsVTPXzYOtTolQ==", + "node_modules/@octokit/plugin-retry": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-8.1.0.tgz", + "integrity": "sha512-O1FZgXeiGb2sowEr/hYTr6YunGdSAFWnr2fyW39Ah85H8O33ELASQxcvOFF5LE6Tjekcyu2ms4qAzJVhSaJxTw==", "dev": true, "license": "MIT", "dependencies": { - "@nx/devkit": "22.3.3", - "@nx/js": "22.3.3", - "@nx/module-federation": "22.3.3", - "@nx/web": "22.3.3", - "@phenomnomnominal/tsquery": "~5.0.1", - "@rspack/core": "^1.5.2", - "@rspack/dev-server": "^1.1.4", - "@rspack/plugin-react-refresh": "^1.0.0", - "autoprefixer": "^10.4.9", - "browserslist": "^4.26.0", - "css-loader": "^6.4.0", - "enquirer": "~2.3.6", - "express": "^4.21.2", - "http-proxy-middleware": "^3.0.5", - "less-loader": "^11.1.0", - "license-webpack-plugin": "^4.0.2", - "loader-utils": "^2.0.3", - "parse5": "4.0.0", - "picocolors": "^1.1.0", - "postcss": "^8.4.38", - "postcss-import": "~14.1.0", - "postcss-loader": "^8.1.1", - "sass": "^1.85.0", - "sass-embedded": "^1.83.4", - "sass-loader": "^16.0.4", - "source-map-loader": "^5.0.0", - "style-loader": "^3.3.0", - "ts-checker-rspack-plugin": "^1.1.1", - "tslib": "^2.3.0", - "webpack": "^5.101.3", - "webpack-node-externals": "^3.0.0" + "@octokit/request-error": "^7.0.2", + "@octokit/types": "^16.0.0", + "bottleneck": "^2.15.3" + }, + "engines": { + "node": ">= 20" }, "peerDependencies": { - "@module-federation/enhanced": "^0.21.2", - "@module-federation/node": "^2.7.21" + "@octokit/core": ">=7" } }, - "node_modules/@nx/rspack/node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "node_modules/@octokit/plugin-throttling": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-11.0.3.tgz", + "integrity": "sha512-34eE0RkFCKycLl2D2kq7W+LovheM/ex3AwZCYN8udpi6bxsyjZidb2McXs69hZhLmJlDqTSP8cH+jSRpiaijBg==", "dev": true, "license": "MIT", "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" + "@octokit/types": "^16.0.0", + "bottleneck": "^2.15.3" }, "engines": { - "node": ">= 0.6" + "node": ">= 20" + }, + "peerDependencies": { + "@octokit/core": "^7.0.0" } }, - "node_modules/@nx/rspack/node_modules/body-parser": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", - "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", + "node_modules/@octokit/request": { + "version": "10.0.8", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-10.0.8.tgz", + "integrity": "sha512-SJZNwY9pur9Agf7l87ywFi14W+Hd9Jg6Ifivsd33+/bGUQIjNujdFiXII2/qSlN2ybqUHfp5xpekMEjIBTjlSw==", "dev": true, "license": "MIT", "dependencies": { - "bytes": "~3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "~1.2.0", - "http-errors": "~2.0.1", - "iconv-lite": "~0.4.24", - "on-finished": "~2.4.1", - "qs": "~6.14.0", - "raw-body": "~2.5.3", - "type-is": "~1.6.18", - "unpipe": "~1.0.0" + "@octokit/endpoint": "^11.0.3", + "@octokit/request-error": "^7.0.2", + "@octokit/types": "^16.0.0", + "fast-content-type-parse": "^3.0.0", + "json-with-bigint": "^3.5.3", + "universal-user-agent": "^7.0.2" }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">= 20" } }, - "node_modules/@nx/rspack/node_modules/cookie-signature": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", - "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@nx/rspack/node_modules/css-loader": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz", - "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", + "node_modules/@octokit/request-error": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-7.1.0.tgz", + "integrity": "sha512-KMQIfq5sOPpkQYajXHwnhjCC0slzCNScLHs9JafXc4RAJI+9f+jNDlBNaIMTvazOPLgb4BnlhGJOTbnN0wIjPw==", "dev": true, "license": "MIT", "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.33", - "postcss-modules-extract-imports": "^3.1.0", - "postcss-modules-local-by-default": "^4.0.5", - "postcss-modules-scope": "^3.2.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.5.4" + "@octokit/types": "^16.0.0" }, "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } + "node": ">= 20" } }, - "node_modules/@nx/rspack/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/@octokit/types": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-16.0.0.tgz", + "integrity": "sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg==", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.0.0" + "@octokit/openapi-types": "^27.0.0" } }, - "node_modules/@nx/rspack/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, + "node_modules/@oslojs/encoding": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@oslojs/encoding/-/encoding-1.1.0.tgz", + "integrity": "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==", "license": "MIT" }, - "node_modules/@nx/rspack/node_modules/express": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", - "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", + "node_modules/@oxc-project/types": { + "version": "0.113.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.113.0.tgz", + "integrity": "sha512-Tp3XmgxwNQ9pEN9vxgJBAqdRamHibi76iowQ38O2I4PMpcvNRQNVsU2n1x1nv9yh0XoTrGFzf7cZSGxmixxrhA==", "dev": true, "license": "MIT", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "~1.20.3", - "content-disposition": "~0.5.4", - "content-type": "~1.0.4", - "cookie": "~0.7.1", - "cookie-signature": "~1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.3.1", - "fresh": "~0.5.2", - "http-errors": "~2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "~2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "~0.1.12", - "proxy-addr": "~2.0.7", - "qs": "~6.14.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "~0.19.0", - "serve-static": "~1.16.2", - "setprototypeof": "1.2.0", - "statuses": "~2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "url": "https://github.com/sponsors/Boshen" } }, - "node_modules/@nx/rspack/node_modules/finalhandler": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", - "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", + "node_modules/@oxc-resolver/binding-android-arm-eabi": { + "version": "11.19.1", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-android-arm-eabi/-/binding-android-arm-eabi-11.19.1.tgz", + "integrity": "sha512-aUs47y+xyXHUKlbhqHUjBABjvycq6YSD7bpxSW7vplUmdzAlJ93yXY6ZR0c1o1x5A/QKbENCvs3+NlY8IpIVzg==", + "cpu": [ + "arm" + ], "dev": true, "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "~2.4.1", - "parseurl": "~1.3.3", - "statuses": "~2.0.2", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } + "optional": true, + "os": [ + "android" + ] }, - "node_modules/@nx/rspack/node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "node_modules/@oxc-resolver/binding-android-arm64": { + "version": "11.19.1", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-android-arm64/-/binding-android-arm64-11.19.1.tgz", + "integrity": "sha512-oolbkRX+m7Pq2LNjr/kKgYeC7bRDMVTWPgxBGMjSpZi/+UskVo4jsMU3MLheZV55jL6c3rNelPl4oD60ggYmqA==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.6" - } + "optional": true, + "os": [ + "android" + ] }, - "node_modules/@nx/rspack/node_modules/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "node_modules/@oxc-resolver/binding-darwin-arm64": { + "version": "11.19.1", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-darwin-arm64/-/binding-darwin-arm64-11.19.1.tgz", + "integrity": "sha512-nUC6d2i3R5B12sUW4O646qD5cnMXf2oBGPLIIeaRfU9doJRORAbE2SGv4eW6rMqhD+G7nf2Y8TTJTLiiO3Q/dQ==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "depd": "~2.0.0", - "inherits": "~2.0.4", - "setprototypeof": "~1.2.0", - "statuses": "~2.0.2", - "toidentifier": "~1.0.1" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } + "optional": true, + "os": [ + "darwin" + ] }, - "node_modules/@nx/rspack/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "node_modules/@oxc-resolver/binding-darwin-x64": { + "version": "11.19.1", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-darwin-x64/-/binding-darwin-x64-11.19.1.tgz", + "integrity": "sha512-cV50vE5+uAgNcFa3QY1JOeKDSkM/9ReIcc/9wn4TavhW/itkDGrXhw9jaKnkQnGbjJ198Yh5nbX/Gr2mr4Z5jQ==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } + "optional": true, + "os": [ + "darwin" + ] }, - "node_modules/@nx/rspack/node_modules/less-loader": { - "version": "11.1.4", - "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-11.1.4.tgz", - "integrity": "sha512-6/GrYaB6QcW6Vj+/9ZPgKKs6G10YZai/l/eJ4SLwbzqNTBsAqt5hSLVF47TgsiBxV1P6eAU0GYRH3YRuQU9V3A==", + "node_modules/@oxc-resolver/binding-freebsd-x64": { + "version": "11.19.1", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-freebsd-x64/-/binding-freebsd-x64-11.19.1.tgz", + "integrity": "sha512-xZOQiYGFxtk48PBKff+Zwoym7ScPAIVp4c14lfLxizO2LTTTJe5sx9vQNGrBymrf/vatSPNMD4FgsaaRigPkqw==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "less": "^3.5.0 || ^4.0.0", - "webpack": "^5.0.0" - } + "optional": true, + "os": [ + "freebsd" + ] }, - "node_modules/@nx/rspack/node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "node_modules/@oxc-resolver/binding-linux-arm-gnueabihf": { + "version": "11.19.1", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-11.19.1.tgz", + "integrity": "sha512-lXZYWAC6kaGe/ky2su94e9jN9t6M0/6c+GrSlCqL//XO1cxi5lpAhnJYdyrKfm0ZEr/c7RNyAx3P7FSBcBd5+A==", + "cpu": [ + "arm" + ], "dev": true, "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@nx/rspack/node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "node_modules/@oxc-resolver/binding-linux-arm-musleabihf": { + "version": "11.19.1", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-11.19.1.tgz", + "integrity": "sha512-veG1kKsuK5+t2IsO9q0DErYVSw2azvCVvWHnfTOS73WE0STdLLB7Q1bB9WR+yHPQM76ASkFyRbogWo1GR1+WbQ==", + "cpu": [ + "arm" + ], "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.6" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@nx/rspack/node_modules/merge-descriptors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "node_modules/@oxc-resolver/binding-linux-arm64-gnu": { + "version": "11.19.1", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-11.19.1.tgz", + "integrity": "sha512-heV2+jmXyYnUrpUXSPugqWDRpnsQcDm2AX4wzTuvgdlZfoNYO0O3W2AVpJYaDn9AG4JdM6Kxom8+foE7/BcSig==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@nx/rspack/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "node_modules/@oxc-resolver/binding-linux-arm64-musl": { + "version": "11.19.1", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-arm64-musl/-/binding-linux-arm64-musl-11.19.1.tgz", + "integrity": "sha512-jvo2Pjs1c9KPxMuMPIeQsgu0mOJF9rEb3y3TdpsrqwxRM+AN6/nDDwv45n5ZrUnQMsdBy5gIabioMKnQfWo9ew==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.6" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@nx/rspack/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "node_modules/@oxc-resolver/binding-linux-ppc64-gnu": { + "version": "11.19.1", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-11.19.1.tgz", + "integrity": "sha512-vLmdNxWCdN7Uo5suays6A/+ywBby2PWBBPXctWPg5V0+eVuzsJxgAn6MMB4mPlshskYbppjpN2Zg83ArHze9gQ==", + "cpu": [ + "ppc64" + ], "dev": true, "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@nx/rspack/node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "node_modules/@oxc-resolver/binding-linux-riscv64-gnu": { + "version": "11.19.1", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-11.19.1.tgz", + "integrity": "sha512-/b+WgR+VTSBxzgOhDO7TlMXC1ufPIMR6Vj1zN+/x+MnyXGW7prTLzU9eW85Aj7Th7CCEG9ArCbTeqxCzFWdg2w==", + "cpu": [ + "riscv64" + ], "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.6" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@nx/rspack/node_modules/path-to-regexp": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "node_modules/@oxc-resolver/binding-linux-riscv64-musl": { + "version": "11.19.1", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-11.19.1.tgz", + "integrity": "sha512-YlRdeWb9j42p29ROh+h4eg/OQ3dTJlpHSa+84pUM9+p6i3djtPz1q55yLJhgW9XfDch7FN1pQ/Vd6YP+xfRIuw==", + "cpu": [ + "riscv64" + ], "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@nx/rspack/node_modules/raw-body": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", - "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", + "node_modules/@oxc-resolver/binding-linux-s390x-gnu": { + "version": "11.19.1", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-11.19.1.tgz", + "integrity": "sha512-EDpafVOQWF8/MJynsjOGFThcqhRHy417sRyLfQmeiamJ8qVhSKAn2Dn2VVKUGCjVB9C46VGjhNo7nOPUi1x6uA==", + "cpu": [ + "s390x" + ], "dev": true, "license": "MIT", - "dependencies": { - "bytes": "~3.1.2", - "http-errors": "~2.0.1", - "iconv-lite": "~0.4.24", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@nx/rspack/node_modules/send": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", - "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", + "node_modules/@oxc-resolver/binding-linux-x64-gnu": { + "version": "11.19.1", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-x64-gnu/-/binding-linux-x64-gnu-11.19.1.tgz", + "integrity": "sha512-NxjZe+rqWhr+RT8/Ik+5ptA3oz7tUw361Wa5RWQXKnfqwSSHdHyrw6IdcTfYuml9dM856AlKWZIUXDmA9kkiBQ==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "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" - }, - "engines": { - "node": ">= 0.8.0" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@nx/rspack/node_modules/serve-static": { - "version": "1.16.3", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", - "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", + "node_modules/@oxc-resolver/binding-linux-x64-musl": { + "version": "11.19.1", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-linux-x64-musl/-/binding-linux-x64-musl-11.19.1.tgz", + "integrity": "sha512-cM/hQwsO3ReJg5kR+SpI69DMfvNCp+A/eVR4b4YClE5bVZwz8rh2Nh05InhwI5HR/9cArbEkzMjcKgTHS6UaNw==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "~0.19.1" - }, - "engines": { - "node": ">= 0.8.0" - } + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@nx/rspack/node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "node_modules/@oxc-resolver/binding-openharmony-arm64": { + "version": "11.19.1", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-openharmony-arm64/-/binding-openharmony-arm64-11.19.1.tgz", + "integrity": "sha512-QF080IowFB0+9Rh6RcD19bdgh49BpQHUW5TajG1qvWHvmrQznTZZjYlgE2ltLXyKY+qs4F/v5xuX1XS7Is+3qA==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } + "optional": true, + "os": [ + "openharmony" + ] }, - "node_modules/@nx/vite": { - "version": "22.3.3", - "resolved": "https://registry.npmjs.org/@nx/vite/-/vite-22.3.3.tgz", - "integrity": "sha512-JYtQeKJVID6Am65M1gDxCBLyO7pA6p/dBxnQyWEHsbJ5VLiOyCxr+W+YOE4p4roVlQxjAaCMqvtGH3cWnNQWxg==", + "node_modules/@oxc-resolver/binding-wasm32-wasi": { + "version": "11.19.1", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-wasm32-wasi/-/binding-wasm32-wasi-11.19.1.tgz", + "integrity": "sha512-w8UCKhX826cP/ZLokXDS6+milN8y4X7zidsAttEdWlVoamTNf6lhBJldaWr3ukTDiye7s4HRcuPEPOXNC432Vg==", + "cpu": [ + "wasm32" + ], "dev": true, "license": "MIT", + "optional": true, "dependencies": { - "@nx/devkit": "22.3.3", - "@nx/js": "22.3.3", - "@nx/vitest": "22.3.3", - "@phenomnomnominal/tsquery": "~5.0.1", - "ajv": "^8.0.0", - "enquirer": "~2.3.6", - "picomatch": "4.0.2", - "semver": "^7.6.3", - "tsconfig-paths": "^4.1.2", - "tslib": "^2.3.0" + "@napi-rs/wasm-runtime": "^1.1.1" }, - "peerDependencies": { - "vite": "^5.0.0 || ^6.0.0 || ^7.0.0", - "vitest": "^1.3.1 || ^2.0.0 || ^3.0.0 || ^4.0.0" + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@nx/vite/node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "node_modules/@oxc-resolver/binding-wasm32-wasi/node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.1.tgz", + "integrity": "sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==", "dev": true, "license": "MIT", - "engines": { - "node": ">=12" + "optional": true, + "dependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1", + "@tybys/wasm-util": "^0.10.1" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" } }, - "node_modules/@nx/vitest": { - "version": "22.3.3", - "resolved": "https://registry.npmjs.org/@nx/vitest/-/vitest-22.3.3.tgz", - "integrity": "sha512-9BNwWadIfT5EAnEPXLM0n/ucuJ7IQyn+QRMUkUBt6wmms9f0OKMtLpiFxHIMrnQDf0eEk845jo21j7Og2cCZyA==", + "node_modules/@oxc-resolver/binding-win32-arm64-msvc": { + "version": "11.19.1", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-11.19.1.tgz", + "integrity": "sha512-nJ4AsUVZrVKwnU/QRdzPCCrO0TrabBqgJ8pJhXITdZGYOV28TIYystV1VFLbQ7DtAcaBHpocT5/ZJnF78YJPtQ==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@nx/devkit": "22.3.3", - "@nx/js": "22.3.3", - "@phenomnomnominal/tsquery": "~5.0.1", - "semver": "^7.6.3", - "tslib": "^2.3.0" - }, - "peerDependencies": { - "vite": "^5.0.0 || ^6.0.0 || ^7.0.0", - "vitest": "^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0" - }, - "peerDependenciesMeta": { - "vite": { - "optional": true - }, - "vitest": { - "optional": true - } - } + "optional": true, + "os": [ + "win32" + ] }, - "node_modules/@nx/web": { - "version": "22.3.3", - "resolved": "https://registry.npmjs.org/@nx/web/-/web-22.3.3.tgz", - "integrity": "sha512-0iuAxXCljxCAfQ5N4SffMuf0CuUFGJoO5nzOTqnZ60pRy+JIWZ+DXfh7bfHxTEcE3JQ6nT/hbZVLPMVNleoy7Q==", + "node_modules/@oxc-resolver/binding-win32-ia32-msvc": { + "version": "11.19.1", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-11.19.1.tgz", + "integrity": "sha512-EW+ND5q2Tl+a3pH81l1QbfgbF3HmqgwLfDfVithRFheac8OTcnbXt/JxqD2GbDkb7xYEqy1zNaVFRr3oeG8npA==", + "cpu": [ + "ia32" + ], "dev": true, "license": "MIT", - "dependencies": { - "@nx/devkit": "22.3.3", - "@nx/js": "22.3.3", - "detect-port": "^1.5.1", - "http-server": "^14.1.0", - "picocolors": "^1.1.0", - "tslib": "^2.3.0" - } + "optional": true, + "os": [ + "win32" + ] }, - "node_modules/@nx/webpack": { - "version": "22.3.3", - "resolved": "https://registry.npmjs.org/@nx/webpack/-/webpack-22.3.3.tgz", - "integrity": "sha512-Ga8KuMoTl7fVvOEMPk+l/+C//IHwbLeCyhBx4+9xsB6o+TqvB/P7M5S70VRB+BIpf9JRgO7KU6ZfabAUkDMqTA==", + "node_modules/@oxc-resolver/binding-win32-x64-msvc": { + "version": "11.19.1", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-win32-x64-msvc/-/binding-win32-x64-msvc-11.19.1.tgz", + "integrity": "sha512-6hIU3RQu45B+VNTY4Ru8ppFwjVS/S5qwYyGhBotmjxfEKk41I2DlGtRfGJndZ5+6lneE2pwloqunlOyZuX/XAw==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@babel/core": "^7.23.2", - "@nx/devkit": "22.3.3", - "@nx/js": "22.3.3", - "@phenomnomnominal/tsquery": "~5.0.1", - "ajv": "^8.12.0", - "autoprefixer": "^10.4.9", - "babel-loader": "^9.1.2", - "browserslist": "^4.26.0", - "copy-webpack-plugin": "^10.2.4", - "css-loader": "^6.4.0", - "css-minimizer-webpack-plugin": "^5.0.0", - "fork-ts-checker-webpack-plugin": "7.2.13", - "less": "^4.1.3", - "less-loader": "^11.1.0", - "license-webpack-plugin": "^4.0.2", - "loader-utils": "^2.0.3", - "mini-css-extract-plugin": "~2.4.7", - "parse5": "4.0.0", - "picocolors": "^1.1.0", - "postcss": "^8.4.38", - "postcss-import": "~14.1.0", - "postcss-loader": "^6.1.1", - "rxjs": "^7.8.0", - "sass": "^1.85.0", - "sass-embedded": "^1.83.4", - "sass-loader": "^16.0.4", - "source-map-loader": "^5.0.0", - "style-loader": "^3.3.0", - "terser-webpack-plugin": "^5.3.3", - "ts-loader": "^9.3.1", - "tsconfig-paths-webpack-plugin": "4.2.0", - "tslib": "^2.3.0", - "webpack": "^5.101.3", - "webpack-dev-server": "^5.2.1", - "webpack-node-externals": "^3.0.0", - "webpack-subresource-integrity": "^5.1.0" - } + "optional": true, + "os": [ + "win32" + ] }, - "node_modules/@nx/webpack/node_modules/array-union": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz", - "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==", + "node_modules/@parcel/watcher": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.6.tgz", + "integrity": "sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==", "dev": true, + "hasInstallScript": true, "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^2.0.3", + "is-glob": "^4.0.3", + "node-addon-api": "^7.0.0", + "picomatch": "^4.0.3" + }, "engines": { - "node": ">=12" + "node": ">= 10.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.6", + "@parcel/watcher-darwin-arm64": "2.5.6", + "@parcel/watcher-darwin-x64": "2.5.6", + "@parcel/watcher-freebsd-x64": "2.5.6", + "@parcel/watcher-linux-arm-glibc": "2.5.6", + "@parcel/watcher-linux-arm-musl": "2.5.6", + "@parcel/watcher-linux-arm64-glibc": "2.5.6", + "@parcel/watcher-linux-arm64-musl": "2.5.6", + "@parcel/watcher-linux-x64-glibc": "2.5.6", + "@parcel/watcher-linux-x64-musl": "2.5.6", + "@parcel/watcher-win32-arm64": "2.5.6", + "@parcel/watcher-win32-ia32": "2.5.6", + "@parcel/watcher-win32-x64": "2.5.6" } }, - "node_modules/@nx/webpack/node_modules/babel-loader": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.2.1.tgz", - "integrity": "sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==", + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.6.tgz", + "integrity": "sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "find-cache-dir": "^4.0.0", - "schema-utils": "^4.0.0" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">= 14.15.0" + "node": ">= 10.0.0" }, - "peerDependencies": { - "@babel/core": "^7.12.0", - "webpack": ">=5" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@nx/webpack/node_modules/copy-webpack-plugin": { - "version": "10.2.4", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-10.2.4.tgz", - "integrity": "sha512-xFVltahqlsRcyyJqQbDY6EYTtyQZF9rf+JPjwHObLdPFMEISqkFkr7mFoVOC6BfYS/dNThyoQKvziugm+OnwBg==", + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.6.tgz", + "integrity": "sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "fast-glob": "^3.2.7", - "glob-parent": "^6.0.1", - "globby": "^12.0.2", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">= 12.20.0" + "node": ">= 10.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" + "url": "https://opencollective.com/parcel" } }, - "node_modules/@nx/webpack/node_modules/cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.6.tgz", + "integrity": "sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=10" + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@nx/webpack/node_modules/css-loader": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz", - "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.6.tgz", + "integrity": "sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.33", - "postcss-modules-extract-imports": "^3.1.0", - "postcss-modules-local-by-default": "^4.0.5", - "postcss-modules-scope": "^3.2.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.5.4" - }, + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">= 12.13.0" + "node": ">= 10.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } + "url": "https://opencollective.com/parcel" } }, - "node_modules/@nx/webpack/node_modules/find-cache-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", - "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.6.tgz", + "integrity": "sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==", + "cpu": [ + "arm" + ], "dev": true, "license": "MIT", - "dependencies": { - "common-path-prefix": "^3.0.0", - "pkg-dir": "^7.0.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=14.16" + "node": ">= 10.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@nx/webpack/node_modules/find-up": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.6.tgz", + "integrity": "sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==", + "cpu": [ + "arm" + ], "dev": true, "license": "MIT", - "dependencies": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">= 10.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@nx/webpack/node_modules/globby": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-12.2.0.tgz", - "integrity": "sha512-wiSuFQLZ+urS9x2gGPl1H5drc5twabmm4m2gTR27XDFyjUHJUNsS8o/2aKyIF6IoBaR630atdher0XJ5g6OMmA==", + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.6.tgz", + "integrity": "sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "array-union": "^3.0.1", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.7", - "ignore": "^5.1.9", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">= 10.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@nx/webpack/node_modules/less-loader": { - "version": "11.1.4", - "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-11.1.4.tgz", - "integrity": "sha512-6/GrYaB6QcW6Vj+/9ZPgKKs6G10YZai/l/eJ4SLwbzqNTBsAqt5hSLVF47TgsiBxV1P6eAU0GYRH3YRuQU9V3A==", + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.6.tgz", + "integrity": "sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 14.15.0" + "node": ">= 10.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "less": "^3.5.0 || ^4.0.0", - "webpack": "^5.0.0" + "url": "https://opencollective.com/parcel" } }, - "node_modules/@nx/webpack/node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.6.tgz", + "integrity": "sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=8.9.0" + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@nx/webpack/node_modules/locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.6.tgz", + "integrity": "sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "p-locate": "^6.0.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">= 10.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@nx/webpack/node_modules/mini-css-extract-plugin": { - "version": "2.4.7", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.4.7.tgz", - "integrity": "sha512-euWmddf0sk9Nv1O0gfeeUAvAkoSlWncNLF77C0TP2+WoPvy8mAHKOzMajcCz2dzvyt3CNgxb1obIEVFIRxaipg==", + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.6.tgz", + "integrity": "sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "schema-utils": "^4.0.0" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">= 12.13.0" + "node": ">= 10.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" + "url": "https://opencollective.com/parcel" } }, - "node_modules/@nx/webpack/node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.6.tgz", + "integrity": "sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==", + "cpu": [ + "ia32" + ], "dev": true, "license": "MIT", - "dependencies": { - "yocto-queue": "^1.0.0" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">= 10.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@nx/webpack/node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.6.tgz", + "integrity": "sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "p-limit": "^4.0.0" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">= 10.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@nx/webpack/node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } + "node_modules/@parcel/watcher/node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true, + "license": "MIT", + "optional": true }, - "node_modules/@nx/webpack/node_modules/pkg-dir": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", - "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", + "node_modules/@peculiar/asn1-cms": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-cms/-/asn1-cms-2.6.1.tgz", + "integrity": "sha512-vdG4fBF6Lkirkcl53q6eOdn3XYKt+kJTG59edgRZORlg/3atWWEReRCx5rYE1ZzTTX6vLK5zDMjHh7vbrcXGtw==", "dev": true, "license": "MIT", "dependencies": { - "find-up": "^6.3.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.1", + "@peculiar/asn1-x509-attr": "^2.6.1", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" } }, - "node_modules/@nx/webpack/node_modules/postcss-loader": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", - "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", + "node_modules/@peculiar/asn1-csr": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-csr/-/asn1-csr-2.6.1.tgz", + "integrity": "sha512-WRWnKfIocHyzFYQTka8O/tXCiBquAPSrRjXbOkHbO4qdmS6loffCEGs+rby6WxxGdJCuunnhS2duHURhjyio6w==", "dev": true, "license": "MIT", "dependencies": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.5", - "semver": "^7.3.5" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^5.0.0" + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.1", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" } }, - "node_modules/@nx/webpack/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "node_modules/@peculiar/asn1-ecc": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-ecc/-/asn1-ecc-2.6.1.tgz", + "integrity": "sha512-+Vqw8WFxrtDIN5ehUdvlN2m73exS2JVG0UAyfVB31gIfor3zWEAQPD+K9ydCxaj3MLen9k0JhKpu9LqviuCE1g==", "dev": true, "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.1", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" } }, - "node_modules/@nx/webpack/node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "node_modules/@peculiar/asn1-pfx": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pfx/-/asn1-pfx-2.6.1.tgz", + "integrity": "sha512-nB5jVQy3MAAWvq0KY0R2JUZG8bO/bTLpnwyOzXyEh/e54ynGTatAR+csOnXkkVD9AFZ2uL8Z7EV918+qB1qDvw==", "dev": true, - "license": "ISC", - "engines": { - "node": ">= 6" + "license": "MIT", + "dependencies": { + "@peculiar/asn1-cms": "^2.6.1", + "@peculiar/asn1-pkcs8": "^2.6.1", + "@peculiar/asn1-rsa": "^2.6.1", + "@peculiar/asn1-schema": "^2.6.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" } }, - "node_modules/@nx/webpack/node_modules/yocto-queue": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz", - "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==", + "node_modules/@peculiar/asn1-pkcs8": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs8/-/asn1-pkcs8-2.6.1.tgz", + "integrity": "sha512-JB5iQ9Izn5yGMw3ZG4Nw3Xn/hb/G38GYF3lf7WmJb8JZUydhVGEjK/ZlFSWhnlB7K/4oqEs8HnfFIKklhR58Tw==", "dev": true, "license": "MIT", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.1", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" } }, - "node_modules/@nx/workspace": { - "version": "22.3.3", - "resolved": "https://registry.npmjs.org/@nx/workspace/-/workspace-22.3.3.tgz", - "integrity": "sha512-A7Qd1Yi/hp/VPvig6tV+JmlYVSA4WhckNkP1giYZoESpGLxRlpwINpd5ii3oafOlglUdEZ8AiS3X+RUg9QmCAQ==", + "node_modules/@peculiar/asn1-pkcs9": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs9/-/asn1-pkcs9-2.6.1.tgz", + "integrity": "sha512-5EV8nZoMSxeWmcxWmmcolg22ojZRgJg+Y9MX2fnE2bGRo5KQLqV5IL9kdSQDZxlHz95tHvIq9F//bvL1OeNILw==", "dev": true, "license": "MIT", "dependencies": { - "@nx/devkit": "22.3.3", - "@zkochan/js-yaml": "0.0.7", - "chalk": "^4.1.0", - "enquirer": "~2.3.6", - "nx": "22.3.3", - "picomatch": "4.0.2", - "semver": "^7.6.3", - "tslib": "^2.3.0", - "yargs-parser": "21.1.1" + "@peculiar/asn1-cms": "^2.6.1", + "@peculiar/asn1-pfx": "^2.6.1", + "@peculiar/asn1-pkcs8": "^2.6.1", + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.1", + "@peculiar/asn1-x509-attr": "^2.6.1", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" } }, - "node_modules/@nx/workspace/node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "node_modules/@peculiar/asn1-rsa": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-rsa/-/asn1-rsa-2.6.1.tgz", + "integrity": "sha512-1nVMEh46SElUt5CB3RUTV4EG/z7iYc7EoaDY5ECwganibQPkZ/Y2eMsTKB/LeyrUJ+W/tKoD9WUqIy8vB+CEdA==", "dev": true, "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "dependencies": { + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.1", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" } }, - "node_modules/@octokit/auth-token": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-6.0.0.tgz", - "integrity": "sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w==", + "node_modules/@peculiar/asn1-schema": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.6.0.tgz", + "integrity": "sha512-xNLYLBFTBKkCzEZIw842BxytQQATQv+lDTCEMZ8C196iJcJJMBUZxrhSTxLaohMyKK8QlzRNTRkUmanucnDSqg==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 20" + "dependencies": { + "asn1js": "^3.0.6", + "pvtsutils": "^1.3.6", + "tslib": "^2.8.1" } }, - "node_modules/@octokit/core": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-7.0.6.tgz", - "integrity": "sha512-DhGl4xMVFGVIyMwswXeyzdL4uXD5OGILGX5N8Y+f6W7LhC1Ze2poSNrkF/fedpVDHEEZ+PHFW0vL14I+mm8K3Q==", + "node_modules/@peculiar/asn1-x509": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509/-/asn1-x509-2.6.1.tgz", + "integrity": "sha512-O9jT5F1A2+t3r7C4VT7LYGXqkGLK7Kj1xFpz7U0isPrubwU5PbDoyYtx6MiGst29yq7pXN5vZbQFKRCP+lLZlA==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/auth-token": "^6.0.0", - "@octokit/graphql": "^9.0.3", - "@octokit/request": "^10.0.6", - "@octokit/request-error": "^7.0.2", - "@octokit/types": "^16.0.0", - "before-after-hook": "^4.0.0", - "universal-user-agent": "^7.0.0" - }, - "engines": { - "node": ">= 20" + "@peculiar/asn1-schema": "^2.6.0", + "asn1js": "^3.0.6", + "pvtsutils": "^1.3.6", + "tslib": "^2.8.1" } }, - "node_modules/@octokit/endpoint": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-11.0.2.tgz", - "integrity": "sha512-4zCpzP1fWc7QlqunZ5bSEjxc6yLAlRTnDwKtgXfcI/FxxGoqedDG8V2+xJ60bV2kODqcGB+nATdtap/XYq2NZQ==", + "node_modules/@peculiar/asn1-x509-attr": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509-attr/-/asn1-x509-attr-2.6.1.tgz", + "integrity": "sha512-tlW6cxoHwgcQghnJwv3YS+9OO1737zgPogZ+CgWRUK4roEwIPzRH4JEiG770xe5HX2ATfCpmX60gurfWIF9dcQ==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/types": "^16.0.0", - "universal-user-agent": "^7.0.2" - }, - "engines": { - "node": ">= 20" + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.1", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" } }, - "node_modules/@octokit/graphql": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-9.0.3.tgz", - "integrity": "sha512-grAEuupr/C1rALFnXTv6ZQhFuL1D8G5y8CN04RgrO4FIPMrtm+mcZzFG7dcBm+nq+1ppNixu+Jd78aeJOYxlGA==", + "node_modules/@peculiar/x509": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/@peculiar/x509/-/x509-1.14.3.tgz", + "integrity": "sha512-C2Xj8FZ0uHWeCXXqX5B4/gVFQmtSkiuOolzAgutjTfseNOHT3pUjljDZsTSxXFGgio54bCzVFqmEOUrIVk8RDA==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/request": "^10.0.6", - "@octokit/types": "^16.0.0", - "universal-user-agent": "^7.0.0" + "@peculiar/asn1-cms": "^2.6.0", + "@peculiar/asn1-csr": "^2.6.0", + "@peculiar/asn1-ecc": "^2.6.0", + "@peculiar/asn1-pkcs9": "^2.6.0", + "@peculiar/asn1-rsa": "^2.6.0", + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.0", + "pvtsutils": "^1.3.6", + "reflect-metadata": "^0.2.2", + "tslib": "^2.8.1", + "tsyringe": "^4.10.0" }, "engines": { - "node": ">= 20" + "node": ">=20.0.0" } }, - "node_modules/@octokit/openapi-types": { - "version": "27.0.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-27.0.0.tgz", - "integrity": "sha512-whrdktVs1h6gtR+09+QsNk2+FO+49j6ga1c55YZudfEG+oKJVvJLQi3zkOm5JjiUXAagWK2tI2kTGKJ2Ys7MGA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@octokit/plugin-paginate-rest": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-14.0.0.tgz", - "integrity": "sha512-fNVRE7ufJiAA3XUrha2omTA39M6IXIc6GIZLvlbsm8QOQCYvpq/LkMNGyFlB1d8hTDzsAXa3OKtybdMAYsV/fw==", + "node_modules/@phenomnomnominal/tsquery": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/@phenomnomnominal/tsquery/-/tsquery-6.1.4.tgz", + "integrity": "sha512-3tHlGy/fxjJCHqIV8nelAzbRTNkCUY+k7lqBGKNuQz99H2OKGRt6oU+U2SZs6LYrbOe8mxMFl6kq6gzHapFRkw==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/types": "^16.0.0" - }, - "engines": { - "node": ">= 20" + "@types/esquery": "^1.5.0", + "esquery": "^1.5.0" }, "peerDependencies": { - "@octokit/core": ">=6" + "typescript": "^3 || ^4 || ^5" } }, - "node_modules/@octokit/plugin-retry": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-8.0.3.tgz", - "integrity": "sha512-vKGx1i3MC0za53IzYBSBXcrhmd+daQDzuZfYDd52X5S0M2otf3kVZTVP8bLA3EkU0lTvd1WEC2OlNNa4G+dohA==", + "node_modules/@pkgr/core": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", + "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", "dev": true, "license": "MIT", - "dependencies": { - "@octokit/request-error": "^7.0.2", - "@octokit/types": "^16.0.0", - "bottleneck": "^2.15.3" - }, "engines": { - "node": ">= 20" + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" }, - "peerDependencies": { - "@octokit/core": ">=7" + "funding": { + "url": "https://opencollective.com/pkgr" } }, - "node_modules/@octokit/plugin-throttling": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-11.0.3.tgz", - "integrity": "sha512-34eE0RkFCKycLl2D2kq7W+LovheM/ex3AwZCYN8udpi6bxsyjZidb2McXs69hZhLmJlDqTSP8cH+jSRpiaijBg==", + "node_modules/@pnpm/config.env-replace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", + "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", "dev": true, "license": "MIT", - "dependencies": { - "@octokit/types": "^16.0.0", - "bottleneck": "^2.15.3" - }, "engines": { - "node": ">= 20" - }, - "peerDependencies": { - "@octokit/core": "^7.0.0" + "node": ">=12.22.0" } }, - "node_modules/@octokit/request": { - "version": "10.0.7", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-10.0.7.tgz", - "integrity": "sha512-v93h0i1yu4idj8qFPZwjehoJx4j3Ntn+JhXsdJrG9pYaX6j/XRz2RmasMUHtNgQD39nrv/VwTWSqK0RNXR8upA==", + "node_modules/@pnpm/network.ca-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", + "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/endpoint": "^11.0.2", - "@octokit/request-error": "^7.0.2", - "@octokit/types": "^16.0.0", - "fast-content-type-parse": "^3.0.0", - "universal-user-agent": "^7.0.2" + "graceful-fs": "4.2.10" }, "engines": { - "node": ">= 20" + "node": ">=12.22.0" } }, - "node_modules/@octokit/request-error": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-7.1.0.tgz", - "integrity": "sha512-KMQIfq5sOPpkQYajXHwnhjCC0slzCNScLHs9JafXc4RAJI+9f+jNDlBNaIMTvazOPLgb4BnlhGJOTbnN0wIjPw==", + "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true, + "license": "ISC" + }, + "node_modules/@pnpm/npm-conf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-3.0.2.tgz", + "integrity": "sha512-h104Kh26rR8tm+a3Qkc5S4VLYint3FE48as7+/5oCEcKR2idC/pF1G6AhIXKI+eHPJa/3J9i5z0Al47IeGHPkA==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/types": "^16.0.0" + "@pnpm/config.env-replace": "^1.1.0", + "@pnpm/network.ca-file": "^1.0.1", + "config-chain": "^1.1.11" }, "engines": { - "node": ">= 20" + "node": ">=12" } }, - "node_modules/@octokit/types": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-16.0.0.tgz", - "integrity": "sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg==", + "node_modules/@polka/url": { + "version": "1.0.0-next.29", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", + "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/openapi-types": "^27.0.0" - } - }, - "node_modules/@oslojs/encoding": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@oslojs/encoding/-/encoding-1.1.0.tgz", - "integrity": "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==", "license": "MIT" }, - "node_modules/@parcel/watcher": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", - "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", - "dev": true, - "hasInstallScript": true, + "node_modules/@remix-run/router": { + "version": "1.23.2", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.23.2.tgz", + "integrity": "sha512-Ic6m2U/rMjTkhERIa/0ZtXJP17QUi2CbWE7cqx4J58M8aA3QTfW+2UlQ4psvTX9IO1RfNVhK3pcpdjej7L+t2w==", "license": "MIT", - "optional": true, - "dependencies": { - "detect-libc": "^1.0.3", - "is-glob": "^4.0.3", - "micromatch": "^4.0.5", - "node-addon-api": "^7.0.0" - }, "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "optionalDependencies": { - "@parcel/watcher-android-arm64": "2.5.1", - "@parcel/watcher-darwin-arm64": "2.5.1", - "@parcel/watcher-darwin-x64": "2.5.1", - "@parcel/watcher-freebsd-x64": "2.5.1", - "@parcel/watcher-linux-arm-glibc": "2.5.1", - "@parcel/watcher-linux-arm-musl": "2.5.1", - "@parcel/watcher-linux-arm64-glibc": "2.5.1", - "@parcel/watcher-linux-arm64-musl": "2.5.1", - "@parcel/watcher-linux-x64-glibc": "2.5.1", - "@parcel/watcher-linux-x64-musl": "2.5.1", - "@parcel/watcher-win32-arm64": "2.5.1", - "@parcel/watcher-win32-ia32": "2.5.1", - "@parcel/watcher-win32-x64": "2.5.1" + "node": ">=14.0.0" } }, - "node_modules/@parcel/watcher-android-arm64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", - "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.4.tgz", + "integrity": "sha512-vRq9f4NzvbdZavhQbjkJBx7rRebDKYR9zHfO/Wg486+I7bSecdUapzCm5cyXoK+LHokTxgSq7A5baAXUZkIz0w==", "cpu": [ "arm64" ], @@ -15051,17 +12993,13 @@ "android" ], "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@parcel/watcher-darwin-arm64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", - "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.4.tgz", + "integrity": "sha512-kFgEvkWLqt3YCgKB5re9RlIrx9bRsvyVUnaTakEpOPuLGzLpLapYxE9BufJNvPg8GjT6mB1alN4yN1NjzoeM8Q==", "cpu": [ "arm64" ], @@ -15072,17 +13010,13 @@ "darwin" ], "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@parcel/watcher-darwin-x64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", - "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.4.tgz", + "integrity": "sha512-JXmaOJGsL/+rsmMfutcDjxWM2fTaVgCHGoXS7nE8Z3c9NAYjGqHvXrAhMUZvMpHS/k7Mg+X7n/MVKb7NYWKKww==", "cpu": [ "x64" ], @@ -15093,17 +13027,13 @@ "darwin" ], "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@parcel/watcher-freebsd-x64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", - "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.4.tgz", + "integrity": "sha512-ep3Catd6sPnHTM0P4hNEvIv5arnDvk01PfyJIJ+J3wVCG1eEaPo09tvFqdtcaTrkwQy0VWR24uz+cb4IsK53Qw==", "cpu": [ "x64" ], @@ -15114,17 +13044,13 @@ "freebsd" ], "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@parcel/watcher-linux-arm-glibc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", - "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.4.tgz", + "integrity": "sha512-LwA5ayKIpnsgXJEwWc3h8wPiS33NMIHd9BhsV92T8VetVAbGe2qXlJwNVDGHN5cOQ22R9uYvbrQir2AB+ntT2w==", "cpu": [ "arm" ], @@ -15135,19 +13061,15 @@ "linux" ], "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@parcel/watcher-linux-arm-musl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", - "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.4.tgz", + "integrity": "sha512-AC1WsGdlV1MtGay/OQ4J9T7GRadVnpYRzTcygV1hKnypbYN20Yh4t6O1Sa2qRBMqv1etulUknqXjc3CTIsBu6A==", "cpu": [ - "arm" + "arm64" ], "dev": true, "license": "MIT", @@ -15156,17 +13078,13 @@ "linux" ], "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@parcel/watcher-linux-arm64-glibc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", - "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.4.tgz", + "integrity": "sha512-lU+6rgXXViO61B4EudxtVMXSOfiZONR29Sys5VGSetUY7X8mg9FCKIIjcPPj8xNDeYzKl+H8F/qSKOBVFJChCQ==", "cpu": [ "arm64" ], @@ -15177,19 +13095,15 @@ "linux" ], "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@parcel/watcher-linux-arm64-musl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", - "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.4.tgz", + "integrity": "sha512-DZaN1f0PGp/bSvKhtw50pPsnln4T13ycDq1FrDWRiHmWt1JeW+UtYg9touPFf8yt993p8tS2QjybpzKNTxYEwg==", "cpu": [ - "arm64" + "x64" ], "dev": true, "license": "MIT", @@ -15198,17 +13112,13 @@ "linux" ], "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@parcel/watcher-linux-x64-glibc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", - "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.4.tgz", + "integrity": "sha512-RnGxwZLN7fhMMAItnD6dZ7lvy+TI7ba+2V54UF4dhaWa/p8I/ys1E73KO6HmPmgz92ZkfD8TXS1IMV8+uhbR9g==", "cpu": [ "x64" ], @@ -15219,61 +13129,66 @@ "linux" ], "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@parcel/watcher-linux-x64-musl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", - "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.4.tgz", + "integrity": "sha512-6lcI79+X8klGiGd8yHuTgQRjuuJYNggmEml+RsyN596P23l/zf9FVmJ7K0KVKkFAeYEdg0iMUKyIxiV5vebDNQ==", "cpu": [ - "x64" + "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "linux" + "openharmony" ], "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@parcel/watcher-win32-arm64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", - "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", + "node_modules/@rolldown/binding-wasm32-wasi": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.4.tgz", + "integrity": "sha512-wz7ohsKCAIWy91blZ/1FlpPdqrsm1xpcEOQVveWoL6+aSPKL4VUcoYmmzuLTssyZxRpEwzuIxL/GDsvpjaBtOw==", "cpu": [ - "arm64" + "wasm32" ], "dev": true, "license": "MIT", "optional": true, - "os": [ - "win32" - ], + "dependencies": { + "@napi-rs/wasm-runtime": "^1.1.1" + }, "engines": { - "node": ">= 10.0.0" + "node": ">=14.0.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi/node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.1.tgz", + "integrity": "sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1", + "@tybys/wasm-util": "^0.10.1" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" } }, - "node_modules/@parcel/watcher-win32-ia32": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", - "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.4.tgz", + "integrity": "sha512-cfiMrfuWCIgsFmcVG0IPuO6qTRHvF7NuG3wngX1RZzc6dU8FuBFb+J3MIR5WrdTNozlumfgL4cvz+R4ozBCvsQ==", "cpu": [ - "ia32" + "arm64" ], "dev": true, "license": "MIT", @@ -15282,17 +13197,13 @@ "win32" ], "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@parcel/watcher-win32-x64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", - "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.4.tgz", + "integrity": "sha512-p6UeR9y7ht82AH57qwGuFYn69S6CZ7LLKdCKy/8T3zS9VTrJei2/CGsTUV45Da4Z9Rbhc7G4gyWQ/Ioamqn09g==", "cpu": [ "x64" ], @@ -15303,119 +13214,7 @@ "win32" ], "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher/node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", - "dev": true, - "license": "Apache-2.0", - "optional": true, - "bin": { - "detect-libc": "bin/detect-libc.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/@parcel/watcher/node_modules/node-addon-api": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", - "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/@phenomnomnominal/tsquery": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@phenomnomnominal/tsquery/-/tsquery-5.0.1.tgz", - "integrity": "sha512-3nVv+e2FQwsW8Aw6qTU6f+1rfcJ3hrcnvH/mu9i8YhxO+9sqbOfpL8m6PbET5+xKOlz/VSbp0RoYWYCtIsnmuA==", - "license": "MIT", - "dependencies": { - "esquery": "^1.4.0" - }, - "peerDependencies": { - "typescript": "^3 || ^4 || ^5" - } - }, - "node_modules/@pkgr/core": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", - "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/pkgr" - } - }, - "node_modules/@pnpm/config.env-replace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", - "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.22.0" - } - }, - "node_modules/@pnpm/network.ca-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", - "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "4.2.10" - }, - "engines": { - "node": ">=12.22.0" - } - }, - "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true, - "license": "ISC" - }, - "node_modules/@pnpm/npm-conf": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz", - "integrity": "sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@pnpm/config.env-replace": "^1.1.0", - "@pnpm/network.ca-file": "^1.0.1", - "config-chain": "^1.1.11" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@polka/url": { - "version": "1.0.0-next.29", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", - "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", - "dev": true, - "license": "MIT" - }, - "node_modules/@remix-run/router": { - "version": "1.23.2", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.23.2.tgz", - "integrity": "sha512-Ic6m2U/rMjTkhERIa/0ZtXJP17QUi2CbWE7cqx4J58M8aA3QTfW+2UlQ4psvTX9IO1RfNVhK3pcpdjej7L+t2w==", - "license": "MIT", - "engines": { - "node": ">=14.0.0" + "node": "^20.19.0 || >=22.12.0" } }, "node_modules/@rolldown/pluginutils": { @@ -15477,6 +13276,13 @@ } } }, + "node_modules/@rollup/plugin-commonjs/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true, + "license": "MIT" + }, "node_modules/@rollup/plugin-image": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@rollup/plugin-image/-/plugin-image-3.0.3.tgz", @@ -15594,10 +13400,16 @@ } } }, + "node_modules/@rollup/pluginutils/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.53.2.tgz", - "integrity": "sha512-yDPzwsgiFO26RJA4nZo8I+xqzh7sJTZIWQOxn+/XOdPE31lAvLIYCKqjV+lNH/vxE2L2iH3plKxDCRK6i+CwhA==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.0.tgz", + "integrity": "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==", "cpu": [ "arm" ], @@ -15608,9 +13420,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.53.2.tgz", - "integrity": "sha512-k8FontTxIE7b0/OGKeSN5B6j25EuppBcWM33Z19JoVT7UTXFSo3D9CdU39wGTeb29NO3XxpMNauh09B+Ibw+9g==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.59.0.tgz", + "integrity": "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==", "cpu": [ "arm64" ], @@ -15621,9 +13433,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.53.2.tgz", - "integrity": "sha512-A6s4gJpomNBtJ2yioj8bflM2oogDwzUiMl2yNJ2v9E7++sHrSrsQ29fOfn5DM/iCzpWcebNYEdXpaK4tr2RhfQ==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.59.0.tgz", + "integrity": "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==", "cpu": [ "arm64" ], @@ -15634,9 +13446,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.53.2.tgz", - "integrity": "sha512-e6XqVmXlHrBlG56obu9gDRPW3O3hLxpwHpLsBJvuI8qqnsrtSZ9ERoWUXtPOkY8c78WghyPHZdmPhHLWNdAGEw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.59.0.tgz", + "integrity": "sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==", "cpu": [ "x64" ], @@ -15647,9 +13459,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.53.2.tgz", - "integrity": "sha512-v0E9lJW8VsrwPux5Qe5CwmH/CF/2mQs6xU1MF3nmUxmZUCHazCjLgYvToOk+YuuUqLQBio1qkkREhxhc656ViA==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.59.0.tgz", + "integrity": "sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==", "cpu": [ "arm64" ], @@ -15660,9 +13472,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.53.2.tgz", - "integrity": "sha512-ClAmAPx3ZCHtp6ysl4XEhWU69GUB1D+s7G9YjHGhIGCSrsg00nEGRRZHmINYxkdoJehde8VIsDC5t9C0gb6yqA==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.59.0.tgz", + "integrity": "sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==", "cpu": [ "x64" ], @@ -15673,9 +13485,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.53.2.tgz", - "integrity": "sha512-EPlb95nUsz6Dd9Qy13fI5kUPXNSljaG9FiJ4YUGU1O/Q77i5DYFW5KR8g1OzTcdZUqQQ1KdDqsTohdFVwCwjqg==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.59.0.tgz", + "integrity": "sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==", "cpu": [ "arm" ], @@ -15686,9 +13498,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.53.2.tgz", - "integrity": "sha512-BOmnVW+khAUX+YZvNfa0tGTEMVVEerOxN0pDk2E6N6DsEIa2Ctj48FOMfNDdrwinocKaC7YXUZ1pHlKpnkja/Q==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.59.0.tgz", + "integrity": "sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==", "cpu": [ "arm" ], @@ -15699,9 +13511,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.53.2.tgz", - "integrity": "sha512-Xt2byDZ+6OVNuREgBXr4+CZDJtrVso5woFtpKdGPhpTPHcNG7D8YXeQzpNbFRxzTVqJf7kvPMCub/pcGUWgBjA==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.59.0.tgz", + "integrity": "sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==", "cpu": [ "arm64" ], @@ -15712,9 +13524,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.53.2.tgz", - "integrity": "sha512-+LdZSldy/I9N8+klim/Y1HsKbJ3BbInHav5qE9Iy77dtHC/pibw1SR/fXlWyAk0ThnpRKoODwnAuSjqxFRDHUQ==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.59.0.tgz", + "integrity": "sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==", "cpu": [ "arm64" ], @@ -15725,9 +13537,22 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.53.2.tgz", - "integrity": "sha512-8ms8sjmyc1jWJS6WdNSA23rEfdjWB30LH8Wqj0Cqvv7qSHnvw6kgMMXRdop6hkmGPlyYBdRPkjJnj3KCUHV/uQ==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.59.0.tgz", + "integrity": "sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.59.0.tgz", + "integrity": "sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==", "cpu": [ "loong64" ], @@ -15738,9 +13563,22 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.53.2.tgz", - "integrity": "sha512-3HRQLUQbpBDMmzoxPJYd3W6vrVHOo2cVW8RUo87Xz0JPJcBLBr5kZ1pGcQAhdZgX9VV7NbGNipah1omKKe23/g==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.59.0.tgz", + "integrity": "sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.59.0.tgz", + "integrity": "sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==", "cpu": [ "ppc64" ], @@ -15751,9 +13589,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.53.2.tgz", - "integrity": "sha512-fMjKi+ojnmIvhk34gZP94vjogXNNUKMEYs+EDaB/5TG/wUkoeua7p7VCHnE6T2Tx+iaghAqQX8teQzcvrYpaQA==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.59.0.tgz", + "integrity": "sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==", "cpu": [ "riscv64" ], @@ -15764,9 +13602,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.53.2.tgz", - "integrity": "sha512-XuGFGU+VwUUV5kLvoAdi0Wz5Xbh2SrjIxCtZj6Wq8MDp4bflb/+ThZsVxokM7n0pcbkEr2h5/pzqzDYI7cCgLQ==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.59.0.tgz", + "integrity": "sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==", "cpu": [ "riscv64" ], @@ -15777,9 +13615,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.53.2.tgz", - "integrity": "sha512-w6yjZF0P+NGzWR3AXWX9zc0DNEGdtvykB03uhonSHMRa+oWA6novflo2WaJr6JZakG2ucsyb+rvhrKac6NIy+w==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.59.0.tgz", + "integrity": "sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==", "cpu": [ "s390x" ], @@ -15790,9 +13628,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.2.tgz", - "integrity": "sha512-yo8d6tdfdeBArzC7T/PnHd7OypfI9cbuZzPnzLJIyKYFhAQ8SvlkKtKBMbXDxe1h03Rcr7u++nFS7tqXz87Gtw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.59.0.tgz", + "integrity": "sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==", "cpu": [ "x64" ], @@ -15803,9 +13641,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.53.2.tgz", - "integrity": "sha512-ah59c1YkCxKExPP8O9PwOvs+XRLKwh/mV+3YdKqQ5AMQ0r4M4ZDuOrpWkUaqO7fzAHdINzV9tEVu8vNw48z0lA==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.59.0.tgz", + "integrity": "sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==", "cpu": [ "x64" ], @@ -15815,12 +13653,25 @@ "linux" ] }, - "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.53.2.tgz", - "integrity": "sha512-4VEd19Wmhr+Zy7hbUsFZ6YXEiP48hE//KPLCSVNY5RMGX2/7HZ+QkN55a3atM1C/BZCGIgqN+xrVgtdak2S9+A==", + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.59.0.tgz", + "integrity": "sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==", "cpu": [ - "arm64" + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.59.0.tgz", + "integrity": "sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==", + "cpu": [ + "arm64" ], "license": "MIT", "optional": true, @@ -15829,9 +13680,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.53.2.tgz", - "integrity": "sha512-IlbHFYc/pQCgew/d5fslcy1KEaYVCJ44G8pajugd8VoOEI8ODhtb/j8XMhLpwHCMB3yk2J07ctup10gpw2nyMA==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.59.0.tgz", + "integrity": "sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==", "cpu": [ "arm64" ], @@ -15842,9 +13693,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.53.2.tgz", - "integrity": "sha512-lNlPEGgdUfSzdCWU176ku/dQRnA7W+Gp8d+cWv73jYrb8uT7HTVVxq62DUYxjbaByuf1Yk0RIIAbDzp+CnOTFg==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.59.0.tgz", + "integrity": "sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==", "cpu": [ "ia32" ], @@ -15855,9 +13706,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.53.2.tgz", - "integrity": "sha512-S6YojNVrHybQis2lYov1sd+uj7K0Q05NxHcGktuMMdIQ2VixGwAfbJ23NnlvvVV1bdpR2m5MsNBViHJKcA4ADw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.59.0.tgz", + "integrity": "sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==", "cpu": [ "x64" ], @@ -15868,9 +13719,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.53.2.tgz", - "integrity": "sha512-k+/Rkcyx//P6fetPoLMb8pBeqJBNGx81uuf7iljX9++yNBVRDQgD04L+SVXmXmh5ZP4/WOp4mWF0kmi06PW2tA==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.59.0.tgz", + "integrity": "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==", "cpu": [ "x64" ], @@ -15881,9 +13732,9 @@ ] }, "node_modules/@rollup/wasm-node": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/wasm-node/-/wasm-node-4.53.2.tgz", - "integrity": "sha512-oPSy4fH0C66muvPr/HU13K8X9QFO74Em+JUegHUpEwD61M3lihIlfrLpilhrEiiReFOfG00Qyhf7NGFuwkX2yA==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/wasm-node/-/wasm-node-4.59.0.tgz", + "integrity": "sha512-cKB/Pe05aJWQYw3UFS79Id+KVXdExBxWful0+CSl24z3ukwOgBSy6l39XZNwfm3vCh/fpUrAAs+T7PsJ6dC8NA==", "dev": true, "license": "MIT", "dependencies": { @@ -15901,28 +13752,28 @@ } }, "node_modules/@rspack/binding": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@rspack/binding/-/binding-1.7.1.tgz", - "integrity": "sha512-qVTV1/UWpMSZktvK5A8+HolgR1Qf0nYR3Gg4Vax5x3/BcHDpwGZ0fbdFRUirGVWH/XwxZ81zoI6F2SZq7xbX+w==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@rspack/binding/-/binding-1.6.8.tgz", + "integrity": "sha512-lUeL4mbwGo+nqRKqFDCm9vH2jv9FNMVt1X8jqayWRcOCPlj/2UVMEFgqjR7Pp2vlvnTKq//31KbDBJmDZq31RQ==", "dev": true, "license": "MIT", "optionalDependencies": { - "@rspack/binding-darwin-arm64": "1.7.1", - "@rspack/binding-darwin-x64": "1.7.1", - "@rspack/binding-linux-arm64-gnu": "1.7.1", - "@rspack/binding-linux-arm64-musl": "1.7.1", - "@rspack/binding-linux-x64-gnu": "1.7.1", - "@rspack/binding-linux-x64-musl": "1.7.1", - "@rspack/binding-wasm32-wasi": "1.7.1", - "@rspack/binding-win32-arm64-msvc": "1.7.1", - "@rspack/binding-win32-ia32-msvc": "1.7.1", - "@rspack/binding-win32-x64-msvc": "1.7.1" + "@rspack/binding-darwin-arm64": "1.6.8", + "@rspack/binding-darwin-x64": "1.6.8", + "@rspack/binding-linux-arm64-gnu": "1.6.8", + "@rspack/binding-linux-arm64-musl": "1.6.8", + "@rspack/binding-linux-x64-gnu": "1.6.8", + "@rspack/binding-linux-x64-musl": "1.6.8", + "@rspack/binding-wasm32-wasi": "1.6.8", + "@rspack/binding-win32-arm64-msvc": "1.6.8", + "@rspack/binding-win32-ia32-msvc": "1.6.8", + "@rspack/binding-win32-x64-msvc": "1.6.8" } }, "node_modules/@rspack/binding-darwin-arm64": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-1.7.1.tgz", - "integrity": "sha512-3C0w0kfCHfgOH+AP/Dx1bm/b3AR/or5CmU22Abevek0m95ndU3iT902eLcm9JNiMQnDQLBQbolfj5P591t0oPg==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-1.6.8.tgz", + "integrity": "sha512-e8CTQtzaeGnf+BIzR7wRMUwKfIg0jd/sxMRc1Vd0bCMHBhSN9EsGoMuJJaKeRrSmy2nwMCNWHIG+TvT1CEKg+A==", "cpu": [ "arm64" ], @@ -15934,9 +13785,9 @@ ] }, "node_modules/@rspack/binding-darwin-x64": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-x64/-/binding-darwin-x64-1.7.1.tgz", - "integrity": "sha512-HTrBpdw2gWwcpJ3c8h4JF8B1YRNvrFT+K620ycttrlu/HvI4/U770BBJ/ej36R/hdh59JvMCGe+w49FyXv6rzg==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-x64/-/binding-darwin-x64-1.6.8.tgz", + "integrity": "sha512-ku1XpTEPt6Za11zhpFWhfwrTQogcgi9RJrOUVC4FESiPO9aKyd4hJ+JiPgLY0MZOqsptK6vEAgOip+uDVXrCpg==", "cpu": [ "x64" ], @@ -15948,9 +13799,9 @@ ] }, "node_modules/@rspack/binding-linux-arm64-gnu": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.7.1.tgz", - "integrity": "sha512-BX9yAPCO0WBFyOzKl9bSXT/cH27nnOJp02smIQMxfv7RNfwGkJg5GgakYcuYG+9U1HEFitBSzmwS2+dxDcAxlg==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.6.8.tgz", + "integrity": "sha512-fvZX6xZPvBT8qipSpvkKMX5M7yd2BSpZNCZXcefw6gA3uC7LI3gu+er0LrDXY1PtPzVuHTyDx+abwWpagV3PiQ==", "cpu": [ "arm64" ], @@ -15962,9 +13813,9 @@ ] }, "node_modules/@rspack/binding-linux-arm64-musl": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.7.1.tgz", - "integrity": "sha512-maBX19XyiVkxzh/NA79ALetCobc4zUyoWkWLeCGyW5xKzhPVFatJp+qCiHqHkqUZcgRo+1i5ihoZ2bXmelIeZg==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.6.8.tgz", + "integrity": "sha512-++XMKcMNrt59HcFBLnRaJcn70k3X0GwkAegZBVpel8xYIAgvoXT5+L8P1ExId/yTFxqedaz8DbcxQnNmMozviw==", "cpu": [ "arm64" ], @@ -15976,9 +13827,9 @@ ] }, "node_modules/@rspack/binding-linux-x64-gnu": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.7.1.tgz", - "integrity": "sha512-8KJAeBLiWcN7zEc9aaS7LRJPZVtZuQU8mCsn+fRhdQDSc+a9FcTN8b6Lw29z8cejwbU6Gxr/8wk5XGexMWFaZA==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.6.8.tgz", + "integrity": "sha512-tv3BWkTE1TndfX+DsE1rSTg8fBevCxujNZ3MlfZ22Wfy9x1FMXTJlWG8VIOXmaaJ1wUHzv8S7cE2YUUJ2LuiCg==", "cpu": [ "x64" ], @@ -15990,9 +13841,9 @@ ] }, "node_modules/@rspack/binding-linux-x64-musl": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-1.7.1.tgz", - "integrity": "sha512-Gn9x5vhKRELvSoZ3ZjquY8eWtCXur0OsYnZ2/ump8mofM6IDaL7Qqu3Hf4Kud31PDH0tfz0jWf9piX32HHPmgg==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-1.6.8.tgz", + "integrity": "sha512-DCGgZ5/in1O3FjHWqXnDsncRy+48cMhfuUAAUyl0yDj1NpsZu9pP+xfGLvGcQTiYrVl7IH9Aojf1eShP/77WGA==", "cpu": [ "x64" ], @@ -16004,9 +13855,9 @@ ] }, "node_modules/@rspack/binding-wasm32-wasi": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@rspack/binding-wasm32-wasi/-/binding-wasm32-wasi-1.7.1.tgz", - "integrity": "sha512-2r9M5iVchmsFkp3sz7A5YnMm2TfpkB71LK3AoaRWKMfvf5oFky0GSGISYd2TCBASO+X2Qskaq+B24Szo8zH5FA==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-wasm32-wasi/-/binding-wasm32-wasi-1.6.8.tgz", + "integrity": "sha512-VUwdhl/lI4m6o1OGCZ9JwtMjTV/yLY5VZTQdEPKb40JMTlmZ5MBlr5xk7ByaXXYHr6I+qnqEm73iMKQvg6iknw==", "cpu": [ "wasm32" ], @@ -16018,9 +13869,9 @@ } }, "node_modules/@rspack/binding-win32-arm64-msvc": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.7.1.tgz", - "integrity": "sha512-/WIHp982yqqqAuiz2WLtf1ofo9d1lHDGZJ7flxFllb1iMgnUeSRyX6stxEi11K3Rg6pQa7FdCZGKX/engyj2bw==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.6.8.tgz", + "integrity": "sha512-23YX7zlOZlub+nPGDBUzktb4D5D6ETUAluKjXEeHIZ9m7fSlEYBnGL66YE+3t1DHXGd0OqsdwlvrNGcyo6EXDQ==", "cpu": [ "arm64" ], @@ -16032,9 +13883,9 @@ ] }, "node_modules/@rspack/binding-win32-ia32-msvc": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.7.1.tgz", - "integrity": "sha512-Kpela29n+kDGGsss6q/3qTd6n9VW7TOQaiA7t1YLdCCl8qqcdKlz/vWjFMd2MqgcSGC/16PvChE4sgpUvryfCQ==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.6.8.tgz", + "integrity": "sha512-cFgRE3APxrY4AEdooVk2LtipwNNT/9mrnjdC5lVbsIsz+SxvGbZR231bxDJEqP15+RJOaD07FO1sIjINFqXMEg==", "cpu": [ "ia32" ], @@ -16046,9 +13897,9 @@ ] }, "node_modules/@rspack/binding-win32-x64-msvc": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.7.1.tgz", - "integrity": "sha512-B/y4MWqP2Xeto1/HV0qtZNOMPSLrEVOqi2b7JSIXG/bhlf+3IAkDzEEoHs+ZikLR4C8hMaS0pVJsDGKFmGzC9A==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.6.8.tgz", + "integrity": "sha512-cIuhVsZYd3o3Neo1JSAhJYw6BDvlxaBoqvgwRkG1rs0ExFmEmgYyG7ip9pFKnKNWph/tmW3rDYypmEfjs1is7g==", "cpu": [ "x64" ], @@ -16060,14 +13911,14 @@ ] }, "node_modules/@rspack/core": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@rspack/core/-/core-1.7.1.tgz", - "integrity": "sha512-kRxfY8RRa6nU3/viDvAIP6CRpx+0rfXFRonPL0pHBx8u6HhV7m9rLEyaN6MWsLgNIAWkleFGb7tdo4ux2ljRJQ==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@rspack/core/-/core-1.6.8.tgz", + "integrity": "sha512-FolcIAH5FW4J2FET+qwjd1kNeFbCkd0VLuIHO0thyolEjaPSxw5qxG67DA7BZGm6PVcoiSgPLks1DL6eZ8c+fA==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/runtime-tools": "0.22.0", - "@rspack/binding": "1.7.1", + "@module-federation/runtime-tools": "0.21.6", + "@rspack/binding": "1.6.8", "@rspack/lite-tapable": "1.1.0" }, "engines": { @@ -16082,83 +13933,86 @@ } } }, - "node_modules/@rspack/core/node_modules/@module-federation/error-codes": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/@module-federation/error-codes/-/error-codes-0.22.0.tgz", - "integrity": "sha512-xF9SjnEy7vTdx+xekjPCV5cIHOGCkdn3pIxo9vU7gEZMIw0SvAEdsy6Uh17xaCpm8V0FWvR0SZoK9Ik6jGOaug==", - "dev": true, - "license": "MIT" - }, - "node_modules/@rspack/core/node_modules/@module-federation/runtime": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/@module-federation/runtime/-/runtime-0.22.0.tgz", - "integrity": "sha512-38g5iPju2tPC3KHMPxRKmy4k4onNp6ypFPS1eKGsNLUkXgHsPMBFqAjDw96iEcjri91BrahG4XcdyKi97xZzlA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@module-federation/error-codes": "0.22.0", - "@module-federation/runtime-core": "0.22.0", - "@module-federation/sdk": "0.22.0" - } - }, - "node_modules/@rspack/core/node_modules/@module-federation/runtime-core": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/@module-federation/runtime-core/-/runtime-core-0.22.0.tgz", - "integrity": "sha512-GR1TcD6/s7zqItfhC87zAp30PqzvceoeDGYTgF3Vx2TXvsfDrhP6Qw9T4vudDQL3uJRne6t7CzdT29YyVxlgIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@module-federation/error-codes": "0.22.0", - "@module-federation/sdk": "0.22.0" - } - }, - "node_modules/@rspack/core/node_modules/@module-federation/runtime-tools": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/@module-federation/runtime-tools/-/runtime-tools-0.22.0.tgz", - "integrity": "sha512-4ScUJ/aUfEernb+4PbLdhM/c60VHl698Gn1gY21m9vyC1Ucn69fPCA1y2EwcCB7IItseRMoNhdcWQnzt/OPCNA==", + "node_modules/@rspack/dev-server": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@rspack/dev-server/-/dev-server-1.2.1.tgz", + "integrity": "sha512-e/ARvskYn2Qdd02qLvc0i6H9BnOmzP0xGHS2XCr7GZ3t2k5uC5ZlLkeN1iEebU0FkAW+6ot89NahFo3nupKuww==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/runtime": "0.22.0", - "@module-federation/webpack-bundler-runtime": "0.22.0" + "@types/bonjour": "^3.5.13", + "@types/connect-history-api-fallback": "^1.5.4", + "@types/express": "^4.17.25", + "@types/express-serve-static-core": "^4.17.21", + "@types/serve-index": "^1.9.4", + "@types/serve-static": "^1.15.5", + "@types/sockjs": "^0.3.36", + "@types/ws": "^8.5.10", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.2.1", + "chokidar": "^3.6.0", + "colorette": "^2.0.10", + "compression": "^1.8.1", + "connect-history-api-fallback": "^2.0.0", + "express": "^4.22.1", + "graceful-fs": "^4.2.6", + "http-proxy-middleware": "^2.0.9", + "ipaddr.js": "^2.1.0", + "launch-editor": "^2.6.1", + "open": "^10.0.3", + "p-retry": "^6.2.0", + "schema-utils": "^4.2.0", + "selfsigned": "^2.4.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^7.4.2", + "ws": "^8.18.0" + }, + "engines": { + "node": ">= 18.12.0" + }, + "peerDependencies": { + "@rspack/core": "*" } }, - "node_modules/@rspack/core/node_modules/@module-federation/sdk": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/@module-federation/sdk/-/sdk-0.22.0.tgz", - "integrity": "sha512-x4aFNBKn2KVQRuNVC5A7SnrSCSqyfIWmm1DvubjbO9iKFe7ith5niw8dqSFBekYBg2Fwy+eMg4sEFNVvCAdo6g==", - "dev": true, - "license": "MIT" - }, - "node_modules/@rspack/core/node_modules/@module-federation/webpack-bundler-runtime": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/@module-federation/webpack-bundler-runtime/-/webpack-bundler-runtime-0.22.0.tgz", - "integrity": "sha512-aM8gCqXu+/4wBmJtVeMeeMN5guw3chf+2i6HajKtQv7SJfxV/f4IyNQJUeUQu9HfiAZHjqtMV5Lvq/Lvh8LdyA==", + "node_modules/@rspack/dev-server/node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, "license": "MIT", "dependencies": { - "@module-federation/runtime": "0.22.0", - "@module-federation/sdk": "0.22.0" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" } }, - "node_modules/@rspack/dev-server": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@rspack/dev-server/-/dev-server-1.1.5.tgz", - "integrity": "sha512-cwz0qc6iqqoJhyWqxP7ZqE2wyYNHkBMQUXxoQ0tNoZ4YNRkDyQ4HVJ/3oPSmMKbvJk/iJ16u7xZmwG6sK47q/A==", + "node_modules/@rspack/dev-server/node_modules/body-parser": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", + "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", "dev": true, "license": "MIT", "dependencies": { - "chokidar": "^3.6.0", - "http-proxy-middleware": "^2.0.9", - "p-retry": "^6.2.0", - "webpack-dev-server": "5.2.2", - "ws": "^8.18.0" + "bytes": "~3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "~1.2.0", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "on-finished": "~2.4.1", + "qs": "~6.14.0", + "raw-body": "~2.5.3", + "type-is": "~1.6.18", + "unpipe": "~1.0.0" }, "engines": { - "node": ">= 18.12.0" - }, - "peerDependencies": { - "@rspack/core": "*" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, "node_modules/@rspack/dev-server/node_modules/chokidar": { @@ -16186,6 +14040,116 @@ "fsevents": "~2.3.2" } }, + "node_modules/@rspack/dev-server/node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@rspack/dev-server/node_modules/cookie-signature": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", + "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rspack/dev-server/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/@rspack/dev-server/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rspack/dev-server/node_modules/express": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", + "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "~1.20.3", + "content-disposition": "~0.5.4", + "content-type": "~1.0.4", + "cookie": "~0.7.1", + "cookie-signature": "~1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.3.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "~0.1.12", + "proxy-addr": "~2.0.7", + "qs": "~6.14.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "~0.19.0", + "serve-static": "~1.16.2", + "setprototypeof": "1.2.0", + "statuses": "~2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@rspack/dev-server/node_modules/finalhandler": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", + "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "statuses": "~2.0.2", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@rspack/dev-server/node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/@rspack/dev-server/node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", @@ -16224,6 +14188,19 @@ } } }, + "node_modules/@rspack/dev-server/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@rspack/dev-server/node_modules/is-plain-obj": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", @@ -16237,6 +14214,85 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@rspack/dev-server/node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@rspack/dev-server/node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@rspack/dev-server/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@rspack/dev-server/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@rspack/dev-server/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@rspack/dev-server/node_modules/open": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "wsl-utils": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@rspack/dev-server/node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "dev": true, + "license": "MIT" + }, "node_modules/@rspack/dev-server/node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", @@ -16250,6 +14306,38 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/@rspack/dev-server/node_modules/qs": { + "version": "6.14.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz", + "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@rspack/dev-server/node_modules/raw-body": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", + "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/@rspack/dev-server/node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -16263,6 +14351,77 @@ "node": ">=8.10.0" } }, + "node_modules/@rspack/dev-server/node_modules/send": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", + "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", + "dev": true, + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/@rspack/dev-server/node_modules/serve-static": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", + "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "~0.19.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/@rspack/dev-server/node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@rspack/dev-server/node_modules/wsl-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", + "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@rspack/lite-tapable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@rspack/lite-tapable/-/lite-tapable-1.1.0.tgz", @@ -16271,9 +14430,9 @@ "license": "MIT" }, "node_modules/@rspack/plugin-react-refresh": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@rspack/plugin-react-refresh/-/plugin-react-refresh-1.6.0.tgz", - "integrity": "sha512-OO53gkrte/Ty4iRXxxM6lkwPGxsSsupFKdrPFnjwFIYrPvFLjeolAl5cTx+FzO5hYygJiGnw7iEKTmD+ptxqDA==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@rspack/plugin-react-refresh/-/plugin-react-refresh-1.6.1.tgz", + "integrity": "sha512-eqqW5645VG3CzGzFgNg5HqNdHVXY+567PGjtDhhrM8t67caxmsSzRmT5qfoEIfBcGgFkH9vEg7kzXwmCYQdQDw==", "dev": true, "license": "MIT", "dependencies": { @@ -16298,13 +14457,13 @@ "license": "MIT" }, "node_modules/@rushstack/node-core-library": { - "version": "5.19.1", - "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-5.19.1.tgz", - "integrity": "sha512-ESpb2Tajlatgbmzzukg6zyAhH+sICqJR2CNXNhXcEbz6UGCQfrKCtkxOpJTftWc8RGouroHG0Nud1SJAszvpmA==", + "version": "5.20.3", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-5.20.3.tgz", + "integrity": "sha512-95JgEPq2k7tHxhF9/OJnnyHDXfC9cLhhta0An/6MlkDsX2A6dTzDrTUG18vx4vjc280V0fi0xDH9iQczpSuWsw==", "dev": true, "license": "MIT", "dependencies": { - "ajv": "~8.13.0", + "ajv": "~8.18.0", "ajv-draft-04": "~1.0.0", "ajv-formats": "~3.0.1", "fs-extra": "~11.3.0", @@ -16322,27 +14481,10 @@ } } }, - "node_modules/@rushstack/node-core-library/node_modules/ajv": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz", - "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.4.1" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, "node_modules/@rushstack/node-core-library/node_modules/fs-extra": { - "version": "11.3.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.3.tgz", - "integrity": "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==", + "version": "11.3.4", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz", + "integrity": "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==", "dev": true, "license": "MIT", "dependencies": { @@ -16391,9 +14533,9 @@ "license": "ISC" }, "node_modules/@rushstack/problem-matcher": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@rushstack/problem-matcher/-/problem-matcher-0.1.1.tgz", - "integrity": "sha512-Fm5XtS7+G8HLcJHCWpES5VmeMyjAKaWeyZU5qPzZC+22mPlJzAsOxymHiWIfuirtPckX3aptWws+K2d0BzniJA==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@rushstack/problem-matcher/-/problem-matcher-0.2.1.tgz", + "integrity": "sha512-gulfhBs6n+I5b7DvjKRfhMGyUejtSgOHTclF/eONr8hcgF1APEDjhxIsfdUYYMzC3rvLwGluqLjbwCFZ8nxrog==", "dev": true, "license": "MIT", "peerDependencies": { @@ -16406,9 +14548,9 @@ } }, "node_modules/@rushstack/rig-package": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@rushstack/rig-package/-/rig-package-0.6.0.tgz", - "integrity": "sha512-ZQmfzsLE2+Y91GF15c65L/slMRVhF6Hycq04D4TwtdGaUAbIXXg9c5pKA5KFU7M4QMaihoobp9JJYpYcaY3zOw==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@rushstack/rig-package/-/rig-package-0.7.2.tgz", + "integrity": "sha512-9XbFWuqMYcHUso4mnETfhGVUSaADBRj6HUAAEYk50nMPn8WRICmBuCphycQGNB3duIR6EEZX3Xj3SYc2XiP+9A==", "dev": true, "license": "MIT", "dependencies": { @@ -16417,14 +14559,14 @@ } }, "node_modules/@rushstack/terminal": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.21.0.tgz", - "integrity": "sha512-cLaI4HwCNYmknM5ns4G+drqdEB6q3dCPV423+d3TZeBusYSSm09+nR7CnhzJMjJqeRcdMAaLnrA4M/3xDz4R3w==", + "version": "0.22.3", + "resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.22.3.tgz", + "integrity": "sha512-gHC9pIMrUPzAbBiI4VZMU7Q+rsCzb8hJl36lFIulIzoceKotyKL3Rd76AZ2CryCTKEg+0bnTj406HE5YY5OQvw==", "dev": true, "license": "MIT", "dependencies": { - "@rushstack/node-core-library": "5.19.1", - "@rushstack/problem-matcher": "0.1.1", + "@rushstack/node-core-library": "5.20.3", + "@rushstack/problem-matcher": "0.2.1", "supports-color": "~8.1.1" }, "peerDependencies": { @@ -16453,13 +14595,13 @@ } }, "node_modules/@rushstack/ts-command-line": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-5.2.0.tgz", - "integrity": "sha512-lYxCX0nDdkDtCkVpvF0m25ymf66SaMWuppbD6b7MdkIzvGXKBXNIVZlwBH/C0YfkanrupnICWf2n4z3AKSfaHw==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-5.3.3.tgz", + "integrity": "sha512-c+ltdcvC7ym+10lhwR/vWiOhsrm/bP3By2VsFcs5qTKv+6tTmxgbVrtJ5NdNjANiV5TcmOZgUN+5KYQ4llsvEw==", "dev": true, "license": "MIT", "dependencies": { - "@rushstack/terminal": "0.21.0", + "@rushstack/terminal": "0.22.3", "@types/argparse": "1.0.38", "argparse": "~1.0.9", "string-argv": "~0.3.1" @@ -16476,14 +14618,14 @@ } }, "node_modules/@schematics/angular": { - "version": "20.1.5", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-20.1.5.tgz", - "integrity": "sha512-+bgbujb9F6cgP/hz0L8IEJy16aXIsgypTcHdckozbjDRUMtqjjmCNjutep0t6hfe9La/4hF8pKiOx9KLBFG+rw==", + "version": "21.2.2", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-21.2.2.tgz", + "integrity": "sha512-Ywa6HDtX7TRBQZTVMMnxX3Mk7yVnG8KtSFaXWrkx779+q8tqYdBwNwAqbNd4Zatr1GccKaz9xcptHJta5+DTxw==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "20.1.5", - "@angular-devkit/schematics": "20.1.5", + "@angular-devkit/core": "21.2.2", + "@angular-devkit/schematics": "21.2.2", "jsonc-parser": "3.3.1" }, "engines": { @@ -16532,9 +14674,9 @@ } }, "node_modules/@semantic-release/github": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-12.0.2.tgz", - "integrity": "sha512-qyqLS+aSGH1SfXIooBKjs7mvrv0deg8v+jemegfJg1kq6ji+GJV8CO08VJDEsvjp3O8XJmTTIAjjZbMzagzsdw==", + "version": "12.0.6", + "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-12.0.6.tgz", + "integrity": "sha512-aYYFkwHW3c6YtHwQF0t0+lAjlU+87NFOZuH2CvWFD0Ylivc7MwhZMiHOJ0FMpIgPpCVib/VUAcOwvrW0KnxQtA==", "dev": true, "license": "MIT", "dependencies": { @@ -16590,13 +14732,13 @@ } }, "node_modules/@semantic-release/npm": { - "version": "13.1.3", - "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-13.1.3.tgz", - "integrity": "sha512-q7zreY8n9V0FIP1Cbu63D+lXtRAVAIWb30MH5U3TdrfXt6r2MIrWCY0whAImN53qNvSGp0Zt07U95K+Qp9GpEg==", + "version": "13.1.5", + "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-13.1.5.tgz", + "integrity": "sha512-Hq5UxzoatN3LHiq2rTsWS54nCdqJHlsssGERCo8WlvdfFA9LoN0vO+OuKVSjtNapIc/S8C2LBj206wKLHg62mg==", "dev": true, "license": "MIT", "dependencies": { - "@actions/core": "^2.0.0", + "@actions/core": "^3.0.0", "@semantic-release/error": "^4.0.0", "aggregate-error": "^5.0.0", "env-ci": "^11.2.0", @@ -16604,7 +14746,7 @@ "fs-extra": "^11.0.0", "lodash-es": "^4.17.21", "nerf-dart": "^1.0.0", - "normalize-url": "^8.0.0", + "normalize-url": "^9.0.0", "npm": "^11.6.2", "rc": "^1.2.8", "read-pkg": "^10.0.0", @@ -16663,9 +14805,9 @@ } }, "node_modules/@semantic-release/npm/node_modules/fs-extra": { - "version": "11.3.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.3.tgz", - "integrity": "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==", + "version": "11.3.4", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz", + "integrity": "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==", "dev": true, "license": "MIT", "dependencies": { @@ -16745,6 +14887,19 @@ "node": "^20.17.0 || >=22.9.0" } }, + "node_modules/@semantic-release/npm/node_modules/normalize-url": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-9.0.0.tgz", + "integrity": "sha512-z9nC87iaZXXySbWWtTHfCFJyFvKaUAW6lODhikG7ILSbVgmwuFjUqkgnheHvAUcGedO29e2QGBRXMUD64aurqQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@semantic-release/npm/node_modules/npm-run-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz", @@ -16780,19 +14935,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@semantic-release/npm/node_modules/parse-json/node_modules/type-fest": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", - "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@semantic-release/npm/node_modules/path-key": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", @@ -16807,17 +14949,17 @@ } }, "node_modules/@semantic-release/npm/node_modules/read-pkg": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-10.0.0.tgz", - "integrity": "sha512-A70UlgfNdKI5NSvTTfHzLQj7NJRpJ4mT5tGafkllJ4wh71oYuGm/pzphHcmW4s35iox56KSK721AihodoXSc/A==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-10.1.0.tgz", + "integrity": "sha512-I8g2lArQiP78ll51UeMZojewtYgIRCKCWqZEgOO8c/uefTI+XDXvCSXu3+YNUaTNvZzobrL5+SqHjBrByRRTdg==", "dev": true, "license": "MIT", "dependencies": { "@types/normalize-package-data": "^2.4.4", "normalize-package-data": "^8.0.0", "parse-json": "^8.3.0", - "type-fest": "^5.2.0", - "unicorn-magic": "^0.3.0" + "type-fest": "^5.4.4", + "unicorn-magic": "^0.4.0" }, "engines": { "node": ">=20" @@ -16826,28 +14968,28 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@semantic-release/npm/node_modules/strip-final-newline": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz", - "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==", + "node_modules/@semantic-release/npm/node_modules/read-pkg/node_modules/type-fest": { + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.4.4.tgz", + "integrity": "sha512-JnTrzGu+zPV3aXIUhnyWJj4z/wigMsdYajGLIYakqyOW1nPllzXEJee0QQbHj+CTIQtXGlAjuK0UY+2xTyjVAw==", "dev": true, - "license": "MIT", + "license": "(MIT OR CC0-1.0)", + "dependencies": { + "tagged-tag": "^1.0.0" + }, "engines": { - "node": ">=18" + "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@semantic-release/npm/node_modules/type-fest": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.3.1.tgz", - "integrity": "sha512-VCn+LMHbd4t6sF3wfU/+HKT63C9OoyrSIf4b+vtWHpt2U7/4InZG467YDNMFMR70DdHjAdpPWmw2lzRdg0Xqqg==", + "node_modules/@semantic-release/npm/node_modules/read-pkg/node_modules/unicorn-magic": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.4.0.tgz", + "integrity": "sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==", "dev": true, - "license": "(MIT OR CC0-1.0)", - "dependencies": { - "tagged-tag": "^1.0.0" - }, + "license": "MIT", "engines": { "node": ">=20" }, @@ -16855,6 +14997,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@semantic-release/npm/node_modules/strip-final-newline": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz", + "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@semantic-release/npm/node_modules/unicorn-magic": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", @@ -16907,60 +15062,60 @@ } }, "node_modules/@shikijs/core": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.21.0.tgz", - "integrity": "sha512-AXSQu/2n1UIQekY8euBJlvFYZIw0PHY63jUzGbrOma4wPxzznJXTXkri+QcHeBNaFxiiOljKxxJkVSoB3PjbyA==", + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.23.0.tgz", + "integrity": "sha512-NSWQz0riNb67xthdm5br6lAkvpDJRTgB36fxlo37ZzM2yq0PQFFzbd8psqC2XMPgCzo1fW6cVi18+ArJ44wqgA==", "license": "MIT", "dependencies": { - "@shikijs/types": "3.21.0", + "@shikijs/types": "3.23.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.5" } }, "node_modules/@shikijs/engine-javascript": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.21.0.tgz", - "integrity": "sha512-ATwv86xlbmfD9n9gKRiwuPpWgPENAWCLwYCGz9ugTJlsO2kOzhOkvoyV/UD+tJ0uT7YRyD530x6ugNSffmvIiQ==", + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.23.0.tgz", + "integrity": "sha512-aHt9eiGFobmWR5uqJUViySI1bHMqrAgamWE1TYSUoftkAeCCAiGawPMwM+VCadylQtF4V3VNOZ5LmfItH5f3yA==", "license": "MIT", "dependencies": { - "@shikijs/types": "3.21.0", + "@shikijs/types": "3.23.0", "@shikijs/vscode-textmate": "^10.0.2", "oniguruma-to-es": "^4.3.4" } }, "node_modules/@shikijs/engine-oniguruma": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.21.0.tgz", - "integrity": "sha512-OYknTCct6qiwpQDqDdf3iedRdzj6hFlOPv5hMvI+hkWfCKs5mlJ4TXziBG9nyabLwGulrUjHiCq3xCspSzErYQ==", + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.23.0.tgz", + "integrity": "sha512-1nWINwKXxKKLqPibT5f4pAFLej9oZzQTsby8942OTlsJzOBZ0MWKiwzMsd+jhzu8YPCHAswGnnN1YtQfirL35g==", "license": "MIT", "dependencies": { - "@shikijs/types": "3.21.0", + "@shikijs/types": "3.23.0", "@shikijs/vscode-textmate": "^10.0.2" } }, "node_modules/@shikijs/langs": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.21.0.tgz", - "integrity": "sha512-g6mn5m+Y6GBJ4wxmBYqalK9Sp0CFkUqfNzUy2pJglUginz6ZpWbaWjDB4fbQ/8SHzFjYbtU6Ddlp1pc+PPNDVA==", + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.23.0.tgz", + "integrity": "sha512-2Ep4W3Re5aB1/62RSYQInK9mM3HsLeB91cHqznAJMuylqjzNVAVCMnNWRHFtcNHXsoNRayP9z1qj4Sq3nMqYXg==", "license": "MIT", "dependencies": { - "@shikijs/types": "3.21.0" + "@shikijs/types": "3.23.0" } }, "node_modules/@shikijs/themes": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.21.0.tgz", - "integrity": "sha512-BAE4cr9EDiZyYzwIHEk7JTBJ9CzlPuM4PchfcA5ao1dWXb25nv6hYsoDiBq2aZK9E3dlt3WB78uI96UESD+8Mw==", + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.23.0.tgz", + "integrity": "sha512-5qySYa1ZgAT18HR/ypENL9cUSGOeI2x+4IvYJu4JgVJdizn6kG4ia5Q1jDEOi7gTbN4RbuYtmHh0W3eccOrjMA==", "license": "MIT", "dependencies": { - "@shikijs/types": "3.21.0" + "@shikijs/types": "3.23.0" } }, "node_modules/@shikijs/types": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.21.0.tgz", - "integrity": "sha512-zGrWOxZ0/+0ovPY7PvBU2gIS9tmhSUUt30jAcNV0Bq0gb2S98gwfjIs1vxlmH5zM7/4YxLamT6ChlqqAJmPPjA==", + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.23.0.tgz", + "integrity": "sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ==", "license": "MIT", "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", @@ -17053,10 +15208,24 @@ "node": "^20.17.0 || >=22.9.0" } }, + "node_modules/@simple-libs/stream-utils": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@simple-libs/stream-utils/-/stream-utils-1.2.0.tgz", + "integrity": "sha512-KxXvfapcixpz6rVEB6HPjOUZT22yN6v0vI0urQSk1L8MlEWPDFCZkhw2xmkyoTGYeFw7tWTZd7e3lVzRZRN/EA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://ko-fi.com/dangreen" + } + }, "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "version": "0.34.48", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.48.tgz", + "integrity": "sha512-kKJTNuK3AQOrgjjotVxMrCn1sUJwM76wMszfq1kdU4uYVJjvEWuFQ6HgvLt4Xz3fSmZlTOxJ/Ie13KnIcWQXFA==", + "dev": true, "license": "MIT" }, "node_modules/@sindresorhus/is": { @@ -17089,25 +15258,26 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "type-detect": "4.0.8" } }, "node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "version": "13.0.5", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz", + "integrity": "sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { - "@sinonjs/commons": "^3.0.0" + "@sinonjs/commons": "^3.0.1" } }, "node_modules/@standard-schema/spec": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", - "dev": true, "license": "MIT" }, "node_modules/@sveltejs/vite-plugin-svelte": { @@ -17441,18 +15611,19 @@ } }, "node_modules/@swc-node/register": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@swc-node/register/-/register-1.9.2.tgz", - "integrity": "sha512-BBjg0QNuEEmJSoU/++JOXhrjWdu3PTyYeJWsvchsI0Aqtj8ICkz/DqlwtXbmZVZ5vuDPpTfFlwDBZe81zgShMA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@swc-node/register/-/register-1.11.1.tgz", + "integrity": "sha512-VQ0hJ5jX31TVv/fhZx4xJRzd8pwn6VvzYd2tGOHHr2TfXGCBixZoqdPDXTiEoJLCTS2MmvBf6zyQZZ0M8aGQCQ==", "dev": true, "license": "MIT", "dependencies": { - "@swc-node/core": "^1.13.1", - "@swc-node/sourcemap-support": "^0.5.0", + "@swc-node/core": "^1.14.1", + "@swc-node/sourcemap-support": "^0.6.1", "colorette": "^2.0.20", - "debug": "^4.3.4", - "pirates": "^4.0.6", - "tslib": "^2.6.2" + "debug": "^4.4.1", + "oxc-resolver": "^11.6.1", + "pirates": "^4.0.7", + "tslib": "^2.8.1" }, "funding": { "type": "github", @@ -17464,32 +15635,32 @@ } }, "node_modules/@swc-node/sourcemap-support": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@swc-node/sourcemap-support/-/sourcemap-support-0.5.1.tgz", - "integrity": "sha512-JxIvIo/Hrpv0JCHSyRpetAdQ6lB27oFYhv0PKCNf1g2gUXOjpeR1exrXccRxLMuAV5WAmGFBwRnNOJqN38+qtg==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@swc-node/sourcemap-support/-/sourcemap-support-0.6.1.tgz", + "integrity": "sha512-ovltDVH5QpdHXZkW138vG4+dgcNsxfwxHVoV6BtmTbz2KKl1A8ZSlbdtxzzfNjCjbpayda8Us9eMtcHobm38dA==", "dev": true, "license": "MIT", "dependencies": { "source-map-support": "^0.5.21", - "tslib": "^2.6.3" + "tslib": "^2.8.1" } }, "node_modules/@swc/cli": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@swc/cli/-/cli-0.6.0.tgz", - "integrity": "sha512-Q5FsI3Cw0fGMXhmsg7c08i4EmXCrcl+WnAxb6LYOLHw4JFFC3yzmx9LaXZ7QMbA+JZXbigU2TirI7RAfO0Qlnw==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@swc/cli/-/cli-0.8.0.tgz", + "integrity": "sha512-vzUkYzlqLe9dC+B0ZIH62CzfSZOCTjIsmquYyyyi45JCm1xmRfLDKeEeMrEPPyTWnEEN84e4iVd49Tgqa+2GaA==", "dev": true, "license": "MIT", "dependencies": { "@swc/counter": "^0.1.3", "@xhmikosr/bin-wrapper": "^13.0.5", "commander": "^8.3.0", - "fast-glob": "^3.2.5", "minimatch": "^9.0.3", "piscina": "^4.3.1", "semver": "^7.3.8", "slash": "3.0.0", - "source-map": "^0.7.3" + "source-map": "^0.7.3", + "tinyglobby": "^0.2.13" }, "bin": { "spack": "bin/spack.js", @@ -17497,11 +15668,11 @@ "swcx": "bin/swcx.js" }, "engines": { - "node": ">= 16.14.0" + "node": ">= 20.19.0" }, "peerDependencies": { "@swc/core": "^1.2.66", - "chokidar": "^4.0.1" + "chokidar": "^5.0.0" }, "peerDependenciesMeta": { "chokidar": { @@ -17509,6 +15680,23 @@ } } }, + "node_modules/@swc/cli/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@swc/cli/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/@swc/cli/node_modules/commander": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", @@ -17519,6 +15707,22 @@ "node": ">= 12" } }, + "node_modules/@swc/cli/node_modules/minimatch": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@swc/cli/node_modules/piscina": { "version": "4.9.2", "resolved": "https://registry.npmjs.org/piscina/-/piscina-4.9.2.tgz", @@ -17530,15 +15734,15 @@ } }, "node_modules/@swc/core": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.9.3.tgz", - "integrity": "sha512-oRj0AFePUhtatX+BscVhnzaAmWjpfAeySpM1TCbxA1rtBDeH/JDhi5yYzAKneDYtVtBvA7ApfeuzhMC9ye4xSg==", + "version": "1.15.18", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.18.tgz", + "integrity": "sha512-z87aF9GphWp//fnkRsqvtY+inMVPgYW3zSlXH1kJFvRT5H/wiAn+G32qW5l3oEk63KSF1x3Ov0BfHCObAmT8RA==", "dev": true, "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { "@swc/counter": "^0.1.3", - "@swc/types": "^0.1.17" + "@swc/types": "^0.1.25" }, "engines": { "node": ">=10" @@ -17548,19 +15752,19 @@ "url": "https://opencollective.com/swc" }, "optionalDependencies": { - "@swc/core-darwin-arm64": "1.9.3", - "@swc/core-darwin-x64": "1.9.3", - "@swc/core-linux-arm-gnueabihf": "1.9.3", - "@swc/core-linux-arm64-gnu": "1.9.3", - "@swc/core-linux-arm64-musl": "1.9.3", - "@swc/core-linux-x64-gnu": "1.9.3", - "@swc/core-linux-x64-musl": "1.9.3", - "@swc/core-win32-arm64-msvc": "1.9.3", - "@swc/core-win32-ia32-msvc": "1.9.3", - "@swc/core-win32-x64-msvc": "1.9.3" + "@swc/core-darwin-arm64": "1.15.18", + "@swc/core-darwin-x64": "1.15.18", + "@swc/core-linux-arm-gnueabihf": "1.15.18", + "@swc/core-linux-arm64-gnu": "1.15.18", + "@swc/core-linux-arm64-musl": "1.15.18", + "@swc/core-linux-x64-gnu": "1.15.18", + "@swc/core-linux-x64-musl": "1.15.18", + "@swc/core-win32-arm64-msvc": "1.15.18", + "@swc/core-win32-ia32-msvc": "1.15.18", + "@swc/core-win32-x64-msvc": "1.15.18" }, "peerDependencies": { - "@swc/helpers": "*" + "@swc/helpers": ">=0.5.17" }, "peerDependenciesMeta": { "@swc/helpers": { @@ -17569,9 +15773,9 @@ } }, "node_modules/@swc/core-darwin-arm64": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.9.3.tgz", - "integrity": "sha512-hGfl/KTic/QY4tB9DkTbNuxy5cV4IeejpPD4zo+Lzt4iLlDWIeANL4Fkg67FiVceNJboqg48CUX+APhDHO5G1w==", + "version": "1.15.18", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.18.tgz", + "integrity": "sha512-+mIv7uBuSaywN3C9LNuWaX1jJJ3SKfiJuE6Lr3bd+/1Iv8oMU7oLBjYMluX1UrEPzwN2qCdY6Io0yVicABoCwQ==", "cpu": [ "arm64" ], @@ -17586,9 +15790,9 @@ } }, "node_modules/@swc/core-darwin-x64": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.9.3.tgz", - "integrity": "sha512-IaRq05ZLdtgF5h9CzlcgaNHyg4VXuiStnOFpfNEMuI5fm5afP2S0FHq8WdakUz5WppsbddTdplL+vpeApt/WCQ==", + "version": "1.15.18", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.15.18.tgz", + "integrity": "sha512-wZle0eaQhnzxWX5V/2kEOI6Z9vl/lTFEC6V4EWcn+5pDjhemCpQv9e/TDJ0GIoiClX8EDWRvuZwh+Z3dhL1NAg==", "cpu": [ "x64" ], @@ -17603,9 +15807,9 @@ } }, "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.9.3.tgz", - "integrity": "sha512-Pbwe7xYprj/nEnZrNBvZfjnTxlBIcfApAGdz2EROhjpPj+FBqBa3wOogqbsuGGBdCphf8S+KPprL1z+oDWkmSQ==", + "version": "1.15.18", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.18.tgz", + "integrity": "sha512-ao61HGXVqrJFHAcPtF4/DegmwEkVCo4HApnotLU8ognfmU8x589z7+tcf3hU+qBiU1WOXV5fQX6W9Nzs6hjxDw==", "cpu": [ "arm" ], @@ -17620,9 +15824,9 @@ } }, "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.9.3.tgz", - "integrity": "sha512-AQ5JZiwNGVV/2K2TVulg0mw/3LYfqpjZO6jDPtR2evNbk9Yt57YsVzS+3vHSlUBQDRV9/jqMuZYVU3P13xrk+g==", + "version": "1.15.18", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.18.tgz", + "integrity": "sha512-3xnctOBLIq3kj8PxOCgPrGjBLP/kNOddr6f5gukYt/1IZxsITQaU9TDyjeX6jG+FiCIHjCuWuffsyQDL5Ew1bg==", "cpu": [ "arm64" ], @@ -17637,9 +15841,9 @@ } }, "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.9.3.tgz", - "integrity": "sha512-tzVH480RY6RbMl/QRgh5HK3zn1ZTFsThuxDGo6Iuk1MdwIbdFYUY034heWUTI4u3Db97ArKh0hNL0xhO3+PZdg==", + "version": "1.15.18", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.18.tgz", + "integrity": "sha512-0a+Lix+FSSHBSBOA0XznCcHo5/1nA6oLLjcnocvzXeqtdjnPb+SvchItHI+lfeiuj1sClYPDvPMLSLyXFaiIKw==", "cpu": [ "arm64" ], @@ -17654,9 +15858,9 @@ } }, "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.9.3.tgz", - "integrity": "sha512-ivXXBRDXDc9k4cdv10R21ccBmGebVOwKXT/UdH1PhxUn9m/h8erAWjz5pcELwjiMf27WokqPgaWVfaclDbgE+w==", + "version": "1.15.18", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.18.tgz", + "integrity": "sha512-wG9J8vReUlpaHz4KOD/5UE1AUgirimU4UFT9oZmupUDEofxJKYb1mTA/DrMj0s78bkBiNI+7Fo2EgPuvOJfuAA==", "cpu": [ "x64" ], @@ -17671,9 +15875,9 @@ } }, "node_modules/@swc/core-linux-x64-musl": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.9.3.tgz", - "integrity": "sha512-ILsGMgfnOz1HwdDz+ZgEuomIwkP1PHT6maigZxaCIuC6OPEhKE8uYna22uU63XvYcLQvZYDzpR3ms47WQPuNEg==", + "version": "1.15.18", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.18.tgz", + "integrity": "sha512-4nwbVvCphKzicwNWRmvD5iBaZj8JYsRGa4xOxJmOyHlMDpsvvJ2OR2cODlvWyGFH6BYL1MfIAK3qph3hp0Az6g==", "cpu": [ "x64" ], @@ -17688,9 +15892,9 @@ } }, "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.9.3.tgz", - "integrity": "sha512-e+XmltDVIHieUnNJHtspn6B+PCcFOMYXNJB1GqoCcyinkEIQNwC8KtWgMqUucUbEWJkPc35NHy9k8aCXRmw9Kg==", + "version": "1.15.18", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.18.tgz", + "integrity": "sha512-zk0RYO+LjiBCat2RTMHzAWaMky0cra9loH4oRrLKLLNuL+jarxKLFDA8xTZWEkCPLjUTwlRN7d28eDLLMgtUcQ==", "cpu": [ "arm64" ], @@ -17705,9 +15909,9 @@ } }, "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.9.3.tgz", - "integrity": "sha512-rqpzNfpAooSL4UfQnHhkW8aL+oyjqJniDP0qwZfGnjDoJSbtPysHg2LpcOBEdSnEH+uIZq6J96qf0ZFD8AGfXA==", + "version": "1.15.18", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.18.tgz", + "integrity": "sha512-yVuTrZ0RccD5+PEkpcLOBAuPbYBXS6rslENvIXfvJGXSdX5QGi1ehC4BjAMl5FkKLiam4kJECUI0l7Hq7T1vwg==", "cpu": [ "ia32" ], @@ -17722,9 +15926,9 @@ } }, "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.9.3.tgz", - "integrity": "sha512-3YJJLQ5suIEHEKc1GHtqVq475guiyqisKSoUnoaRtxkDaW5g1yvPt9IoSLOe2mRs7+FFhGGU693RsBUSwOXSdQ==", + "version": "1.15.18", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.18.tgz", + "integrity": "sha512-7NRmE4hmUQNCbYU3Hn9Tz57mK9Qq4c97ZS+YlamlK6qG9Fb5g/BB3gPDe0iLlJkns/sYv2VWSkm8c3NmbEGjbg==", "cpu": [ "x64" ], @@ -17746,12 +15950,12 @@ "license": "Apache-2.0" }, "node_modules/@swc/helpers": { - "version": "0.5.11", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.11.tgz", - "integrity": "sha512-YNlnKRWF2sVojTpIyzwou9XoTNbzbzONwRhOoniEioF1AtaitTvVZblaQRrAzChWQ1bLYyYSWzM18y4WwgzJ+A==", + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.19.tgz", + "integrity": "sha512-QamiFeIK3txNjgUTNppE6MiG3p7TdninpZu0E0PbqVh1a9FNLT2FRhisaa4NcaX52XVhA5l7Pk58Ft7Sqi/2sA==", "license": "Apache-2.0", "dependencies": { - "tslib": "^2.4.0" + "tslib": "^2.8.0" } }, "node_modules/@swc/types": { @@ -17825,9 +16029,9 @@ "license": "MIT" }, "node_modules/@testing-library/react": { - "version": "16.3.0", - "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.3.0.tgz", - "integrity": "sha512-kFSyxiEDwv1WLl2fgsq6pPBbw5aWKrsY2/noi1Id0TK0UParSF62oFQFGHXIyaG4pp2tEub/Zlel+fjjZILDsw==", + "version": "16.3.2", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.3.2.tgz", + "integrity": "sha512-XU5/SytQM+ykqMnAnvB2umaJNIOsLF3PVv//1Ew4CTcpz0/BRyy/af40qqrt7SjKpDdT1saBMc42CUok5gaw+g==", "dev": true, "license": "MIT", "dependencies": { @@ -17978,48 +16182,32 @@ "dev": true, "license": "MIT" }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/@tsconfig/node10": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.12.tgz", "integrity": "sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==", + "dev": true, "license": "MIT" }, "node_modules/@tsconfig/node12": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true, "license": "MIT" }, "node_modules/@tsconfig/node14": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true, "license": "MIT" }, "node_modules/@tsconfig/node16": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true, "license": "MIT" }, "node_modules/@tufjs/canonical-json": { @@ -18046,22 +16234,6 @@ "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@tufjs/models/node_modules/minimatch": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", - "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@tybys/wasm-util": { "version": "0.10.1", "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", @@ -18219,6 +16391,16 @@ "@types/estree": "*" } }, + "node_modules/@types/esquery": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/esquery/-/esquery-1.5.4.tgz", + "integrity": "sha512-yYO4Q8H+KJHKW1rEeSzHxcZi90durqYgWVfnh5K6ZADVBjBv2e1NEveYX5yT2bffgN7RqzH3k9930m+i2yBoMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, "node_modules/@types/estree": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", @@ -18248,9 +16430,9 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "4.19.7", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.7.tgz", - "integrity": "sha512-FvPtiIf1LfhzsaIXhv/PHan/2FeQBbtBDtfX2QfvPxdUelMDEckK08SM6nqo1MIZY3RUlfA+HV8+hFUSio78qg==", + "version": "4.19.8", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.8.tgz", + "integrity": "sha512-02S5fmqeoKzVZCHPZid4b8JH2eM5HzQLZWN2FohQEy/0eXTq8VXZfSN6Pcr3F6N9R/vNrj7cpgbhjie6m/1tCA==", "dev": true, "license": "MIT", "dependencies": { @@ -18264,6 +16446,7 @@ "version": "4.1.9", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dev": true, "license": "MIT", "dependencies": { "@types/node": "*" @@ -18279,9 +16462,9 @@ } }, "node_modules/@types/http-cache-semantics": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", - "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q==", "dev": true, "license": "MIT" }, @@ -18306,12 +16489,14 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true, "license": "MIT" }, "node_modules/@types/istanbul-lib-report": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, "license": "MIT", "dependencies": { "@types/istanbul-lib-coverage": "*" @@ -18321,6 +16506,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, "license": "MIT", "dependencies": { "@types/istanbul-lib-report": "*" @@ -18337,6 +16523,26 @@ "pretty-format": "^29.0.0" } }, + "node_modules/@types/jest/node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@types/jest/node_modules/@sinclair/typebox": { + "version": "0.27.10", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.10.tgz", + "integrity": "sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/jest/node_modules/ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", @@ -18373,9 +16579,9 @@ "license": "MIT" }, "node_modules/@types/jsdom": { - "version": "20.0.1", - "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz", - "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==", + "version": "21.1.7", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-21.1.7.tgz", + "integrity": "sha512-yOriVnggzrnQ3a9OKOCxaVuSug3w3/SbOj5i7VwXWZEyUNl3bLF9V3MfxGbZKuwqJOQyRfqXyROBB1CoZLFWzA==", "dev": true, "license": "MIT", "dependencies": { @@ -18462,9 +16668,10 @@ } }, "node_modules/@types/node": { - "version": "20.19.25", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.25.tgz", - "integrity": "sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ==", + "version": "20.19.37", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.37.tgz", + "integrity": "sha512-8kzdPJ3FsNsVIurqBs7oodNnCEVbni9yUEkaHbgptDACOPW04jimGagZ51E6+lXUwJjgnBw+hyko/lkFWCldqw==", + "dev": true, "license": "MIT", "dependencies": { "undici-types": "~6.21.0" @@ -18491,6 +16698,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", + "dev": true, "license": "MIT" }, "node_modules/@types/pug": { @@ -18515,9 +16723,9 @@ "license": "MIT" }, "node_modules/@types/react": { - "version": "19.2.7", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.7.tgz", - "integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==", + "version": "19.2.14", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.14.tgz", + "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==", "dev": true, "license": "MIT", "dependencies": { @@ -18612,6 +16820,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true, "license": "MIT" }, "node_modules/@types/tough-cookie": { @@ -18648,6 +16857,7 @@ "version": "17.0.35", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz", "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==", + "dev": true, "license": "MIT", "dependencies": { "@types/yargs-parser": "*" @@ -18657,6 +16867,7 @@ "version": "21.0.3", "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true, "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { @@ -18751,15 +16962,15 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.47.0.tgz", - "integrity": "sha512-2X4BX8hUeB5JcA1TQJ7GjcgulXQ+5UkNb0DL8gHsHUHdFoiCTJoYLTpib3LtSDPZsRET5ygN4qqIWrHyYIKERA==", + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.56.1.tgz", + "integrity": "sha512-TAdqQTzHNNvlVFfR+hu2PDJrURiwKsUvxFn1M0h95BB8ah5jejas08jUWG4dBA68jDMI988IvtfdAI53JzEHOQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.47.0", - "@typescript-eslint/types": "^8.47.0", - "debug": "^4.3.4" + "@typescript-eslint/tsconfig-utils": "^8.56.1", + "@typescript-eslint/types": "^8.56.1", + "debug": "^4.4.3" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -18773,9 +16984,9 @@ } }, "node_modules/@typescript-eslint/project-service/node_modules/@typescript-eslint/types": { - "version": "8.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.47.0.tgz", - "integrity": "sha512-nHAE6bMKsizhA2uuYZbEbmp5z2UpffNrPEqiKIeN7VsV6UY/roxanWfoRrf6x/k9+Obf+GQdkm0nPU+vnMXo9A==", + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.56.1.tgz", + "integrity": "sha512-dbMkdIUkIkchgGDIv7KLUpa0Mda4IYjo4IAMJUZ+3xNoUXxMsk9YtKpTHSChRS85o+H9ftm51gsK1dZReY9CVw==", "dev": true, "license": "MIT", "engines": { @@ -18805,9 +17016,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.47.0.tgz", - "integrity": "sha512-ybUAvjy4ZCL11uryalkKxuT3w3sXJAuWhOoGS3T/Wu+iUu1tGJmk5ytSY8gbdACNARmcYEB0COksD2j6hfGK2g==", + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.56.1.tgz", + "integrity": "sha512-qOtCYzKEeyr3aR9f28mPJqBty7+DBqsdd63eO0yyDwc6vgThj2UjWfJIcsFeSucYydqcuudMOprZ+x1SpF3ZuQ==", "dev": true, "license": "MIT", "engines": { @@ -18822,17 +17033,17 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.47.0.tgz", - "integrity": "sha512-QC9RiCmZ2HmIdCEvhd1aJELBlD93ErziOXXlHEZyuBo3tBiAZieya0HLIxp+DoDWlsQqDawyKuNEhORyku+P8A==", + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.56.1.tgz", + "integrity": "sha512-yB/7dxi7MgTtGhZdaHCemf7PuwrHMenHjmzgUW1aJpO+bBU43OycnM3Wn+DdvDO/8zzA9HlhaJ0AUGuvri4oGg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.47.0", - "@typescript-eslint/typescript-estree": "8.47.0", - "@typescript-eslint/utils": "8.47.0", - "debug": "^4.3.4", - "ts-api-utils": "^2.1.0" + "@typescript-eslint/types": "8.56.1", + "@typescript-eslint/typescript-estree": "8.56.1", + "@typescript-eslint/utils": "8.56.1", + "debug": "^4.4.3", + "ts-api-utils": "^2.4.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -18842,19 +17053,19 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/scope-manager": { - "version": "8.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.47.0.tgz", - "integrity": "sha512-a0TTJk4HXMkfpFkL9/WaGTNuv7JWfFTQFJd6zS9dVAjKsojmv9HT55xzbEpnZoY+VUb+YXLMp+ihMLz/UlZfDg==", + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.56.1.tgz", + "integrity": "sha512-YAi4VDKcIZp0O4tz/haYKhmIDZFEUPOreKbfdAN3SzUDMcPhJ8QI99xQXqX+HoUVq8cs85eRKnD+rne2UAnj2w==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.47.0", - "@typescript-eslint/visitor-keys": "8.47.0" + "@typescript-eslint/types": "8.56.1", + "@typescript-eslint/visitor-keys": "8.56.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -18865,9 +17076,9 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { - "version": "8.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.47.0.tgz", - "integrity": "sha512-nHAE6bMKsizhA2uuYZbEbmp5z2UpffNrPEqiKIeN7VsV6UY/roxanWfoRrf6x/k9+Obf+GQdkm0nPU+vnMXo9A==", + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.56.1.tgz", + "integrity": "sha512-dbMkdIUkIkchgGDIv7KLUpa0Mda4IYjo4IAMJUZ+3xNoUXxMsk9YtKpTHSChRS85o+H9ftm51gsK1dZReY9CVw==", "dev": true, "license": "MIT", "engines": { @@ -18879,22 +17090,21 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.47.0.tgz", - "integrity": "sha512-k6ti9UepJf5NpzCjH31hQNLHQWupTRPhZ+KFF8WtTuTpy7uHPfeg2NM7cP27aCGajoEplxJDFVCEm9TGPYyiVg==", + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.56.1.tgz", + "integrity": "sha512-qzUL1qgalIvKWAf9C1HpvBjif+Vm6rcT5wZd4VoMb9+Km3iS3Cv9DY6dMRMDtPnwRAFyAi7YXJpTIEXLvdfPxg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.47.0", - "@typescript-eslint/tsconfig-utils": "8.47.0", - "@typescript-eslint/types": "8.47.0", - "@typescript-eslint/visitor-keys": "8.47.0", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^2.1.0" + "@typescript-eslint/project-service": "8.56.1", + "@typescript-eslint/tsconfig-utils": "8.56.1", + "@typescript-eslint/types": "8.56.1", + "@typescript-eslint/visitor-keys": "8.56.1", + "debug": "^4.4.3", + "minimatch": "^10.2.2", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.4.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -18908,16 +17118,16 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/utils": { - "version": "8.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.47.0.tgz", - "integrity": "sha512-g7XrNf25iL4TJOiPqatNuaChyqt49a/onq5YsJ9+hXeugK+41LVg7AxikMfM02PC6jbNtZLCJj6AUcQXJS/jGQ==", + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.56.1.tgz", + "integrity": "sha512-HPAVNIME3tABJ61siYlHzSWCGtOoeP2RTIaHXFMPqjrQKCGB9OgUVdiNgH7TJS2JNIQ5qQ4RsAUDuGaGme/KOA==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.47.0", - "@typescript-eslint/types": "8.47.0", - "@typescript-eslint/typescript-estree": "8.47.0" + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.56.1", + "@typescript-eslint/types": "8.56.1", + "@typescript-eslint/typescript-estree": "8.56.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -18927,19 +17137,19 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.47.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.47.0.tgz", - "integrity": "sha512-SIV3/6eftCy1bNzCQoPmbWsRLujS8t5iDIZ4spZOBHqrM+yfX2ogg8Tt3PDTAVKw3sSCiUgg30uOAvK2r9zGjQ==", + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.56.1.tgz", + "integrity": "sha512-KiROIzYdEV85YygXw6BI/Dx4fnBlFQu6Mq4QE4MOH9fFnhohw6wX/OAvDY2/C+ut0I3RSPKenvZJIVYqJNkhEw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.47.0", - "eslint-visitor-keys": "^4.2.1" + "@typescript-eslint/types": "8.56.1", + "eslint-visitor-keys": "^5.0.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -18950,38 +17160,38 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", "dev": true, "license": "Apache-2.0", "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^20.19.0 || ^22.13.0 || >=24" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/@typescript-eslint/type-utils/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "version": "10.2.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", + "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^5.0.2" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@typescript-eslint/type-utils/node_modules/ts-api-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", - "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.4.0.tgz", + "integrity": "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==", "dev": true, "license": "MIT", "engines": { @@ -19034,14 +17244,31 @@ } } }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", "dev": true, "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^2.0.2" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -19380,9 +17607,9 @@ ] }, "node_modules/@vitejs/plugin-basic-ssl": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-2.1.0.tgz", - "integrity": "sha512-dOxxrhgyDIEUADhb/8OlV9JIqYLgos03YorAueTIeOUskLJSEsfwCByjbu98ctXitUN3znXKp0bYD/WHSudCeA==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-2.1.4.tgz", + "integrity": "sha512-HXciTXN/sDBYWgeAD4V4s0DN0g72x5mlxQhHxtYu3Tt8BLa6MzcJZUyDVFCdtjNs3bfENVHVzOsmooTVuNgAAw==", "dev": true, "license": "MIT", "engines": { @@ -19426,247 +17653,38 @@ "vite": "^4 || ^5 || ^6 || ^7" } }, - "node_modules/@vitejs/plugin-react-swc/node_modules/@swc/core": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.2.tgz", - "integrity": "sha512-OQm+yJdXxvSjqGeaWhP6Ia264ogifwAO7Q12uTDVYj/Ks4jBTI4JknlcjDRAXtRhqbWsfbZyK/5RtuIPyptk3w==", - "dev": true, - "hasInstallScript": true, - "license": "Apache-2.0", - "dependencies": { - "@swc/counter": "^0.1.3", - "@swc/types": "^0.1.25" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/swc" - }, - "optionalDependencies": { - "@swc/core-darwin-arm64": "1.15.2", - "@swc/core-darwin-x64": "1.15.2", - "@swc/core-linux-arm-gnueabihf": "1.15.2", - "@swc/core-linux-arm64-gnu": "1.15.2", - "@swc/core-linux-arm64-musl": "1.15.2", - "@swc/core-linux-x64-gnu": "1.15.2", - "@swc/core-linux-x64-musl": "1.15.2", - "@swc/core-win32-arm64-msvc": "1.15.2", - "@swc/core-win32-ia32-msvc": "1.15.2", - "@swc/core-win32-x64-msvc": "1.15.2" - }, - "peerDependencies": { - "@swc/helpers": ">=0.5.17" - }, - "peerDependenciesMeta": { - "@swc/helpers": { - "optional": true - } - } - }, - "node_modules/@vitejs/plugin-react-swc/node_modules/@swc/core-darwin-arm64": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.2.tgz", - "integrity": "sha512-Ghyz4RJv4zyXzrUC1B2MLQBbppIB5c4jMZJybX2ebdEQAvryEKp3gq1kBksCNsatKGmEgXul88SETU19sMWcrw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@vitejs/plugin-react-swc/node_modules/@swc/core-darwin-x64": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.15.2.tgz", - "integrity": "sha512-7n/PGJOcL2QoptzL42L5xFFfXY5rFxLHnuz1foU+4ruUTG8x2IebGhtwVTpaDN8ShEv2UZObBlT1rrXTba15Zw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@vitejs/plugin-react-swc/node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.2.tgz", - "integrity": "sha512-ZUQVCfRJ9wimuxkStRSlLwqX4TEDmv6/J+E6FicGkQ6ssLMWoKDy0cAo93HiWt/TWEee5vFhFaSQYzCuBEGO6A==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@vitejs/plugin-react-swc/node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.2.tgz", - "integrity": "sha512-GZh3pYBmfnpQ+JIg+TqLuz+pM+Mjsk5VOzi8nwKn/m+GvQBsxD5ectRtxuWUxMGNG8h0lMy4SnHRqdK3/iJl7A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@vitejs/plugin-react-swc/node_modules/@swc/core-linux-arm64-musl": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.2.tgz", - "integrity": "sha512-5av6VYZZeneiYIodwzGMlnyVakpuYZryGzFIbgu1XP8wVylZxduEzup4eP8atiMDFmIm+s4wn8GySJmYqeJC0A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@vitejs/plugin-react-swc/node_modules/@swc/core-linux-x64-gnu": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.2.tgz", - "integrity": "sha512-1nO/UfdCLuT/uE/7oB3EZgTeZDCIa6nL72cFEpdegnqpJVNDI6Qb8U4g/4lfVPkmHq2lvxQ0L+n+JdgaZLhrRA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@vitejs/plugin-react-swc/node_modules/@swc/core-linux-x64-musl": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.2.tgz", - "integrity": "sha512-Ksfrb0Tx310kr+TLiUOvB/I80lyZ3lSOp6cM18zmNRT/92NB4mW8oX2Jo7K4eVEI2JWyaQUAFubDSha2Q+439A==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@vitejs/plugin-react-swc/node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.2.tgz", - "integrity": "sha512-IzUb5RlMUY0r1A9IuJrQ7Tbts1wWb73/zXVXT8VhewbHGoNlBKE0qUhKMED6Tv4wDF+pmbtUJmKXDthytAvLmg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@vitejs/plugin-react-swc/node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.2.tgz", - "integrity": "sha512-kCATEzuY2LP9AlbU2uScjcVhgnCAkRdu62vbce17Ro5kxEHxYWcugkveyBRS3AqZGtwAKYbMAuNloer9LS/hpw==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@vitejs/plugin-react-swc/node_modules/@swc/core-win32-x64-msvc": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.2.tgz", - "integrity": "sha512-iJaHeYCF4jTn7OEKSa3KRiuVFIVYts8jYjNmCdyz1u5g8HRyTDISD76r8+ljEOgm36oviRQvcXaw6LFp1m0yyA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=10" - } - }, "node_modules/@vitest/browser": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/@vitest/browser/-/browser-4.0.13.tgz", - "integrity": "sha512-lruSgrYPVAJzKmX6EJYCg9nY+0A4VkeTLpTzf1jRD/XMjNbzD9yy7D499xmVKglwJczANYJXBvZSPGcRlon+0w==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@vitest/browser/-/browser-4.1.0.tgz", + "integrity": "sha512-tG/iOrgbiHQks0ew7CdelUyNEHkv8NLrt+CqdTivIuoSnXvO7scWMn4Kqo78/UGY1NJ6Hv+vp8BvRnED/bjFdQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/mocker": "4.0.13", - "@vitest/utils": "4.0.13", + "@blazediff/core": "1.9.1", + "@vitest/mocker": "4.1.0", + "@vitest/utils": "4.1.0", "magic-string": "^0.30.21", - "pixelmatch": "7.1.0", "pngjs": "^7.0.0", "sirv": "^3.0.2", "tinyrainbow": "^3.0.3", - "ws": "^8.18.3" + "ws": "^8.19.0" }, "funding": { "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "vitest": "4.0.13" + "vitest": "4.1.0" } }, "node_modules/@vitest/browser-playwright": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/@vitest/browser-playwright/-/browser-playwright-4.0.13.tgz", - "integrity": "sha512-oaRY+/pvwS4/sN2rE2aZh9jdli8EkXm5AidmXEbWRu2wW0omG9PmgChWCX2jsD9qRLQxXTSLl5oKezANNF6LnQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@vitest/browser-playwright/-/browser-playwright-4.1.0.tgz", + "integrity": "sha512-2RU7pZELY9/aVMLmABNy1HeZ4FX23FXGY1jRuHLHgWa2zaAE49aNW2GLzebW+BmbTZIKKyFF1QXvk7DEWViUCQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/browser": "4.0.13", - "@vitest/mocker": "4.0.13", + "@vitest/browser": "4.1.0", + "@vitest/mocker": "4.1.0", "tinyrainbow": "^3.0.3" }, "funding": { @@ -19674,7 +17692,7 @@ }, "peerDependencies": { "playwright": "*", - "vitest": "4.0.13" + "vitest": "4.1.0" }, "peerDependenciesMeta": { "playwright": { @@ -19682,20 +17700,10 @@ } } }, - "node_modules/@vitest/browser/node_modules/magic-string": { - "version": "0.30.21", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", - "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.5" - } - }, "node_modules/@vitest/browser/node_modules/ws": { - "version": "8.18.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", - "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz", + "integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==", "dev": true, "license": "MIT", "engines": { @@ -19715,29 +17723,29 @@ } }, "node_modules/@vitest/coverage-v8": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-4.0.18.tgz", - "integrity": "sha512-7i+N2i0+ME+2JFZhfuz7Tg/FqKtilHjGyGvoHYQ6iLV0zahbsJ9sljC9OcFcPDbhYKCet+sG8SsVqlyGvPflZg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-4.1.0.tgz", + "integrity": "sha512-nDWulKeik2bL2Va/Wl4x7DLuTKAXa906iRFooIRPR+huHkcvp9QDkPQ2RJdmjOFrqOqvNfoSQLF68deE3xC3CQ==", "dev": true, "license": "MIT", "dependencies": { "@bcoe/v8-coverage": "^1.0.2", - "@vitest/utils": "4.0.18", - "ast-v8-to-istanbul": "^0.3.10", + "@vitest/utils": "4.1.0", + "ast-v8-to-istanbul": "^1.0.0", "istanbul-lib-coverage": "^3.2.2", "istanbul-lib-report": "^3.0.1", "istanbul-reports": "^3.2.0", - "magicast": "^0.5.1", + "magicast": "^0.5.2", "obug": "^2.1.1", - "std-env": "^3.10.0", + "std-env": "^4.0.0-rc.1", "tinyrainbow": "^3.0.3" }, "funding": { "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "@vitest/browser": "4.0.18", - "vitest": "4.0.18" + "@vitest/browser": "4.1.0", + "vitest": "4.1.0" }, "peerDependenciesMeta": { "@vitest/browser": { @@ -19755,82 +17763,18 @@ "node": ">=18" } }, - "node_modules/@vitest/coverage-v8/node_modules/@vitest/pretty-format": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.0.18.tgz", - "integrity": "sha512-P24GK3GulZWC5tz87ux0m8OADrQIUVDPIjjj65vBXYG17ZeU3qD7r+MNZ1RNv4l8CGU2vtTRqixrOi9fYk/yKw==", - "dev": true, - "license": "MIT", - "dependencies": { - "tinyrainbow": "^3.0.3" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/coverage-v8/node_modules/@vitest/utils": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.0.18.tgz", - "integrity": "sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/pretty-format": "4.0.18", - "tinyrainbow": "^3.0.3" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, "node_modules/@vitest/expect": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.0.18.tgz", - "integrity": "sha512-8sCWUyckXXYvx4opfzVY03EOiYVxyNrHS5QxX3DAIi5dpJAAkyJezHCP77VMX4HKA2LDT/Jpfo8i2r5BE3GnQQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.0.tgz", + "integrity": "sha512-EIxG7k4wlWweuCLG9Y5InKFwpMEOyrMb6ZJ1ihYu02LVj/bzUwn2VMU+13PinsjRW75XnITeFrQBMH5+dLvCDA==", "dev": true, "license": "MIT", "dependencies": { - "@standard-schema/spec": "^1.0.0", + "@standard-schema/spec": "^1.1.0", "@types/chai": "^5.2.2", - "@vitest/spy": "4.0.18", - "@vitest/utils": "4.0.18", - "chai": "^6.2.1", - "tinyrainbow": "^3.0.3" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/expect/node_modules/@vitest/pretty-format": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.0.18.tgz", - "integrity": "sha512-P24GK3GulZWC5tz87ux0m8OADrQIUVDPIjjj65vBXYG17ZeU3qD7r+MNZ1RNv4l8CGU2vtTRqixrOi9fYk/yKw==", - "dev": true, - "license": "MIT", - "dependencies": { - "tinyrainbow": "^3.0.3" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/expect/node_modules/@vitest/spy": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.0.18.tgz", - "integrity": "sha512-cbQt3PTSD7P2OARdVW3qWER5EGq7PHlvE+QfzSC0lbwO+xnt7+XH06ZzFjFRgzUX//JmpxrCu92VdwvEPlWSNw==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/expect/node_modules/@vitest/utils": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.0.18.tgz", - "integrity": "sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/pretty-format": "4.0.18", + "@vitest/spy": "4.1.0", + "@vitest/utils": "4.1.0", + "chai": "^6.2.2", "tinyrainbow": "^3.0.3" }, "funding": { @@ -19838,13 +17782,13 @@ } }, "node_modules/@vitest/mocker": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.0.13.tgz", - "integrity": "sha512-eNCwzrI5djoauklwP1fuslHBjrbR8rqIVbvNlAnkq1OTa6XT+lX68mrtPirNM9TnR69XUPt4puBCx2Wexseylg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.0.tgz", + "integrity": "sha512-evxREh+Hork43+Y4IOhTo+h5lGmVRyjqI739Rz4RlUPqwrkFFDF6EMvOOYjTx4E8Tl6gyCLRL8Mu7Ry12a13Tw==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "4.0.13", + "@vitest/spy": "4.1.0", "estree-walker": "^3.0.3", "magic-string": "^0.30.21" }, @@ -19853,7 +17797,7 @@ }, "peerDependencies": { "msw": "^2.4.9", - "vite": "^6.0.0 || ^7.0.0-0" + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0-0" }, "peerDependenciesMeta": { "msw": { @@ -19864,30 +17808,10 @@ } } }, - "node_modules/@vitest/mocker/node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0" - } - }, - "node_modules/@vitest/mocker/node_modules/magic-string": { - "version": "0.30.21", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", - "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.5" - } - }, "node_modules/@vitest/pretty-format": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.0.13.tgz", - "integrity": "sha512-ooqfze8URWbI2ozOeLDMh8YZxWDpGXoeY3VOgcDnsUxN0jPyPWSUvjPQWqDGCBks+opWlN1E4oP1UYl3C/2EQA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.0.tgz", + "integrity": "sha512-3RZLZlh88Ib0J7NQTRATfc/3ZPOnSUn2uDBUoGNn5T36+bALixmzphN26OUD3LRXWkJu4H0s5vvUeqBiw+kS0A==", "dev": true, "license": "MIT", "dependencies": { @@ -19898,54 +17822,28 @@ } }, "node_modules/@vitest/runner": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.0.18.tgz", - "integrity": "sha512-rpk9y12PGa22Jg6g5M3UVVnTS7+zycIGk9ZNGN+m6tZHKQb7jrP7/77WfZy13Y/EUDd52NDsLRQhYKtv7XfPQw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.0.tgz", + "integrity": "sha512-Duvx2OzQ7d6OjchL+trw+aSrb9idh7pnNfxrklo14p3zmNL4qPCDeIJAK+eBKYjkIwG96Bc6vYuxhqDXQOWpoQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "4.0.18", + "@vitest/utils": "4.1.0", "pathe": "^2.0.3" }, "funding": { "url": "https://opencollective.com/vitest" } }, - "node_modules/@vitest/runner/node_modules/@vitest/pretty-format": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.0.18.tgz", - "integrity": "sha512-P24GK3GulZWC5tz87ux0m8OADrQIUVDPIjjj65vBXYG17ZeU3qD7r+MNZ1RNv4l8CGU2vtTRqixrOi9fYk/yKw==", - "dev": true, - "license": "MIT", - "dependencies": { - "tinyrainbow": "^3.0.3" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/runner/node_modules/@vitest/utils": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.0.18.tgz", - "integrity": "sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/pretty-format": "4.0.18", - "tinyrainbow": "^3.0.3" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, "node_modules/@vitest/snapshot": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.0.18.tgz", - "integrity": "sha512-PCiV0rcl7jKQjbgYqjtakly6T1uwv/5BQ9SwBLekVg/EaYeQFPiXcgrC2Y7vDMA8dM1SUEAEV82kgSQIlXNMvA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.0.tgz", + "integrity": "sha512-0Vy9euT1kgsnj1CHttwi9i9o+4rRLEaPRSOJ5gyv579GJkNpgJK+B4HSv/rAWixx2wdAFci1X4CEPjiu2bXIMg==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "4.0.18", + "@vitest/pretty-format": "4.1.0", + "@vitest/utils": "4.1.0", "magic-string": "^0.30.21", "pathe": "^2.0.3" }, @@ -19953,33 +17851,10 @@ "url": "https://opencollective.com/vitest" } }, - "node_modules/@vitest/snapshot/node_modules/@vitest/pretty-format": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.0.18.tgz", - "integrity": "sha512-P24GK3GulZWC5tz87ux0m8OADrQIUVDPIjjj65vBXYG17ZeU3qD7r+MNZ1RNv4l8CGU2vtTRqixrOi9fYk/yKw==", - "dev": true, - "license": "MIT", - "dependencies": { - "tinyrainbow": "^3.0.3" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/snapshot/node_modules/magic-string": { - "version": "0.30.21", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", - "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.5" - } - }, "node_modules/@vitest/spy": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.0.13.tgz", - "integrity": "sha512-hSu+m4se0lDV5yVIcNWqjuncrmBgwaXa2utFLIrBkQCQkt+pSwyZTPFQAZiiF/63j8jYa8uAeUZ3RSfcdWaYWw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.0.tgz", + "integrity": "sha512-pz77k+PgNpyMDv2FV6qmk5ZVau6c3R8HC8v342T2xlFxQKTrSeYw9waIJG8KgV9fFwAtTu4ceRzMivPTH6wSxw==", "dev": true, "license": "MIT", "funding": { @@ -19987,15 +17862,15 @@ } }, "node_modules/@vitest/ui": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-4.0.18.tgz", - "integrity": "sha512-CGJ25bc8fRi8Lod/3GHSvXRKi7nBo3kxh0ApW4yCjmrWmRmlT53B5E08XRSZRliygG0aVNxLrBEqPYdz/KcCtQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-4.1.0.tgz", + "integrity": "sha512-sTSDtVM1GOevRGsCNhp1mBUHKo9Qlc55+HCreFT4fe99AHxl1QQNXSL3uj4Pkjh5yEuWZIx8E2tVC94nnBZECQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "4.0.18", + "@vitest/utils": "4.1.0", "fflate": "^0.8.2", - "flatted": "^3.3.3", + "flatted": "3.4.0", "pathe": "^2.0.3", "sirv": "^3.0.2", "tinyglobby": "^0.2.15", @@ -20005,66 +17880,37 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "vitest": "4.0.18" + "vitest": "4.1.0" } }, - "node_modules/@vitest/ui/node_modules/@vitest/pretty-format": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.0.18.tgz", - "integrity": "sha512-P24GK3GulZWC5tz87ux0m8OADrQIUVDPIjjj65vBXYG17ZeU3qD7r+MNZ1RNv4l8CGU2vtTRqixrOi9fYk/yKw==", + "node_modules/@vitest/ui/node_modules/flatted": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.0.tgz", + "integrity": "sha512-kC6Bb+ooptOIvWj5B63EQWkF0FEnNjV2ZNkLMLZRDDduIiWeFF4iKnslwhiWxjAdbg4NzTNo6h0qLuvFrcx+Sw==", "dev": true, - "license": "MIT", - "dependencies": { - "tinyrainbow": "^3.0.3" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } + "license": "ISC" }, - "node_modules/@vitest/ui/node_modules/@vitest/utils": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.0.18.tgz", - "integrity": "sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA==", + "node_modules/@vitest/utils": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.0.tgz", + "integrity": "sha512-XfPXT6a8TZY3dcGY8EdwsBulFCIw+BeeX0RZn2x/BtiY/75YGh8FeWGG8QISN/WhaqSrE2OrlDgtF8q5uhOTmw==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "4.0.18", + "@vitest/pretty-format": "4.1.0", + "convert-source-map": "^2.0.0", "tinyrainbow": "^3.0.3" }, "funding": { "url": "https://opencollective.com/vitest" } }, - "node_modules/@vitest/ui/node_modules/tinyglobby": { - "version": "0.2.15", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "fdir": "^6.5.0", - "picomatch": "^4.0.3" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" - } - }, - "node_modules/@vitest/utils": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.0.13.tgz", - "integrity": "sha512-ydozWyQ4LZuu8rLp47xFUWis5VOKMdHjXCWhs1LuJsTNKww+pTHQNK4e0assIB9K80TxFyskENL6vCu3j34EYA==", + "node_modules/@vitest/utils/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/pretty-format": "4.0.13", - "tinyrainbow": "^3.0.3" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } + "license": "MIT" }, "node_modules/@volar/kit": { "version": "2.4.28", @@ -20172,28 +18018,48 @@ "license": "MIT" }, "node_modules/@vue/compiler-core": { - "version": "3.5.24", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.24.tgz", - "integrity": "sha512-eDl5H57AOpNakGNAkFDH+y7kTqrQpJkZFXhWZQGyx/5Wh7B1uQYvcWkvZi11BDhscPgj8N7XV3oRwiPnx1Vrig==", + "version": "3.5.29", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.29.tgz", + "integrity": "sha512-cuzPhD8fwRHk8IGfmYaR4eEe4cAyJEL66Ove/WZL7yWNL134nqLddSLwNRIsFlnnW1kK+p8Ck3viFnC0chXCXw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.28.5", - "@vue/shared": "3.5.24", - "entities": "^4.5.0", + "@babel/parser": "^7.29.0", + "@vue/shared": "3.5.29", + "entities": "^7.0.1", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, + "node_modules/@vue/compiler-core/node_modules/entities": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/@vue/compiler-core/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true, + "license": "MIT" + }, "node_modules/@vue/compiler-dom": { - "version": "3.5.24", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.24.tgz", - "integrity": "sha512-1QHGAvs53gXkWdd3ZMGYuvQFXHW4ksKWPG8HP8/2BscrbZ0brw183q2oNWjMrSWImYLHxHrx1ItBQr50I/q2zw==", + "version": "3.5.29", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.29.tgz", + "integrity": "sha512-n0G5o7R3uBVmVxjTIYcz7ovr8sy7QObFG8OQJ3xGCDNhbG60biP/P5KnyY8NLd81OuT1WJflG7N4KWYHaeeaIg==", "dev": true, "license": "MIT", "dependencies": { - "@vue/compiler-core": "3.5.24", - "@vue/shared": "3.5.24" + "@vue/compiler-core": "3.5.29", + "@vue/shared": "3.5.29" } }, "node_modules/@vue/compiler-vue2": { @@ -20232,10 +18098,43 @@ } } }, + "node_modules/@vue/language-core/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vue/language-core/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@vue/language-core/node_modules/minimatch": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@vue/shared": { - "version": "3.5.24", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.24.tgz", - "integrity": "sha512-9cwHL2EsJBdi8NY22pngYYWzkTDhld6fAD6jlaeloNGciNSJL6bLpbxVgXl96X00Jtc6YWQv96YA/0sxex/k1A==", + "version": "3.5.29", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.29.tgz", + "integrity": "sha512-w7SR0A5zyRByL9XUkCfdLs7t9XOHUyJ67qPGQjOou3p6GvBeBW+AVjUUmlxtZ4PIYaRvE+1LmK44O4uajlZwcg==", "dev": true, "license": "MIT" }, @@ -20575,6 +18474,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true, "license": "BSD-2-Clause" }, "node_modules/@yarnpkg/parsers": { @@ -20591,10 +18491,34 @@ "node": ">=18.12.0" } }, + "node_modules/@yarnpkg/parsers/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@yarnpkg/parsers/node_modules/js-yaml": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/@zip.js/zip.js": { - "version": "2.8.10", - "resolved": "https://registry.npmjs.org/@zip.js/zip.js/-/zip.js-2.8.10.tgz", - "integrity": "sha512-WVywWK8HSttmFFYSih7lUjjaV4zGzMxy992y0tHrZY4Wf9x/uNBA/XJ50RvfGjuuJKti4yueEHA2ol2pOq6VDg==", + "version": "2.8.22", + "resolved": "https://registry.npmjs.org/@zip.js/zip.js/-/zip.js-2.8.22.tgz", + "integrity": "sha512-0KlzbVR6r8irIX2o3zvUlosBDef62VDl47oUfa1U/qgEs67h4/eGBrX/6HWa1RQbt+J6sAeVmtyFKbTHNdF8qQ==", "license": "BSD-3-Clause", "engines": { "bun": ">=0.7.0", @@ -20606,6 +18530,7 @@ "version": "0.0.7", "resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.7.tgz", "integrity": "sha512-nrUSn7hzt7J6JWgWGz78ZYI8wj+gdIJdk0Ynjpp8l+trkn58Uqsf6RYrYkEK+3X18EX+TNdtJI0WxAtc+L84SQ==", + "dev": true, "license": "MIT", "dependencies": { "argparse": "^2.0.1" @@ -20614,14 +18539,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "deprecated": "Use your platform's native atob() and btoa() methods instead", - "dev": true, - "license": "BSD-3-Clause" - }, "node_modules/abbrev": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-4.0.0.tgz", @@ -20646,10 +18563,20 @@ "node": ">= 0.6" } }, + "node_modules/accepts/node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -20658,17 +18585,6 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-globals": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", - "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^8.1.0", - "acorn-walk": "^8.0.2" - } - }, "node_modules/acorn-import-phases": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", @@ -20692,9 +18608,10 @@ } }, "node_modules/acorn-walk": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", - "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.5.tgz", + "integrity": "sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==", + "dev": true, "license": "MIT", "dependencies": { "acorn": "^8.11.0" @@ -20707,6 +18624,7 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", + "dev": true, "license": "MIT", "engines": { "node": ">= 10.0.0" @@ -20792,9 +18710,9 @@ } }, "node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", "dev": true, "license": "MIT", "dependencies": { @@ -20855,26 +18773,26 @@ } }, "node_modules/algoliasearch": { - "version": "5.46.2", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.46.2.tgz", - "integrity": "sha512-qqAXW9QvKf2tTyhpDA4qXv1IfBwD2eduSW6tUEBFIfCeE9gn9HQ9I5+MaKoenRuHrzk5sQoNh1/iof8mY7uD6Q==", + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.48.1.tgz", + "integrity": "sha512-Rf7xmeuIo7nb6S4mp4abW2faW8DauZyE2faBIKFaUfP3wnpOvNSbiI5AwVhqBNj0jPgBWEvhyCu0sLjN2q77Rg==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/abtesting": "1.12.2", - "@algolia/client-abtesting": "5.46.2", - "@algolia/client-analytics": "5.46.2", - "@algolia/client-common": "5.46.2", - "@algolia/client-insights": "5.46.2", - "@algolia/client-personalization": "5.46.2", - "@algolia/client-query-suggestions": "5.46.2", - "@algolia/client-search": "5.46.2", - "@algolia/ingestion": "1.46.2", - "@algolia/monitoring": "1.46.2", - "@algolia/recommend": "5.46.2", - "@algolia/requester-browser-xhr": "5.46.2", - "@algolia/requester-fetch": "5.46.2", - "@algolia/requester-node-http": "5.46.2" + "@algolia/abtesting": "1.14.1", + "@algolia/client-abtesting": "5.48.1", + "@algolia/client-analytics": "5.48.1", + "@algolia/client-common": "5.48.1", + "@algolia/client-insights": "5.48.1", + "@algolia/client-personalization": "5.48.1", + "@algolia/client-query-suggestions": "5.48.1", + "@algolia/client-search": "5.48.1", + "@algolia/ingestion": "1.48.1", + "@algolia/monitoring": "1.48.1", + "@algolia/recommend": "5.48.1", + "@algolia/requester-browser-xhr": "5.48.1", + "@algolia/requester-fetch": "5.48.1", + "@algolia/requester-node-http": "5.48.1" }, "engines": { "node": ">= 14.0.0" @@ -20929,6 +18847,7 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -20938,6 +18857,7 @@ "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, "license": "MIT", "dependencies": { "type-fest": "^0.21.3" @@ -20949,6 +18869,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ansi-html-community": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", @@ -20975,6 +18908,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -21043,6 +18977,7 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true, "license": "MIT" }, "node_modules/argparse": { @@ -21142,6 +19077,27 @@ "node": ">=8" } }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array.prototype.findlastindex": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", @@ -21241,6 +19197,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/asn1js": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.7.tgz", + "integrity": "sha512-uLvq6KJu04qoQM6gvBfKFjlh6Gl0vOKQuR5cJMDHQkmwfMOQeN3F3SHCv9SNYSL+CRoHvOGFfllDlVz03GQjvQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "pvtsutils": "^1.3.6", + "pvutils": "^1.1.3", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/assert": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz", @@ -21272,31 +19243,21 @@ "license": "MIT" }, "node_modules/ast-v8-to-istanbul": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/ast-v8-to-istanbul/-/ast-v8-to-istanbul-0.3.10.tgz", - "integrity": "sha512-p4K7vMz2ZSk3wN8l5o3y2bJAoZXT3VuJI5OLTATY/01CYWumWvwkUw0SqDBnNq6IiTO3qDa1eSQDibAV8g7XOQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ast-v8-to-istanbul/-/ast-v8-to-istanbul-1.0.0.tgz", + "integrity": "sha512-1fSfIwuDICFA4LKkCzRPO7F0hzFf0B7+Xqrl27ynQaa+Rh0e1Es0v6kWHPott3lU10AyAr7oKHa65OppjLn3Rg==", "dev": true, "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.31", "estree-walker": "^3.0.3", - "js-tokens": "^9.0.1" - } - }, - "node_modules/ast-v8-to-istanbul/node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0" + "js-tokens": "^10.0.0" } }, "node_modules/ast-v8-to-istanbul/node_modules/js-tokens": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", - "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-10.0.0.tgz", + "integrity": "sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==", "dev": true, "license": "MIT" }, @@ -21310,14 +19271,14 @@ } }, "node_modules/astro": { - "version": "5.16.16", - "resolved": "https://registry.npmjs.org/astro/-/astro-5.16.16.tgz", - "integrity": "sha512-MFlFvQ84ixaHyqB3uGwMhNHdBLZ3vHawyq3PqzQS2TNWiNfQrxp5ag6S3lX+Cvnh0MUcXX+UnJBPMBHjP1/1ZQ==", + "version": "5.18.1", + "resolved": "https://registry.npmjs.org/astro/-/astro-5.18.1.tgz", + "integrity": "sha512-m4VWilWZ+Xt6NPoYzC4CgGZim/zQUO7WFL0RHCH0AiEavF1153iC3+me2atDvXpf/yX4PyGUeD8wZLq1cirT3g==", "license": "MIT", "dependencies": { "@astrojs/compiler": "^2.13.0", - "@astrojs/internal-helpers": "0.7.5", - "@astrojs/markdown-remark": "6.3.10", + "@astrojs/internal-helpers": "0.7.6", + "@astrojs/markdown-remark": "6.3.11", "@astrojs/telemetry": "3.3.0", "@capsizecss/unpack": "^4.0.0", "@oslojs/encoding": "^1.1.0", @@ -21338,7 +19299,7 @@ "dlv": "^1.1.3", "dset": "^3.1.4", "es-module-lexer": "^1.7.0", - "esbuild": "^0.25.0", + "esbuild": "^0.27.3", "estree-walker": "^3.0.3", "flattie": "^1.1.1", "fontace": "~0.4.0", @@ -21404,43 +19365,6 @@ "node": ">= 0.4" } }, - "node_modules/astro/node_modules/axobject-query": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", - "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", - "license": "Apache-2.0", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/astro/node_modules/ci-info": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.1.tgz", - "integrity": "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/astro/node_modules/cookie": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", - "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, "node_modules/astro/node_modules/css-select": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", @@ -21482,122 +19406,16 @@ "url": "https://github.com/sponsors/fb55" } }, - "node_modules/astro/node_modules/diff": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.3.tgz", - "integrity": "sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/astro/node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0" - } - }, - "node_modules/astro/node_modules/eventemitter3": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", - "license": "MIT" - }, - "node_modules/astro/node_modules/html-escaper": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz", - "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==", - "license": "MIT" - }, - "node_modules/astro/node_modules/js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/astro/node_modules/magic-string": { - "version": "0.30.21", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", - "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.5" - } - }, "node_modules/astro/node_modules/mdn-data": { "version": "2.12.2", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", "license": "CC0-1.0" }, - "node_modules/astro/node_modules/p-limit": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-6.2.0.tgz", - "integrity": "sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==", - "license": "MIT", - "dependencies": { - "yocto-queue": "^1.1.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/astro/node_modules/p-queue": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-8.1.1.tgz", - "integrity": "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ==", - "license": "MIT", - "dependencies": { - "eventemitter3": "^5.0.1", - "p-timeout": "^6.1.2" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/astro/node_modules/p-timeout": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.4.tgz", - "integrity": "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==", - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/astro/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/astro/node_modules/svgo": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.0.tgz", - "integrity": "sha512-VvrHQ+9uniE+Mvx3+C9IEe/lWasXCU0nXMY2kZeLrHNICuRiC8uMPyM14UEaMOFA5mhyQqEkB02VoQ16n3DLaw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.1.tgz", + "integrity": "sha512-XDpWUOPC6FEibaLzjfe0ucaV0YrOjYotGJO1WpF0Zd+n6ZGEQUsSugaoLq9QkEZtAfQIxT42UChcssDVPP3+/w==", "license": "MIT", "dependencies": { "commander": "^11.1.0", @@ -21606,7 +19424,7 @@ "css-what": "^6.1.0", "csso": "^5.0.5", "picocolors": "^1.1.1", - "sax": "^1.4.1" + "sax": "^1.5.0" }, "bin": { "svgo": "bin/svgo.js" @@ -21619,22 +19437,6 @@ "url": "https://opencollective.com/svgo" } }, - "node_modules/astro/node_modules/tinyglobby": { - "version": "0.2.15", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", - "license": "MIT", - "dependencies": { - "fdir": "^6.5.0", - "picomatch": "^4.0.3" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" - } - }, "node_modules/astro/node_modules/vite": { "version": "6.4.1", "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.1.tgz", @@ -21710,9 +19512,9 @@ } }, "node_modules/astro/node_modules/vitefu": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.1.tgz", - "integrity": "sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.2.tgz", + "integrity": "sha512-zpKATdUbzbsycPFBN71nS2uzBUQiVnFoOrr2rvqv34S1lcAgMKKkjWleLGeiJlZ8lwCXvtWaRn7R3ZC16SYRuw==", "license": "MIT", "workspaces": [ "tests/deps/*", @@ -21720,7 +19522,7 @@ "tests/projects/workspace/packages/*" ], "peerDependencies": { - "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0" + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-beta.0" }, "peerDependenciesMeta": { "vite": { @@ -21728,18 +19530,6 @@ } } }, - "node_modules/astro/node_modules/yocto-queue": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz", - "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==", - "license": "MIT", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/astro/node_modules/zod": { "version": "3.25.76", "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", @@ -21753,6 +19543,7 @@ "version": "3.2.6", "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "dev": true, "license": "MIT" }, "node_modules/async-function": { @@ -21769,6 +19560,7 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true, "license": "MIT" }, "node_modules/at-least-node": { @@ -21782,9 +19574,9 @@ } }, "node_modules/autoprefixer": { - "version": "10.4.22", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.22.tgz", - "integrity": "sha512-ARe0v/t9gO28Bznv6GgqARmVqcWOV3mfgUPn9becPHMiD3o9BwlRgaeccZnwTpZ7Zwqrm+c1sUSsMxIzQzc8Xg==", + "version": "10.4.27", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.27.tgz", + "integrity": "sha512-NP9APE+tO+LuJGn7/9+cohklunJsXWiaWEfV3si4Gi/XHDwVNgkwr1J3RQYFIvPy76GmJ9/bW8vyoU1LcxwKHA==", "dev": true, "funding": [ { @@ -21802,10 +19594,9 @@ ], "license": "MIT", "dependencies": { - "browserslist": "^4.27.0", - "caniuse-lite": "^1.0.30001754", + "browserslist": "^4.28.1", + "caniuse-lite": "^1.0.30001774", "fraction.js": "^5.3.4", - "normalize-range": "^0.1.2", "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" }, @@ -21835,9 +19626,9 @@ } }, "node_modules/axe-core": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.11.0.tgz", - "integrity": "sha512-ilYanEU8vxxBexpJd8cWM4ElSQq4QctCLKih0TSfjIfCQTeyH/6zVrmIJfLPrKTKJRbiG+cfnZbQIjAlJmF1jQ==", + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.11.1.tgz", + "integrity": "sha512-BASOg+YwO2C+346x3LZOeoovTIoTrRqEsqMa6fmfAV0P+U9mFr9NsyOEpiYvFjbc64NMrSswhV50WdXzdb/Z5A==", "dev": true, "license": "MPL-2.0", "engines": { @@ -21845,9 +19636,10 @@ } }, "node_modules/axios": { - "version": "1.13.5", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.5.tgz", - "integrity": "sha512-cz4ur7Vb0xS4/KUN0tPWe44eqxrIu31me+fbang3ijiNscE129POzipJJA6zniq2C/Z6sJCjMimjS8Lc/GAs8Q==", + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.6.tgz", + "integrity": "sha512-ChTCHMouEe2kn713WHbQGcuYrr6fXTBiu460OTwWrWob16g1bXn4vtz07Ope7ewMozJAnEquLk5lWQWtBig9DQ==", + "dev": true, "license": "MIT", "dependencies": { "follow-redirects": "^1.15.11", @@ -21856,19 +19648,18 @@ } }, "node_modules/axobject-query": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.0.0.tgz", - "integrity": "sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==", - "dev": true, + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", "license": "Apache-2.0", - "dependencies": { - "dequal": "^2.0.3" + "engines": { + "node": ">= 0.4" } }, "node_modules/b4a": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.3.tgz", - "integrity": "sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.8.0.tgz", + "integrity": "sha512-qRuSmNSkGQaHwNbM7J78Wwy+ghLEYF1zNrSeMxj4Kgw6y33O3mXcQ6Ie9fRvfU/YnxWkOchPXbaLb73TkIsfdg==", "dev": true, "license": "Apache-2.0", "peerDependencies": { @@ -21881,24 +19672,25 @@ } }, "node_modules/babel-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", - "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-30.2.0.tgz", + "integrity": "sha512-0YiBEOxWqKkSQWL9nNGGEgndoeL0ZpWrbLMNL5u/Kaxrli3Eaxlt3ZtIDktEvXt4L/R9r3ODr2zKwGM/2BjxVw==", + "dev": true, "license": "MIT", "dependencies": { - "@jest/transform": "^29.7.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.6.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", + "@jest/transform": "30.2.0", + "@types/babel__core": "^7.20.5", + "babel-plugin-istanbul": "^7.0.1", + "babel-preset-jest": "30.2.0", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", "slash": "^3.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" }, "peerDependencies": { - "@babel/core": "^7.8.0" + "@babel/core": "^7.11.0 || ^8.0.0-0" } }, "node_modules/babel-loader": { @@ -21922,6 +19714,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/babel-plugin-const-enum/-/babel-plugin-const-enum-1.2.0.tgz", "integrity": "sha512-o1m/6iyyFnp9MRsK1dHF3bneqyf3AlM2q3A/YbgQr2pCat6B6XJVDv2TXqzfY2RYUi4mak6WAksSBPlyYGx9dg==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", @@ -21933,59 +19726,36 @@ } }, "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-7.0.1.tgz", + "integrity": "sha512-D8Z6Qm8jCvVXtIRkBnqNHX0zJ37rQcFJ9u8WOS6tkYOsRdHBzypCstaxWiu5ZIlqQtviRYbgnRLSoCEvjqcqbA==", + "dev": true, "license": "BSD-3-Clause", + "workspaces": [ + "test/babel-8" + ], "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-instrument": "^6.0.2", "test-exclude": "^6.0.0" }, "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "license": "BSD-3-Clause", - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-istanbul/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "node": ">=12" } }, "node_modules/babel-plugin-jest-hoist": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", - "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-30.2.0.tgz", + "integrity": "sha512-ftzhzSGMUnOzcCXd6WHdBGMyuwy15Wnn0iyyWGKgBDLxf9/s5ABuraCSpBX2uG0jUg4rqJnxsLc5+oYBqoxVaA==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" + "@types/babel__core": "^7.20.5" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/babel-plugin-macros": { @@ -22032,13 +19802,14 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz", - "integrity": "sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==", + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.15.tgz", + "integrity": "sha512-hR3GwrRwHUfYwGfrisXPIDP3JcYfBrW7wKE7+Au6wDYl7fm/ka1NEII6kORzxNU556JjfidZeBsO10kYvtV1aw==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.27.7", - "@babel/helper-define-polyfill-provider": "^0.6.5", + "@babel/compat-data": "^7.28.6", + "@babel/helper-define-polyfill-provider": "^0.6.6", "semver": "^6.3.1" }, "peerDependencies": { @@ -22049,6 +19820,7 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -22058,6 +19830,7 @@ "version": "0.13.0", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz", "integrity": "sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-define-polyfill-provider": "^0.6.5", @@ -22068,12 +19841,13 @@ } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz", - "integrity": "sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg==", + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.6.tgz", + "integrity": "sha512-hYm+XLYRMvupxiQzrvXUj7YyvFFVfv5gI0R71AJzudg1g2AI2vyCPPIFEBjk162/wFzti3inBHo7isWFuEVS/A==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.5" + "@babel/helper-define-polyfill-provider": "^0.6.6" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -22083,6 +19857,7 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/babel-plugin-transform-typescript-metadata/-/babel-plugin-transform-typescript-metadata-0.3.2.tgz", "integrity": "sha512-mWEvCQTgXQf48yDqgN7CH50waTyYBeP2Lpqx4nNWab9sxEpdXVeKgfj1qYI2/TgUPQtNFZ85i3PemRtnXVYYJg==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0" @@ -22092,6 +19867,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz", "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==", + "dev": true, "license": "MIT", "dependencies": { "@babel/plugin-syntax-async-generators": "^7.8.4", @@ -22115,19 +19891,20 @@ } }, "node_modules/babel-preset-jest": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", - "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-30.2.0.tgz", + "integrity": "sha512-US4Z3NOieAQumwFnYdUWKvUKh8+YSnS/gB3t6YBiz0bskpu7Pine8pPCheNxlPEW4wnUkma2a94YuW2q3guvCQ==", + "dev": true, "license": "MIT", "dependencies": { - "babel-plugin-jest-hoist": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0" + "babel-plugin-jest-hoist": "30.2.0", + "babel-preset-current-node-syntax": "^1.2.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "@babel/core": "^7.11.0 || ^8.0.0-beta.1" } }, "node_modules/bail": { @@ -22141,10 +19918,13 @@ } }, "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "license": "MIT" + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } }, "node_modules/bare-events": { "version": "2.8.2", @@ -22161,6 +19941,84 @@ } } }, + "node_modules/bare-fs": { + "version": "4.5.5", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.5.5.tgz", + "integrity": "sha512-XvwYM6VZqKoqDll8BmSww5luA5eflDzY0uEFfBJtFKe4PAAtxBjU3YIxzIBzhyaEQBy1VXEQBto4cpN5RZJw+w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "bare-events": "^2.5.4", + "bare-path": "^3.0.0", + "bare-stream": "^2.6.4", + "bare-url": "^2.2.2", + "fast-fifo": "^1.3.2" + }, + "engines": { + "bare": ">=1.16.0" + }, + "peerDependencies": { + "bare-buffer": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + } + } + }, + "node_modules/bare-os": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.7.1.tgz", + "integrity": "sha512-ebvMaS5BgZKmJlvuWh14dg9rbUI84QeV3WlWn6Ph6lFI8jJoh7ADtVTyD2c93euwbe+zgi0DVrl4YmqXeM9aIA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "bare": ">=1.14.0" + } + }, + "node_modules/bare-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz", + "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "bare-os": "^3.0.1" + } + }, + "node_modules/bare-stream": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.8.0.tgz", + "integrity": "sha512-reUN0M2sHRqCdG4lUK3Fw8w98eeUIZHL5c3H7Mbhk2yVBL+oofgaIp0ieLfD5QXwPCypBpmEEKU2WZKzbAk8GA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "streamx": "^2.21.0", + "teex": "^1.0.1" + }, + "peerDependencies": { + "bare-buffer": "*", + "bare-events": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + }, + "bare-events": { + "optional": true + } + } + }, + "node_modules/bare-url": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.3.2.tgz", + "integrity": "sha512-ZMq4gd9ngV5aTMa5p9+UfY0b3skwhHELaDkhEHetMdX0LRkW9kzaym4oo/Eh+Ghm0CCDuMTsRIGM/ytUc1ZYmw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "bare-path": "^3.0.0" + } + }, "node_modules/base-64": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/base-64/-/base-64-1.0.0.tgz", @@ -22188,12 +20046,15 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.9.14", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.14.tgz", - "integrity": "sha512-B0xUquLkiGLgHhpPBqvl7GWegWBUNuujQ6kXd/r1U38ElPT6Ok8KZ8e+FpUGEc2ZoRQUzq/aUnaKFc/svWUGSg==", + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.0.tgz", + "integrity": "sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==", "license": "Apache-2.0", "bin": { - "baseline-browser-mapping": "dist/cli.js" + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" } }, "node_modules/basic-auth": { @@ -22224,9 +20085,9 @@ "license": "MIT" }, "node_modules/beasties": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/beasties/-/beasties-0.3.5.tgz", - "integrity": "sha512-NaWu+f4YrJxEttJSm16AzMIFtVldCvaJ68b1L098KpqXmxt9xOLtKoLkKxb8ekhOrLqEJAbvT6n6SEvB/sac7A==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/beasties/-/beasties-0.4.1.tgz", + "integrity": "sha512-2Imdcw3LznDuxAbJM26RHniOLAzE6WgrK8OuvVXCQtNBS8rsnD9zsSEa3fHl4hHpUY7BYTlrpvtPVbvu9G6neg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -22237,10 +20098,11 @@ "htmlparser2": "^10.0.0", "picocolors": "^1.1.1", "postcss": "^8.4.49", - "postcss-media-query-parser": "^0.2.3" + "postcss-media-query-parser": "^0.2.3", + "postcss-safe-parser": "^7.0.1" }, "engines": { - "node": ">=14.0.0" + "node": ">=18.0.0" } }, "node_modules/before-after-hook": { @@ -22312,6 +20174,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, "license": "MIT", "dependencies": { "buffer": "^5.5.0", @@ -22323,6 +20186,7 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, "funding": [ { "type": "github", @@ -22347,6 +20211,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, "license": "MIT", "dependencies": { "inherits": "^2.0.3", @@ -22476,36 +20341,13 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/boxen/node_modules/emoji-regex": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", - "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", - "license": "MIT" - }, - "node_modules/boxen/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/boxen/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "ansi-regex": "^6.2.2" }, "engines": { "node": ">=12" @@ -22514,18 +20356,6 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/boxen/node_modules/type-fest": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", - "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/boxen/node_modules/wrap-ansi": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", @@ -22544,18 +20374,22 @@ } }, "node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz", + "integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==", "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" } }, "node_modules/braces": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, "license": "MIT", "dependencies": { "fill-range": "^7.1.1" @@ -22614,6 +20448,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, "license": "Apache-2.0", "dependencies": { "node-int64": "^0.4.0" @@ -22656,13 +20491,6 @@ "ieee754": "^1.2.1" } }, - "node_modules/buffer-builder": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/buffer-builder/-/buffer-builder-0.2.0.tgz", - "integrity": "sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==", - "dev": true, - "license": "MIT/X11" - }, "node_modules/buffer-crc32": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-1.0.0.tgz", @@ -22677,6 +20505,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, "license": "MIT" }, "node_modules/bundle-name": { @@ -22705,6 +20534,16 @@ "node": ">= 0.8" } }, + "node_modules/bytestreamjs": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bytestreamjs/-/bytestreamjs-2.0.1.tgz", + "integrity": "sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/cacache": { "version": "20.0.3", "resolved": "https://registry.npmjs.org/cacache/-/cacache-20.0.3.tgz", @@ -22729,9 +20568,9 @@ } }, "node_modules/cacache/node_modules/lru-cache": { - "version": "11.2.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.5.tgz", - "integrity": "sha512-vFrFJkWtJvJnD5hg+hJvVE8Lh/TcMzKnTgCWmtBipwI5yLX/iX+5UB2tfuyODF5E7k9xEzMdYgGqaSb1c0c5Yw==", + "version": "11.2.6", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.6.tgz", + "integrity": "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==", "dev": true, "license": "BlueOak-1.0.0", "engines": { @@ -22818,6 +20657,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -22827,6 +20667,7 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -22849,9 +20690,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001763", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001763.tgz", - "integrity": "sha512-mh/dGtq56uN98LlNX9qdbKnzINhX0QzhiWBFEkFfsFO4QyCvL8YegrJAazCwXIeqkIob8BlZPGM3xdnY+sgmvQ==", + "version": "1.0.30001776", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001776.tgz", + "integrity": "sha512-sg01JDPzZ9jGshqKSckOQthXnYwOEP50jeVFhaSFbZcOy05TiuuaffDOfcwtCisJ9kNQuLBFibYywv2Bgm9osw==", "funding": [ { "type": "opencollective", @@ -22892,6 +20733,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -22914,6 +20756,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -22967,16 +20810,15 @@ "license": "MIT" }, "node_modules/chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", - "dev": true, + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", "license": "MIT", "dependencies": { - "readdirp": "^4.0.1" + "readdirp": "^5.0.0" }, "engines": { - "node": ">= 14.16.0" + "node": ">= 20.19.0" }, "funding": { "url": "https://paulmillr.com/funding/" @@ -23003,9 +20845,9 @@ } }, "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", + "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", "funding": [ { "type": "github", @@ -23018,9 +20860,10 @@ } }, "node_modules/cjs-module-lexer": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", - "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.2.0.tgz", + "integrity": "sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ==", + "dev": true, "license": "MIT" }, "node_modules/clean-stack": { @@ -23047,6 +20890,9 @@ "license": "MIT", "engines": { "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/cli-boxes": { @@ -23211,6 +21057,7 @@ "version": "2.6.1", "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -23268,17 +21115,17 @@ } }, "node_modules/cli-truncate": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", - "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-5.2.0.tgz", + "integrity": "sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==", "dev": true, "license": "MIT", "dependencies": { - "slice-ansi": "^5.0.0", - "string-width": "^7.0.0" + "slice-ansi": "^8.0.0", + "string-width": "^8.2.0" }, "engines": { - "node": ">=18" + "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -23297,39 +21144,31 @@ "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/cli-truncate/node_modules/emoji-regex": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", - "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", - "dev": true, - "license": "MIT" - }, "node_modules/cli-truncate/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.0.tgz", + "integrity": "sha512-6hJPQ8N0V0P3SNmP6h2J99RLuzrWz2gvT7VnK5tKvrNqJoyS9W4/Fb8mo31UiPvy00z7DQXkP2hnKBVav76thw==", "dev": true, "license": "MIT", "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" + "get-east-asian-width": "^1.5.0", + "strip-ansi": "^7.1.2" }, "engines": { - "node": ">=18" + "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/cli-truncate/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "ansi-regex": "^6.2.2" }, "engines": { "node": ">=12" @@ -23352,6 +21191,7 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, "license": "ISC", "dependencies": { "string-width": "^4.2.0", @@ -23366,12 +21206,14 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, "license": "MIT" }, "node_modules/cliui/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -23381,6 +21223,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -23395,6 +21238,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -23412,6 +21256,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.8" @@ -23458,6 +21303,7 @@ "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, "license": "MIT", "engines": { "iojs": ">= 1.0.0", @@ -23478,16 +21324,6 @@ "periscopic": "^3.1.0" } }, - "node_modules/code-red/node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0" - } - }, "node_modules/collapse-white-space": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz", @@ -23502,12 +21338,14 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz", "integrity": "sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==", + "dev": true, "license": "MIT" }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -23520,6 +21358,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, "license": "MIT" }, "node_modules/colord": { @@ -23540,13 +21379,13 @@ "version": "0.5.2", "resolved": "https://registry.npmjs.org/colorjs.io/-/colorjs.io-0.5.2.tgz", "integrity": "sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==", - "dev": true, "license": "MIT" }, "node_modules/columnify": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz", "integrity": "sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==", + "dev": true, "license": "MIT", "dependencies": { "strip-ansi": "^6.0.1", @@ -23560,6 +21399,7 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" @@ -23686,20 +21526,11 @@ "dev": true, "license": "MIT" }, - "node_modules/compression/node_modules/negotiator": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", - "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, "license": "MIT" }, "node_modules/concat-with-sourcemaps": { @@ -23723,9 +21554,9 @@ } }, "node_modules/confbox": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.2.tgz", - "integrity": "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==", + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.4.tgz", + "integrity": "sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==", "dev": true, "license": "MIT" }, @@ -23871,13 +21702,16 @@ "license": "MIT" }, "node_modules/cookie": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", - "dev": true, + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", + "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/cookie-es": { @@ -23924,20 +21758,20 @@ } }, "node_modules/copy-webpack-plugin": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-13.0.1.tgz", - "integrity": "sha512-J+YV3WfhY6W/Xf9h+J1znYuqTye2xkBUIGyTPWuBAT27qajBa5mR4f8WBmfDY3YjRftT2kqZZiLi1qf0H+UOFw==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-14.0.0.tgz", + "integrity": "sha512-3JLW90aBGeaTLpM7mYQKpnVdgsUZRExY55giiZgLuX/xTQRUs1dOCwbBnWnvY6Q6rfZoXMNwzOQJCSZPppfqXA==", "dev": true, "license": "MIT", "dependencies": { "glob-parent": "^6.0.1", "normalize-path": "^3.0.0", "schema-utils": "^4.2.0", - "serialize-javascript": "^6.0.2", + "serialize-javascript": "^7.0.3", "tinyglobby": "^0.2.12" }, "engines": { - "node": ">= 18.12.0" + "node": ">= 20.9.0" }, "funding": { "type": "opencollective", @@ -23947,13 +21781,24 @@ "webpack": "^5.1.0" } }, + "node_modules/copy-webpack-plugin/node_modules/serialize-javascript": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-7.0.4.tgz", + "integrity": "sha512-DuGdB+Po43Q5Jxwpzt1lhyFSYKryqoNjQSA9M92tyw0lyHIOur+XCalOUe0KTJpyqzT8+fQ5A0Jf7vCx/NKmIg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=20.0.0" + } + }, "node_modules/core-js-compat": { - "version": "3.46.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.46.0.tgz", - "integrity": "sha512-p9hObIIEENxSV8xIu+V68JjSeARg6UVMG5mR+JEUguG3sI6MsiS1njz2jHmyJDvA+8jX/sytkBHup6kxhM9law==", + "version": "3.48.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.48.0.tgz", + "integrity": "sha512-OM4cAF3D6VtH/WkLtWvyNC56EZVXsZdU3iqaMG2B4WvYrlqU831pc4UtG5yp0sE9z8Y02wVN7PjW5Zf9Gt0f1Q==", + "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.26.3" + "browserslist": "^4.28.1" }, "funding": { "type": "opencollective", @@ -24022,19 +21867,6 @@ } } }, - "node_modules/cosmiconfig/node_modules/js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/create-jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", @@ -24057,1478 +21889,1691 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "license": "MIT" - }, - "node_modules/cron-parser": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-4.9.0.tgz", - "integrity": "sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==", + "node_modules/create-jest/node_modules/@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", "dev": true, "license": "MIT", "dependencies": { - "luxon": "^3.2.1" + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" }, "engines": { - "node": ">=12.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "node_modules/create-jest/node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dev": true, "license": "MIT", "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" }, "engines": { - "node": ">= 8" - } - }, - "node_modules/crossws": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.5.tgz", - "integrity": "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==", - "license": "MIT", - "dependencies": { - "uncrypto": "^0.1.3" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/crypto-random-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", - "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", + "node_modules/create-jest/node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", "dev": true, "license": "MIT", "dependencies": { - "type-fest": "^1.0.1" - }, - "engines": { - "node": ">=12" + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/crypto-random-string/node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/css-blank-pseudo": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz", - "integrity": "sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==", + "node_modules/create-jest/node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", "dev": true, - "license": "CC0-1.0", + "license": "MIT", "dependencies": { - "postcss-selector-parser": "^6.0.9" - }, - "bin": { - "css-blank-pseudo": "dist/cli.cjs" - }, - "engines": { - "node": "^12 || ^14 || >=16" + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/css-declaration-sorter": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.3.1.tgz", - "integrity": "sha512-gz6x+KkgNCjxq3Var03pRYLhyNfwhkKF1g/yoLgDNtFvVu0/fOLV9C8fFEZRjACp/XQLumjAYo7JVjzH3wLbxA==", - "dev": true, - "license": "ISC", "engines": { - "node": "^14 || ^16 || >=18" - }, - "peerDependencies": { - "postcss": "^8.0.9" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/css-has-pseudo": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz", - "integrity": "sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==", + "node_modules/create-jest/node_modules/@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", "dev": true, - "license": "CC0-1.0", + "license": "MIT", "dependencies": { - "postcss-selector-parser": "^6.0.9" - }, - "bin": { - "css-has-pseudo": "dist/cli.cjs" + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" }, "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/css-loader": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.2.tgz", - "integrity": "sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==", + "node_modules/create-jest/node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, "license": "MIT", "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.33", - "postcss-modules-extract-imports": "^3.1.0", - "postcss-modules-local-by-default": "^4.0.5", - "postcss-modules-scope": "^3.2.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.5.4" + "@sinclair/typebox": "^0.27.8" }, "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "webpack": "^5.27.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/css-minimizer-webpack-plugin": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-5.0.1.tgz", - "integrity": "sha512-3caImjKFQkS+ws1TGcFn0V1HyDJFq1Euy589JlD6/3rV2kj+w7r5G9WDMgSHvpvXHNZ2calVypZWuEDQd9wfLg==", + "node_modules/create-jest/node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", "dev": true, "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.18", - "cssnano": "^6.0.1", - "jest-worker": "^29.4.3", - "postcss": "^8.4.24", - "schema-utils": "^4.0.1", - "serialize-javascript": "^6.0.1" + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" }, "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@parcel/css": { - "optional": true - }, - "@swc/css": { - "optional": true - }, - "clean-css": { - "optional": true - }, - "csso": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "lightningcss": { - "optional": true - } + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/css-prefers-color-scheme": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", - "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==", + "node_modules/create-jest/node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", "dev": true, - "license": "CC0-1.0", - "bin": { - "css-prefers-color-scheme": "dist/cli.cjs" + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" }, "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/css-select": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-6.0.0.tgz", - "integrity": "sha512-rZZVSLle8v0+EY8QAkDWrKhpgt6SA5OtHsgBnsj6ZaLb5dmDVOWUDtQitd9ydxxvEjhewNudS6eTVU7uOyzvXw==", + "node_modules/create-jest/node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^7.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.2.2", - "nth-check": "^2.1.1" + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/fb55" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/css-tree": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "node_modules/create-jest/node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", "dev": true, "license": "MIT", "dependencies": { - "mdn-data": "2.0.30", - "source-map-js": "^1.0.1" + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" }, "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/css-what": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-7.0.0.tgz", - "integrity": "sha512-wD5oz5xibMOPHzy13CyGmogB3phdvcDaB5t0W/Nr5Z2O/agcB8YwOz6e2Lsp10pNDzBoDO9nVa3RGs/2BttpHQ==", + "node_modules/create-jest/node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">= 6" + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/fb55" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/css.escape": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", - "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", + "node_modules/create-jest/node_modules/@sinclair/typebox": { + "version": "0.27.10", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.10.tgz", + "integrity": "sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==", "dev": true, "license": "MIT" }, - "node_modules/cssdb": { - "version": "6.6.3", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-6.6.3.tgz", - "integrity": "sha512-7GDvDSmE+20+WcSMhP17Q1EVWUrLlbxxpMDqG731n8P99JhnQZHR9YvtjPvEHfjFUjvQJvdpKCjlKOX+xe4UVA==", + "node_modules/create-jest/node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", "dev": true, - "license": "CC0-1.0", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.0" } }, - "node_modules/cssnano": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.1.2.tgz", - "integrity": "sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA==", + "node_modules/create-jest/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "license": "MIT", - "dependencies": { - "cssnano-preset-default": "^6.1.2", - "lilconfig": "^3.1.1" - }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/cssnano" - }, - "peerDependencies": { - "postcss": "^8.4.31" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/cssnano-preset-default": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.1.2.tgz", - "integrity": "sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg==", + "node_modules/create-jest/node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.23.0", - "css-declaration-sorter": "^7.2.0", - "cssnano-utils": "^4.0.2", - "postcss-calc": "^9.0.1", - "postcss-colormin": "^6.1.0", - "postcss-convert-values": "^6.1.0", - "postcss-discard-comments": "^6.0.2", - "postcss-discard-duplicates": "^6.0.3", - "postcss-discard-empty": "^6.0.3", - "postcss-discard-overridden": "^6.0.2", - "postcss-merge-longhand": "^6.0.5", - "postcss-merge-rules": "^6.1.1", - "postcss-minify-font-values": "^6.1.0", - "postcss-minify-gradients": "^6.0.3", - "postcss-minify-params": "^6.1.0", - "postcss-minify-selectors": "^6.0.4", - "postcss-normalize-charset": "^6.0.2", - "postcss-normalize-display-values": "^6.0.2", - "postcss-normalize-positions": "^6.0.2", - "postcss-normalize-repeat-style": "^6.0.2", - "postcss-normalize-string": "^6.0.2", - "postcss-normalize-timing-functions": "^6.0.2", - "postcss-normalize-unicode": "^6.1.0", - "postcss-normalize-url": "^6.0.2", - "postcss-normalize-whitespace": "^6.0.2", - "postcss-ordered-values": "^6.0.2", - "postcss-reduce-initial": "^6.1.0", - "postcss-reduce-transforms": "^6.0.2", - "postcss-svgo": "^6.0.3", - "postcss-unique-selectors": "^6.0.4" + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "@babel/core": "^7.8.0" } }, - "node_modules/cssnano-utils": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.2.tgz", - "integrity": "sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==", + "node_modules/create-jest/node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", "dev": true, - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18.0" + "license": "BSD-3-Clause", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" }, - "peerDependencies": { - "postcss": "^8.4.31" + "engines": { + "node": ">=8" } }, - "node_modules/csso": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", - "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "node_modules/create-jest/node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, "license": "MIT", "dependencies": { - "css-tree": "~2.2.0" + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" }, "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/csso/node_modules/css-tree": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", - "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "node_modules/create-jest/node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, "license": "MIT", "dependencies": { - "mdn-data": "2.0.28", - "source-map-js": "^1.0.1" + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" }, "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/csso/node_modules/mdn-data": { - "version": "2.0.28", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", - "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", - "license": "CC0-1.0" - }, - "node_modules/cssom": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", - "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", - "dev": true, - "license": "MIT" - }, - "node_modules/cssstyle": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.6.0.tgz", - "integrity": "sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==", + "node_modules/create-jest/node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], "license": "MIT", - "dependencies": { - "@asamuzakjp/css-color": "^3.2.0", - "rrweb-cssom": "^0.8.0" - }, "engines": { - "node": ">=18" + "node": ">=8" } }, - "node_modules/csstype": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", - "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "node_modules/create-jest/node_modules/cjs-module-lexer": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", + "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", "dev": true, "license": "MIT" }, - "node_modules/cuint": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz", - "integrity": "sha512-d4ZVpCW31eWwCMe1YT3ur7mUDnTXbgwyzaL320DrcRT45rfjYxkt5QWLrmOJ+/UEAI2+fQgKe/fCjR8l4TpRgw==", + "node_modules/create-jest/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true, "license": "MIT" }, - "node_modules/damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/data-urls": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", - "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", + "node_modules/create-jest/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "dependencies": { - "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^14.0.0" - }, + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, "engines": { - "node": ">=18" + "node": ">=8" } }, - "node_modules/data-view-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", - "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "node_modules/create-jest/node_modules/jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/data-view-byte-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", - "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "node_modules/create-jest/node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" }, "engines": { - "node": ">= 0.4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "funding": { - "url": "https://github.com/sponsors/inspect-js" + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } } }, - "node_modules/data-view-byte-offset": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", - "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "node_modules/create-jest/node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "detect-newline": "^3.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/date-fns": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz", - "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==", + "node_modules/create-jest/node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "dev": true, "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/kossnocorp" + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/date-format": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", - "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==", + "node_modules/create-jest/node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", "dev": true, "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, "engines": { - "node": ">=4.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/de-indent": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", - "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "node_modules/create-jest/node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", "dev": true, - "license": "MIT" - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "license": "MIT", "dependencies": { - "ms": "^2.1.3" + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" }, "engines": { - "node": ">=6.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "optionalDependencies": { + "fsevents": "^2.3.2" } }, - "node_modules/decimal.js": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", - "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "node_modules/create-jest/node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", "dev": true, - "license": "MIT" - }, - "node_modules/decode-named-character-reference": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz", - "integrity": "sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==", "license": "MIT", "dependencies": { - "character-entities": "^2.0.0" + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "node_modules/create-jest/node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, "license": "MIT", "dependencies": { - "mimic-response": "^3.1.0" + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/decompress-response/node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "node_modules/create-jest/node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "dev": true, "license": "MIT", - "engines": { - "node": ">=10" + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/dedent": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.0.tgz", - "integrity": "sha512-HGFtf8yhuhGhqO07SV79tRp+br4MnbdjeVxotpn1QBl30pcLLCQjX5b2295ll0fv8RKDKsmWYrl05usHM9CewQ==", + "node_modules/create-jest/node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, "license": "MIT", - "peerDependencies": { - "babel-plugin-macros": "^3.1.0" - }, - "peerDependenciesMeta": { - "babel-plugin-macros": { - "optional": true - } + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/deep-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==", + "node_modules/create-jest/node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "node_modules/create-jest/node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", "dev": true, "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, "engines": { - "node": ">=4.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "node_modules/create-jest/node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", "dev": true, - "license": "MIT" - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/default-browser": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.4.0.tgz", - "integrity": "sha512-XDuvSq38Hr1MdN47EDvYtx3U0MTqpCEn+F6ft8z2vYDzMrvQhVp0ui9oQdqW3MvK3vqUETglt1tVGgjLuJ5izg==", + "node_modules/create-jest/node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", "dev": true, "license": "MIT", "dependencies": { - "bundle-name": "^4.1.0", - "default-browser-id": "^5.0.0" + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" }, "engines": { - "node": ">=18" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-jest/node_modules/jest-snapshot/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=10" } }, - "node_modules/default-browser-id": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", - "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", + "node_modules/create-jest/node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, "license": "MIT", - "engines": { - "node": ">=18" + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/defaults": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-2.0.2.tgz", - "integrity": "sha512-cuIw0PImdp76AOfgkjbW4VhQODRmNNcKR73vdCH5cLd/ifj7aamfoXvYgfGkEAjNJZ3ozMIy9Gu2LutUkGEPbA==", + "node_modules/create-jest/node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "dev": true, "license": "MIT", - "engines": { - "node": ">=16" + "dependencies": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "node_modules/create-jest/node_modules/jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", "dev": true, "license": "MIT", + "dependencies": { + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" + }, "engines": { - "node": ">=10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "node_modules/create-jest/node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, "license": "MIT", "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/define-lazy-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", - "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "node_modules/create-jest/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "node_modules/create-jest/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, "license": "MIT", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, "engines": { - "node": ">= 0.4" + "node": ">=8.6" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/defu": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", - "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", - "license": "MIT" - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "node_modules/create-jest/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, "engines": { - "node": ">=0.4.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "node_modules/create-jest/node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], "license": "MIT" }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "node_modules/create-jest/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } + "license": "MIT" }, - "node_modules/dependency-graph": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-1.0.0.tgz", - "integrity": "sha512-cW3gggJ28HZ/LExwxP2B++aiKxhJXMSIt9K48FOXQkm+vuG5gyatXnLsONRJdzO/7VfjDIiaOOa/bs4l464Lwg==", + "node_modules/create-jest/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "license": "MIT", + "node_modules/create-jest/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/create-jest/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/destr": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", - "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", - "license": "MIT" - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "node_modules/create-jest/node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "node_modules/detect-indent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", + "node_modules/create-jest/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/detect-libc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", - "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", - "license": "Apache-2.0", - "optional": true, + "node_modules/create-jest/node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, "engines": { - "node": ">=8" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "node_modules/create-jest/node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "dev": true, "license": "MIT" }, - "node_modules/detect-port": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.6.1.tgz", - "integrity": "sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q==", + "node_modules/cron-parser": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-4.9.0.tgz", + "integrity": "sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==", + "dev": true, "license": "MIT", "dependencies": { - "address": "^1.0.1", - "debug": "4" - }, - "bin": { - "detect": "bin/detect-port.js", - "detect-port": "bin/detect-port.js" + "luxon": "^3.2.1" }, "engines": { - "node": ">= 4.0.0" + "node": ">=12.0.0" } }, - "node_modules/deterministic-object-hash": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/deterministic-object-hash/-/deterministic-object-hash-2.0.2.tgz", - "integrity": "sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ==", + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "license": "MIT", "dependencies": { - "base-64": "^1.0.0" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "engines": { - "node": ">=18" + "node": ">= 8" } }, - "node_modules/devalue": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.6.2.tgz", - "integrity": "sha512-nPRkjWzzDQlsejL1WVifk5rvcFi/y1onBRxjaFMjZeR9mFpqu2gmAZ9xUB9/IEanEP/vBtGeGganC/GO1fmufg==", - "license": "MIT" - }, - "node_modules/devlop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", - "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "node_modules/crossws": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.5.tgz", + "integrity": "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==", "license": "MIT", "dependencies": { - "dequal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "uncrypto": "^0.1.3" } }, - "node_modules/diff": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz", - "integrity": "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==", - "license": "BSD-3-Clause", + "node_modules/crypto-random-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", + "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^1.0.1" + }, "engines": { - "node": ">=0.3.1" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", - "license": "MIT", + "node_modules/crypto-random-string/node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "node_modules/css-blank-pseudo": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz", + "integrity": "sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==", "dev": true, - "license": "MIT", + "license": "CC0-1.0", "dependencies": { - "path-type": "^4.0.0" + "postcss-selector-parser": "^6.0.9" + }, + "bin": { + "css-blank-pseudo": "dist/cli.cjs" }, "engines": { - "node": ">=8" + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "license": "MIT" + "node_modules/css-declaration-sorter": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.3.1.tgz", + "integrity": "sha512-gz6x+KkgNCjxq3Var03pRYLhyNfwhkKF1g/yoLgDNtFvVu0/fOLV9C8fFEZRjACp/XQLumjAYo7JVjzH3wLbxA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } }, - "node_modules/dns-packet": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", - "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "node_modules/css-has-pseudo": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz", + "integrity": "sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==", "dev": true, - "license": "MIT", + "license": "CC0-1.0", "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" + "postcss-selector-parser": "^6.0.9" + }, + "bin": { + "css-has-pseudo": "dist/cli.cjs" }, "engines": { - "node": ">=6" + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "node_modules/css-loader": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.3.tgz", + "integrity": "sha512-frbERmjT0UC5lMheWpJmMilnt9GEhbZJN/heUb7/zaJYeIzj5St9HvDcfshzzOqbsS+rYpMk++2SD3vGETDSyA==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "esutils": "^2.0.2" + "icss-utils": "^5.1.0", + "postcss": "^8.4.40", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.6.3" }, "engines": { - "node": ">=6.0.0" + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.27.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } } }, - "node_modules/dom-accessibility-api": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", - "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "node_modules/css-minimizer-webpack-plugin": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-5.0.1.tgz", + "integrity": "sha512-3caImjKFQkS+ws1TGcFn0V1HyDJFq1Euy589JlD6/3rV2kj+w7r5G9WDMgSHvpvXHNZ2calVypZWuEDQd9wfLg==", "dev": true, - "license": "MIT" - }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "license": "MIT", "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" + "@jridgewell/trace-mapping": "^0.3.18", + "cssnano": "^6.0.1", + "jest-worker": "^29.4.3", + "postcss": "^8.4.24", + "schema-utils": "^4.0.1", + "serialize-javascript": "^6.0.1" + }, + "engines": { + "node": ">= 14.15.0" }, "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@parcel/css": { + "optional": true + }, + "@swc/css": { + "optional": true + }, + "clean-css": { + "optional": true + }, + "csso": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "lightningcss": { + "optional": true } - ], - "license": "BSD-2-Clause" + } }, - "node_modules/domexception": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", - "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", - "deprecated": "Use your platform's native DOMException instead", + "node_modules/css-minimizer-webpack-plugin/node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, "license": "MIT", "dependencies": { - "webidl-conversions": "^7.0.0" + "@sinclair/typebox": "^0.27.8" }, "engines": { - "node": ">=12" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "license": "BSD-2-Clause", + "node_modules/css-minimizer-webpack-plugin/node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "license": "MIT", "dependencies": { - "domelementtype": "^2.3.0" + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" }, "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/dompurify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.3.1.tgz", - "integrity": "sha512-qkdCKzLNtrgPFP1Vo+98FRzJnBRGe4ffyCea9IwHB1fyxPOeNTHpLKYGd4Uk9xvNoH0ZoOjwZxNptyMwqrId1Q==", - "license": "(MPL-2.0 OR Apache-2.0)", - "optionalDependencies": { - "@types/trusted-types": "^2.0.7" - } + "node_modules/css-minimizer-webpack-plugin/node_modules/@sinclair/typebox": { + "version": "0.27.10", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.10.tgz", + "integrity": "sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==", + "dev": true, + "license": "MIT" }, - "node_modules/domutils": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", - "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" + "node_modules/css-minimizer-webpack-plugin/node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "node_modules/css-minimizer-webpack-plugin/node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, "license": "MIT", "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "node_modules/css-minimizer-webpack-plugin/node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, "license": "MIT", "dependencies": { - "is-obj": "^2.0.0" + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/dotenv": { - "version": "16.4.7", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", - "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", - "license": "BSD-2-Clause", + "node_modules/css-minimizer-webpack-plugin/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=12" + "node": ">=8.6" }, "funding": { - "url": "https://dotenvx.com" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/dotenv-expand": { - "version": "11.0.7", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz", - "integrity": "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==", - "license": "BSD-2-Clause", + "node_modules/css-minimizer-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", "dependencies": { - "dotenv": "^16.4.5" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { - "url": "https://dotenvx.com" + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/dset": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.4.tgz", - "integrity": "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==", - "license": "MIT", + "node_modules/css-prefers-color-scheme": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", + "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==", + "dev": true, + "license": "CC0-1.0", + "bin": { + "css-prefers-color-scheme": "dist/cli.cjs" + }, "engines": { - "node": ">=4" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" + "node": "^12 || ^14 || >=16" }, - "engines": { - "node": ">= 0.4" + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "license": "MIT" - }, - "node_modules/duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "node_modules/css-select": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-6.0.0.tgz", + "integrity": "sha512-rZZVSLle8v0+EY8QAkDWrKhpgt6SA5OtHsgBnsj6ZaLb5dmDVOWUDtQitd9ydxxvEjhewNudS6eTVU7uOyzvXw==", "dev": true, - "license": "BSD-3-Clause", + "license": "BSD-2-Clause", "dependencies": { - "readable-stream": "^2.0.2" + "boolbase": "^1.0.0", + "css-what": "^7.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "nth-check": "^2.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "license": "MIT" - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "node_modules/css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", "dev": true, - "license": "MIT" - }, - "node_modules/ejs": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", - "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "jake": "^10.8.5" - }, - "bin": { - "ejs": "bin/cli.js" + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" }, "engines": { - "node": ">=0.10.0" + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" } }, - "node_modules/electron-to-chromium": { - "version": "1.5.267", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz", - "integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==", - "license": "ISC" - }, - "node_modules/emittery": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", - "license": "MIT", + "node_modules/css-what": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-7.0.0.tgz", + "integrity": "sha512-wD5oz5xibMOPHzy13CyGmogB3phdvcDaB5t0W/Nr5Z2O/agcB8YwOz6e2Lsp10pNDzBoDO9nVa3RGs/2BttpHQ==", + "dev": true, + "license": "BSD-2-Clause", "engines": { - "node": ">=12" + "node": ">= 6" }, "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/emmet": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/emmet/-/emmet-2.4.11.tgz", - "integrity": "sha512-23QPJB3moh/U9sT4rQzGgeyyGIrcM+GH5uVYg2C6wZIxAIJq7Ng3QLT79tl8FUwDXhyq9SusfknOrofAKqvgyQ==", + "node_modules/css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", "dev": true, - "license": "MIT", - "workspaces": [ - "./packages/scanner", - "./packages/abbreviation", - "./packages/css-abbreviation", - "./" - ], - "dependencies": { - "@emmetio/abbreviation": "^2.3.3", - "@emmetio/css-abbreviation": "^2.1.8" - } - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "license": "MIT" }, - "node_modules/emojilib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/emojilib/-/emojilib-2.4.0.tgz", - "integrity": "sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==", + "node_modules/cssdb": { + "version": "7.11.2", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.11.2.tgz", + "integrity": "sha512-lhQ32TFkc1X4eTefGfYPvgovRSzIMofHkigfH8nWtyRL4XJLsRhJFreRvEgKzept7x1rjBuy3J/MurXLaFxW/A==", "dev": true, - "license": "MIT" + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + } + ], + "license": "CC0-1.0" }, - "node_modules/emojis-list": { + "node_modules/cssesc": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true, + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, "engines": { - "node": ">= 4" + "node": ">=4" } }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "node_modules/cssnano": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.1.2.tgz", + "integrity": "sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA==", "dev": true, "license": "MIT", + "dependencies": { + "cssnano-preset-default": "^6.1.2", + "lilconfig": "^3.1.1" + }, "engines": { - "node": ">= 0.8" + "node": "^14 || ^16 || >=18.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "node_modules/cssnano-preset-default": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.1.2.tgz", + "integrity": "sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg==", "dev": true, "license": "MIT", "dependencies": { - "iconv-lite": "^0.6.2" + "browserslist": "^4.23.0", + "css-declaration-sorter": "^7.2.0", + "cssnano-utils": "^4.0.2", + "postcss-calc": "^9.0.1", + "postcss-colormin": "^6.1.0", + "postcss-convert-values": "^6.1.0", + "postcss-discard-comments": "^6.0.2", + "postcss-discard-duplicates": "^6.0.3", + "postcss-discard-empty": "^6.0.3", + "postcss-discard-overridden": "^6.0.2", + "postcss-merge-longhand": "^6.0.5", + "postcss-merge-rules": "^6.1.1", + "postcss-minify-font-values": "^6.1.0", + "postcss-minify-gradients": "^6.0.3", + "postcss-minify-params": "^6.1.0", + "postcss-minify-selectors": "^6.0.4", + "postcss-normalize-charset": "^6.0.2", + "postcss-normalize-display-values": "^6.0.2", + "postcss-normalize-positions": "^6.0.2", + "postcss-normalize-repeat-style": "^6.0.2", + "postcss-normalize-string": "^6.0.2", + "postcss-normalize-timing-functions": "^6.0.2", + "postcss-normalize-unicode": "^6.1.0", + "postcss-normalize-url": "^6.0.2", + "postcss-normalize-whitespace": "^6.0.2", + "postcss-ordered-values": "^6.0.2", + "postcss-reduce-initial": "^6.1.0", + "postcss-reduce-transforms": "^6.0.2", + "postcss-svgo": "^6.0.3", + "postcss-unique-selectors": "^6.0.4" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "node_modules/cssnano-utils": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.2.tgz", + "integrity": "sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==", "dev": true, "license": "MIT", + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "css-tree": "~2.2.0" }, "engines": { - "node": ">=0.10.0" + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" } }, - "node_modules/end-of-stream": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", "license": "MIT", "dependencies": { - "once": "^1.4.0" + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" } }, - "node_modules/enhanced-resolve": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.19.0.tgz", - "integrity": "sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==", + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "license": "CC0-1.0" + }, + "node_modules/cssstyle": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.6.0.tgz", + "integrity": "sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==", "dev": true, "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.3.0" + "@asamuzakjp/css-color": "^3.2.0", + "rrweb-cssom": "^0.8.0" }, "engines": { - "node": ">=10.13.0" + "node": ">=18" } }, - "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cuint": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz", + "integrity": "sha512-d4ZVpCW31eWwCMe1YT3ur7mUDnTXbgwyzaL320DrcRT45rfjYxkt5QWLrmOJ+/UEAI2+fQgKe/fCjR8l4TpRgw==", + "dev": true, + "license": "MIT" + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/data-urls": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", + "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", + "dev": true, "license": "MIT", "dependencies": { - "ansi-colors": "^4.1.1" + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0" }, "engines": { - "node": ">=8.6" + "node": ">=18" } }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "license": "BSD-2-Clause", + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, "engines": { - "node": ">=0.12" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/env-ci": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/env-ci/-/env-ci-11.2.0.tgz", - "integrity": "sha512-D5kWfzkmaOQDioPmiviWAVtKmpPT4/iJmMVQxWxMPJTFyTkdc5JQUfc5iXEeWxcOdsYTKSAiA/Age4NUOqKsRA==", + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", "dev": true, "license": "MIT", "dependencies": { - "execa": "^8.0.0", - "java-properties": "^1.0.2" + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" }, "engines": { - "node": "^18.17 || >=20.6.1" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" } }, - "node_modules/env-ci/node_modules/execa": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", "dev": true, "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", - "human-signals": "^5.0.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^3.0.0" + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" }, "engines": { - "node": ">=16.17" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/env-ci/node_modules/get-stream": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", - "dev": true, + "node_modules/date-fns": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz", + "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==", "license": "MIT", - "engines": { - "node": ">=16" - }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" } }, - "node_modules/env-ci/node_modules/human-signals": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "node_modules/date-format": { + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", + "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "engines": { - "node": ">=16.17.0" + "node": ">=4.0" } }, - "node_modules/env-ci/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "node_modules/de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=6.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/env-ci/node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "node_modules/decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", "dev": true, + "license": "MIT" + }, + "node_modules/decode-named-character-reference": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz", + "integrity": "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==", "license": "MIT", - "engines": { - "node": ">=12" + "dependencies": { + "character-entities": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/env-ci/node_modules/npm-run-path": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dev": true, "license": "MIT", "dependencies": { - "path-key": "^4.0.0" + "mimic-response": "^3.1.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/env-ci/node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", "dev": true, "license": "MIT", - "dependencies": { - "mimic-fn": "^4.0.0" - }, "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/env-ci/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "node_modules/dedent": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.2.tgz", + "integrity": "sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA==", "dev": true, "license": "MIT", - "engines": { - "node": ">=12" + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } } }, - "node_modules/env-ci/node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "node_modules/deep-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true, "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4.0.0" } }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true, + "license": "MIT" + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "license": "MIT", "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/environment": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", - "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "node_modules/default-browser": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz", + "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==", "dev": true, "license": "MIT", + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, "engines": { "node": ">=18" }, @@ -25536,107 +23581,51 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "dev": true, - "license": "MIT" - }, - "node_modules/errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "node_modules/default-browser-id": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", + "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", "dev": true, "license": "MIT", - "optional": true, - "dependencies": { - "prr": "~1.0.1" + "engines": { + "node": ">=18" }, - "bin": { - "errno": "cli.js" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/error-ex": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", - "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", + "node_modules/defaults": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-2.0.2.tgz", + "integrity": "sha512-cuIw0PImdp76AOfgkjbW4VhQODRmNNcKR73vdCH5cLd/ifj7aamfoXvYgfGkEAjNJZ3ozMIy9Gu2LutUkGEPbA==", + "dev": true, "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/error-stack-parser": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", - "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", "dev": true, "license": "MIT", - "dependencies": { - "stackframe": "^1.3.4" + "engines": { + "node": ">=10" } }, - "node_modules/es-abstract": { - "version": "1.24.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", - "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", - "dev": true, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "license": "MIT", "dependencies": { - "array-buffer-byte-length": "^1.0.2", - "arraybuffer.prototype.slice": "^1.0.4", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "data-view-buffer": "^1.0.2", - "data-view-byte-length": "^1.0.2", - "data-view-byte-offset": "^1.0.1", - "es-define-property": "^1.0.1", + "es-define-property": "^1.0.0", "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "es-set-tostringtag": "^2.1.0", - "es-to-primitive": "^1.3.0", - "function.prototype.name": "^1.1.8", - "get-intrinsic": "^1.3.0", - "get-proto": "^1.0.1", - "get-symbol-description": "^1.1.0", - "globalthis": "^1.0.4", - "gopd": "^1.2.0", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "internal-slot": "^1.1.0", - "is-array-buffer": "^3.0.5", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.2", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.2.1", - "is-set": "^2.0.3", - "is-shared-array-buffer": "^1.0.4", - "is-string": "^1.1.1", - "is-typed-array": "^1.1.15", - "is-weakref": "^1.1.1", - "math-intrinsics": "^1.1.0", - "object-inspect": "^1.13.4", - "object-keys": "^1.1.1", - "object.assign": "^4.1.7", - "own-keys": "^1.0.1", - "regexp.prototype.flags": "^1.5.4", - "safe-array-concat": "^1.1.3", - "safe-push-apply": "^1.0.0", - "safe-regex-test": "^1.1.0", - "set-proto": "^1.0.0", - "stop-iteration-iterator": "^1.1.0", - "string.prototype.trim": "^1.2.10", - "string.prototype.trimend": "^1.0.9", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.3", - "typed-array-byte-length": "^1.0.3", - "typed-array-byte-offset": "^1.0.4", - "typed-array-length": "^1.0.7", - "unbox-primitive": "^1.1.0", - "which-typed-array": "^1.1.19" + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -25645,1722 +23634,1657 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-get-iterator": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", - "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "node_modules/defu": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "license": "MIT" + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true, "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "is-arguments": "^1.1.1", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.7", - "isarray": "^2.0.5", - "stop-iteration-iterator": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=0.4.0" } }, - "node_modules/es-get-iterator/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", "dev": true, "license": "MIT" }, - "node_modules/es-iterator-helpers": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", - "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.6", - "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.0.3", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.6", - "globalthis": "^1.0.4", - "gopd": "^1.2.0", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.2.0", - "has-symbols": "^1.1.0", - "internal-slot": "^1.1.0", - "iterator.prototype": "^1.1.4", - "safe-array-concat": "^1.1.3" - }, "engines": { - "node": ">= 0.4" + "node": ">= 0.8" } }, - "node_modules/es-module-lexer": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", - "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", - "license": "MIT" + "node_modules/dependency-graph": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-1.0.0.tgz", + "integrity": "sha512-cW3gggJ28HZ/LExwxP2B++aiKxhJXMSIt9K48FOXQkm+vuG5gyatXnLsONRJdzO/7VfjDIiaOOa/bs4l464Lwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, "engines": { - "node": ">= 0.4" + "node": ">=6" } }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "node_modules/destr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", + "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", + "license": "MIT" + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, "engines": { - "node": ">= 0.4" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/es-shim-unscopables": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", - "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", + "node_modules/detect-indent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", "dev": true, "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, "engines": { - "node": ">= 0.4" + "node": ">=8" } }, - "node_modules/es-to-primitive": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", - "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true, "license": "MIT", - "dependencies": { - "is-callable": "^1.2.7", - "is-date-object": "^1.0.5", - "is-symbol": "^1.0.4" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/es6-promise": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", - "integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==", + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", "dev": true, "license": "MIT" }, - "node_modules/esast-util-from-estree": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz", - "integrity": "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==", + "node_modules/detect-port": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.6.1.tgz", + "integrity": "sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q==", + "dev": true, "license": "MIT", "dependencies": { - "@types/estree-jsx": "^1.0.0", - "devlop": "^1.0.0", - "estree-util-visit": "^2.0.0", - "unist-util-position-from-estree": "^2.0.0" + "address": "^1.0.1", + "debug": "4" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "bin": { + "detect": "bin/detect-port.js", + "detect-port": "bin/detect-port.js" + }, + "engines": { + "node": ">= 4.0.0" } }, - "node_modules/esast-util-from-js": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/esast-util-from-js/-/esast-util-from-js-2.0.1.tgz", - "integrity": "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==", + "node_modules/deterministic-object-hash": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/deterministic-object-hash/-/deterministic-object-hash-2.0.2.tgz", + "integrity": "sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ==", "license": "MIT", "dependencies": { - "@types/estree-jsx": "^1.0.0", - "acorn": "^8.0.0", - "esast-util-from-estree": "^2.0.0", - "vfile-message": "^4.0.0" + "base-64": "^1.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=18" } }, - "node_modules/esbuild": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", - "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", - "hasInstallScript": true, + "node_modules/devalue": { + "version": "5.6.4", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.6.4.tgz", + "integrity": "sha512-Gp6rDldRsFh/7XuouDbxMH3Mx8GMCcgzIb1pDTvNyn8pZGQ22u+Wa+lGV9dQCltFQ7uVw0MhRyb8XDskNFOReA==", + "license": "MIT" + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" + "dependencies": { + "dequal": "^2.0.0" }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/diff": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.3.tgz", + "integrity": "sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==", + "license": "BSD-3-Clause", "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.12", - "@esbuild/android-arm": "0.25.12", - "@esbuild/android-arm64": "0.25.12", - "@esbuild/android-x64": "0.25.12", - "@esbuild/darwin-arm64": "0.25.12", - "@esbuild/darwin-x64": "0.25.12", - "@esbuild/freebsd-arm64": "0.25.12", - "@esbuild/freebsd-x64": "0.25.12", - "@esbuild/linux-arm": "0.25.12", - "@esbuild/linux-arm64": "0.25.12", - "@esbuild/linux-ia32": "0.25.12", - "@esbuild/linux-loong64": "0.25.12", - "@esbuild/linux-mips64el": "0.25.12", - "@esbuild/linux-ppc64": "0.25.12", - "@esbuild/linux-riscv64": "0.25.12", - "@esbuild/linux-s390x": "0.25.12", - "@esbuild/linux-x64": "0.25.12", - "@esbuild/netbsd-arm64": "0.25.12", - "@esbuild/netbsd-x64": "0.25.12", - "@esbuild/openbsd-arm64": "0.25.12", - "@esbuild/openbsd-x64": "0.25.12", - "@esbuild/openharmony-arm64": "0.25.12", - "@esbuild/sunos-x64": "0.25.12", - "@esbuild/win32-arm64": "0.25.12", - "@esbuild/win32-ia32": "0.25.12", - "@esbuild/win32-x64": "0.25.12" + "node": ">=0.3.1" } }, - "node_modules/esbuild-wasm": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.25.9.tgz", - "integrity": "sha512-Jpv5tCSwQg18aCqCRD3oHIX/prBhXMDapIoG//A+6+dV0e7KQMGFg85ihJ5T1EeMjbZjON3TqFy0VrGAnIHLDA==", + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "dev": true, "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" }, "engines": { - "node": ">=18" + "node": ">=8" } }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "license": "MIT" + }, + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "dev": true, "license": "MIT", + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, "engines": { "node": ">=6" } }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, - "license": "MIT" + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", "dev": true, + "license": "MIT" + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "license": "MIT", - "engines": { - "node": ">=10" + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "node_modules/escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", - "dev": true, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "license": "BSD-2-Clause", "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" + "domelementtype": "^2.3.0" }, "engines": { - "node": ">=6.0" + "node": ">= 4" }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/dompurify": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.3.3.tgz", + "integrity": "sha512-Oj6pzI2+RqBfFG+qOaOLbFXLQ90ARpcGG6UePL82bJLtdsa6CYJD7nmiU8MW9nQNOtCHV3lZ/Bzq1X0QYbBZCA==", + "license": "(MPL-2.0 OR Apache-2.0)", "optionalDependencies": { - "source-map": "~0.6.1" + "@types/trusted-types": "^2.0.7" } }, - "node_modules/escodegen/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "engines": { - "node": ">=0.10.0" + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "node_modules/eslint": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", - "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", - "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.1", - "@humanwhocodes/config-array": "^0.13.0", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-prettier": { - "version": "10.1.5", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.5.tgz", - "integrity": "sha512-zc1UmCpNltmVY34vuLRV61r1K27sWuX39E+uyUnY8xS2Bex88VV9cugG+UZbRSRGtGyFboj+D8JODyme1plMpw==", - "dev": true, - "license": "MIT", - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "funding": { - "url": "https://opencollective.com/eslint-config-prettier" - }, - "peerDependencies": { - "eslint": ">=7.0.0" + "no-case": "^3.0.4", + "tslib": "^2.0.3" } }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "dev": true, "license": "MIT", "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/dotenv": { + "version": "16.4.7", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", + "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" } }, - "node_modules/eslint-module-utils": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", - "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", + "node_modules/dotenv-expand": { + "version": "11.0.7", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz", + "integrity": "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "debug": "^3.2.7" + "dotenv": "^16.4.5" }, "engines": { - "node": ">=4" + "node": ">=12" }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } + "funding": { + "url": "https://dotenvx.com" } }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, + "node_modules/dset": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.4.tgz", + "integrity": "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==", "license": "MIT", - "dependencies": { - "ms": "^2.1.1" + "engines": { + "node": ">=4" } }, - "node_modules/eslint-plugin-import": { - "version": "2.31.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", - "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", - "dev": true, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "license": "MIT", "dependencies": { - "@rtsao/scc": "^1.1.0", - "array-includes": "^3.1.8", - "array.prototype.findlastindex": "^1.2.5", - "array.prototype.flat": "^1.3.2", - "array.prototype.flatmap": "^1.3.2", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.12.0", - "hasown": "^2.0.2", - "is-core-module": "^2.15.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.8", - "object.groupby": "^1.0.3", - "object.values": "^1.2.0", - "semver": "^6.3.1", - "string.prototype.trimend": "^1.0.8", - "tsconfig-paths": "^3.15.0" + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" }, "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" + "node": ">= 0.4" } }, - "node_modules/eslint-plugin-import/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "node_modules/duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "readable-stream": "^2.0.2" } }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } + "license": "MIT" }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "esutils": "^2.0.2" + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/eslint-plugin-import/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "node_modules/electron-to-chromium": { + "version": "1.5.307", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.307.tgz", + "integrity": "sha512-5z3uFKBWjiNR44nFcYdkcXjKMbg5KXNdciu7mhTPo9tB7NbqSNP2sSnGR+fqknZSCwKkBN+oxiiajWs4dT6ORg==", + "license": "ISC" + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", "dev": true, "license": "MIT", - "dependencies": { - "minimist": "^1.2.0" + "engines": { + "node": ">=12" }, - "bin": { - "json5": "lib/cli.js" + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" } }, - "node_modules/eslint-plugin-import/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/emmet": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/emmet/-/emmet-2.4.11.tgz", + "integrity": "sha512-23QPJB3moh/U9sT4rQzGgeyyGIrcM+GH5uVYg2C6wZIxAIJq7Ng3QLT79tl8FUwDXhyq9SusfknOrofAKqvgyQ==", "dev": true, - "license": "ISC", + "license": "MIT", + "workspaces": [ + "./packages/scanner", + "./packages/abbreviation", + "./packages/css-abbreviation", + "./" + ], "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" + "@emmetio/abbreviation": "^2.3.3", + "@emmetio/css-abbreviation": "^2.1.8" } }, - "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } + "license": "MIT" }, - "node_modules/eslint-plugin-import/node_modules/strip-bom": { + "node_modules/emojilib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/emojilib/-/emojilib-2.4.0.tgz", + "integrity": "sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==", + "dev": true, + "license": "MIT" + }, + "node_modules/emojis-list": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">= 4" } }, - "node_modules/eslint-plugin-import/node_modules/tsconfig-paths": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "dev": true, "license": "MIT", - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" + "engines": { + "node": ">= 0.8" } }, - "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.1.tgz", - "integrity": "sha512-zHByM9WTUMnfsDTafGXRiqxp6lFtNoSOWBY6FonVRn3A+BUwN1L/tdBXT40BcBJi0cZjOGTXZ0eD/rTG9fEJ0g==", + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", "dev": true, "license": "MIT", "dependencies": { - "aria-query": "^5.3.2", - "array-includes": "^3.1.8", - "array.prototype.flatmap": "^1.3.2", - "ast-types-flow": "^0.0.8", - "axe-core": "^4.10.0", - "axobject-query": "^4.1.0", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "es-iterator-helpers": "^1.1.0", - "hasown": "^2.0.2", - "jsx-ast-utils": "^3.3.5", - "language-tags": "^1.0.9", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.8", - "safe-regex-test": "^1.0.3", - "string.prototype.includes": "^2.0.1" - }, - "engines": { - "node": ">=4.0" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" - } - }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/aria-query": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", - "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">= 0.4" + "iconv-lite": "^0.6.2" } }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/axobject-query": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", - "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, "engines": { - "node": ">= 0.4" + "node": ">=0.10.0" } }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "once": "^1.4.0" } }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/enhanced-resolve": { + "version": "5.20.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.20.0.tgz", + "integrity": "sha512-/ce7+jQ1PQ6rVXwe+jKEg5hW5ciicHwIQUagZkp6IufBoY3YDgdTTY1azVs0qoRgVmvsNB+rbjLJxDAeHHtwsQ==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" + "graceful-fs": "^4.2.4", + "tapable": "^2.3.0" }, "engines": { - "node": "*" + "node": ">=10.13.0" } }, - "node_modules/eslint-plugin-react": { - "version": "7.32.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz", - "integrity": "sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==", + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", "dev": true, "license": "MIT", "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", - "doctrine": "^2.1.0", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.8" + "ansi-colors": "^4.1.1" }, "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + "node": ">=8.6" } }, - "node_modules/eslint-plugin-react-hooks": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.0.0.tgz", - "integrity": "sha512-hIOwI+5hYGpJEc4uPRmz2ulCjAGD/N13Lukkh8cLV0i2IRk/bdZDYjgLVHj+U9Z704kLIdIO6iueGvxNur0sgw==", - "dev": true, - "license": "MIT", + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", "engines": { - "node": ">=10" + "node": ">=0.12" }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/eslint-plugin-react/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "node_modules/env-ci": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/env-ci/-/env-ci-11.2.0.tgz", + "integrity": "sha512-D5kWfzkmaOQDioPmiviWAVtKmpPT4/iJmMVQxWxMPJTFyTkdc5JQUfc5iXEeWxcOdsYTKSAiA/Age4NUOqKsRA==", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" + "execa": "^8.0.0", + "java-properties": "^1.0.2" }, "engines": { - "node": ">=0.10.0" + "node": "^18.17 || >=20.6.1" } }, - "node_modules/eslint-plugin-react/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/env-ci/node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" }, "engines": { - "node": "*" + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "node_modules/env-ci/node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", "dev": true, "license": "MIT", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" + "engines": { + "node": ">=16" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "node_modules/env-ci/node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "license": "Apache-2.0", + "engines": { + "node": ">=16.17.0" } }, - "node_modules/eslint-scope": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", - "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "node_modules/env-ci/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, + "license": "MIT", "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "node_modules/env-ci/node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=12" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "node_modules/env-ci/node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", "dev": true, "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "node_modules/env-ci/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "mimic-fn": "^4.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=12" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "node_modules/env-ci/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "dev": true, "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" + "engines": { + "node": ">=12" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/env-ci/node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true, "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" + "engines": { + "node": ">=6" + } + }, + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", "dev": true, "license": "MIT" }, - "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", "dev": true, - "license": "ISC", + "license": "MIT", + "optional": true, "dependencies": { - "brace-expansion": "^1.1.7" + "prr": "~1.0.1" }, - "engines": { - "node": "*" + "bin": { + "errno": "cli.js" } }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "node_modules/error-ex": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" } }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "node_modules/error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "stackframe": "^1.3.4" + } + }, + "node_modules/es-abstract": { + "version": "1.24.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.1.tgz", + "integrity": "sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">= 0.4" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", "engines": { - "node": ">=4" + "node": ">= 0.4" } }, - "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", "engines": { - "node": ">=0.10" + "node": ">= 0.4" } }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "node_modules/es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "estraverse": "^5.2.0" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" }, - "engines": { - "node": ">=4.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } + "node_modules/es-get-iterator/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" }, - "node_modules/estree-util-attach-comments": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz", - "integrity": "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==", + "node_modules/es-iterator-helpers": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.2.tgz", + "integrity": "sha512-BrUQ0cPTB/IwXj23HtwHjS9n7O4h9FX94b4xc5zlTHxeLgTAdzYUDyy6KdExAl9lbN5rtfe44xpjpmj9grxs5w==", + "dev": true, "license": "MIT", "dependencies": { - "@types/estree": "^1.0.0" + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.1", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.1.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.3.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "iterator.prototype": "^1.1.5", + "safe-array-concat": "^1.1.3" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">= 0.4" } }, - "node_modules/estree-util-build-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz", - "integrity": "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==", + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "license": "MIT" + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "license": "MIT", "dependencies": { - "@types/estree-jsx": "^1.0.0", - "devlop": "^1.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "estree-walker": "^3.0.0" + "es-errors": "^1.3.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">= 0.4" } }, - "node_modules/estree-util-build-jsx/node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, "license": "MIT", "dependencies": { - "@types/estree": "^1.0.0" + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/estree-util-is-identifier-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", - "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", + "node_modules/es-shim-unscopables": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", + "dev": true, "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/estree-util-scope": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/estree-util-scope/-/estree-util-scope-1.0.0.tgz", - "integrity": "sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==", + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "dev": true, "license": "MIT", "dependencies": { - "@types/estree": "^1.0.0", - "devlop": "^1.0.0" + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/estree-util-to-js": { + "node_modules/es6-promise": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", + "integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==", + "dev": true, + "license": "MIT" + }, + "node_modules/esast-util-from-estree": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz", - "integrity": "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==", + "resolved": "https://registry.npmjs.org/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz", + "integrity": "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==", "license": "MIT", "dependencies": { "@types/estree-jsx": "^1.0.0", - "astring": "^1.8.0", - "source-map": "^0.7.0" + "devlop": "^1.0.0", + "estree-util-visit": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/estree-util-visit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz", - "integrity": "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==", + "node_modules/esast-util-from-js": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esast-util-from-js/-/esast-util-from-js-2.0.1.tgz", + "integrity": "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==", "license": "MIT", "dependencies": { "@types/estree-jsx": "^1.0.0", - "@types/unist": "^3.0.0" + "acorn": "^8.0.0", + "esast-util-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "license": "MIT" - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true, + "node_modules/esbuild": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.0.tgz", + "integrity": "sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==", + "hasInstallScript": true, "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, "engines": { - "node": ">= 0.6" + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.0", + "@esbuild/android-arm": "0.25.0", + "@esbuild/android-arm64": "0.25.0", + "@esbuild/android-x64": "0.25.0", + "@esbuild/darwin-arm64": "0.25.0", + "@esbuild/darwin-x64": "0.25.0", + "@esbuild/freebsd-arm64": "0.25.0", + "@esbuild/freebsd-x64": "0.25.0", + "@esbuild/linux-arm": "0.25.0", + "@esbuild/linux-arm64": "0.25.0", + "@esbuild/linux-ia32": "0.25.0", + "@esbuild/linux-loong64": "0.25.0", + "@esbuild/linux-mips64el": "0.25.0", + "@esbuild/linux-ppc64": "0.25.0", + "@esbuild/linux-riscv64": "0.25.0", + "@esbuild/linux-s390x": "0.25.0", + "@esbuild/linux-x64": "0.25.0", + "@esbuild/netbsd-arm64": "0.25.0", + "@esbuild/netbsd-x64": "0.25.0", + "@esbuild/openbsd-arm64": "0.25.0", + "@esbuild/openbsd-x64": "0.25.0", + "@esbuild/sunos-x64": "0.25.0", + "@esbuild/win32-arm64": "0.25.0", + "@esbuild/win32-ia32": "0.25.0", + "@esbuild/win32-x64": "0.25.0" } }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "node_modules/esbuild-wasm": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.27.3.tgz", + "integrity": "sha512-AUXuOxZ145/5Az+lIqk6TdJbxKTyDGkXMJpTExmBdbnHR6n6qAFx+F4oG9ORpVYJ9dQYeQAqzv51TO4DFKsbXw==", "dev": true, - "license": "MIT" - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/events-universal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz", - "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "bare-events": "^2.7.0" + "node": ">=18" } }, - "node_modules/eventsource": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", - "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", - "dev": true, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "license": "MIT", - "dependencies": { - "eventsource-parser": "^3.0.1" - }, "engines": { - "node": ">=18.0.0" + "node": ">=6" } }, - "node_modules/eventsource-parser": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.6.tgz", - "integrity": "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==", + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.0.0" - } + "license": "MIT" }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/execa/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "engines": { - "node": ">= 0.8.0" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/exit-x": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/exit-x/-/exit-x-0.2.2.tgz", - "integrity": "sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", + "node_modules/eslint": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, "license": "MIT", "dependencies": { - "homedir-polyfill": "^1.0.1" + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" }, "engines": { - "node": ">=0.10.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "node_modules/eslint-config-prettier": { + "version": "10.1.8", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz", + "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", + "dev": true, "license": "MIT", - "dependencies": { - "@jest/expect-utils": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0" + "bin": { + "eslint-config-prettier": "bin/cli.js" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "funding": { + "url": "https://opencollective.com/eslint-config-prettier" + }, + "peerDependencies": { + "eslint": ">=7.0.0" } }, - "node_modules/expect-type": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.2.tgz", - "integrity": "sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==", + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.0.0" + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" } }, - "node_modules/exponential-backoff": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.3.tgz", - "integrity": "sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/express": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", - "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", "dependencies": { - "accepts": "^2.0.0", - "body-parser": "^2.2.1", - "content-disposition": "^1.0.0", - "content-type": "^1.0.5", - "cookie": "^0.7.1", - "cookie-signature": "^1.2.1", - "debug": "^4.4.0", - "depd": "^2.0.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "finalhandler": "^2.1.0", - "fresh": "^2.0.0", - "http-errors": "^2.0.0", - "merge-descriptors": "^2.0.0", - "mime-types": "^3.0.0", - "on-finished": "^2.4.1", - "once": "^1.4.0", - "parseurl": "^1.3.3", - "proxy-addr": "^2.0.7", - "qs": "^6.14.0", - "range-parser": "^1.2.1", - "router": "^2.2.0", - "send": "^1.1.0", - "serve-static": "^2.2.0", - "statuses": "^2.0.1", - "type-is": "^2.0.1", - "vary": "^1.1.2" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "ms": "^2.1.1" } }, - "node_modules/express-rate-limit": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.2.1.tgz", - "integrity": "sha512-PCZEIEIxqwhzw4KF0n7QF4QqruVTcF73O5kFKUnGOyjbCCgizBBiFaYpd/fnBLUMPw/BWw9OsiN7GgrNYr7j6g==", + "node_modules/eslint-module-utils": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", + "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", "dev": true, "license": "MIT", "dependencies": { - "ip-address": "10.0.1" + "debug": "^3.2.7" }, "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://github.com/sponsors/express-rate-limit" + "node": ">=4" }, - "peerDependencies": { - "express": ">= 4.11" + "peerDependenciesMeta": { + "eslint": { + "optional": true + } } }, - "node_modules/express-rate-limit/node_modules/ip-address": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.0.1.tgz", - "integrity": "sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==", + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 12" + "dependencies": { + "ms": "^2.1.1" } }, - "node_modules/express/node_modules/content-disposition": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz", - "integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==", + "node_modules/eslint-plugin-import": { + "version": "2.32.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", + "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", "dev": true, "license": "MIT", + "dependencies": { + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.9", + "array.prototype.findlastindex": "^1.2.6", + "array.prototype.flat": "^1.3.3", + "array.prototype.flatmap": "^1.3.3", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.1", + "hasown": "^2.0.2", + "is-core-module": "^2.16.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.1", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.9", + "tsconfig-paths": "^3.15.0" + }, "engines": { - "node": ">=18" + "node": ">=4" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" } }, - "node_modules/exsolve": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.8.tgz", - "integrity": "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==", + "node_modules/eslint-plugin-import/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true, "license": "MIT" }, - "node_modules/ext-list": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", - "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", + "node_modules/eslint-plugin-import/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "license": "MIT", "dependencies": { - "mime-db": "^1.28.0" - }, - "engines": { - "node": ">=0.10.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/ext-name": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", - "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", "dependencies": { - "ext-list": "^2.0.0", - "sort-keys-length": "^1.0.0" - }, - "engines": { - "node": ">=4" + "ms": "^2.1.1" } }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "license": "MIT" - }, - "node_modules/fast-content-type-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-3.0.0.tgz", - "integrity": "sha512-ZvLdcY8P+N8mGQJahJV5G4U88CSvT1rP8ApL6uETe88MBXrBHAkZlSEySdUlyztF7ccb+Znos3TFqaepHxdhBg==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "MIT" - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-fifo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", - "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, - "license": "MIT" + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "node_modules/eslint-plugin-import/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "license": "MIT", "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" + "minimist": "^1.2.0" }, - "engines": { - "node": ">=8.6.0" + "bin": { + "json5": "lib/cli.js" } }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/eslint-plugin-import/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, "license": "ISC", "dependencies": { - "is-glob": "^4.0.1" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">= 6" + "node": "*" } }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", - "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "node_modules/eslint-plugin-import/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "websocket-driver": ">=0.5.1" - }, + "license": "MIT", "engines": { - "node": ">=0.8.0" + "node": ">=4" } }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "license": "Apache-2.0", + "node_modules/eslint-plugin-import/node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, + "license": "MIT", "dependencies": { - "bser": "2.1.1" + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" } }, - "node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", + "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", + "dev": true, "license": "MIT", + "dependencies": { + "aria-query": "^5.3.2", + "array-includes": "^3.1.8", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "^4.10.0", + "axobject-query": "^4.1.0", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "hasown": "^2.0.2", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "safe-regex-test": "^1.0.3", + "string.prototype.includes": "^2.0.1" + }, "engines": { - "node": ">=12.0.0" + "node": ">=4.0" }, "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" } }, - "node_modules/fflate": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", - "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==", + "node_modules/eslint-plugin-jsx-a11y/node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", "dev": true, - "license": "MIT" - }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, + "license": "Apache-2.0", "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.4" } }, - "node_modules/figures/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "node_modules/eslint-plugin-jsx-a11y/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, "license": "MIT", - "engines": { - "node": ">=0.8.0" + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "node_modules/eslint-plugin-jsx-a11y/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "flat-cache": "^3.0.4" + "brace-expansion": "^1.1.7" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "*" } }, - "node_modules/file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "node_modules/eslint-plugin-react": { + "version": "7.37.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz", + "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==", "dev": true, "license": "MIT", "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.3", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.2.1", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.9", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.1", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.12", + "string.prototype.repeat": "^1.0.0" }, "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "node": ">=4" }, "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" } }, - "node_modules/file-loader/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "node_modules/eslint-plugin-react-hooks": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz", + "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==", "dev": true, "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "engines": { + "node": ">=10" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/file-loader/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "license": "MIT", "peerDependencies": { - "ajv": "^6.9.1" + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" } }, - "node_modules/file-loader/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "node_modules/eslint-plugin-react/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true, "license": "MIT" }, - "node_modules/file-loader/node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "node_modules/eslint-plugin-react/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "license": "MIT", "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" }, "engines": { - "node": ">=8.9.0" + "node": ">=0.10.0" } }, - "node_modules/file-loader/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "node_modules/eslint-plugin-react/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "node": "*" } }, - "node_modules/file-type": { - "version": "20.5.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-20.5.0.tgz", - "integrity": "sha512-BfHZtG/l9iMm4Ecianu7P8HRD2tBHLtjXinm4X62XBOYzi7CYA7jyqfJzOvXHqzVrVPYqBo2/GvbARMaaJkKVg==", + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.6", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.6.tgz", + "integrity": "sha512-3JmVl5hMGtJ3kMmB3zi3DL25KfkCEyy3Tw7Gmw7z5w8M9WlwoPFnIvwChzu1+cF3iaK3sp18hhPz8ANeimdJfA==", "dev": true, "license": "MIT", "dependencies": { - "@tokenizer/inflate": "^0.2.6", - "strtok3": "^10.2.0", - "token-types": "^6.0.0", - "uint8array-extras": "^1.4.0" + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", + "node-exports-info": "^1.6.0", + "object-keys": "^1.1.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" }, "engines": { - "node": ">=18" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sindresorhus/file-type?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", - "license": "Apache-2.0", - "dependencies": { - "minimatch": "^5.0.1" + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "license": "ISC", + "node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "brace-expansion": "^2.0.1" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": ">=10" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/filename-reserved-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-3.0.0.tgz", - "integrity": "sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw==", + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/eslint" } }, - "node_modules/filenamify": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-6.0.0.tgz", - "integrity": "sha512-vqIlNogKeyD3yzrm0yhRMQg8hOVwYcYRfjEoODd49iCprMn4HL85gK3HcykQE53EPIpX3HcAbGA5ELQv216dAQ==", + "node_modules/eslint/node_modules/ajv": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", "dev": true, "license": "MIT", "dependencies": { - "filename-reserved-regex": "^3.0.0" - }, - "engines": { - "node": ">=16" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } + "node_modules/eslint/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" }, - "node_modules/finalhandler": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", - "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "license": "MIT", "dependencies": { - "debug": "^4.4.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "on-finished": "^2.4.1", - "parseurl": "^1.3.3", - "statuses": "^2.0.1" - }, - "engines": { - "node": ">= 18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": ">=8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + "url": "https://opencollective.com/eslint" } }, - "node_modules/find-cache-dir/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "node_modules/eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "license": "MIT", "dependencies": { - "semver": "^6.0.0" + "type-fest": "^0.20.2" }, "engines": { "node": ">=8" @@ -27369,425 +25293,464 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/find-cache-dir/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } + "license": "MIT" }, - "node_modules/find-cache-directory": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/find-cache-directory/-/find-cache-directory-6.0.0.tgz", - "integrity": "sha512-CvFd5ivA6HcSHbD+59P7CyzINHXzwhuQK8RY7CxJZtgDSAtRlHiCaQpZQ2lMR/WRyUIEmzUvL6G2AGurMfegZA==", + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "common-path-prefix": "^3.0.0", - "pkg-dir": "^8.0.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=20" + "node": "*" + } + }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/find-cache-directory/node_modules/pkg-dir": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-8.0.0.tgz", - "integrity": "sha512-4peoBq4Wks0riS0z8741NVv+/8IiTvqnZAr8QGgtdifrtpdXbNw/FxRS1l6NFqm4EMzuS0EDqNNx4XGaz8cuyQ==", + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "find-up-simple": "^1.0.0" + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": ">=18" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/eslint" } }, - "node_modules/find-file-up": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/find-file-up/-/find-file-up-2.0.1.tgz", - "integrity": "sha512-qVdaUhYO39zmh28/JLQM5CoYN9byEOKEH4qfa8K1eNV17W0UUMJ9WgbR/hHFH+t5rcl+6RTb5UC7ck/I+uRkpQ==", + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, - "license": "MIT", - "dependencies": { - "resolve-dir": "^1.0.1" + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/find-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-pkg/-/find-pkg-2.0.0.tgz", - "integrity": "sha512-WgZ+nKbELDa6N3i/9nrHeNznm+lY3z4YfhDDWgW+5P0pdmMj26bxaxU11ookgY3NyP9GC7HvZ9etp0jRFqGEeQ==", + "node_modules/esquery": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "dependencies": { - "find-file-up": "^2.0.1" + "estraverse": "^5.1.0" }, "engines": { - "node": ">=8" + "node": ">=0.10" } }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "estraverse": "^5.2.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4.0" } }, - "node_modules/find-up-simple": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz", - "integrity": "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==", + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "engines": { - "node": ">=18" + "node": ">=4.0" + } + }, + "node_modules/estree-util-attach-comments": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz", + "integrity": "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/find-versions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-5.1.0.tgz", - "integrity": "sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg==", - "dev": true, + "node_modules/estree-util-build-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz", + "integrity": "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==", "license": "MIT", "dependencies": { - "semver-regex": "^4.0.5" + "@types/estree-jsx": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "estree-walker": "^3.0.0" }, - "engines": { - "node": ">=12" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-is-identifier-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", + "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-scope": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/estree-util-scope/-/estree-util-scope-1.0.0.tgz", + "integrity": "sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "license": "BSD-3-Clause", - "bin": { - "flat": "cli.js" + "node_modules/estree-util-to-js": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz", + "integrity": "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "astring": "^1.8.0", + "source-map": "^0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", - "dev": true, + "node_modules/estree-util-visit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz", + "integrity": "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==", "license": "MIT", "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "@types/estree-jsx": "^1.0.0", + "@types/unist": "^3.0.0" }, - "engines": { - "node": "^10.12.0 || >=12.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/flatted": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, - "license": "ISC" + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/flattie": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flattie/-/flattie-1.1.1.tgz", - "integrity": "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==", + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 0.6" } }, - "node_modules/flexsearch": { - "version": "0.8.212", - "resolved": "https://registry.npmjs.org/flexsearch/-/flexsearch-0.8.212.tgz", - "integrity": "sha512-wSyJr1GUWoOOIISRu+X2IXiOcVfg9qqBRyCPRUdLMIGJqPzMo+jMRlvE83t14v1j0dRMEaBbER/adQjp6Du2pw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/ts-thomas" - }, - { - "type": "paypal", - "url": "https://www.paypal.com/donate/?hosted_button_id=GEVR88FC9BWRW" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/flexsearch" - }, - { - "type": "patreon", - "url": "https://patreon.com/user?u=96245532" - }, - { - "type": "liberapay", - "url": "https://liberapay.com/ts-thomas" - } - ], - "license": "Apache-2.0" + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true, + "license": "MIT" }, - "node_modules/follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "license": "MIT", "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } + "node": ">=0.8.x" } }, - "node_modules/fontace": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/fontace/-/fontace-0.4.0.tgz", - "integrity": "sha512-moThBCItUe2bjZip5PF/iZClpKHGLwMvR79Kp8XpGRBrvoRSnySN4VcILdv3/MJzbhvUA5WeiUXF5o538m5fvg==", - "license": "MIT", + "node_modules/events-universal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz", + "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "fontkitten": "^1.0.0" + "bare-events": "^2.7.0" } }, - "node_modules/fontkitten": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/fontkitten/-/fontkitten-1.0.2.tgz", - "integrity": "sha512-piJxbLnkD9Xcyi7dWJRnqszEURixe7CrF/efBfbffe2DPyabmuIuqraruY8cXTs19QoM8VJzx47BDRVNXETM7Q==", + "node_modules/eventsource": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", + "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", + "dev": true, "license": "MIT", "dependencies": { - "tiny-inflate": "^1.0.3" + "eventsource-parser": "^3.0.1" }, "engines": { - "node": ">=20" + "node": ">=18.0.0" } }, - "node_modules/for-each": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", - "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "node_modules/eventsource-parser": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.6.tgz", + "integrity": "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==", + "dev": true, "license": "MIT", - "dependencies": { - "is-callable": "^1.2.7" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=18.0.0" } }, - "node_modules/foreground-child": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", - "license": "ISC", + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" }, "engines": { - "node": ">=14" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/fork-ts-checker-webpack-plugin": { - "version": "7.2.13", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-7.2.13.tgz", - "integrity": "sha512-fR3WRkOb4bQdWB/y7ssDUlVdrclvwtyCUIHCfivAoYxq9dF7XfrDKbMdZIfwJ7hxIAqkYSGeU7lLJE6xrxIBdg==", + "node_modules/execa/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/exit-x": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/exit-x/-/exit-x-0.2.2.tgz", + "integrity": "sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.16.7", - "chalk": "^4.1.2", - "chokidar": "^3.5.3", - "cosmiconfig": "^7.0.1", - "deepmerge": "^4.2.2", - "fs-extra": "^10.0.0", - "memfs": "^3.4.1", - "minimatch": "^3.0.4", - "node-abort-controller": "^3.0.1", - "schema-utils": "^3.1.1", - "semver": "^7.3.5", - "tapable": "^2.2.1" + "homedir-polyfill": "^1.0.1" }, "engines": { - "node": ">=12.13.0", - "yarn": ">=1.0.0" - }, - "peerDependencies": { - "typescript": ">3.6.0", - "vue-template-compiler": "*", - "webpack": "^5.11.0" - }, - "peerDependenciesMeta": { - "vue-template-compiler": { - "optional": true - } + "node": ">=0.10.0" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", "dev": true, "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "node_modules/expect-type": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz", + "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==", "dev": true, - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "node_modules/expect/node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "node_modules/expect/node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dev": true, "license": "MIT", "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" }, "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "node_modules/expect/node_modules/@sinclair/typebox": { + "version": "0.27.10", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.10.tgz", + "integrity": "sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==", + "dev": true, + "license": "MIT" + }, + "node_modules/expect/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "license": "MIT", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "node_modules/expect/node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/expect/node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "is-glob": "^4.0.1" + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" }, "engines": { - "node": ">= 6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/expect/node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" }, "engines": { - "node": "*" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/picomatch": { + "node_modules/expect/node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", @@ -27800,545 +25763,597 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "node_modules/expect/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "license": "MIT", "dependencies": { - "picomatch": "^2.2.1" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": ">=8.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "node_modules/expect/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/exponential-backoff": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.3.tgz", + "integrity": "sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/express": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", "dev": true, "license": "MIT", "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" + "accepts": "^2.0.0", + "body-parser": "^2.2.1", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "depd": "^2.0.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" }, "engines": { - "node": ">= 10.13.0" + "node": ">= 18" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/webpack" + "url": "https://opencollective.com/express" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "node_modules/express-rate-limit": { + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.3.1.tgz", + "integrity": "sha512-D1dKN+cmyPWuvB+G2SREQDzPY1agpBIcTa9sJxOPMCNeH3gwzhqJRDWCXW3gg0y//+LQ/8j52JbMROWyrKdMdw==", "dev": true, - "license": "ISC", - "engines": { - "node": ">= 6" - } - }, - "node_modules/form-data": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", - "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", "license": "MIT", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" + "ip-address": "10.1.0" }, "engines": { - "node": ">= 6" + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/express-rate-limit" + }, + "peerDependencies": { + "express": ">= 4.11" } }, - "node_modules/form-data-encoder": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", - "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", + "node_modules/express/node_modules/content-disposition": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz", + "integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==", "dev": true, "license": "MIT", "engines": { - "node": ">= 14.17" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/form-data/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "node_modules/express/node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" } }, - "node_modules/form-data/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "node_modules/exsolve": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.8.tgz", + "integrity": "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==", + "dev": true, + "license": "MIT" + }, + "node_modules/ext-list": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", + "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", + "dev": true, "license": "MIT", "dependencies": { - "mime-db": "1.52.0" + "mime-db": "^1.28.0" }, "engines": { - "node": ">= 0.6" + "node": ">=0.10.0" } }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "node_modules/ext-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", + "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", "dev": true, "license": "MIT", + "dependencies": { + "ext-list": "^2.0.0", + "sort-keys-length": "^1.0.0" + }, "engines": { - "node": ">= 0.6" + "node": ">=4" } }, - "node_modules/fraction.js": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", - "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/rawify" - } + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" }, - "node_modules/fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", - "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "node_modules/fast-content-type-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-3.0.0.tgz", + "integrity": "sha512-ZvLdcY8P+N8mGQJahJV5G4U88CSvT1rP8ApL6uETe88MBXrBHAkZlSEySdUlyztF7ccb+Znos3TFqaepHxdhBg==", "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT" }, - "node_modules/from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "node_modules/front-matter": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/front-matter/-/front-matter-4.0.2.tgz", - "integrity": "sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg==", - "license": "MIT", - "dependencies": { - "js-yaml": "^3.13.1" - } + "license": "MIT" }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "dev": true, "license": "MIT" }, - "node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dev": true, "license": "MIT", "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" }, "engines": { - "node": ">=10" + "node": ">=8.6.0" } }, - "node_modules/fs-minipass": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", - "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "license": "ISC", "dependencies": { - "minipass": "^7.0.3" + "is-glob": "^4.0.1" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">= 6" } }, - "node_modules/fs-monkey": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.1.0.tgz", - "integrity": "sha512-QMUezzXWII9EV5aTFXW1UBVUO77wYPpjqIF8/AviUCThNeSYZykpoTixUeaNNBwmCev0AMDWMAni+f8Hxb1IFw==", + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true, - "license": "Unlicense" + "license": "MIT" }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "license": "BSD-3-Clause" + }, + "node_modules/fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" } }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" } }, - "node_modules/function-timeout": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/function-timeout/-/function-timeout-1.0.2.tgz", - "integrity": "sha512-939eZS4gJ3htTHAldmyyuzlrD58P03fHG49v2JfFXbV6OhvZKRC9j2yAtdHw/zrp2zXHuv05zMIy40F0ge7spA==", + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", "dev": true, + "license": "Apache-2.0", + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "license": "MIT", "engines": { - "node": ">=18" + "node": ">=12.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } } }, - "node_modules/function.prototype.name": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", - "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "node_modules/fflate": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", + "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==", + "dev": true, + "license": "MIT" + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "functions-have-names": "^1.2.3", - "hasown": "^2.0.2", - "is-callable": "^1.2.7" + "escape-string-regexp": "^1.0.5" }, "engines": { - "node": ">= 0.4" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=0.8.0" } }, - "node_modules/generator-function": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", - "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, "engines": { - "node": ">= 0.4" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/generic-names": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/generic-names/-/generic-names-4.0.0.tgz", - "integrity": "sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==", + "node_modules/file-type": { + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-20.5.0.tgz", + "integrity": "sha512-BfHZtG/l9iMm4Ecianu7P8HRD2tBHLtjXinm4X62XBOYzi7CYA7jyqfJzOvXHqzVrVPYqBo2/GvbARMaaJkKVg==", "dev": true, "license": "MIT", "dependencies": { - "loader-utils": "^3.2.0" + "@tokenizer/inflate": "^0.2.6", + "strtok3": "^10.2.0", + "token-types": "^6.0.0", + "uint8array-extras": "^1.4.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sindresorhus/file-type?sponsor=1" } }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "node_modules/filelist": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.6.tgz", + "integrity": "sha512-5giy2PkLYY1cP39p17Ech+2xlpTRL9HLspOfEgm0L6CwBXBTgsK5ou0JtzYuepxkaQ/tvhCFIJ5uXo0OrM2DxA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, "license": "MIT", - "engines": { - "node": ">=6.9.0" + "dependencies": { + "balanced-match": "^1.0.0" } }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", + "dev": true, "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, "engines": { - "node": "6.* || 8.* || >= 10.*" + "node": ">=10" } }, - "node_modules/get-east-asian-width": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", - "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==", + "node_modules/filename-reserved-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-3.0.0.tgz", + "integrity": "sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw==", + "dev": true, "license": "MIT", "engines": { - "node": ">=18" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "node_modules/filenamify": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-6.0.0.tgz", + "integrity": "sha512-vqIlNogKeyD3yzrm0yhRMQg8hOVwYcYRfjEoODd49iCprMn4HL85gK3HcykQE53EPIpX3HcAbGA5ELQv216dAQ==", + "dev": true, "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" + "filename-reserved-regex": "^3.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=16" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "license": "MIT", - "engines": { - "node": ">=8.0.0" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, "license": "MIT", "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" + "to-regex-range": "^5.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">=8" } }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "node_modules/finalhandler": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", "dev": true, "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, "engines": { - "node": ">=10" + "node": ">= 18.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/get-symbol-description": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", - "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6" + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" } }, - "node_modules/git-log-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/git-log-parser/-/git-log-parser-1.2.1.tgz", - "integrity": "sha512-PI+sPDvHXNPl5WNOErAK05s3j0lgwUzMN6o8cyQrDaKfT3qd7TmNJKeXX+SknI5I0QhG5fVPAEwSY4tRGDtYoQ==", + "node_modules/find-cache-dir/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "license": "MIT", "dependencies": { - "argv-formatter": "~1.0.0", - "spawn-error-forwarder": "~1.0.0", - "split2": "~1.0.0", - "stream-combiner2": "~1.1.1", - "through2": "~2.0.0", - "traverse": "0.6.8" - } - }, - "node_modules/git-log-parser/node_modules/split2": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-1.0.0.tgz", - "integrity": "sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg==", - "dev": true, - "license": "ISC", - "dependencies": { - "through2": "~2.0.0" - } - }, - "node_modules/github-slugger": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", - "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==", - "license": "ISC" - }, - "node_modules/glob": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-12.0.0.tgz", - "integrity": "sha512-5Qcll1z7IKgHr5g485ePDdHcNQY0k2dtv/bjYy0iuyGxQw2qSOiiXUXJ+AYQpg3HNoUMHqAruX478Jeev7UULw==", - "license": "BlueOak-1.0.0", - "dependencies": { - "foreground-child": "^3.3.1", - "jackspeak": "^4.1.1", - "minimatch": "^10.1.1", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^2.0.0" - }, - "bin": { - "glob": "dist/esm/bin.mjs" + "semver": "^6.0.0" }, "engines": { - "node": "20 || >=22" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "node_modules/find-cache-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/glob-to-regex.js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/glob-to-regex.js/-/glob-to-regex.js-1.2.0.tgz", - "integrity": "sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ==", - "license": "Apache-2.0", + "node_modules/find-cache-directory": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/find-cache-directory/-/find-cache-directory-6.0.0.tgz", + "integrity": "sha512-CvFd5ivA6HcSHbD+59P7CyzINHXzwhuQK8RY7CxJZtgDSAtRlHiCaQpZQ2lMR/WRyUIEmzUvL6G2AGurMfegZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "common-path-prefix": "^3.0.0", + "pkg-dir": "^8.0.0" + }, "engines": { - "node": ">=10.0" + "node": ">=20" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "node_modules/find-cache-directory/node_modules/pkg-dir": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-8.0.0.tgz", + "integrity": "sha512-4peoBq4Wks0riS0z8741NVv+/8IiTvqnZAr8QGgtdifrtpdXbNw/FxRS1l6NFqm4EMzuS0EDqNNx4XGaz8cuyQ==", "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/glob/node_modules/minimatch": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", - "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", - "license": "BlueOak-1.0.0", + "license": "MIT", "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" + "find-up-simple": "^1.0.0" }, "engines": { - "node": "20 || >=22" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "node_modules/find-file-up": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/find-file-up/-/find-file-up-2.0.1.tgz", + "integrity": "sha512-qVdaUhYO39zmh28/JLQM5CoYN9byEOKEH4qfa8K1eNV17W0UUMJ9WgbR/hHFH+t5rcl+6RTb5UC7ck/I+uRkpQ==", "dev": true, "license": "MIT", "dependencies": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" + "resolve-dir": "^1.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", + "node_modules/find-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-pkg/-/find-pkg-2.0.0.tgz", + "integrity": "sha512-WgZ+nKbELDa6N3i/9nrHeNznm+lY3z4YfhDDWgW+5P0pdmMj26bxaxU11ookgY3NyP9GC7HvZ9etp0jRFqGEeQ==", "dev": true, "license": "MIT", "dependencies": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" + "find-file-up": "^2.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/global-prefix/node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true, - "license": "ISC" - }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "isexe": "^2.0.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, - "bin": { - "which": "bin/which" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globals": { - "version": "15.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", - "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", + "node_modules/find-up-simple": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz", + "integrity": "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==", "dev": true, "license": "MIT", "engines": { @@ -28348,3285 +26363,3248 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globalthis": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "node_modules/find-versions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-5.1.0.tgz", + "integrity": "sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg==", "dev": true, "license": "MIT", "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" + "semver-regex": "^4.0.5" }, "engines": { - "node": ">= 0.4" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, "license": "MIT", "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/got": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/got/-/got-13.0.0.tgz", - "integrity": "sha512-XfBk1CxOOScDcMr9O1yKkNaQyy865NbYs+F7dr4H0LZMVgCj2Le59k6PqbNHoL5ToeaEQUYh6c6yMfVcc6SJxA==", + "node_modules/flatted": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", + "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", "dev": true, + "license": "ISC" + }, + "node_modules/flattie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flattie/-/flattie-1.1.1.tgz", + "integrity": "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==", "license": "MIT", - "dependencies": { - "@sindresorhus/is": "^5.2.0", - "@szmarczak/http-timer": "^5.0.1", - "cacheable-lookup": "^7.0.0", - "cacheable-request": "^10.2.8", - "decompress-response": "^6.0.0", - "form-data-encoder": "^2.1.2", - "get-stream": "^6.0.1", - "http2-wrapper": "^2.1.10", - "lowercase-keys": "^3.0.0", - "p-cancelable": "^3.0.0", - "responselike": "^3.0.0" - }, "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" + "node": ">=8" } }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "license": "ISC" + "node_modules/flexsearch": { + "version": "0.8.212", + "resolved": "https://registry.npmjs.org/flexsearch/-/flexsearch-0.8.212.tgz", + "integrity": "sha512-wSyJr1GUWoOOIISRu+X2IXiOcVfg9qqBRyCPRUdLMIGJqPzMo+jMRlvE83t14v1j0dRMEaBbER/adQjp6Du2pw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/ts-thomas" + }, + { + "type": "paypal", + "url": "https://www.paypal.com/donate/?hosted_button_id=GEVR88FC9BWRW" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/flexsearch" + }, + { + "type": "patreon", + "url": "https://patreon.com/user?u=96245532" + }, + { + "type": "liberapay", + "url": "https://liberapay.com/ts-thomas" + } + ], + "license": "Apache-2.0" }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", "dev": true, - "license": "MIT" + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } }, - "node_modules/h3": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.5.tgz", - "integrity": "sha512-xEyq3rSl+dhGX2Lm0+eFQIAzlDN6Fs0EcC4f7BNUmzaRX/PTzeuM+Tr2lHB8FoXggsQIeXLj8EDVgs5ywxyxmg==", + "node_modules/fontace": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/fontace/-/fontace-0.4.1.tgz", + "integrity": "sha512-lDMvbAzSnHmbYMTEld5qdtvNH2/pWpICOqpean9IgC7vUbUJc3k+k5Dokp85CegamqQpFbXf0rAVkbzpyTA8aw==", "license": "MIT", "dependencies": { - "cookie-es": "^1.2.2", - "crossws": "^0.3.5", - "defu": "^6.1.4", - "destr": "^2.0.5", - "iron-webcrypto": "^1.2.1", - "node-mock-http": "^1.0.4", - "radix3": "^1.1.2", - "ufo": "^1.6.3", - "uncrypto": "^0.1.3" + "fontkitten": "^1.0.2" } }, - "node_modules/handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true, - "license": "MIT" + "node_modules/fontkitten": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fontkitten/-/fontkitten-1.0.2.tgz", + "integrity": "sha512-piJxbLnkD9Xcyi7dWJRnqszEURixe7CrF/efBfbffe2DPyabmuIuqraruY8cXTs19QoM8VJzx47BDRVNXETM7Q==", + "license": "MIT", + "dependencies": { + "tiny-inflate": "^1.0.3" + }, + "engines": { + "node": ">=20" + } }, - "node_modules/handlebars": { - "version": "4.7.8", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", - "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", - "dev": true, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", "license": "MIT", "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.2", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" + "is-callable": "^1.2.7" }, - "bin": { - "handlebars": "bin/handlebars" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" }, "engines": { - "node": ">=0.4.7" + "node": ">=14" }, - "optionalDependencies": { - "uglify-js": "^3.1.4" + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/handlebars/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/fork-ts-checker-webpack-plugin": { + "version": "7.2.13", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-7.2.13.tgz", + "integrity": "sha512-fR3WRkOb4bQdWB/y7ssDUlVdrclvwtyCUIHCfivAoYxq9dF7XfrDKbMdZIfwJ7hxIAqkYSGeU7lLJE6xrxIBdg==", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.16.7", + "chalk": "^4.1.2", + "chokidar": "^3.5.3", + "cosmiconfig": "^7.0.1", + "deepmerge": "^4.2.2", + "fs-extra": "^10.0.0", + "memfs": "^3.4.1", + "minimatch": "^3.0.4", + "node-abort-controller": "^3.0.1", + "schema-utils": "^3.1.1", + "semver": "^7.3.5", + "tapable": "^2.2.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">=12.13.0", + "yarn": ">=1.0.0" + }, + "peerDependencies": { + "typescript": ">3.6.0", + "vue-template-compiler": "*", + "webpack": "^5.11.0" + }, + "peerDependenciesMeta": { + "vue-template-compiler": { + "optional": true + } } }, - "node_modules/harmony-reflect": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", - "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==", - "license": "(Apache-2.0 OR MPL-1.1)" - }, - "node_modules/has-bigints": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", - "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "node_modules/fork-ts-checker-webpack-plugin/node_modules/ajv": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.4" + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/fork-ts-checker-webpack-plugin/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, "license": "MIT", - "engines": { - "node": ">=8" + "peerDependencies": { + "ajv": "^6.9.1" } }, - "node_modules/has-property-descriptors": { + "node_modules/fork-ts-checker-webpack-plugin/node_modules/balanced-match": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, "license": "MIT", "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/has-proto": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", - "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "node_modules/fork-ts-checker-webpack-plugin/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, "license": "MIT", "dependencies": { - "dunder-proto": "^1.0.0" + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" }, "engines": { - "node": ">= 0.4" + "node": ">= 8.10.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.4" + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=10" } }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, "license": "MIT", "dependencies": { - "has-symbols": "^1.0.3" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12" } }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "license": "MIT", + "node_modules/fork-ts-checker-webpack-plugin/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", "dependencies": { - "function-bind": "^1.1.2" + "is-glob": "^4.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">= 6" } }, - "node_modules/hast-util-from-html": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.3.tgz", - "integrity": "sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==", - "license": "MIT", + "node_modules/fork-ts-checker-webpack-plugin/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", "dependencies": { - "@types/hast": "^3.0.0", - "devlop": "^1.1.0", - "hast-util-from-parse5": "^8.0.0", - "parse5": "^7.0.0", - "vfile": "^6.0.0", - "vfile-message": "^4.0.0" + "brace-expansion": "^1.1.7" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": "*" } }, - "node_modules/hast-util-from-html/node_modules/entities": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", - "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", - "license": "BSD-2-Clause", + "node_modules/fork-ts-checker-webpack-plugin/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=0.12" + "node": ">=8.6" }, "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/hast-util-from-html/node_modules/parse5": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", - "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "node_modules/fork-ts-checker-webpack-plugin/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, "license": "MIT", "dependencies": { - "entities": "^6.0.0" + "picomatch": "^2.2.1" }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" + "engines": { + "node": ">=8.10.0" } }, - "node_modules/hast-util-from-parse5": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz", - "integrity": "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==", + "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, "license": "MIT", "dependencies": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "devlop": "^1.0.0", - "hastscript": "^9.0.0", - "property-information": "^7.0.0", - "vfile": "^6.0.0", - "vfile-location": "^5.0.0", - "web-namespaces": "^2.0.0" + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://opencollective.com/webpack" } }, - "node_modules/hast-util-is-element": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz", - "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "node_modules/fork-ts-checker-webpack-plugin/node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 6" } }, - "node_modules/hast-util-parse-selector": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", - "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", + "node_modules/form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "dev": true, "license": "MIT", "dependencies": { - "@types/hast": "^3.0.0" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">= 6" } }, - "node_modules/hast-util-raw": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.1.0.tgz", - "integrity": "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==", + "node_modules/form-data-encoder": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", + "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", + "dev": true, "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "@ungap/structured-clone": "^1.0.0", - "hast-util-from-parse5": "^8.0.0", - "hast-util-to-parse5": "^8.0.0", - "html-void-elements": "^3.0.0", - "mdast-util-to-hast": "^13.0.0", - "parse5": "^7.0.0", - "unist-util-position": "^5.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0", - "web-namespaces": "^2.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">= 14.17" } }, - "node_modules/hast-util-raw/node_modules/entities": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", - "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", - "license": "BSD-2-Clause", + "node_modules/form-data/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "node": ">= 0.6" } }, - "node_modules/hast-util-raw/node_modules/parse5": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", - "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "node_modules/form-data/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, "license": "MIT", "dependencies": { - "entities": "^6.0.0" + "mime-db": "1.52.0" }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" + "engines": { + "node": ">= 0.6" } }, - "node_modules/hast-util-to-estree": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.3.tgz", - "integrity": "sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==", + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "devlop": "^1.0.0", - "estree-util-attach-comments": "^3.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "hast-util-whitespace": "^3.0.0", - "mdast-util-mdx-expression": "^2.0.0", - "mdast-util-mdx-jsx": "^3.0.0", - "mdast-util-mdxjs-esm": "^2.0.0", - "property-information": "^7.0.0", - "space-separated-tokens": "^2.0.0", - "style-to-js": "^1.0.0", - "unist-util-position": "^5.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">= 0.6" } }, - "node_modules/hast-util-to-html": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz", - "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==", + "node_modules/fraction.js": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", + "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", + "dev": true, "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "ccount": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-whitespace": "^3.0.0", - "html-void-elements": "^3.0.0", - "mdast-util-to-hast": "^13.0.0", - "property-information": "^7.0.0", - "space-separated-tokens": "^2.0.0", - "stringify-entities": "^4.0.0", - "zwitch": "^2.0.4" + "engines": { + "node": "*" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/rawify" } }, - "node_modules/hast-util-to-jsx-runtime": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz", - "integrity": "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==", + "node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "dev": true, "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "devlop": "^1.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "hast-util-whitespace": "^3.0.0", - "mdast-util-mdx-expression": "^2.0.0", - "mdast-util-mdx-jsx": "^3.0.0", - "mdast-util-mdxjs-esm": "^2.0.0", - "property-information": "^7.0.0", - "space-separated-tokens": "^2.0.0", - "style-to-js": "^1.0.0", - "unist-util-position": "^5.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">= 0.8" } }, - "node_modules/hast-util-to-parse5": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz", - "integrity": "sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==", + "node_modules/from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", + "dev": true, "license": "MIT", "dependencies": { - "@types/hast": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "devlop": "^1.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "web-namespaces": "^2.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-parse5/node_modules/property-information": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", - "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" } }, - "node_modules/hast-util-to-text": { + "node_modules/front-matter": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.2.tgz", - "integrity": "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==", + "resolved": "https://registry.npmjs.org/front-matter/-/front-matter-4.0.2.tgz", + "integrity": "sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg==", + "dev": true, "license": "MIT", "dependencies": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "hast-util-is-element": "^3.0.0", - "unist-util-find-after": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "js-yaml": "^3.13.1" } }, - "node_modules/hast-util-whitespace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", - "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "node_modules/front-matter/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, "license": "MIT", "dependencies": { - "@types/hast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "sprintf-js": "~1.0.2" } }, - "node_modules/hastscript": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz", - "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==", + "node_modules/front-matter/node_modules/js-yaml": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "dev": true, "license": "MIT", "dependencies": { - "@types/hast": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-parse-selector": "^4.0.0", - "property-information": "^7.0.0", - "space-separated-tokens": "^2.0.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", "dev": true, - "license": "MIT", - "bin": { - "he": "bin/he" - } + "license": "MIT" }, - "node_modules/highlight.js": { - "version": "11.11.1", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.11.1.tgz", - "integrity": "sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==", - "license": "BSD-3-Clause", + "node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, "engines": { - "node": ">=12.0.0" + "node": ">=10" } }, - "node_modules/homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "parse-passwd": "^1.0.0" + "minipass": "^7.0.3" }, "engines": { - "node": ">=0.10.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/hono": { - "version": "4.11.7", - "resolved": "https://registry.npmjs.org/hono/-/hono-4.11.7.tgz", - "integrity": "sha512-l7qMiNee7t82bH3SeyUCt9UF15EVmaBvsppY2zQtrbIhl/yzBTny+YUxsVjSjQ6gaqaeVtZmGocom8TzBlA4Yw==", + "node_modules/fs-monkey": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.1.0.tgz", + "integrity": "sha512-QMUezzXWII9EV5aTFXW1UBVUO77wYPpjqIF8/AviUCThNeSYZykpoTixUeaNNBwmCev0AMDWMAni+f8Hxb1IFw==", "dev": true, + "license": "Unlicense" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=16.9.0" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/hook-std": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/hook-std/-/hook-std-4.0.0.tgz", - "integrity": "sha512-IHI4bEVOt3vRUDJ+bFA9VUJlo7SzvFARPNLw75pqSmAOP2HmTWfFJtPvLBrDrlgjEYXY9zs7SFdHPQaJShkSCQ==", + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function-timeout": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/function-timeout/-/function-timeout-1.0.2.tgz", + "integrity": "sha512-939eZS4gJ3htTHAldmyyuzlrD58P03fHG49v2JfFXbV6OhvZKRC9j2yAtdHw/zrp2zXHuv05zMIy40F0ge7spA==", "dev": true, "license": "MIT", "engines": { - "node": ">=20" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/hosted-git-info": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-9.0.2.tgz", - "integrity": "sha512-M422h7o/BR3rmCQ8UHi7cyyMqKltdP9Uo+J2fXK+RSAY+wTcKOIRyhTuKv4qn+DJf3g+PL890AzId5KZpX+CBg==", + "node_modules/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "lru-cache": "^11.1.0" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hosted-git-info/node_modules/lru-cache": { - "version": "11.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.2.tgz", - "integrity": "sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==", + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, - "license": "ISC", - "engines": { - "node": "20 || >=22" + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "dev": true, + "node_modules/generator-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", + "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", "license": "MIT", - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" + "engines": { + "node": ">= 0.4" } }, - "node_modules/html-encoding-sniffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", - "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "node_modules/generic-names": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/generic-names/-/generic-names-4.0.0.tgz", + "integrity": "sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==", "dev": true, "license": "MIT", "dependencies": { - "whatwg-encoding": "^2.0.0" - }, - "engines": { - "node": ">=12" + "loader-utils": "^3.2.0" } }, - "node_modules/html-entities": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.6.0.tgz", - "integrity": "sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/mdevils" - }, - { - "type": "patreon", - "url": "https://patreon.com/mdevils" - } - ], - "license": "MIT" - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "license": "MIT" - }, - "node_modules/html-void-elements": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", - "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/htmlparser2": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.1.0.tgz", - "integrity": "sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==", + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.2.2", - "entities": "^7.0.1" + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/htmlparser2/node_modules/entities": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", - "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", - "dev": true, - "license": "BSD-2-Clause", + "node_modules/get-east-asian-width": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.5.0.tgz", + "integrity": "sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==", + "license": "MIT", "engines": { - "node": ">=0.12" + "node": ">=18" }, "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/http-assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.5.0.tgz", - "integrity": "sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==", - "dev": true, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "license": "MIT", "dependencies": { - "deep-equal": "~1.0.1", - "http-errors": "~1.8.0" + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/http-assert/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=8.0.0" } }, - "node_modules/http-assert/node_modules/http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", - "dev": true, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "license": "MIT", "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.1" + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": ">= 0.6" + "node": ">= 0.4" } }, - "node_modules/http-assert/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/http-cache-semantics": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", - "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", - "license": "BSD-2-Clause" - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "dev": true, - "license": "MIT" - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", "dev": true, "license": "MIT", "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/http-errors/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "node_modules/git-log-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/git-log-parser/-/git-log-parser-1.2.1.tgz", + "integrity": "sha512-PI+sPDvHXNPl5WNOErAK05s3j0lgwUzMN6o8cyQrDaKfT3qd7TmNJKeXX+SknI5I0QhG5fVPAEwSY4tRGDtYoQ==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.8" + "dependencies": { + "argv-formatter": "~1.0.0", + "spawn-error-forwarder": "~1.0.0", + "split2": "~1.0.0", + "stream-combiner2": "~1.1.1", + "through2": "~2.0.0", + "traverse": "0.6.8" } }, - "node_modules/http-parser-js": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz", - "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==", - "dev": true, - "license": "MIT" - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "node_modules/git-log-parser/node_modules/split2": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-1.0.0.tgz", + "integrity": "sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" + "through2": "~2.0.0" } }, - "node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", - "dev": true, - "license": "MIT", + "node_modules/github-slugger": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", + "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==", + "license": "ISC" + }, + "node_modules/glob": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-12.0.0.tgz", + "integrity": "sha512-5Qcll1z7IKgHr5g485ePDdHcNQY0k2dtv/bjYy0iuyGxQw2qSOiiXUXJ+AYQpg3HNoUMHqAruX478Jeev7UULw==", + "license": "BlueOak-1.0.0", "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" + "foreground-child": "^3.3.1", + "jackspeak": "^4.1.1", + "minimatch": "^10.1.1", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" }, "engines": { - "node": ">= 14" + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/http-proxy-middleware": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-3.0.5.tgz", - "integrity": "sha512-GLZZm1X38BPY4lkXA01jhwxvDoOkkXqjgVyUzVxiEK4iuRu03PZoYHhHRwxnfhQMDuaxi3vVri0YgSro/1oWqg==", + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@types/http-proxy": "^1.17.15", - "debug": "^4.3.6", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.3", - "is-plain-object": "^5.0.0", - "micromatch": "^4.0.8" + "is-glob": "^4.0.3" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10.13.0" } }, - "node_modules/http-server": { - "version": "14.1.1", - "resolved": "https://registry.npmjs.org/http-server/-/http-server-14.1.1.tgz", - "integrity": "sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "basic-auth": "^2.0.1", - "chalk": "^4.1.2", - "corser": "^2.0.1", - "he": "^1.2.0", - "html-encoding-sniffer": "^3.0.0", - "http-proxy": "^1.18.1", - "mime": "^1.6.0", - "minimist": "^1.2.6", - "opener": "^1.5.1", - "portfinder": "^1.0.28", - "secure-compare": "3.0.1", - "union": "~0.5.0", - "url-join": "^4.0.1" + "node_modules/glob-to-regex.js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/glob-to-regex.js/-/glob-to-regex.js-1.2.0.tgz", + "integrity": "sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" }, - "bin": { - "http-server": "bin/http-server" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" }, - "engines": { - "node": ">=12" + "peerDependencies": { + "tslib": "2" } }, - "node_modules/http2-wrapper": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", - "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", "dev": true, "license": "MIT", "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.2.0" + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" }, "engines": { - "node": ">=10.19.0" + "node": ">=0.10.0" } }, - "node_modules/https-proxy-agent": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", - "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "node_modules/global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", "dev": true, "license": "MIT", "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" }, "engines": { - "node": ">= 14" + "node": ">=0.10.0" } }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "node_modules/global-prefix/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" + "license": "ISC" + }, + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" } }, - "node_modules/hyperdyperid": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", - "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", + "node_modules/globals": { + "version": "15.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", + "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", + "dev": true, "license": "MIT", "engines": { - "node": ">=10.18" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/iconv-lite": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", - "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/icss-replace-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", - "integrity": "sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg==", - "dev": true, - "license": "ISC" - }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, - "license": "ISC", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/identity-obj-proxy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", - "integrity": "sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==", "license": "MIT", "dependencies": { - "harmony-reflect": "^1.4.6" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "license": "MIT", "engines": { - "node": ">= 4" - } - }, - "node_modules/ignore-walk": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-8.0.0.tgz", - "integrity": "sha512-FCeMZT4NiRQGh+YkeKMtWrOmBgWjHjMJ26WQWrRQyoyzqevdaGSakUaJW5xQYmjLlUVk2qUnCjYVBax9EKKg8A==", - "dev": true, - "license": "ISC", - "dependencies": { - "minimatch": "^10.0.3" + "node": ">= 0.4" }, - "engines": { - "node": "^20.17.0 || >=22.9.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ignore-walk/node_modules/minimatch": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", - "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", + "node_modules/got": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/got/-/got-13.0.0.tgz", + "integrity": "sha512-XfBk1CxOOScDcMr9O1yKkNaQyy865NbYs+F7dr4H0LZMVgCj2Le59k6PqbNHoL5ToeaEQUYh6c6yMfVcc6SJxA==", "dev": true, - "license": "BlueOak-1.0.0", + "license": "MIT", "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" + "@sindresorhus/is": "^5.2.0", + "@szmarczak/http-timer": "^5.0.1", + "cacheable-lookup": "^7.0.0", + "cacheable-request": "^10.2.8", + "decompress-response": "^6.0.0", + "form-data-encoder": "^2.1.2", + "get-stream": "^6.0.1", + "http2-wrapper": "^2.1.10", + "lowercase-keys": "^3.0.0", + "p-cancelable": "^3.0.0", + "responselike": "^3.0.0" }, "engines": { - "node": "20 || >=22" + "node": ">=16" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sindresorhus/got?sponsor=1" } }, - "node_modules/image-size": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", - "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true, + "license": "MIT" + }, + "node_modules/h3": { + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.10.tgz", + "integrity": "sha512-YzJeWSkDZxAhvmp8dexjRK5hxziRO7I9m0N53WhvYL5NiWfkUkzssVzY9jvGu0HBoLFW6+duYmNSn6MaZBCCtg==", "license": "MIT", - "optional": true, - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "cookie-es": "^1.2.2", + "crossws": "^0.3.5", + "defu": "^6.1.4", + "destr": "^2.0.5", + "iron-webcrypto": "^1.2.1", + "node-mock-http": "^1.0.4", + "radix3": "^1.1.2", + "ufo": "^1.6.3", + "uncrypto": "^0.1.3" } }, - "node_modules/immutable": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.4.tgz", - "integrity": "sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==", + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", "dev": true, "license": "MIT" }, - "node_modules/import-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-3.0.0.tgz", - "integrity": "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==", + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", "dev": true, "license": "MIT", "dependencies": { - "import-from": "^3.0.0" + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" }, "engines": { - "node": ">=8" + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" } }, - "node_modules/import-fresh": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "node_modules/handlebars/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/harmony-reflect": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", + "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==", + "dev": true, + "license": "(Apache-2.0 OR MPL-1.1)" + }, + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "dev": true, "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, "engines": { - "node": ">=6" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/import-fresh/node_modules/resolve-from": { + "node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/import-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz", - "integrity": "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==", - "dev": true, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "license": "MIT", "dependencies": { - "resolve-from": "^5.0.0" + "es-define-property": "^1.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/import-from-esm": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/import-from-esm/-/import-from-esm-1.3.4.tgz", - "integrity": "sha512-7EyUlPFC0HOlBDpUFGfYstsU7XHxZJKAAMzCT8wZ0hMW7b+hG51LIKTDcsgtz8Pu6YC0HqRVbX+rVUtsGMUKvg==", + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", "dev": true, "license": "MIT", "dependencies": { - "debug": "^4.3.4", - "import-meta-resolve": "^4.0.0" + "dunder-proto": "^1.0.0" }, "engines": { - "node": ">=16.20" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/import-lazy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", - "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", - "dev": true, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/import-local": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", - "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", - "dev": true, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "license": "MIT", "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" + "has-symbols": "^1.0.3" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-meta-resolve": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz", - "integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, "engines": { - "node": ">=0.8.19" + "node": ">= 0.4" } }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, + "node_modules/hast-util-from-html": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.3.tgz", + "integrity": "sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==", "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "@types/hast": "^3.0.0", + "devlop": "^1.1.0", + "hast-util-from-parse5": "^8.0.0", + "parse5": "^7.0.0", + "vfile": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/index-to-position": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.2.0.tgz", - "integrity": "sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==", - "dev": true, - "license": "MIT", + "node_modules/hast-util-from-html/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "license": "BSD-2-Clause", "engines": { - "node": ">=18" + "node": ">=0.12" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, - "node_modules/ini": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-6.0.0.tgz", - "integrity": "sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/injection-js": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/injection-js/-/injection-js-2.6.1.tgz", - "integrity": "sha512-dbR5bdhi7TWDoCye9cByZqeg/gAfamm8Vu3G1KZOTYkOif8WkuM8CD0oeDPtZYMzT5YH76JAFB7bkmyY9OJi2A==", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.0.0" - } - }, - "node_modules/inline-style-parser": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.7.tgz", - "integrity": "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==", - "license": "MIT" - }, - "node_modules/inspect-with-kind": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/inspect-with-kind/-/inspect-with-kind-1.0.5.tgz", - "integrity": "sha512-MAQUJuIo7Xqk8EVNP+6d3CKq9c80hi4tjIbIAT6lmGW9W6WzlHiu9PS8uSuUYU+Do+j1baiFp3H25XEVxDIG2g==", - "dev": true, - "license": "ISC", - "dependencies": { - "kind-of": "^6.0.2" - } - }, - "node_modules/internal-slot": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", - "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", - "dev": true, + "node_modules/hast-util-from-html/node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", "license": "MIT", "dependencies": { - "es-errors": "^1.3.0", - "hasown": "^2.0.2", - "side-channel": "^1.1.0" + "entities": "^6.0.0" }, - "engines": { - "node": ">= 0.4" + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/into-stream": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-7.0.0.tgz", - "integrity": "sha512-2dYz766i9HprMBasCMvHMuazJ7u4WzhJwo5kb3iPSiW/iRYV6uPari3zHoqZlnuaR7V1bEiNMxikhp37rdBXbw==", - "dev": true, + "node_modules/hast-util-from-parse5": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz", + "integrity": "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==", "license": "MIT", "dependencies": { - "from2": "^2.3.0", - "p-is-promise": "^3.0.0" - }, - "engines": { - "node": ">=12" + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "hastscript": "^9.0.0", + "property-information": "^7.0.0", + "vfile": "^6.0.0", + "vfile-location": "^5.0.0", + "web-namespaces": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ip-address": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz", - "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 12" - } - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/iron-webcrypto": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz", - "integrity": "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/brc-dd" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-alphabetical": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", - "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "node_modules/hast-util-is-element": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz", + "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==", "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-alphanumerical": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", - "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "node_modules/hast-util-parse-selector": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", + "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", "license": "MIT", "dependencies": { - "is-alphabetical": "^2.0.0", - "is-decimal": "^2.0.0" + "@types/hast": "^3.0.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-arguments": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", - "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", + "node_modules/hast-util-raw": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.1.0.tgz", + "integrity": "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==", "license": "MIT", "dependencies": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "@ungap/structured-clone": "^1.0.0", + "hast-util-from-parse5": "^8.0.0", + "hast-util-to-parse5": "^8.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "parse5": "^7.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-array-buffer": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", - "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" - }, + "node_modules/hast-util-raw/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "license": "BSD-2-Clause", "engines": { - "node": ">= 0.4" + "node": ">=0.12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "license": "MIT" - }, - "node_modules/is-async-function": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", - "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", - "dev": true, + "node_modules/hast-util-raw/node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", "license": "MIT", "dependencies": { - "async-function": "^1.0.0", - "call-bound": "^1.0.3", - "get-proto": "^1.0.1", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" + "entities": "^6.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/is-bigint": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", - "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", - "dev": true, + "node_modules/hast-util-to-estree": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.3.tgz", + "integrity": "sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==", "license": "MIT", "dependencies": { - "has-bigints": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" + "@types/estree": "^1.0.0", + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-attach-comments": "^3.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-js": "^1.0.0", + "unist-util-position": "^5.0.0", + "zwitch": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, + "node_modules/hast-util-to-html": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz", + "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==", "license": "MIT", "dependencies": { - "binary-extensions": "^2.0.0" + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-whitespace": "^3.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.0", + "zwitch": "^2.0.4" }, - "engines": { - "node": ">=8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-boolean-object": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", - "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", - "dev": true, + "node_modules/hast-util-to-jsx-runtime": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz", + "integrity": "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==", "license": "MIT", "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-js": "^1.0.0", + "unist-util-position": "^5.0.0", + "vfile-message": "^4.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "node_modules/hast-util-to-parse5": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.1.tgz", + "integrity": "sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==", "license": "MIT", - "engines": { - "node": ">= 0.4" + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "node_modules/hast-util-to-text": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.2.tgz", + "integrity": "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==", "license": "MIT", "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "hast-util-is-element": "^3.0.0", + "unist-util-find-after": "^5.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-data-view": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", - "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", - "dev": true, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", "license": "MIT", "dependencies": { - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" + "@types/hast": "^3.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-date-object": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", - "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", - "dev": true, + "node_modules/hastscript": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz", + "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==", "license": "MIT", "dependencies": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-parse-selector": "^4.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/is-decimal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", - "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "bin": { + "he": "bin/he" } }, - "node_modules/is-docker": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", - "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", - "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, + "node_modules/highlight.js": { + "version": "11.11.1", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.11.1.tgz", + "integrity": "sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==", + "license": "BSD-3-Clause", "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12.0.0" } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "node_modules/homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dev": true, "license": "MIT", + "dependencies": { + "parse-passwd": "^1.0.0" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/is-finalizationregistry": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", - "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "node_modules/hono": { + "version": "4.12.7", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.7.tgz", + "integrity": "sha512-jq9l1DM0zVIvsm3lv9Nw9nlJnMNPOcAtsbsgiUhWcFzPE99Gvo6yRTlszSLLYacMeQ6quHD6hMfId8crVHvexw==", "dev": true, "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=16.9.0" } }, - "node_modules/is-fullwidth-code-point": { + "node_modules/hook-std": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "resolved": "https://registry.npmjs.org/hook-std/-/hook-std-4.0.0.tgz", + "integrity": "sha512-IHI4bEVOt3vRUDJ+bFA9VUJlo7SzvFARPNLw75pqSmAOP2HmTWfFJtPvLBrDrlgjEYXY9zs7SFdHPQaJShkSCQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=12" + "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "license": "MIT", + "node_modules/hosted-git-info": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-9.0.2.tgz", + "integrity": "sha512-M422h7o/BR3rmCQ8UHi7cyyMqKltdP9Uo+J2fXK+RSAY+wTcKOIRyhTuKv4qn+DJf3g+PL890AzId5KZpX+CBg==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^11.1.0" + }, "engines": { - "node": ">=6" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/is-generator-function": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", - "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "11.2.6", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.6.tgz", + "integrity": "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.4", - "generator-function": "^2.0.0", - "get-proto": "^1.0.1", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" } }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "node_modules/html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "dev": true, "license": "MIT", "dependencies": { - "is-extglob": "^2.1.1" + "whatwg-encoding": "^2.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/is-hexadecimal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", - "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } + "node_modules/html-entities": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.6.0.tgz", + "integrity": "sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ], + "license": "MIT" }, - "node_modules/is-inside-container": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", - "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "node_modules/html-escaper": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz", + "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==", + "license": "MIT" + }, + "node_modules/html-void-elements": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", "license": "MIT", - "dependencies": { - "is-docker": "^3.0.0" - }, - "bin": { - "is-inside-container": "cli.js" - }, - "engines": { - "node": ">=14.16" - }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/is-interactive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", - "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "node_modules/htmlparser2": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.1.0.tgz", + "integrity": "sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==", "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "entities": "^7.0.1" } }, - "node_modules/is-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "node_modules/htmlparser2/node_modules/entities": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "engines": { - "node": ">= 0.4" + "node": ">=0.12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "node_modules/http-assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.5.0.tgz", + "integrity": "sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==", "dev": true, - "license": "MIT" - }, - "node_modules/is-nan": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", - "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" + "deep-equal": "~1.0.1", + "http-errors": "~1.8.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.8" } }, - "node_modules/is-negative-zero": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "node_modules/http-assert/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.6" } }, - "node_modules/is-network-error": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.3.0.tgz", - "integrity": "sha512-6oIwpsgRfnDiyEDLMay/GqCl3HoAtH5+RUKW29gYkL0QA+ipzpDLA16yQs7/RHCSu+BwgbJaOUqa4A99qNVQVw==", + "node_modules/http-assert/node_modules/http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", "dev": true, "license": "MIT", - "engines": { - "node": ">=16" + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 0.6" } }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "node_modules/http-assert/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, "license": "MIT", "engines": { - "node": ">=0.12.0" + "node": ">= 0.6" } }, - "node_modules/is-number-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", - "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "license": "BSD-2-Clause" + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true, + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">= 0.8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "node_modules/http-parser-js": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz", + "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==", + "dev": true, + "license": "MIT" + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "dev": true, "license": "MIT", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, "engines": { - "node": ">=8" + "node": ">=8.0.0" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dev": true, "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, "engines": { - "node": ">=8" + "node": ">= 14" } }, - "node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "node_modules/http-proxy-middleware": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-3.0.5.tgz", + "integrity": "sha512-GLZZm1X38BPY4lkXA01jhwxvDoOkkXqjgVyUzVxiEK4iuRu03PZoYHhHRwxnfhQMDuaxi3vVri0YgSro/1oWqg==", "dev": true, "license": "MIT", + "dependencies": { + "@types/http-proxy": "^1.17.15", + "debug": "^4.3.6", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.3", + "is-plain-object": "^5.0.0", + "micromatch": "^4.0.8" + }, "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "node_modules/http-server": { + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/http-server/-/http-server-14.1.1.tgz", + "integrity": "sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A==", "dev": true, "license": "MIT", + "dependencies": { + "basic-auth": "^2.0.1", + "chalk": "^4.1.2", + "corser": "^2.0.1", + "he": "^1.2.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy": "^1.18.1", + "mime": "^1.6.0", + "minimist": "^1.2.6", + "opener": "^1.5.1", + "portfinder": "^1.0.28", + "secure-compare": "3.0.1", + "union": "~0.5.0", + "url-join": "^4.0.1" + }, + "bin": { + "http-server": "bin/http-server" + }, "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-promise": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", - "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-reference": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", - "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "node_modules/http2-wrapper": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", + "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", "dev": true, "license": "MIT", "dependencies": { - "@types/estree": "*" + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.2.0" + }, + "engines": { + "node": ">=10.19.0" } }, - "node_modules/is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" + "agent-base": "^7.1.2", + "debug": "4" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 14" } }, - "node_modules/is-set": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/hyperdyperid": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", + "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", "license": "MIT", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=10.18" } }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", - "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "node_modules/iconv-lite": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.3" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=0.10.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", "dev": true, - "license": "MIT", + "license": "ISC", "engines": { - "node": ">=8" + "node": "^10 || ^12 || >= 14" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/is-string": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", - "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "node_modules/identity-obj-proxy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", + "integrity": "sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" + "harmony-reflect": "^1.4.6" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=4" } }, - "node_modules/is-symbol": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", - "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "has-symbols": "^1.1.0", - "safe-regex-test": "^1.1.0" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 4" } }, - "node_modules/is-text-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-2.0.0.tgz", - "integrity": "sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==", + "node_modules/ignore-walk": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-8.0.0.tgz", + "integrity": "sha512-FCeMZT4NiRQGh+YkeKMtWrOmBgWjHjMJ26WQWrRQyoyzqevdaGSakUaJW5xQYmjLlUVk2qUnCjYVBax9EKKg8A==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "text-extensions": "^2.0.0" + "minimatch": "^10.0.3" }, "engines": { - "node": ">=8" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/is-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", - "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "node_modules/image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", + "dev": true, "license": "MIT", - "dependencies": { - "which-typed-array": "^1.1.16" + "optional": true, + "bin": { + "image-size": "bin/image-size.js" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.10.0" } }, - "node_modules/is-unicode-supported": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", - "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "node_modules/immutable": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.5.tgz", + "integrity": "sha512-t7xcm2siw+hlUM68I+UEOK+z84RzmN59as9DZ7P1l0994DKUWV7UXBMQZVxaoMSRQ+PBZbHCOoBt7a2wxOMt+A==", + "dev": true, + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, "engines": { - "node": ">=18" + "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-weakmap": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=4" } }, - "node_modules/is-weakref": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", - "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "node_modules/import-from-esm": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/import-from-esm/-/import-from-esm-1.3.4.tgz", + "integrity": "sha512-7EyUlPFC0HOlBDpUFGfYstsU7XHxZJKAAMzCT8wZ0hMW7b+hG51LIKTDcsgtz8Pu6YC0HqRVbX+rVUtsGMUKvg==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.3" + "debug": "^4.3.4", + "import-meta-resolve": "^4.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=16.20" } }, - "node_modules/is-weakset": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", - "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "node_modules/import-lazy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", "dev": true, "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/is-what": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", - "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "node_modules/import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", "dev": true, "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-wsl": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", - "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", - "license": "MIT", "dependencies": { - "is-inside-container": "^1.0.0" + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" }, "engines": { - "node": ">=16" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "license": "ISC" - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true, + "node_modules/import-meta-resolve": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz", + "integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==", "license": "MIT", - "engines": { - "node": ">=0.10.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/isomorphic-ws": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz", - "integrity": "sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==", + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, "license": "MIT", - "peerDependencies": { - "ws": "*" + "engines": { + "node": ">=0.8.19" } }, - "node_modules/issue-parser": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/issue-parser/-/issue-parser-7.0.1.tgz", - "integrity": "sha512-3YZcUUR2Wt1WsapF+S/WiA2WmlW0cWAoPccMqne7AxEBhCdFeTPjfv/Axb8V2gyCgY3nRw+ksZ3xSUX+R47iAg==", + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, "license": "MIT", - "dependencies": { - "lodash.capitalize": "^4.2.1", - "lodash.escaperegexp": "^4.1.2", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.uniqby": "^4.7.0" - }, - "engines": { - "node": "^18.17 || >=20.6.1" - } - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", - "license": "BSD-3-Clause", "engines": { "node": ">=8" } }, - "node_modules/istanbul-lib-instrument": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", - "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", - "license": "BSD-3-Clause", - "dependencies": { - "@babel/core": "^7.23.9", - "@babel/parser": "^7.23.9", - "@istanbuljs/schema": "^0.1.3", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" - }, + "node_modules/index-to-position": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.2.0.tgz", + "integrity": "sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", - "license": "BSD-3-Clause", - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-6.0.0.tgz", + "integrity": "sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ==", + "dev": true, + "license": "ISC", "engines": { - "node": ">=10" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "license": "BSD-3-Clause", + "node_modules/injection-js": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/injection-js/-/injection-js-2.6.1.tgz", + "integrity": "sha512-dbR5bdhi7TWDoCye9cByZqeg/gAfamm8Vu3G1KZOTYkOif8WkuM8CD0oeDPtZYMzT5YH76JAFB7bkmyY9OJi2A==", + "dev": true, + "license": "MIT", "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" + "tslib": "^2.0.0" } }, - "node_modules/istanbul-lib-source-maps/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } + "node_modules/inline-style-parser": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.7.tgz", + "integrity": "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==", + "license": "MIT" }, - "node_modules/istanbul-reports": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", - "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", - "license": "BSD-3-Clause", + "node_modules/inspect-with-kind": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/inspect-with-kind/-/inspect-with-kind-1.0.5.tgz", + "integrity": "sha512-MAQUJuIo7Xqk8EVNP+6d3CKq9c80hi4tjIbIAT6lmGW9W6WzlHiu9PS8uSuUYU+Do+j1baiFp3H25XEVxDIG2g==", + "dev": true, + "license": "ISC", "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" + "kind-of": "^6.0.2" } }, - "node_modules/iterator.prototype": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", - "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", "dev": true, "license": "MIT", "dependencies": { - "define-data-property": "^1.1.4", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.6", - "get-proto": "^1.0.0", - "has-symbols": "^1.1.0", - "set-function-name": "^2.0.2" + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" }, "engines": { "node": ">= 0.4" } }, - "node_modules/jackspeak": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", - "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", - "license": "BlueOak-1.0.0", + "node_modules/into-stream": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-7.0.0.tgz", + "integrity": "sha512-2dYz766i9HprMBasCMvHMuazJ7u4WzhJwo5kb3iPSiW/iRYV6uPari3zHoqZlnuaR7V1bEiNMxikhp37rdBXbw==", + "dev": true, + "license": "MIT", "dependencies": { - "@isaacs/cliui": "^8.0.2" + "from2": "^2.3.0", + "p-is-promise": "^3.0.0" }, "engines": { - "node": "20 || >=22" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jake": { - "version": "10.9.4", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.4.tgz", - "integrity": "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==", - "license": "Apache-2.0", - "dependencies": { - "async": "^3.2.6", - "filelist": "^1.0.4", - "picocolors": "^1.1.1" - }, - "bin": { - "jake": "bin/cli.js" - }, + "node_modules/ip-address": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz", + "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">= 12" } }, - "node_modules/java-properties": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/java-properties/-/java-properties-1.0.2.tgz", - "integrity": "sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==", + "node_modules/ipaddr.js": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.3.0.tgz", + "integrity": "sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.6.0" + "node": ">= 10" } }, - "node_modules/jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", - "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", - "dev": true, + "node_modules/iron-webcrypto": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz", + "integrity": "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/brc-dd" + } + }, + "node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", "license": "MIT", "dependencies": { - "@jest/core": "^29.7.0", - "@jest/types": "^29.6.3", - "import-local": "^3.0.2", - "jest-cli": "^29.7.0" + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" }, - "bin": { - "jest": "bin/jest.js" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-arguments": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", + "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + "node": ">= 0.4" }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-changed-files": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", - "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", "dev": true, "license": "MIT", "dependencies": { - "execa": "^5.0.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-circus": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", - "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "dev": true, "license": "MIT", "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^1.0.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.7.0", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0", - "pretty-format": "^29.7.0", - "pure-rand": "^6.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-circus/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "dev": true, "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.2" + }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-circus/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, "license": "MIT", "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "binary-extensions": "^2.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/jest-circus/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "license": "MIT" - }, - "node_modules/jest-cli": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", - "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", "dev": true, "license": "MIT", "dependencies": { - "@jest/core": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "create-jest": "^29.7.0", - "exit": "^0.1.2", - "import-local": "^3.0.2", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "yargs": "^17.3.1" - }, - "bin": { - "jest": "bin/jest.js" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + "node": ">= 0.4" }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-cli/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-cli/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-cli/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "dev": true, "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "hasown": "^2.0.2" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-cli/node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", "dev": true, "license": "MIT", "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" }, "engines": { - "node": ">=12" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-config": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", - "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-jest": "^29.7.0", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "ts-node": ">=9.0.0" + "node": ">= 0.4" }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-config/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", "license": "MIT", - "engines": { - "node": ">=10" - }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/jest-config/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "bin": { + "is-docker": "cli.js" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-config/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "license": "MIT" - }, - "node_modules/jest-diff": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=0.10.0" } }, - "node_modules/jest-diff/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dev": true, "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-diff/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "node_modules/is-fullwidth-code-point": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", + "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", + "dev": true, "license": "MIT", "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "get-east-asian-width": "^1.3.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-diff/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "license": "MIT" + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } }, - "node_modules/jest-docblock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", - "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "node_modules/is-generator-function": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", + "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", "license": "MIT", "dependencies": { - "detect-newline": "^3.0.0" + "call-bound": "^1.0.4", + "generator-function": "^2.0.0", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-each": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", - "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "jest-util": "^29.7.0", - "pretty-format": "^29.7.0" + "is-extglob": "^2.1.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=0.10.0" } }, - "node_modules/jest-each/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", "license": "MIT", - "engines": { - "node": ">=10" - }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/jest-each/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "node_modules/is-in-ssh": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-in-ssh/-/is-in-ssh-1.0.0.tgz", + "integrity": "sha512-jYa6Q9rH90kR1vKB6NM7qqd1mge3Fx4Dhw5TVlK1MUBqhEOuCagrEHMevNuCcbECmXZ0ThXkRm+Ymr51HwEPAw==", + "dev": true, "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-each/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "license": "MIT" - }, - "node_modules/jest-environment-jsdom": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz", - "integrity": "sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==", - "dev": true, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", "license": "MIT", "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/jsdom": "^20.0.0", - "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0", - "jsdom": "^20.0.0" + "is-docker": "^3.0.0" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "bin": { + "is-inside-container": "cli.js" }, - "peerDependencies": { - "canvas": "^2.5.0" + "engines": { + "node": ">=14.16" }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-environment-jsdom/node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "node_modules/is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", "dev": true, "license": "MIT", - "dependencies": { - "debug": "4" - }, "engines": { - "node": ">= 6.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-environment-jsdom/node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, "license": "MIT", - "dependencies": { - "cssom": "~0.3.6" - }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-environment-jsdom/node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", "dev": true, "license": "MIT" }, - "node_modules/jest-environment-jsdom/node_modules/data-urls": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", - "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", - "dev": true, + "node_modules/is-nan": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", + "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", "license": "MIT", "dependencies": { - "abab": "^2.0.6", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^11.0.0" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" }, "engines": { - "node": ">=12" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-environment-jsdom/node_modules/entities": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", - "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "engines": { - "node": ">=0.12" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-environment-jsdom/node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "node_modules/is-network-error": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.3.1.tgz", + "integrity": "sha512-6QCxa49rQbmUWLfk0nuGqzql9U8uaV2H6279bRErPBHe/109hCzsLUBUHfbEtvLIHBd6hyXbgedBSHevm43Edw==", "dev": true, "license": "MIT", - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, "engines": { - "node": ">= 6" + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-environment-jsdom/node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, "license": "MIT", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, "engines": { - "node": ">= 6" + "node": ">=0.12.0" } }, - "node_modules/jest-environment-jsdom/node_modules/jsdom": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", - "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", "dev": true, "license": "MIT", "dependencies": { - "abab": "^2.0.6", - "acorn": "^8.8.1", - "acorn-globals": "^7.0.0", - "cssom": "^0.5.0", - "cssstyle": "^2.3.0", - "data-urls": "^3.0.2", - "decimal.js": "^10.4.2", - "domexception": "^4.0.0", - "escodegen": "^2.0.0", - "form-data": "^4.0.0", - "html-encoding-sniffer": "^3.0.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.1", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.2", - "parse5": "^7.1.1", - "saxes": "^6.0.0", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.1.2", - "w3c-xmlserializer": "^4.0.0", - "webidl-conversions": "^7.0.0", - "whatwg-encoding": "^2.0.0", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^11.0.0", - "ws": "^8.11.0", - "xml-name-validator": "^4.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { - "node": ">=14" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/jest-environment-jsdom/node_modules/parse5": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", - "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", - "dev": true, - "license": "MIT", - "dependencies": { - "entities": "^6.0.0" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-environment-jsdom/node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/jest-environment-jsdom/node_modules/tough-cookie": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", - "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, + "license": "MIT", "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/jest-environment-jsdom/node_modules/tr46": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", - "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true, "license": "MIT", - "dependencies": { - "punycode": "^2.1.1" - }, "engines": { - "node": ">=12" + "node": ">=0.10.0" } }, - "node_modules/jest-environment-jsdom/node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", "dev": true, "license": "MIT", "engines": { - "node": ">= 4.0.0" + "node": ">=0.10.0" } }, - "node_modules/jest-environment-jsdom/node_modules/w3c-xmlserializer": { + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-promise": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", - "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", "dev": true, "license": "MIT", "dependencies": { - "xml-name-validator": "^4.0.0" + "@types/estree": "*" + } + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" }, "engines": { - "node": ">=14" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-environment-jsdom/node_modules/whatwg-mimetype": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", - "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "dev": true, "license": "MIT", "engines": { - "node": ">=12" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-environment-jsdom/node_modules/whatwg-url": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", - "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", "dev": true, "license": "MIT", "dependencies": { - "tr46": "^3.0.0", - "webidl-conversions": "^7.0.0" + "call-bound": "^1.0.3" }, "engines": { - "node": ">=12" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-environment-jsdom/node_modules/xml-name-validator": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", - "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "engines": { - "node": ">=12" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-environment-node": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", - "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "dev": true, "license": "MIT", "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "dev": true, "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-haste-map": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", - "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "node_modules/is-text-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-2.0.0.tgz", + "integrity": "sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==", + "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "micromatch": "^4.0.4", - "walker": "^1.0.8" + "text-extensions": "^2.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" + "node": ">=8" } }, - "node_modules/jest-leak-detector": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", - "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "license": "MIT", "dependencies": { - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" + "which-typed-array": "^1.1.16" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-leak-detector/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "dev": true, "license": "MIT", "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-leak-detector/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-leak-detector/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "license": "MIT" - }, - "node_modules/jest-matcher-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", - "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "dev": true, "license": "MIT", "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" + "call-bound": "^1.0.3" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-matcher-utils/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "dev": true, "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-matcher-utils/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "node_modules/is-what": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-wsl": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", + "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", "license": "MIT", "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "is-inside-container": "^1.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-matcher-utils/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, "license": "MIT" }, - "node_modules/jest-message-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", - "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isomorphic-ws": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz", + "integrity": "sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "ws": "*" + } + }, + "node_modules/issue-parser": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/issue-parser/-/issue-parser-7.0.1.tgz", + "integrity": "sha512-3YZcUUR2Wt1WsapF+S/WiA2WmlW0cWAoPccMqne7AxEBhCdFeTPjfv/Axb8V2gyCgY3nRw+ksZ3xSUX+R47iAg==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" + "lodash.capitalize": "^4.2.1", + "lodash.escaperegexp": "^4.1.2", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.uniqby": "^4.7.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.17 || >=20.6.1" } }, - "node_modules/jest-message-util/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "license": "MIT", + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, "engines": { "node": ">=10" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "engines": { + "node": ">=10" } }, - "node_modules/jest-message-util/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "license": "MIT", + "node_modules/istanbul-lib-source-maps": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", + "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "@jridgewell/trace-mapping": "^0.3.23", + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" } }, - "node_modules/jest-message-util/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "node_modules/istanbul-reports": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", + "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-reports/node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true, "license": "MIT" }, - "node_modules/jest-mock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", - "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "node_modules/iterator.prototype": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", + "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", + "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-util": "^29.7.0" + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "get-proto": "^1.0.0", + "has-symbols": "^1.1.0", + "set-function-name": "^2.0.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 0.4" } }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "license": "MIT", + "node_modules/jackspeak": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.2.3.tgz", + "integrity": "sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^9.0.0" + }, "engines": { - "node": ">=6" + "node": "20 || >=22" }, - "peerDependencies": { - "jest-resolve": "*" + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/jake": { + "version": "10.9.4", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.4.tgz", + "integrity": "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "async": "^3.2.6", + "filelist": "^1.0.4", + "picocolors": "^1.1.1" }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/jest-preset-angular": { - "version": "14.6.2", - "resolved": "https://registry.npmjs.org/jest-preset-angular/-/jest-preset-angular-14.6.2.tgz", - "integrity": "sha512-QWnjfXrnYJX65D+iZXBrdQ0ABHSo6DGvcmL3dGYOdF+V2ZhDlqJwKTmt7nyiOcORPdCL+20P8y+Q1mmnjZTHKQ==", + "node_modules/java-properties": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/java-properties/-/java-properties-1.0.2.tgz", + "integrity": "sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, "license": "MIT", "dependencies": { - "bs-logger": "^0.2.6", - "esbuild-wasm": ">=0.15.13", - "jest-environment-jsdom": "^29.7.0", - "jest-util": "^29.7.0", - "pretty-format": "^29.7.0", - "ts-jest": "^29.3.0" + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" }, - "engines": { - "node": "^14.15.0 || >=16.10.0" + "bin": { + "jest": "bin/jest.js" }, - "optionalDependencies": { - "esbuild": ">=0.15.13" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { - "@angular/compiler-cli": ">=15.0.0 <21.0.0", - "@angular/core": ">=15.0.0 <21.0.0", - "@angular/platform-browser-dynamic": ">=15.0.0 <21.0.0", - "jest": "^29.0.0", - "jsdom": ">=20.0.0", - "typescript": ">=4.8" + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "peerDependenciesMeta": { - "jsdom": { + "node-notifier": { "optional": true } } }, - "node_modules/jest-preset-angular/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", "dev": true, "license": "MIT", + "dependencies": { + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" + }, "engines": { - "node": ">=10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-changed-files/node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.27.8" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-preset-angular/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "node_modules/jest-changed-files/node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dev": true, "license": "MIT", "dependencies": { "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-preset-angular/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "node_modules/jest-changed-files/node_modules/@sinclair/typebox": { + "version": "0.27.10", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.10.tgz", + "integrity": "sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==", "dev": true, "license": "MIT" }, - "node_modules/jest-regex-util": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", - "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "node_modules/jest-changed-files/node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], "license": "MIT", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/jest-resolve": { + "node_modules/jest-changed-files/node_modules/jest-util": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", - "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "license": "MIT", "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", "chalk": "^4.0.0", + "ci-info": "^3.2.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" + "picomatch": "^2.2.3" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-resolve-dependencies": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", - "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "node_modules/jest-changed-files/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "license": "MIT", "dependencies": { - "jest-regex-util": "^29.6.3", - "jest-snapshot": "^29.7.0" + "yocto-queue": "^0.1.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-runner": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", - "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "node_modules/jest-changed-files/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, "license": "MIT", - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/environment": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-leak-detector": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-resolve": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-util": "^29.7.0", - "jest-watcher": "^29.7.0", - "jest-worker": "^29.7.0", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/jest-runner/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", + "node_modules/jest-changed-files/node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jest-runner/node_modules/source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-runtime": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", - "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "node_modules/jest-circus": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-30.2.0.tgz", + "integrity": "sha512-Fh0096NC3ZkFx05EP2OXCxJAREVxj1BcW/i6EWqqymcgYKWjyyDpral3fMxVcHXg6oZM7iULer9wGRFvfpl+Tg==", + "dev": true, "license": "MIT", "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/globals": "^29.7.0", - "@jest/source-map": "^29.6.3", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", + "@jest/environment": "30.2.0", + "@jest/expect": "30.2.0", + "@jest/test-result": "30.2.0", + "@jest/types": "30.2.0", "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", + "chalk": "^4.1.2", + "co": "^4.6.0", + "dedent": "^1.6.0", + "is-generator-fn": "^2.1.0", + "jest-each": "30.2.0", + "jest-matcher-utils": "30.2.0", + "jest-message-util": "30.2.0", + "jest-runtime": "30.2.0", + "jest-snapshot": "30.2.0", + "jest-util": "30.2.0", + "p-limit": "^3.1.0", + "pretty-format": "30.2.0", + "pure-rand": "^7.0.0", "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-snapshot": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", - "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "natural-compare": "^1.4.0", - "pretty-format": "^29.7.0", - "semver": "^7.5.3" + "stack-utils": "^2.0.6" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-snapshot/node_modules/ansi-styles": { + "node_modules/jest-circus/node_modules/ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -31635,5884 +29613,7552 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-snapshot/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "node_modules/jest-circus/node_modules/jest-diff": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.2.0.tgz", + "integrity": "sha512-dQHFo3Pt4/NLlG5z4PxZ/3yZTZ1C7s9hveiOj+GCN+uT109NC2QgsoVZsVOAvbJ3RgKkvyLGXZV9+piDpWbm6A==", + "dev": true, "license": "MIT", "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "@jest/diff-sequences": "30.0.1", + "@jest/get-type": "30.1.0", + "chalk": "^4.1.2", + "pretty-format": "30.2.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-snapshot/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "license": "MIT" - }, - "node_modules/jest-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "node_modules/jest-circus/node_modules/jest-matcher-utils": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.2.0.tgz", + "integrity": "sha512-dQ94Nq4dbzmUWkQ0ANAWS9tBRfqCrn0bV9AMYdOi/MHW726xn7eQmMeRTpX2ViC00bpNaWXq+7o4lIQ3AX13Hg==", + "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" + "@jest/get-type": "30.1.0", + "chalk": "^4.1.2", + "jest-diff": "30.2.0", + "pretty-format": "30.2.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-util/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "node_modules/jest-circus/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, "engines": { - "node": ">=8.6" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-validate": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", - "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "node_modules/jest-circus/node_modules/pretty-format": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.2.0.tgz", + "integrity": "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==", + "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "leven": "^3.1.0", - "pretty-format": "^29.7.0" + "@jest/schemas": "30.0.5", + "ansi-styles": "^5.2.0", + "react-is": "^18.3.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-validate/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/jest-circus/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-circus/node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-validate/node_modules/pretty-format": { + "node_modules/jest-cli": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "dev": true, "license": "MIT", "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/jest-validate/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "license": "MIT" - }, - "node_modules/jest-watcher": { + "node_modules/jest-cli/node_modules/@jest/console": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", - "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "dev": true, "license": "MIT", "dependencies": { - "@jest/test-result": "^29.7.0", "@jest/types": "^29.6.3", "@types/node": "*", - "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "emittery": "^0.13.1", + "jest-message-util": "^29.7.0", "jest-util": "^29.7.0", - "string-length": "^4.0.1" + "slash": "^3.0.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-worker": { + "node_modules/jest-cli/node_modules/@jest/environment": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dev": true, "license": "MIT", "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" + "jest-mock": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "node_modules/jest-cli/node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/jiti": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", - "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", - "dev": true, - "license": "MIT", - "bin": { - "jiti": "lib/jiti-cli.mjs" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jju": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", - "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==", - "dev": true, - "license": "MIT" - }, - "node_modules/jose": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/jose/-/jose-6.1.3.tgz", - "integrity": "sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==", + "node_modules/jest-cli/node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", "dev": true, "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/panva" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", - "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", - "license": "MIT", "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/js-yaml/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jsdom": { - "version": "26.1.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.1.0.tgz", - "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==", + "node_modules/jest-cli/node_modules/@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", "dev": true, "license": "MIT", "dependencies": { - "cssstyle": "^4.2.1", - "data-urls": "^5.0.0", - "decimal.js": "^10.5.0", - "html-encoding-sniffer": "^4.0.0", - "http-proxy-agent": "^7.0.2", - "https-proxy-agent": "^7.0.6", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.16", - "parse5": "^7.2.1", - "rrweb-cssom": "^0.8.0", - "saxes": "^6.0.0", - "symbol-tree": "^3.2.4", - "tough-cookie": "^5.1.1", - "w3c-xmlserializer": "^5.0.0", - "webidl-conversions": "^7.0.0", - "whatwg-encoding": "^3.1.1", - "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^14.1.1", - "ws": "^8.18.0", - "xml-name-validator": "^5.0.0" + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" }, "engines": { - "node": ">=18" - }, - "peerDependencies": { - "canvas": "^3.0.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jsdom/node_modules/entities": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", - "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "node_modules/jest-cli/node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.27.8" }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jsdom/node_modules/html-encoding-sniffer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", - "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", + "node_modules/jest-cli/node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", "dev": true, "license": "MIT", "dependencies": { - "whatwg-encoding": "^3.1.1" + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" }, "engines": { - "node": ">=18" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jsdom/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "node_modules/jest-cli/node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", "dev": true, "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" }, "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jsdom/node_modules/parse5": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", - "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "node_modules/jest-cli/node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", "dev": true, "license": "MIT", "dependencies": { - "entities": "^6.0.0" + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jsdom/node_modules/whatwg-encoding": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", - "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "node_modules/jest-cli/node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", "dev": true, "license": "MIT", "dependencies": { - "iconv-lite": "0.6.3" + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" }, "engines": { - "node": ">=18" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jsesc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "node_modules/jest-cli/node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" }, "engines": { - "node": ">=6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "node_modules/jest-cli/node_modules/@sinclair/typebox": { + "version": "0.27.10", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.10.tgz", + "integrity": "sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==", "dev": true, "license": "MIT" }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "node_modules/jest-cli/node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", "dev": true, - "license": "MIT" + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } }, - "node_modules/json-parse-even-better-errors": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-5.0.0.tgz", - "integrity": "sha512-ZF1nxZ28VhQouRWhUcVlUIN3qwSgPuswK05s/HIaoetAoE/9tngVmCHjSxmSQPav1nd+lPtTL0YZ/2AFdR/iYQ==", + "node_modules/jest-cli/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "license": "MIT", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-typed": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-8.0.2.tgz", - "integrity": "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true, - "license": "ISC" - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonc-eslint-parser": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/jsonc-eslint-parser/-/jsonc-eslint-parser-2.4.1.tgz", - "integrity": "sha512-uuPNLJkKN8NXAlZlQ6kmUF9qO+T6Kyd7oV4+/7yy8Jz6+MZNyhPq8EdLpdfnPVzUC8qSf1b4j1azKaGnFsjmsw==", + "node_modules/jest-cli/node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", "dev": true, "license": "MIT", "dependencies": { - "acorn": "^8.5.0", - "eslint-visitor-keys": "^3.0.0", - "espree": "^9.0.0", - "semver": "^7.3.5" + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ota-meshi" + "peerDependencies": { + "@babel/core": "^7.8.0" } }, - "node_modules/jsonc-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", - "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "node_modules/jest-cli/node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", "dev": true, - "license": "MIT" - }, - "node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", - "license": "MIT", + "license": "BSD-3-Clause", "dependencies": { - "universalify": "^2.0.0" + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "engines": { + "node": ">=8" } }, - "node_modules/jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "dev": true, - "engines": [ - "node >= 0.2.0" - ], - "license": "MIT" - }, - "node_modules/JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "node_modules/jest-cli/node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", "dev": true, - "license": "(MIT OR Apache-2.0)", + "license": "MIT", "dependencies": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - }, - "bin": { - "JSONStream": "bin.js" + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" }, "engines": { - "node": "*" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jsx-ast-utils": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", - "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "node_modules/jest-cli/node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", "dev": true, "license": "MIT", "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "object.assign": "^4.1.4", - "object.values": "^1.1.6" + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" }, "engines": { - "node": ">=4.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/karma-source-map-support": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", - "integrity": "sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==", + "node_modules/jest-cli/node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], "license": "MIT", - "dependencies": { - "source-map-support": "^0.5.5" + "engines": { + "node": ">=8" } }, - "node_modules/keygrip": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz", - "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "node_modules/jest-cli/node_modules/cjs-module-lexer": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", + "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", "dev": true, - "license": "MIT", - "dependencies": { - "tsscmp": "1.0.6" - }, - "engines": { - "node": ">= 0.6" - } + "license": "MIT" }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "node_modules/jest-cli/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } + "license": "MIT" }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "node_modules/jest-cli/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } + "license": "MIT" }, - "node_modules/kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "node_modules/jest-cli/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/klona": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", - "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "node_modules/jest-cli/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, "engines": { - "node": ">= 8" + "node": ">=8" } }, - "node_modules/koa": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/koa/-/koa-3.0.3.tgz", - "integrity": "sha512-MeuwbCoN1daWS32/Ni5qkzmrOtQO2qrnfdxDHjrm6s4b59yG4nexAJ0pTEFyzjLp0pBVO80CZp0vW8Ze30Ebow==", + "node_modules/jest-cli/node_modules/jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", "dev": true, "license": "MIT", "dependencies": { - "accepts": "^1.3.8", - "content-disposition": "~0.5.4", - "content-type": "^1.0.5", - "cookies": "~0.9.1", - "delegates": "^1.0.0", - "destroy": "^1.2.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "fresh": "~0.5.2", - "http-assert": "^1.5.0", - "http-errors": "^2.0.0", - "koa-compose": "^4.1.0", - "mime-types": "^3.0.1", - "on-finished": "^2.4.1", - "parseurl": "^1.3.3", - "statuses": "^2.0.1", - "type-is": "^2.0.1", - "vary": "^1.1.2" + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" }, "engines": { - "node": ">= 18" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/koa-compose": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz", - "integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==", - "dev": true, - "license": "MIT" - }, - "node_modules/koa/node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "node_modules/jest-cli/node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", "dev": true, "license": "MIT", "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" }, "engines": { - "node": ">= 0.6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } } }, - "node_modules/koa/node_modules/accepts/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "node_modules/jest-cli/node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", "dev": true, "license": "MIT", "dependencies": { - "mime-db": "1.52.0" + "detect-newline": "^3.0.0" }, "engines": { - "node": ">= 0.6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/koa/node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "node_modules/jest-cli/node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", "dev": true, "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" + }, "engines": { - "node": ">= 0.6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/koa/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "node_modules/jest-cli/node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", "dev": true, "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, "engines": { - "node": ">= 0.6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/koa/node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "node_modules/jest-cli/node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", "dev": true, "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, "engines": { - "node": ">= 0.6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" } }, - "node_modules/kolorist": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz", - "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/language-subtag-registry": { - "version": "0.3.23", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", - "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/language-tags": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", - "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", + "node_modules/jest-cli/node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", "dev": true, "license": "MIT", "dependencies": { - "language-subtag-registry": "^0.3.20" + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { - "node": ">=0.10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/launch-editor": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.12.0.tgz", - "integrity": "sha512-giOHXoOtifjdHqUamwKq6c49GzBdLjvxrd2D+Q4V6uOHopJv7p9VJxikDsQ/CBXZbEITgUqSVHXLTG3VhPP1Dg==", + "node_modules/jest-cli/node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, "license": "MIT", "dependencies": { - "picocolors": "^1.1.1", - "shell-quote": "^1.8.3" + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/less": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/less/-/less-4.4.0.tgz", - "integrity": "sha512-kdTwsyRuncDfjEs0DlRILWNvxhDG/Zij4YLO4TMJgDLW+8OzpfkdPnRgrsRuY1o+oaxJGWsps5f/RVBgGmmN0w==", + "node_modules/jest-cli/node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "copy-anything": "^2.0.1", - "parse-node-version": "^1.0.1", - "tslib": "^2.3.0" - }, - "bin": { - "lessc": "bin/lessc" + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" }, "engines": { - "node": ">=14" - }, - "optionalDependencies": { - "errno": "^0.1.1", - "graceful-fs": "^4.1.2", - "image-size": "~0.5.0", - "make-dir": "^2.1.0", - "mime": "^1.4.1", - "needle": "^3.1.0", - "source-map": "~0.6.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/less-loader": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-12.3.0.tgz", - "integrity": "sha512-0M6+uYulvYIWs52y0LqN4+QM9TqWAohYSNTo4htE8Z7Cn3G/qQMEmktfHmyJT23k+20kU9zHH2wrfFXkxNLtVw==", + "node_modules/jest-cli/node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", "dev": true, "license": "MIT", "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "less": "^3.5.0 || ^4.0.0", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/less/node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "node_modules/jest-cli/node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" }, "engines": { - "node": ">=6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/less/node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "node_modules/jest-cli/node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", "dev": true, "license": "MIT", - "optional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/less/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "license": "ISC", - "optional": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/less/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "node_modules/jest-cli/node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, "engines": { - "node": ">=6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "node_modules/jest-cli/node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", "dev": true, "license": "MIT", "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" }, "engines": { - "node": ">= 0.8.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/license-webpack-plugin": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz", - "integrity": "sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==", + "node_modules/jest-cli/node_modules/jest-snapshot/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", - "dependencies": { - "webpack-sources": "^3.0.0" + "bin": { + "semver": "bin/semver.js" }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - }, - "webpack-sources": { - "optional": true - } + "engines": { + "node": ">=10" } }, - "node_modules/lilconfig": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", - "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "node_modules/jest-cli/node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, "engines": { - "node": ">=14" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-cli/node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" }, - "funding": { - "url": "https://github.com/sponsors/antonk52" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/lines-and-columns": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", - "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", + "node_modules/jest-cli/node_modules/jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "dev": true, "license": "MIT", + "dependencies": { + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" + }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/listr2": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-9.0.1.tgz", - "integrity": "sha512-SL0JY3DaxylDuo/MecFeiC+7pedM0zia33zl0vcjgwcq1q1FWWF1To9EIauPbl8GbMCU0R2e0uJ8bZunhYKD2g==", + "node_modules/jest-cli/node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, "license": "MIT", "dependencies": { - "cli-truncate": "^4.0.0", - "colorette": "^2.0.20", - "eventemitter3": "^5.0.1", - "log-update": "^6.1.0", - "rfdc": "^1.4.1", - "wrap-ansi": "^9.0.0" + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" }, "engines": { - "node": ">=20.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/listr2/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "node_modules/jest-cli/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/listr2/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "node_modules/jest-cli/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, "license": "MIT", "engines": { - "node": ">=12" + "node": ">=8.6" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/listr2/node_modules/emoji-regex": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", - "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "node_modules/jest-cli/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-cli/node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], "license": "MIT" }, - "node_modules/listr2/node_modules/eventemitter3": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "node_modules/jest-cli/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "dev": true, "license": "MIT" }, - "node_modules/listr2/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "node_modules/jest-cli/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/jest-cli/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/jest-cli/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/listr2/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "node_modules/jest-cli/node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "node_modules/listr2/node_modules/wrap-ansi": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", - "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "node_modules/jest-cli/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^6.2.1", - "string-width": "^7.0.0", - "strip-ansi": "^7.1.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "node": ">=8" } }, - "node_modules/lmdb": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-3.4.2.tgz", - "integrity": "sha512-nwVGUfTBUwJKXd6lRV8pFNfnrCC1+l49ESJRM19t/tFb/97QfJEixe5DYRvug5JO7DSFKoKaVy7oGMt5rVqZvg==", + "node_modules/jest-cli/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, - "hasInstallScript": true, "license": "MIT", - "optional": true, "dependencies": { - "msgpackr": "^1.11.2", - "node-addon-api": "^6.1.0", - "node-gyp-build-optional-packages": "5.2.2", - "ordered-binary": "^1.5.3", - "weak-lru-cache": "^1.2.2" + "has-flag": "^4.0.0" }, - "bin": { - "download-lmdb-prebuilds": "bin/download-prebuilds.js" + "engines": { + "node": ">=10" }, - "optionalDependencies": { - "@lmdb/lmdb-darwin-arm64": "3.4.2", - "@lmdb/lmdb-darwin-x64": "3.4.2", - "@lmdb/lmdb-linux-arm": "3.4.2", - "@lmdb/lmdb-linux-arm64": "3.4.2", - "@lmdb/lmdb-linux-x64": "3.4.2", - "@lmdb/lmdb-win32-arm64": "3.4.2", - "@lmdb/lmdb-win32-x64": "3.4.2" + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", + "node_modules/jest-cli/node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" }, "engines": { - "node": ">=4" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/load-json-file/node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "node_modules/jest-cli/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "license": "MIT", "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" }, "engines": { - "node": ">=4" + "node": ">=12" } }, - "node_modules/load-json-file/node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "node_modules/jest-cli/node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/load-json-file/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "node_modules/jest-config": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-30.2.0.tgz", + "integrity": "sha512-g4WkyzFQVWHtu6uqGmQR4CQxz/CH3yDSlhzXMWzNjDx843gYjReZnMRanjRCq5XZFuQrGDxgUaiYWE8BRfVckA==", "dev": true, "license": "MIT", + "dependencies": { + "@babel/core": "^7.27.4", + "@jest/get-type": "30.1.0", + "@jest/pattern": "30.0.1", + "@jest/test-sequencer": "30.2.0", + "@jest/types": "30.2.0", + "babel-jest": "30.2.0", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "deepmerge": "^4.3.1", + "glob": "^10.3.10", + "graceful-fs": "^4.2.11", + "jest-circus": "30.2.0", + "jest-docblock": "30.2.0", + "jest-environment-node": "30.2.0", + "jest-regex-util": "30.0.1", + "jest-resolve": "30.2.0", + "jest-runner": "30.2.0", + "jest-util": "30.2.0", + "jest-validate": "30.2.0", + "micromatch": "^4.0.8", + "parse-json": "^5.2.0", + "pretty-format": "30.2.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, "engines": { - "node": ">=4" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "esbuild-register": ">=3.4.0", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "esbuild-register": { + "optional": true + }, + "ts-node": { + "optional": true + } } }, - "node_modules/loader-runner": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz", - "integrity": "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==", + "node_modules/jest-config/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "license": "MIT", "engines": { - "node": ">=6.11.5" + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/loader-utils": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.3.1.tgz", - "integrity": "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==", + "node_modules/jest-config/node_modules/pretty-format": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.2.0.tgz", + "integrity": "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==", "dev": true, "license": "MIT", + "dependencies": { + "@jest/schemas": "30.0.5", + "ansi-styles": "^5.2.0", + "react-is": "^18.3.1" + }, "engines": { - "node": ">= 12.13.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/local-pkg": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-1.1.2.tgz", - "integrity": "sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==", + "node_modules/jest-config/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dev": true, "license": "MIT", "dependencies": { - "mlly": "^1.7.4", - "pkg-types": "^2.3.0", - "quansync": "^0.2.11" + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/locate-character": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", - "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==", - "dev": true, - "license": "MIT" - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "node_modules/jest-diff/node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, "license": "MIT", "dependencies": { - "p-locate": "^5.0.0" + "@sinclair/typebox": "^0.27.8" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/lodash": { - "version": "4.17.23", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", - "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash-es": { - "version": "4.17.23", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.23.tgz", - "integrity": "sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.capitalize": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz", - "integrity": "sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.clonedeepwith": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeepwith/-/lodash.clonedeepwith-4.5.0.tgz", - "integrity": "sha512-QRBRSxhbtsX1nc0baxSkkK5WlVTTm/s48DSukcGcWZwIyI8Zz+lB+kFiELJXtzfH4Aj6kMWQ1VWW4U5uUDgZMA==", + "node_modules/jest-diff/node_modules/@sinclair/typebox": { + "version": "0.27.10", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.10.tgz", + "integrity": "sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==", "dev": true, "license": "MIT" }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "license": "MIT" - }, - "node_modules/lodash.escaperegexp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", - "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "node_modules/jest-diff/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "node_modules/jest-diff/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "node_modules/jest-diff/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "dev": true, "license": "MIT" }, - "node_modules/lodash.uniqby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", - "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==", + "node_modules/jest-docblock": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-30.2.0.tgz", + "integrity": "sha512-tR/FFgZKS1CXluOQzZvNH3+0z9jXr3ldGSD8bhyuxvlVUwbeLOGynkunvlTMxchC5urrKndYiwCFC0DLVjpOCA==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "detect-newline": "^3.1.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } }, - "node_modules/log-symbols": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz", - "integrity": "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==", + "node_modules/jest-each": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-30.2.0.tgz", + "integrity": "sha512-lpWlJlM7bCUf1mfmuqTA8+j2lNURW9eNafOy99knBM01i5CQeY5UH1vZjgT9071nDJac1M4XsbyI44oNOdhlDQ==", "dev": true, "license": "MIT", "dependencies": { - "chalk": "^5.3.0", - "is-unicode-supported": "^1.3.0" + "@jest/get-type": "30.1.0", + "@jest/types": "30.2.0", + "chalk": "^4.1.2", + "jest-util": "30.2.0", + "pretty-format": "30.2.0" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", - "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "node_modules/jest-each/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "license": "MIT", "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" + "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/log-symbols/node_modules/is-unicode-supported": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", - "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "node_modules/jest-each/node_modules/pretty-format": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.2.0.tgz", + "integrity": "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==", "dev": true, "license": "MIT", - "engines": { - "node": ">=12" + "dependencies": { + "@jest/schemas": "30.0.5", + "ansi-styles": "^5.2.0", + "react-is": "^18.3.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/log-update": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", - "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", + "node_modules/jest-each/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-environment-jsdom": { + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-30.3.0.tgz", + "integrity": "sha512-RLEOJy6ip1lpw0yqJ8tB3i88FC7VBz7i00Zvl2qF71IdxjS98gC9/0SPWYIBVXHm5hgCYK0PAlSlnHGGy9RoMg==", "dev": true, "license": "MIT", "dependencies": { - "ansi-escapes": "^7.0.0", - "cli-cursor": "^5.0.0", - "slice-ansi": "^7.1.0", - "strip-ansi": "^7.1.0", - "wrap-ansi": "^9.0.0" + "@jest/environment": "30.3.0", + "@jest/environment-jsdom-abstract": "30.3.0", + "jsdom": "^26.1.0" }, "engines": { - "node": ">=18" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "canvas": "^3.0.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } } }, - "node_modules/log-update/node_modules/ansi-escapes": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.2.0.tgz", - "integrity": "sha512-g6LhBsl+GBPRWGWsBtutpzBYuIIdBkLEvad5C/va/74Db018+5TZiyA26cZJAr3Rft5lprVqOIPxf5Vid6tqAw==", + "node_modules/jest-environment-jsdom/node_modules/@jest/environment": { + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.3.0.tgz", + "integrity": "sha512-SlLSF4Be735yQXyh2+mctBOzNDx5s5uLv88/j8Qn1wH679PDcwy67+YdADn8NJnGjzlXtN62asGH/T4vWOkfaw==", "dev": true, "license": "MIT", "dependencies": { - "environment": "^1.0.0" + "@jest/fake-timers": "30.3.0", + "@jest/types": "30.3.0", + "@types/node": "*", + "jest-mock": "30.3.0" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/log-update/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "node_modules/jest-environment-jsdom/node_modules/@jest/fake-timers": { + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.3.0.tgz", + "integrity": "sha512-WUQDs8SOP9URStX1DzhD425CqbN/HxUYCTwVrT8sTVBfMvFqYt/s61EK5T05qnHu0po6RitXIvP9otZxYDzTGQ==", "dev": true, "license": "MIT", - "engines": { - "node": ">=12" + "dependencies": { + "@jest/types": "30.3.0", + "@sinonjs/fake-timers": "^15.0.0", + "@types/node": "*", + "jest-message-util": "30.3.0", + "jest-mock": "30.3.0", + "jest-util": "30.3.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/log-update/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "node_modules/jest-environment-jsdom/node_modules/@jest/types": { + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz", + "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==", "dev": true, "license": "MIT", - "engines": { - "node": ">=12" + "dependencies": { + "@jest/pattern": "30.0.1", + "@jest/schemas": "30.0.5", + "@types/istanbul-lib-coverage": "^2.0.6", + "@types/istanbul-reports": "^3.0.4", + "@types/node": "*", + "@types/yargs": "^17.0.33", + "chalk": "^4.1.2" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/log-update/node_modules/emoji-regex": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", - "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "node_modules/jest-environment-jsdom/node_modules/@sinonjs/fake-timers": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-15.1.1.tgz", + "integrity": "sha512-cO5W33JgAPbOh07tvZjUOJ7oWhtaqGHiZw+11DPbyqh2kHTBc3eF/CjJDeQ4205RLQsX6rxCuYOroFQwl7JDRw==", "dev": true, - "license": "MIT" + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.1" + } }, - "node_modules/log-update/node_modules/is-fullwidth-code-point": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", - "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", + "node_modules/jest-environment-jsdom/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "license": "MIT", - "dependencies": { - "get-east-asian-width": "^1.3.1" - }, "engines": { - "node": ">=18" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/log-update/node_modules/slice-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz", - "integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==", + "node_modules/jest-environment-jsdom/node_modules/jest-message-util": { + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.3.0.tgz", + "integrity": "sha512-Z/j4Bo+4ySJ+JPJN3b2Qbl9hDq3VrXmnjjGEWD/x0BCXeOXPTV1iZYYzl2X8c1MaCOL+ewMyNBcm88sboE6YWw==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^6.2.1", - "is-fullwidth-code-point": "^5.0.0" + "@babel/code-frame": "^7.27.1", + "@jest/types": "30.3.0", + "@types/stack-utils": "^2.0.3", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "picomatch": "^4.0.3", + "pretty-format": "30.3.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.6" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/log-update/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "node_modules/jest-environment-jsdom/node_modules/jest-mock": { + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.3.0.tgz", + "integrity": "sha512-OTzICK8CpE+t4ndhKrwlIdbM6Pn8j00lvmSmq5ejiO+KxukbLjgOflKWMn3KE34EZdQm5RqTuKj+5RIEniYhog==", "dev": true, "license": "MIT", "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" + "@jest/types": "30.3.0", + "@types/node": "*", + "jest-util": "30.3.0" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/log-update/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "node_modules/jest-environment-jsdom/node_modules/jest-util": { + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.3.0.tgz", + "integrity": "sha512-/jZDa00a3Sz7rdyu55NLrQCIrbyIkbBxareejQI315f/i8HjYN+ZWsDLLpoQSiUIEIyZF/R8fDg3BmB8AtHttg==", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "@jest/types": "30.3.0", + "@types/node": "*", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "graceful-fs": "^4.2.11", + "picomatch": "^4.0.3" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/log-update/node_modules/wrap-ansi": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", - "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "node_modules/jest-environment-jsdom/node_modules/pretty-format": { + "version": "30.3.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.3.0.tgz", + "integrity": "sha512-oG4T3wCbfeuvljnyAzhBvpN45E8iOTXCU/TD3zXW80HA3dQ4ahdqMkWGiPWZvjpQwlbyHrPTWUAqUzGzv4l1JQ==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^6.2.1", - "string-width": "^7.0.0", - "strip-ansi": "^7.1.0" + "@jest/schemas": "30.0.5", + "ansi-styles": "^5.2.0", + "react-is": "^18.3.1" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/log4js": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.9.1.tgz", - "integrity": "sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==", + "node_modules/jest-environment-jsdom/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "dev": true, - "license": "Apache-2.0", + "license": "MIT" + }, + "node_modules/jest-environment-node": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-30.2.0.tgz", + "integrity": "sha512-ElU8v92QJ9UrYsKrxDIKCxu6PfNj4Hdcktcn0JX12zqNdqWHB0N+hwOnnBBXvjLd2vApZtuLUGs1QSY+MsXoNA==", + "dev": true, + "license": "MIT", "dependencies": { - "date-format": "^4.0.14", - "debug": "^4.3.4", - "flatted": "^3.2.7", - "rfdc": "^1.3.0", - "streamroller": "^3.1.5" + "@jest/environment": "30.2.0", + "@jest/fake-timers": "30.2.0", + "@jest/types": "30.2.0", + "@types/node": "*", + "jest-mock": "30.2.0", + "jest-util": "30.2.0", + "jest-validate": "30.2.0" }, "engines": { - "node": ">=8.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/long-timeout": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/long-timeout/-/long-timeout-0.1.1.tgz", - "integrity": "sha512-BFRuQUqc7x2NWxfJBCyUrN8iYUYznzL9JROmRz1gZ6KlOIgmoD+njPVbb+VNn2nGMKggMsK79iUNErillsrx7w==", + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true, - "license": "MIT" - }, - "node_modules/longest-streak": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", - "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "node_modules/jest-haste-map": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-30.2.0.tgz", + "integrity": "sha512-sQA/jCb9kNt+neM0anSj6eZhLZUIhQgwDt7cPGjumgLM4rXsfb9kpnlacmvZz3Q5tb80nS+oG/if+NBKrHC+Xw==", "dev": true, "license": "MIT", "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" + "@jest/types": "30.2.0", + "@types/node": "*", + "anymatch": "^3.1.3", + "fb-watchman": "^2.0.2", + "graceful-fs": "^4.2.11", + "jest-regex-util": "30.0.1", + "jest-util": "30.2.0", + "jest-worker": "30.2.0", + "micromatch": "^4.0.8", + "walker": "^1.0.8" }, - "bin": { - "loose-envify": "cli.js" + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.3" } }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "node_modules/jest-leak-detector": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-30.2.0.tgz", + "integrity": "sha512-M6jKAjyzjHG0SrQgwhgZGy9hFazcudwCNovY/9HPIicmNSBuockPSedAP9vlPK6ONFJ1zfyH/M2/YYJxOz5cdQ==", "dev": true, "license": "MIT", "dependencies": { - "tslib": "^2.0.3" + "@jest/get-type": "30.1.0", + "pretty-format": "30.2.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/lowercase-keys": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", - "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", + "node_modules/jest-leak-detector/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "license": "MIT", "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/luxon": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.7.2.tgz", - "integrity": "sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==", + "node_modules/jest-leak-detector/node_modules/pretty-format": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.2.0.tgz", + "integrity": "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==", "dev": true, "license": "MIT", + "dependencies": { + "@jest/schemas": "30.0.5", + "ansi-styles": "^5.2.0", + "react-is": "^18.3.1" + }, "engines": { - "node": ">=12" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/lz-string": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", - "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "node_modules/jest-leak-detector/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "dev": true, - "license": "MIT", - "bin": { - "lz-string": "bin/bin.js" - } + "license": "MIT" }, - "node_modules/magic-string": { - "version": "0.30.17", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", - "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0" - } - }, - "node_modules/magicast": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.1.tgz", - "integrity": "sha512-xrHS24IxaLrvuo613F719wvOIv9xPHFWQHuvGUBmPnCA/3MQxKI3b+r7n1jAoDHmsbC5bRhTZYR77invLAxVnw==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.28.5", - "@babel/types": "^7.28.5", - "source-map-js": "^1.2.1" + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/make-asynchronous": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/make-asynchronous/-/make-asynchronous-1.0.1.tgz", - "integrity": "sha512-T9BPOmEOhp6SmV25SwLVcHK4E6JyG/coH3C6F1NjNXSziv/fd4GmsqMk8YR6qpPOswfaOCApSNkZv6fxoaYFcQ==", + "node_modules/jest-matcher-utils/node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, "license": "MIT", "dependencies": { - "p-event": "^6.0.0", - "type-fest": "^4.6.0", - "web-worker": "1.2.0" + "@sinclair/typebox": "^0.27.8" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/make-asynchronous/node_modules/type-fest": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", - "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "node_modules/jest-matcher-utils/node_modules/@sinclair/typebox": { + "version": "0.27.10", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.10.tgz", + "integrity": "sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "MIT" + }, + "node_modules/jest-matcher-utils/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=16" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "node_modules/jest-matcher-utils/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, "license": "MIT", "dependencies": { - "semver": "^7.5.3" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "license": "ISC" + "node_modules/jest-matcher-utils/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" }, - "node_modules/make-fetch-happen": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-15.0.3.tgz", - "integrity": "sha512-iyyEpDty1mwW3dGlYXAJqC/azFn5PPvgKVwXayOGBSmKLxhKZ9fg4qIan2ePpp1vJIwfFiO34LAPZgq9SZW9Aw==", + "node_modules/jest-message-util": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.2.0.tgz", + "integrity": "sha512-y4DKFLZ2y6DxTWD4cDe07RglV88ZiNEdlRfGtqahfbIjfsw1nMCPx49Uev4IA/hWn3sDKyAnSPwoYSsAEdcimw==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "@npmcli/agent": "^4.0.0", - "cacache": "^20.0.1", - "http-cache-semantics": "^4.1.1", - "minipass": "^7.0.2", - "minipass-fetch": "^5.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^1.0.0", - "proc-log": "^6.0.0", - "promise-retry": "^2.0.1", - "ssri": "^13.0.0" + "@babel/code-frame": "^7.27.1", + "@jest/types": "30.2.0", + "@types/stack-utils": "^2.0.3", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "micromatch": "^4.0.8", + "pretty-format": "30.2.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.6" }, "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "license": "BSD-3-Clause", - "dependencies": { - "tmpl": "1.0.5" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/markdown-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz", - "integrity": "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==", + "node_modules/jest-message-util/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, "license": "MIT", "engines": { - "node": ">=16" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/markdown-table": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", - "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", + "node_modules/jest-message-util/node_modules/pretty-format": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.2.0.tgz", + "integrity": "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==", + "dev": true, "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "dependencies": { + "@jest/schemas": "30.0.5", + "ansi-styles": "^5.2.0", + "react-is": "^18.3.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/marked": { - "version": "15.0.12", - "resolved": "https://registry.npmjs.org/marked/-/marked-15.0.12.tgz", - "integrity": "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==", + "node_modules/jest-message-util/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-mock": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.2.0.tgz", + "integrity": "sha512-JNNNl2rj4b5ICpmAcq+WbLH83XswjPbjH4T7yvGzfAGCPh1rw+xVNbtk+FnRslvt9lkCcdn9i1oAoKUuFsOxRw==", "dev": true, "license": "MIT", - "bin": { - "marked": "bin/marked.js" + "dependencies": { + "@jest/types": "30.2.0", + "@types/node": "*", + "jest-util": "30.2.0" }, "engines": { - "node": ">= 18" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/marked-terminal": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-7.3.0.tgz", - "integrity": "sha512-t4rBvPsHc57uE/2nJOLmMbZCQ4tgAccAED3ngXQqW6g+TxA488JzJ+FK3lQkzBQOI1mRV/r/Kq+1ZlJ4D0owQw==", + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", "dev": true, "license": "MIT", - "dependencies": { - "ansi-escapes": "^7.0.0", - "ansi-regex": "^6.1.0", - "chalk": "^5.4.1", - "cli-highlight": "^2.1.11", - "cli-table3": "^0.6.5", - "node-emoji": "^2.2.0", - "supports-hyperlinks": "^3.1.0" - }, "engines": { - "node": ">=16.0.0" + "node": ">=6" }, "peerDependencies": { - "marked": ">=1 <16" + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } } }, - "node_modules/marked-terminal/node_modules/ansi-escapes": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.2.0.tgz", - "integrity": "sha512-g6LhBsl+GBPRWGWsBtutpzBYuIIdBkLEvad5C/va/74Db018+5TZiyA26cZJAr3Rft5lprVqOIPxf5Vid6tqAw==", + "node_modules/jest-preset-angular": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/jest-preset-angular/-/jest-preset-angular-16.1.1.tgz", + "integrity": "sha512-yrvV/86IO2mj3H33xWVEPwmLW9CJIOM7YcMBcwDWa9OXEAW9XM+47no8R06oine9+wH+QWXfFzFR3TG6nX7QRA==", "dev": true, "license": "MIT", "dependencies": { - "environment": "^1.0.0" + "@jest/environment-jsdom-abstract": "^30.0.0", + "bs-logger": "^0.2.6", + "esbuild-wasm": ">=0.23.0", + "jest-util": "^30.0.0", + "pretty-format": "^30.0.0", + "ts-jest": "^29.4.0" }, "engines": { - "node": ">=18" + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "optionalDependencies": { + "esbuild": ">=0.23.0" + }, + "peerDependencies": { + "@angular/compiler-cli": ">=19.0.0 <22.0.0", + "@angular/core": ">=19.0.0 <22.0.0", + "@angular/platform-browser": ">=19.0.0 <22.0.0", + "@angular/platform-browser-dynamic": ">=19.0.0 <22.0.0", + "jest": "^30.0.0", + "jsdom": ">=26.0.0", + "typescript": ">=5.5" } }, - "node_modules/marked-terminal/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "node_modules/jest-preset-angular/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "license": "MIT", "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/marked-terminal/node_modules/chalk": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", - "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "node_modules/jest-preset-angular/node_modules/pretty-format": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.2.0.tgz", + "integrity": "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==", "dev": true, "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" + "dependencies": { + "@jest/schemas": "30.0.5", + "ansi-styles": "^5.2.0", + "react-is": "^18.3.1" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "node_modules/jest-preset-angular/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-regex-util": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-30.0.1.tgz", + "integrity": "sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==", + "dev": true, "license": "MIT", "engines": { - "node": ">= 0.4" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/mdast-util-definitions": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-6.0.0.tgz", - "integrity": "sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==", + "node_modules/jest-resolve": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-30.2.0.tgz", + "integrity": "sha512-TCrHSxPlx3tBY3hWNtRQKbtgLhsXa1WmbJEqBlTBrGafd5fiQFByy2GNCEoGR+Tns8d15GaL9cxEzKOO3GEb2A==", + "dev": true, "license": "MIT", "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "unist-util-visit": "^5.0.0" + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.2.0", + "jest-pnp-resolver": "^1.2.3", + "jest-util": "30.2.0", + "jest-validate": "30.2.0", + "slash": "^3.0.0", + "unrs-resolver": "^1.7.11" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/mdast-util-find-and-replace": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", - "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", + "node_modules/jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "dev": true, "license": "MIT", "dependencies": { - "@types/mdast": "^4.0.0", - "escape-string-regexp": "^5.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "node_modules/jest-resolve-dependencies/node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, "license": "MIT", - "engines": { - "node": ">=12" + "dependencies": { + "@sinclair/typebox": "^0.27.8" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/mdast-util-from-markdown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", - "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", + "node_modules/jest-resolve-dependencies/node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, "license": "MIT", "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "mdast-util-to-string": "^4.0.0", - "micromark": "^4.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-decode-string": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unist-util-stringify-position": "^4.0.0" + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/mdast-util-gfm": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", - "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", + "node_modules/jest-resolve-dependencies/node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, "license": "MIT", "dependencies": { - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-gfm-autolink-literal": "^2.0.0", - "mdast-util-gfm-footnote": "^2.0.0", - "mdast-util-gfm-strikethrough": "^2.0.0", - "mdast-util-gfm-table": "^2.0.0", - "mdast-util-gfm-task-list-item": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/mdast-util-gfm-autolink-literal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", - "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", + "node_modules/jest-resolve-dependencies/node_modules/@sinclair/typebox": { + "version": "0.27.10", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.10.tgz", + "integrity": "sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-resolve-dependencies/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "ccount": "^2.0.0", - "devlop": "^1.0.0", - "mdast-util-find-and-replace": "^3.0.0", - "micromark-util-character": "^2.0.0" + "engines": { + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/mdast-util-gfm-footnote": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", - "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", - "license": "MIT", + "node_modules/jest-resolve-dependencies/node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.1.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0" + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=8" } }, - "node_modules/mdast-util-gfm-strikethrough": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", - "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", + "node_modules/jest-resolve-dependencies/node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=8" } }, - "node_modules/mdast-util-gfm-table": { + "node_modules/jest-resolve-dependencies/node_modules/convert-source-map": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", - "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", - "license": "MIT", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-resolve-dependencies/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "markdown-table": "^3.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=8" } }, - "node_modules/mdast-util-gfm-task-list-item": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", - "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", + "node_modules/jest-resolve-dependencies/node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/jest-resolve-dependencies/node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, "license": "MIT", "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" } }, - "node_modules/mdast-util-mdx": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz", - "integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==", + "node_modules/jest-resolve-dependencies/node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dev": true, "license": "MIT", "dependencies": { - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-mdx-expression": "^2.0.0", - "mdast-util-mdx-jsx": "^3.0.0", - "mdast-util-mdxjs-esm": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/mdast-util-mdx-expression": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", - "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==", + "node_modules/jest-resolve-dependencies/node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, "license": "MIT", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/mdast-util-mdx-jsx": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz", - "integrity": "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==", + "node_modules/jest-resolve-dependencies/node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "dev": true, "license": "MIT", "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "ccount": "^2.0.0", - "devlop": "^1.1.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "parse-entities": "^4.0.0", - "stringify-entities": "^4.0.0", - "unist-util-stringify-position": "^4.0.0", - "vfile-message": "^4.0.0" + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/mdast-util-mdxjs-esm": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", - "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", + "node_modules/jest-resolve-dependencies/node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "license": "MIT", "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/mdast-util-phrasing": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", - "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "node_modules/jest-resolve-dependencies/node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, "license": "MIT", "dependencies": { - "@types/mdast": "^4.0.0", - "unist-util-is": "^6.0.0" + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/mdast-util-to-hast": { - "version": "13.2.1", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", - "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", + "node_modules/jest-resolve-dependencies/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "@ungap/structured-clone": "^1.0.0", - "devlop": "^1.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "trim-lines": "^3.0.0", - "unist-util-position": "^5.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0" + "engines": { + "node": ">=8.6" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/mdast-util-to-markdown": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", - "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", + "node_modules/jest-resolve-dependencies/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, "license": "MIT", "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "longest-streak": "^3.0.0", - "mdast-util-phrasing": "^4.0.0", - "mdast-util-to-string": "^4.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-decode-string": "^2.0.0", - "unist-util-visit": "^5.0.0", - "zwitch": "^2.0.0" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/mdast-util-to-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", - "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } + "node_modules/jest-resolve-dependencies/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" }, - "node_modules/mdn-data": { - "version": "2.0.30", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "node_modules/jest-resolve-dependencies/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true, - "license": "CC0-1.0" + "license": "ISC" }, - "node_modules/media-typer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", - "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "node_modules/jest-resolve-dependencies/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": ">= 0.8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/memfs": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "node_modules/jest-resolve-dependencies/node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, - "license": "Unlicense", + "license": "ISC", "dependencies": { - "fs-monkey": "^1.0.4" + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" }, "engines": { - "node": ">= 4.0.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/meow": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", - "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", + "node_modules/jest-runner": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-30.2.0.tgz", + "integrity": "sha512-PqvZ2B2XEyPEbclp+gV6KO/F1FIFSbIwewRgmROCMBo/aZ6J1w8Qypoj2pEOcg3G2HzLlaP6VUtvwCI8dM3oqQ==", "dev": true, "license": "MIT", - "engines": { - "node": ">=16.10" + "dependencies": { + "@jest/console": "30.2.0", + "@jest/environment": "30.2.0", + "@jest/test-result": "30.2.0", + "@jest/transform": "30.2.0", + "@jest/types": "30.2.0", + "@types/node": "*", + "chalk": "^4.1.2", + "emittery": "^0.13.1", + "exit-x": "^0.2.2", + "graceful-fs": "^4.2.11", + "jest-docblock": "30.2.0", + "jest-environment-node": "30.2.0", + "jest-haste-map": "30.2.0", + "jest-leak-detector": "30.2.0", + "jest-message-util": "30.2.0", + "jest-resolve": "30.2.0", + "jest-runtime": "30.2.0", + "jest-util": "30.2.0", + "jest-watcher": "30.2.0", + "jest-worker": "30.2.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/merge-descriptors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", - "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "node_modules/jest-runner/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, "engines": { - "node": ">=18" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "license": "MIT", + "node_modules/jest-runner/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", "engines": { - "node": ">= 8" + "node": ">=0.10.0" } }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "node_modules/jest-runner/node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.6" + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "node_modules/micromark": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", - "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/jest-runner/node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, "license": "MIT", - "dependencies": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-combine-extensions": "^2.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-subtokenize": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/micromark-core-commonmark": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", - "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/jest-runtime": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-30.2.0.tgz", + "integrity": "sha512-p1+GVX/PJqTucvsmERPMgCPvQJpFt4hFbM+VN3n8TMo47decMUcJbt+rgzwrEme0MQUA/R+1de2axftTHkKckg==", + "dev": true, "license": "MIT", "dependencies": { - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "micromark-factory-destination": "^2.0.0", - "micromark-factory-label": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-factory-title": "^2.0.0", - "micromark-factory-whitespace": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-html-tag-name": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-subtokenize": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" + "@jest/environment": "30.2.0", + "@jest/fake-timers": "30.2.0", + "@jest/globals": "30.2.0", + "@jest/source-map": "30.0.1", + "@jest/test-result": "30.2.0", + "@jest/transform": "30.2.0", + "@jest/types": "30.2.0", + "@types/node": "*", + "chalk": "^4.1.2", + "cjs-module-lexer": "^2.1.0", + "collect-v8-coverage": "^1.0.2", + "glob": "^10.3.10", + "graceful-fs": "^4.2.11", + "jest-haste-map": "30.2.0", + "jest-message-util": "30.2.0", + "jest-mock": "30.2.0", + "jest-regex-util": "30.0.1", + "jest-resolve": "30.2.0", + "jest-snapshot": "30.2.0", + "jest-util": "30.2.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/micromark-extension-gfm": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", - "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", + "node_modules/jest-snapshot": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-30.2.0.tgz", + "integrity": "sha512-5WEtTy2jXPFypadKNpbNkZ72puZCa6UjSr/7djeecHWOu7iYhSXSnHScT8wBz3Rn8Ena5d5RYRcsyKIeqG1IyA==", + "dev": true, "license": "MIT", "dependencies": { - "micromark-extension-gfm-autolink-literal": "^2.0.0", - "micromark-extension-gfm-footnote": "^2.0.0", - "micromark-extension-gfm-strikethrough": "^2.0.0", - "micromark-extension-gfm-table": "^2.0.0", - "micromark-extension-gfm-tagfilter": "^2.0.0", - "micromark-extension-gfm-task-list-item": "^2.0.0", - "micromark-util-combine-extensions": "^2.0.0", - "micromark-util-types": "^2.0.0" + "@babel/core": "^7.27.4", + "@babel/generator": "^7.27.5", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/plugin-syntax-typescript": "^7.27.1", + "@babel/types": "^7.27.3", + "@jest/expect-utils": "30.2.0", + "@jest/get-type": "30.1.0", + "@jest/snapshot-utils": "30.2.0", + "@jest/transform": "30.2.0", + "@jest/types": "30.2.0", + "babel-preset-current-node-syntax": "^1.2.0", + "chalk": "^4.1.2", + "expect": "30.2.0", + "graceful-fs": "^4.2.11", + "jest-diff": "30.2.0", + "jest-matcher-utils": "30.2.0", + "jest-message-util": "30.2.0", + "jest-util": "30.2.0", + "pretty-format": "30.2.0", + "semver": "^7.7.2", + "synckit": "^0.11.8" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/micromark-extension-gfm-autolink-literal": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", - "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", + "node_modules/jest-snapshot/node_modules/@jest/expect-utils": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.2.0.tgz", + "integrity": "sha512-1JnRfhqpD8HGpOmQp180Fo9Zt69zNtC+9lR+kT7NVL05tNXIi+QC8Csz7lfidMoVLPD3FnOtcmp0CEFnxExGEA==", + "dev": true, "license": "MIT", "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" + "@jest/get-type": "30.1.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/micromark-extension-gfm-footnote": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", - "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", + "node_modules/jest-snapshot/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" + "engines": { + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/micromark-extension-gfm-strikethrough": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", - "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", + "node_modules/jest-snapshot/node_modules/expect": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-30.2.0.tgz", + "integrity": "sha512-u/feCi0GPsI+988gU2FLcsHyAHTU0MX1Wg68NhAnN7z/+C5wqG+CY8J53N9ioe8RXgaoz0nBR/TYMf3AycUuPw==", + "dev": true, "license": "MIT", "dependencies": { - "devlop": "^1.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" + "@jest/expect-utils": "30.2.0", + "@jest/get-type": "30.1.0", + "jest-matcher-utils": "30.2.0", + "jest-message-util": "30.2.0", + "jest-mock": "30.2.0", + "jest-util": "30.2.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/micromark-extension-gfm-table": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", - "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", + "node_modules/jest-snapshot/node_modules/jest-diff": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.2.0.tgz", + "integrity": "sha512-dQHFo3Pt4/NLlG5z4PxZ/3yZTZ1C7s9hveiOj+GCN+uT109NC2QgsoVZsVOAvbJ3RgKkvyLGXZV9+piDpWbm6A==", + "dev": true, "license": "MIT", "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" + "@jest/diff-sequences": "30.0.1", + "@jest/get-type": "30.1.0", + "chalk": "^4.1.2", + "pretty-format": "30.2.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/micromark-extension-gfm-tagfilter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", - "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", + "node_modules/jest-snapshot/node_modules/jest-matcher-utils": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.2.0.tgz", + "integrity": "sha512-dQ94Nq4dbzmUWkQ0ANAWS9tBRfqCrn0bV9AMYdOi/MHW726xn7eQmMeRTpX2ViC00bpNaWXq+7o4lIQ3AX13Hg==", + "dev": true, "license": "MIT", "dependencies": { - "micromark-util-types": "^2.0.0" + "@jest/get-type": "30.1.0", + "chalk": "^4.1.2", + "jest-diff": "30.2.0", + "pretty-format": "30.2.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/micromark-extension-gfm-task-list-item": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", - "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", + "node_modules/jest-snapshot/node_modules/pretty-format": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.2.0.tgz", + "integrity": "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==", + "dev": true, "license": "MIT", "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" + "@jest/schemas": "30.0.5", + "ansi-styles": "^5.2.0", + "react-is": "^18.3.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/micromark-extension-mdx-expression": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.1.tgz", - "integrity": "sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/jest-snapshot/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-util": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.2.0.tgz", + "integrity": "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA==", + "dev": true, "license": "MIT", "dependencies": { - "@types/estree": "^1.0.0", - "devlop": "^1.0.0", - "micromark-factory-mdx-expression": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-events-to-acorn": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" + "@jest/types": "30.2.0", + "@types/node": "*", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "graceful-fs": "^4.2.11", + "picomatch": "^4.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/micromark-extension-mdx-jsx": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.2.tgz", - "integrity": "sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==", + "node_modules/jest-validate": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-30.2.0.tgz", + "integrity": "sha512-FBGWi7dP2hpdi8nBoWxSsLvBFewKAg0+uSQwBaof4Y4DPgBabXgpSYC5/lR7VmnIlSpASmCi/ntRWPbv7089Pw==", + "dev": true, "license": "MIT", "dependencies": { - "@types/estree": "^1.0.0", - "devlop": "^1.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "micromark-factory-mdx-expression": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-events-to-acorn": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "vfile-message": "^4.0.0" + "@jest/get-type": "30.1.0", + "@jest/types": "30.2.0", + "camelcase": "^6.3.0", + "chalk": "^4.1.2", + "leven": "^3.1.0", + "pretty-format": "30.2.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/micromark-extension-mdx-md": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz", - "integrity": "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==", + "node_modules/jest-validate/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, "license": "MIT", - "dependencies": { - "micromark-util-types": "^2.0.0" + "engines": { + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/micromark-extension-mdxjs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz", - "integrity": "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==", + "node_modules/jest-validate/node_modules/pretty-format": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.2.0.tgz", + "integrity": "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==", + "dev": true, "license": "MIT", "dependencies": { - "acorn": "^8.0.0", - "acorn-jsx": "^5.0.0", - "micromark-extension-mdx-expression": "^3.0.0", - "micromark-extension-mdx-jsx": "^3.0.0", - "micromark-extension-mdx-md": "^2.0.0", - "micromark-extension-mdxjs-esm": "^3.0.0", - "micromark-util-combine-extensions": "^2.0.0", - "micromark-util-types": "^2.0.0" + "@jest/schemas": "30.0.5", + "ansi-styles": "^5.2.0", + "react-is": "^18.3.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/micromark-extension-mdxjs-esm": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz", - "integrity": "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==", + "node_modules/jest-validate/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-watcher": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-30.2.0.tgz", + "integrity": "sha512-PYxa28dxJ9g777pGm/7PrbnMeA0Jr7osHP9bS7eJy9DuAjMgdGtxgf0uKMyoIsTWAkIbUW5hSDdJ3urmgXBqxg==", + "dev": true, "license": "MIT", "dependencies": { - "@types/estree": "^1.0.0", - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-events-to-acorn": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unist-util-position-from-estree": "^2.0.0", - "vfile-message": "^4.0.0" + "@jest/test-result": "30.2.0", + "@jest/types": "30.2.0", + "@types/node": "*", + "ansi-escapes": "^4.3.2", + "chalk": "^4.1.2", + "emittery": "^0.13.1", + "jest-util": "30.2.0", + "string-length": "^4.0.2" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/micromark-factory-destination": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", - "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/jest-worker": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-30.2.0.tgz", + "integrity": "sha512-0Q4Uk8WF7BUwqXHuAjc23vmopWJw5WH7w2tqBoUOZpOjW/ZnR44GXXd1r82RvnmI2GZge3ivrYXk/BE2+VtW2g==", + "dev": true, "license": "MIT", "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" + "@types/node": "*", + "@ungap/structured-clone": "^1.3.0", + "jest-util": "30.2.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.1.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/micromark-factory-label": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", - "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "license": "MIT", "dependencies": { - "devlop": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/micromark-factory-mdx-expression": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.3.tgz", - "integrity": "sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/jest/node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, "license": "MIT", "dependencies": { - "@types/estree": "^1.0.0", - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-events-to-acorn": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unist-util-position-from-estree": "^2.0.0", - "vfile-message": "^4.0.0" + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/micromark-factory-space": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/jest/node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, "license": "MIT", "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/micromark-factory-title": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", - "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/jest/node_modules/@sinclair/typebox": { + "version": "0.27.10", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.10.tgz", + "integrity": "sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==", + "dev": true, + "license": "MIT" + }, + "node_modules/jiti": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "dev": true, "license": "MIT", - "dependencies": { - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" + "bin": { + "jiti": "lib/jiti-cli.mjs" } }, - "node_modules/micromark-factory-whitespace": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", - "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/jju": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", + "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==", + "dev": true, + "license": "MIT" + }, + "node_modules/jose": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/jose/-/jose-6.1.3.tgz", + "integrity": "sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==", + "dev": true, "license": "MIT", - "dependencies": { - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" + "funding": { + "url": "https://github.com/sponsors/panva" } }, - "node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "license": "MIT", "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/micromark-util-chunked": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", - "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/jsdom": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.1.0.tgz", + "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==", + "dev": true, "license": "MIT", "dependencies": { - "micromark-util-symbol": "^2.0.0" + "cssstyle": "^4.2.1", + "data-urls": "^5.0.0", + "decimal.js": "^10.5.0", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.6", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.16", + "parse5": "^7.2.1", + "rrweb-cssom": "^0.8.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^5.1.1", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.1.1", + "ws": "^8.18.0", + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "canvas": "^3.0.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } } }, - "node_modules/micromark-util-classify-character": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", - "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" + "node_modules/jsdom/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/micromark-util-combine-extensions": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", - "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/jsdom/node_modules/html-encoding-sniffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", + "dev": true, "license": "MIT", "dependencies": { - "micromark-util-chunked": "^2.0.0", - "micromark-util-types": "^2.0.0" + "whatwg-encoding": "^3.1.1" + }, + "engines": { + "node": ">=18" } }, - "node_modules/micromark-util-decode-numeric-character-reference": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", - "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/jsdom/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, "license": "MIT", "dependencies": { - "micromark-util-symbol": "^2.0.0" + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/micromark-util-decode-string": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", - "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/jsdom/node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "dev": true, "license": "MIT", "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-symbol": "^2.0.0" + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/micromark-util-encode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", - "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-events-to-acorn": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.3.tgz", - "integrity": "sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/jsdom/node_modules/whatwg-encoding": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "deprecated": "Use @exodus/bytes instead for a more spec-conformant and faster implementation", + "dev": true, "license": "MIT", "dependencies": { - "@types/estree": "^1.0.0", - "@types/unist": "^3.0.0", - "devlop": "^1.0.0", - "estree-util-visit": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "vfile-message": "^4.0.0" + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=18" } }, - "node_modules/micromark-util-html-tag-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", - "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-normalize-identifier": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", - "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0" + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" } }, - "node_modules/micromark-util-resolve-all": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", - "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-types": "^2.0.0" - } + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" }, - "node_modules/micromark-util-sanitize-uri": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", - "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-symbol": "^2.0.0" - } + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true, + "license": "MIT" }, - "node_modules/micromark-util-subtokenize": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", - "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/json-parse-even-better-errors": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-5.0.0.tgz", + "integrity": "sha512-ZF1nxZ28VhQouRWhUcVlUIN3qwSgPuswK05s/HIaoetAoE/9tngVmCHjSxmSQPav1nd+lPtTL0YZ/2AFdR/iYQ==", + "dev": true, "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, "license": "MIT" }, - "node_modules/micromark-util-types": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", - "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/json-schema-typed": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-8.0.2.tgz", + "integrity": "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, "license": "MIT" }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true, + "license": "ISC" + }, + "node_modules/json-with-bigint": { + "version": "3.5.7", + "resolved": "https://registry.npmjs.org/json-with-bigint/-/json-with-bigint-3.5.7.tgz", + "integrity": "sha512-7ei3MdAI5+fJPVnKlW77TKNKwQ5ppSzWvhPuSuINT/GYW9ZOC1eRKOuhV9yHG5aEsUPj9BBx5JIekkmoLHxZOw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" + "bin": { + "json5": "lib/cli.js" }, "engines": { - "node": ">=8.6" + "node": ">=6" } }, - "node_modules/micromatch/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "node_modules/jsonc-eslint-parser": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/jsonc-eslint-parser/-/jsonc-eslint-parser-2.4.2.tgz", + "integrity": "sha512-1e4qoRgnn448pRuMvKGsFFymUCquZV0mpGgOyIKNgD3JVDTsVJyRBGH/Fm0tBb8WsWGgmB1mDe6/yJMQM37DUA==", + "dev": true, "license": "MIT", + "dependencies": { + "acorn": "^8.5.0", + "eslint-visitor-keys": "^3.0.0", + "espree": "^9.0.0", + "semver": "^7.3.5" + }, "engines": { - "node": ">=8.6" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "url": "https://github.com/sponsors/ota-meshi" } }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "node_modules/jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", "dev": true, "license": "MIT", - "bin": { - "mime": "cli.js" + "dependencies": { + "universalify": "^2.0.0" }, - "engines": { - "node": ">=4" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", "dev": true, - "license": "MIT", + "engines": [ + "node >= 0.2.0" + ], + "license": "MIT" + }, + "node_modules/JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "license": "(MIT OR Apache-2.0)", + "dependencies": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, "engines": { - "node": ">= 0.6" + "node": "*" } }, - "node_modules/mime-types": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", - "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", "dev": true, "license": "MIT", "dependencies": { - "mime-db": "^1.54.0" + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" }, "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "node": ">=4.0" } }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "node_modules/karma-source-map-support": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", + "integrity": "sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==", + "dev": true, "license": "MIT", - "engines": { - "node": ">=6" + "dependencies": { + "source-map-support": "^0.5.5" } }, - "node_modules/mimic-function": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", - "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "node_modules/keygrip": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz", + "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==", "dev": true, "license": "MIT", - "engines": { - "node": ">=18" + "dependencies": { + "tsscmp": "1.0.6" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 0.6" } }, - "node_modules/mimic-response": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", - "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "json-buffer": "3.0.1" } }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/mini-css-extract-plugin": { - "version": "2.9.4", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.4.tgz", - "integrity": "sha512-ZWYT7ln73Hptxqxk2DxPU9MmapXRhxkJD6tkSR04dnQxm8BGu2hzgKLugK5yySD97u/8yy7Ma7E76k9ZdvtjkQ==", + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", "dev": true, "license": "MIT", - "dependencies": { - "schema-utils": "^4.0.0", - "tapable": "^2.2.1" - }, "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" + "node": ">=6" } }, - "node_modules/mini-svg-data-uri": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", - "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", + "node_modules/klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", "dev": true, "license": "MIT", - "bin": { - "mini-svg-data-uri": "cli.js" + "engines": { + "node": ">= 8" } }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "node_modules/koa": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/koa/-/koa-3.0.3.tgz", + "integrity": "sha512-MeuwbCoN1daWS32/Ni5qkzmrOtQO2qrnfdxDHjrm6s4b59yG4nexAJ0pTEFyzjLp0pBVO80CZp0vW8Ze30Ebow==", "dev": true, - "license": "ISC" - }, - "node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "license": "ISC", + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.1" + "accepts": "^1.3.8", + "content-disposition": "~0.5.4", + "content-type": "^1.0.5", + "cookies": "~0.9.1", + "delegates": "^1.0.0", + "destroy": "^1.2.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "fresh": "~0.5.2", + "http-assert": "^1.5.0", + "http-errors": "^2.0.0", + "koa-compose": "^4.1.0", + "mime-types": "^3.0.1", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 18" } }, - "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } + "node_modules/koa-compose": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz", + "integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==", + "dev": true, + "license": "MIT" }, - "node_modules/minipass-collect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", - "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "node_modules/koa/node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "minipass": "^7.0.3" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">= 0.6" } }, - "node_modules/minipass-fetch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-5.0.1.tgz", - "integrity": "sha512-yHK8pb0iCGat0lDrs/D6RZmCdaBT64tULXjdxjSMAqoDi18Q3qKEUTHypHQZQd9+FYpIS+lkvpq6C/R6SbUeRw==", + "node_modules/koa/node_modules/accepts/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, "license": "MIT", "dependencies": { - "minipass": "^7.0.3", - "minipass-sized": "^2.0.0", - "minizlib": "^3.0.1" + "mime-db": "1.52.0" }, "engines": { - "node": "^20.17.0 || >=22.9.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" + "node": ">= 0.6" } }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "node_modules/koa/node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, + "license": "MIT", "engines": { - "node": ">= 8" + "node": ">= 0.6" } }, - "node_modules/minipass-flush/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "node_modules/koa/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 0.6" } }, - "node_modules/minipass-flush/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "node_modules/koa/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 0.6" } }, - "node_modules/minipass-pipeline/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "node_modules/kolorist": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz", + "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } + "license": "MIT" }, - "node_modules/minipass-pipeline/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "node_modules/language-subtag-registry": { + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", + "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", "dev": true, - "license": "ISC" + "license": "CC0-1.0" }, - "node_modules/minipass-sized": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-2.0.0.tgz", - "integrity": "sha512-zSsHhto5BcUVM2m1LurnXY6M//cGhVaegT71OfOXoprxT6o780GZd792ea6FfrQkuU4usHZIUczAQMRUE2plzA==", + "node_modules/language-tags": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "minipass": "^7.1.2" + "language-subtag-registry": "^0.3.20" }, "engines": { - "node": ">=8" + "node": ">=0.10" } }, - "node_modules/minizlib": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", - "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", + "node_modules/launch-editor": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.13.1.tgz", + "integrity": "sha512-lPSddlAAluRKJ7/cjRFoXUFzaX7q/YKI7yPHuEvSJVqoXvFnJov1/Ud87Aa4zULIbA9Nja4mSPK8l0z/7eV2wA==", "dev": true, "license": "MIT", "dependencies": { - "minipass": "^7.1.2" - }, - "engines": { - "node": ">= 18" + "picocolors": "^1.1.1", + "shell-quote": "^1.8.3" } }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "node_modules/less": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/less/-/less-4.4.2.tgz", + "integrity": "sha512-j1n1IuTX1VQjIy3tT7cyGbX7nvQOsFLoIqobZv4ttI5axP923gA44zUj6miiA6R5Aoms4sEGVIIcucXUbRI14g==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "minimist": "^1.2.6" + "copy-anything": "^2.0.1", + "parse-node-version": "^1.0.1", + "tslib": "^2.3.0" }, "bin": { - "mkdirp": "bin/cmd.js" + "lessc": "bin/lessc" + }, + "engines": { + "node": ">=14" + }, + "optionalDependencies": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "needle": "^3.1.0", + "source-map": "~0.6.0" } }, - "node_modules/mlly": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.0.tgz", - "integrity": "sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==", + "node_modules/less-loader": { + "version": "12.3.1", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-12.3.1.tgz", + "integrity": "sha512-JZZmG7gMzoDP3VGeEG8Sh6FW5wygB5jYL7Wp29FFihuRTsIBacqO3LbRPr2yStYD11riVf13selLm/CPFRDBRQ==", "dev": true, "license": "MIT", - "dependencies": { - "acorn": "^8.15.0", - "pathe": "^2.0.3", - "pkg-types": "^1.3.1", - "ufo": "^1.6.1" + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || ^1.0.0 || ^2.0.0-0", + "less": "^3.5.0 || ^4.0.0", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } } }, - "node_modules/mlly/node_modules/confbox": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", - "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/mlly/node_modules/pkg-types": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", - "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", + "node_modules/less/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, "license": "MIT", + "optional": true, "dependencies": { - "confbox": "^0.1.8", - "mlly": "^1.7.4", - "pathe": "^2.0.1" + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "node_modules/less/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true, "license": "MIT", + "optional": true, "engines": { - "node": ">=4" + "node": ">=6" } }, - "node_modules/mrmime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", - "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", - "license": "MIT", - "engines": { - "node": ">=10" + "node_modules/less/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "optional": true, + "bin": { + "semver": "bin/semver" } }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/msgpackr": { - "version": "1.11.8", - "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.11.8.tgz", - "integrity": "sha512-bC4UGzHhVvgDNS7kn9tV8fAucIYUBuGojcaLiz7v+P63Lmtm0Xeji8B/8tYKddALXxJLpwIeBmUN3u64C4YkRA==", + "node_modules/less/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "optional": true, - "optionalDependencies": { - "msgpackr-extract": "^3.0.2" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/msgpackr-extract": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.3.tgz", - "integrity": "sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA==", + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "dev": true, - "hasInstallScript": true, "license": "MIT", - "optional": true, - "dependencies": { - "node-gyp-build-optional-packages": "5.2.2" - }, - "bin": { - "download-msgpackr-prebuilds": "bin/download-prebuilds.js" - }, - "optionalDependencies": { - "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.3", - "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.3", - "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.3", - "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.3", - "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.3", - "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.3" + "engines": { + "node": ">=6" } }, - "node_modules/muggle-string": { + "node_modules/levn": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", - "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "license": "MIT", "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" }, - "bin": { - "multicast-dns": "cli.js" - } - }, - "node_modules/mute-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", - "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", - "dev": true, - "license": "ISC", "engines": { - "node": "^18.17.0 || >=20.5.0" + "node": ">= 0.8.0" } }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "node_modules/license-webpack-plugin": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz", + "integrity": "sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, - "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" + "webpack-sources": "^3.0.0" }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-sources": { + "optional": true + } } }, - "node_modules/napi-postinstall": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz", - "integrity": "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==", + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", "dev": true, "license": "MIT", - "bin": { - "napi-postinstall": "lib/cli.js" - }, "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + "node": ">=14" }, "funding": { - "url": "https://opencollective.com/napi-postinstall" + "url": "https://github.com/sponsors/antonk52" } }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "license": "MIT" - }, - "node_modules/needle": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/needle/-/needle-3.3.1.tgz", - "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==", + "node_modules/lines-and-columns": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", + "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", "dev": true, "license": "MIT", - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.3", - "sax": "^1.2.4" - }, - "bin": { - "needle": "bin/needle" - }, "engines": { - "node": ">= 4.4.x" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, - "node_modules/needle/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "node_modules/listr2": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-9.0.5.tgz", + "integrity": "sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "cli-truncate": "^5.0.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^6.1.0", + "rfdc": "^1.4.1", + "wrap-ansi": "^9.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=20.0.0" } }, - "node_modules/negotiator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", - "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "node_modules/listr2/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "node_modules/listr2/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "dev": true, - "license": "MIT" - }, - "node_modules/neotraverse": { - "version": "0.6.18", - "resolved": "https://registry.npmjs.org/neotraverse/-/neotraverse-0.6.18.tgz", - "integrity": "sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==", "license": "MIT", "engines": { - "node": ">= 10" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/nerf-dart": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/nerf-dart/-/nerf-dart-1.0.0.tgz", - "integrity": "sha512-EZSPZB70jiVsivaBLYDCyntd5eH8NTSMOn3rB+HxwdmKThGELLdYv8qVIMWvZEFy9w8ZZpW9h9OB32l1rGtj7g==", + "node_modules/listr2/node_modules/eventemitter3": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", "dev": true, "license": "MIT" }, - "node_modules/ng-packagr": { - "version": "20.1.0", - "resolved": "https://registry.npmjs.org/ng-packagr/-/ng-packagr-20.1.0.tgz", - "integrity": "sha512-objHk39HWnSSv54KD0Ct4A02rug6HiqbmXo1KJW39npzuVc37QWfiZy94afltH1zIx+mQqollmGaCmwibmagvQ==", + "node_modules/listr2/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", "dev": true, "license": "MIT", "dependencies": { - "@ampproject/remapping": "^2.3.0", - "@rollup/plugin-json": "^6.1.0", - "@rollup/wasm-node": "^4.24.0", - "ajv": "^8.17.1", - "ansi-colors": "^4.1.3", - "browserslist": "^4.22.1", - "chokidar": "^4.0.1", - "commander": "^14.0.0", - "dependency-graph": "^1.0.0", - "esbuild": "^0.25.0", - "find-cache-directory": "^6.0.0", - "injection-js": "^2.4.0", - "jsonc-parser": "^3.3.1", - "less": "^4.2.0", - "ora": "^8.2.0", - "piscina": "^5.0.0", - "postcss": "^8.4.47", - "rollup-plugin-dts": "^6.2.0", - "rxjs": "^7.8.1", - "sass": "^1.81.0", - "tinyglobby": "^0.2.12" - }, - "bin": { - "ng-packagr": "src/cli/main.js" + "ansi-regex": "^6.2.2" }, "engines": { - "node": "^20.19.0 || ^22.12.0 || >=24.0.0" - }, - "optionalDependencies": { - "rollup": "^4.24.0" - }, - "peerDependencies": { - "@angular/compiler-cli": "^20.0.0 || ^20.1.0-next.0 || ^20.2.0-next.0", - "tailwindcss": "^2.0.0 || ^3.0.0 || ^4.0.0", - "tslib": "^2.3.0", - "typescript": ">=5.8 <5.9" + "node": ">=12" }, - "peerDependenciesMeta": { - "tailwindcss": { - "optional": true - } + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/ng-packagr/node_modules/commander": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.2.tgz", - "integrity": "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==", + "node_modules/listr2/node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", "dev": true, "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, "engines": { - "node": ">=20" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/nlcst-to-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-4.0.0.tgz", - "integrity": "sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==", + "node_modules/lmdb": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-3.5.1.tgz", + "integrity": "sha512-NYHA0MRPjvNX+vSw8Xxg6FLKxzAG+e7Pt8RqAQA/EehzHVXq9SxDqJIN3JL1hK0dweb884y8kIh6rkWvPyg9Wg==", + "dev": true, + "hasInstallScript": true, "license": "MIT", + "optional": true, "dependencies": { - "@types/nlcst": "^2.0.0" + "@harperfast/extended-iterable": "^1.0.3", + "msgpackr": "^1.11.2", + "node-addon-api": "^6.1.0", + "node-gyp-build-optional-packages": "5.2.2", + "ordered-binary": "^1.5.3", + "weak-lru-cache": "^1.2.2" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "bin": { + "download-lmdb-prebuilds": "bin/download-prebuilds.js" + }, + "optionalDependencies": { + "@lmdb/lmdb-darwin-arm64": "3.5.1", + "@lmdb/lmdb-darwin-x64": "3.5.1", + "@lmdb/lmdb-linux-arm": "3.5.1", + "@lmdb/lmdb-linux-arm64": "3.5.1", + "@lmdb/lmdb-linux-x64": "3.5.1", + "@lmdb/lmdb-win32-arm64": "3.5.1", + "@lmdb/lmdb-win32-x64": "3.5.1" } }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "node_modules/load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", "dev": true, "license": "MIT", "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/node-abort-controller": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", - "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==", + "node_modules/load-json-file/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } }, - "node_modules/node-addon-api": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", - "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", + "node_modules/load-json-file/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true, "license": "MIT", - "optional": true + "engines": { + "node": ">=4" + } }, - "node_modules/node-emoji": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-2.2.0.tgz", - "integrity": "sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==", + "node_modules/load-json-file/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, "license": "MIT", - "dependencies": { - "@sindresorhus/is": "^4.6.0", - "char-regex": "^1.0.2", - "emojilib": "^2.4.0", - "skin-tone": "^2.0.0" - }, "engines": { - "node": ">=18" + "node": ">=4" } }, - "node_modules/node-emoji/node_modules/@sindresorhus/is": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "node_modules/loader-runner": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz", + "integrity": "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==", "dev": true, "license": "MIT", "engines": { - "node": ">=10" + "node": ">=6.11.5" }, "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "node_modules/loader-utils": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.3.1.tgz", + "integrity": "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/local-pkg": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-1.1.2.tgz", + "integrity": "sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==", "dev": true, "license": "MIT", "dependencies": { - "whatwg-url": "^5.0.0" + "mlly": "^1.7.4", + "pkg-types": "^2.3.0", + "quansync": "^0.2.11" }, "engines": { - "node": "4.x || >=6.0.0" + "node": ">=14" }, - "peerDependencies": { - "encoding": "^0.1.0" + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/locate-character": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", + "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==", + "dev": true, + "license": "MIT" + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/node-fetch-native": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz", - "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==", + "node_modules/lodash": { + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", + "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", + "dev": true, "license": "MIT" }, - "node_modules/node-fetch/node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "node_modules/lodash-es": { + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.23.tgz", + "integrity": "sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==", "dev": true, "license": "MIT" }, - "node_modules/node-fetch/node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", "dev": true, - "license": "BSD-2-Clause" + "license": "MIT" }, - "node_modules/node-fetch/node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "node_modules/lodash.capitalize": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz", + "integrity": "sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.clonedeepwith": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeepwith/-/lodash.clonedeepwith-4.5.0.tgz", + "integrity": "sha512-QRBRSxhbtsX1nc0baxSkkK5WlVTTm/s48DSukcGcWZwIyI8Zz+lB+kFiELJXtzfH4Aj6kMWQ1VWW4U5uUDgZMA==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.escaperegexp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", + "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.uniqby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", + "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-7.0.1.tgz", + "integrity": "sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==", "dev": true, "license": "MIT", "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" + "is-unicode-supported": "^2.0.0", + "yoctocolors": "^2.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/node-forge": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.2.tgz", - "integrity": "sha512-6xKiQ+cph9KImrRh0VsjH2d8/GXA4FIMlgU4B757iI1ApvcyA9VlouP0yZJha01V+huImO+kKMU7ih+2+E14fw==", + "node_modules/log-update": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", + "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", "dev": true, - "license": "(BSD-3-Clause OR GPL-2.0)", + "license": "MIT", + "dependencies": { + "ansi-escapes": "^7.0.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^7.1.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, "engines": { - "node": ">= 6.13.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/node-gyp": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-12.2.0.tgz", - "integrity": "sha512-q23WdzrQv48KozXlr0U1v9dwO/k59NHeSzn6loGcasyf0UnSrtzs8kRxM+mfwJSf0DkX0s43hcqgnSO4/VNthQ==", + "node_modules/log-update/node_modules/ansi-escapes": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz", + "integrity": "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==", "dev": true, "license": "MIT", "dependencies": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^15.0.0", - "nopt": "^9.0.0", - "proc-log": "^6.0.0", - "semver": "^7.3.5", - "tar": "^7.5.4", - "tinyglobby": "^0.2.12", - "which": "^6.0.0" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" + "environment": "^1.0.0" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/node-gyp-build-optional-packages": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.2.2.tgz", - "integrity": "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==", + "node_modules/log-update/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, "license": "MIT", - "optional": true, - "dependencies": { - "detect-libc": "^2.0.1" + "engines": { + "node": ">=12" }, - "bin": { - "node-gyp-build-optional-packages": "bin.js", - "node-gyp-build-optional-packages-optional": "optional.js", - "node-gyp-build-optional-packages-test": "build-test.js" + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/node-gyp/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "node_modules/log-update/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "dev": true, - "license": "ISC", + "license": "MIT", "engines": { - "node": ">=16" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/node-gyp/node_modules/which": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-6.0.0.tgz", - "integrity": "sha512-f+gEpIKMR9faW/JgAgPK1D7mekkFoqbmiwvNzuhsHetni20QSgzg9Vhn0g2JSJkkfehQnqdUAx7/e15qS1lPxg==", + "node_modules/log-update/node_modules/slice-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz", + "integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "license": "MIT" - }, - "node_modules/node-machine-id": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/node-machine-id/-/node-machine-id-1.1.12.tgz", - "integrity": "sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ==", - "license": "MIT" - }, - "node_modules/node-mock-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/node-mock-http/-/node-mock-http-1.0.4.tgz", - "integrity": "sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ==", - "license": "MIT" - }, - "node_modules/node-releases": { - "version": "2.0.27", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", - "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", - "license": "MIT" - }, - "node_modules/node-schedule": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/node-schedule/-/node-schedule-2.1.1.tgz", - "integrity": "sha512-OXdegQq03OmXEjt2hZP33W2YPs/E5BcFQks46+G2gAxs4gHOIVD1u7EqlYLYSKsaIpyKCK9Gbk0ta1/gjRSMRQ==", + "node_modules/log-update/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", "dev": true, "license": "MIT", "dependencies": { - "cron-parser": "^4.2.0", - "long-timeout": "0.1.1", - "sorted-array-functions": "^1.3.0" + "ansi-regex": "^6.2.2" }, "engines": { - "node": ">=6" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/nopt": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-9.0.0.tgz", - "integrity": "sha512-Zhq3a+yFKrYwSBluL4H9XP3m3y5uvQkB/09CwDruCiRmR/UJYnn9W4R48ry0uGC70aeTPKLynBtscP9efFFcPw==", + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "abbrev": "^4.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/normalize-package-data": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", - "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", + "node_modules/log4js": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.9.1.tgz", + "integrity": "sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==", "dev": true, - "license": "BSD-2-Clause", + "license": "Apache-2.0", "dependencies": { - "hosted-git-info": "^7.0.0", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" + "date-format": "^4.0.14", + "debug": "^4.3.4", + "flatted": "^3.2.7", + "rfdc": "^1.3.0", + "streamroller": "^3.1.5" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">=8.0" } }, - "node_modules/normalize-package-data/node_modules/hosted-git-info": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", - "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", + "node_modules/long-timeout": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/long-timeout/-/long-timeout-0.1.1.tgz", + "integrity": "sha512-BFRuQUqc7x2NWxfJBCyUrN8iYUYznzL9JROmRz1gZ6KlOIgmoD+njPVbb+VNn2nGMKggMsK79iUNErillsrx7w==", "dev": true, - "license": "ISC", + "license": "MIT" + }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "license": "MIT", "dependencies": { - "lru-cache": "^10.0.1" + "js-tokens": "^3.0.0 || ^4.0.0" }, - "engines": { - "node": "^16.14.0 || >=18.0.0" + "bin": { + "loose-envify": "cli.js" } }, - "node_modules/normalize-package-data/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", "dev": true, - "license": "ISC" + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } }, - "node_modules/normalize-path": { + "node_modules/lowercase-keys": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", + "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", + "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/luxon": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.7.2.tgz", + "integrity": "sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/normalize-url": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.1.0.tgz", - "integrity": "sha512-X06Mfd/5aKsRHc0O0J5CUedwnPmnDtLF2+nq+KN9KSDlJHkPuh0JUviWjEWMe0SW/9TDdSLVPuk7L5gGTIA1/w==", + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "dev": true, + "license": "MIT", + "bin": { + "lz-string": "bin/bin.js" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/magicast": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.2.tgz", + "integrity": "sha512-E3ZJh4J3S9KfwdjZhe2afj6R9lGIN5Pher1pF39UGrXRqq/VDaGVIGN13BjHd2u8B61hArAGOnso7nBOouW3TQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "source-map-js": "^1.2.1" + } + }, + "node_modules/make-asynchronous": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/make-asynchronous/-/make-asynchronous-1.1.0.tgz", + "integrity": "sha512-ayF7iT+44LXdxJLTrTd3TLQpFDDvPCBxXxbv+pMUSuHA5Q8zyAfwkRP6aHHwNVFBUFWtxAHqwNJxF8vMZLAbVg==", "dev": true, "license": "MIT", + "dependencies": { + "p-event": "^6.0.0", + "type-fest": "^4.6.0", + "web-worker": "^1.5.0" + }, "engines": { - "node": ">=14.16" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm": { - "version": "11.10.0", - "resolved": "https://registry.npmjs.org/npm/-/npm-11.10.0.tgz", - "integrity": "sha512-i8hE43iSIAMFuYVi8TxsEISdELM4fIza600aLjJ0ankGPLqd0oTPKMJqAcO/QWm307MbSlWGzJcNZ0lGMQgHPA==", - "bundleDependencies": [ - "@isaacs/string-locale-compare", - "@npmcli/arborist", - "@npmcli/config", - "@npmcli/fs", - "@npmcli/map-workspaces", - "@npmcli/metavuln-calculator", - "@npmcli/package-json", - "@npmcli/promise-spawn", - "@npmcli/redact", - "@npmcli/run-script", - "@sigstore/tuf", - "abbrev", - "archy", - "cacache", - "chalk", - "ci-info", - "cli-columns", - "fastest-levenshtein", - "fs-minipass", - "glob", - "graceful-fs", - "hosted-git-info", - "ini", - "init-package-json", - "is-cidr", - "json-parse-even-better-errors", - "libnpmaccess", - "libnpmdiff", - "libnpmexec", - "libnpmfund", - "libnpmorg", - "libnpmpack", - "libnpmpublish", - "libnpmsearch", - "libnpmteam", - "libnpmversion", - "make-fetch-happen", - "minimatch", - "minipass", - "minipass-pipeline", - "ms", - "node-gyp", - "nopt", - "npm-audit-report", - "npm-install-checks", - "npm-package-arg", - "npm-pick-manifest", - "npm-profile", - "npm-registry-fetch", - "npm-user-validate", - "p-map", - "pacote", - "parse-conflict-json", - "proc-log", - "qrcode-terminal", - "read", - "semver", - "spdx-expression-parse", - "ssri", - "supports-color", - "tar", - "text-table", - "tiny-relative-date", - "treeverse", - "validate-npm-package-name", - "which" + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true, + "license": "ISC" + }, + "node_modules/make-fetch-happen": { + "version": "15.0.4", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-15.0.4.tgz", + "integrity": "sha512-vM2sG+wbVeVGYcCm16mM3d5fuem9oC28n436HjsGO3LcxoTI8LNVa4rwZDn3f76+cWyT4GGJDxjTYU1I2nr6zw==", + "dev": true, + "license": "ISC", + "dependencies": { + "@gar/promise-retry": "^1.0.0", + "@npmcli/agent": "^4.0.0", + "cacache": "^20.0.1", + "http-cache-semantics": "^4.1.1", + "minipass": "^7.0.2", + "minipass-fetch": "^5.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^1.0.0", + "proc-log": "^6.0.0", + "ssri": "^13.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/make-fetch-happen/node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/markdown-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz", + "integrity": "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/markdown-table": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", + "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/marked": { + "version": "15.0.12", + "resolved": "https://registry.npmjs.org/marked/-/marked-15.0.12.tgz", + "integrity": "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==", + "dev": true, + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/marked-terminal": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-7.3.0.tgz", + "integrity": "sha512-t4rBvPsHc57uE/2nJOLmMbZCQ4tgAccAED3ngXQqW6g+TxA488JzJ+FK3lQkzBQOI1mRV/r/Kq+1ZlJ4D0owQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^7.0.0", + "ansi-regex": "^6.1.0", + "chalk": "^5.4.1", + "cli-highlight": "^2.1.11", + "cli-table3": "^0.6.5", + "node-emoji": "^2.2.0", + "supports-hyperlinks": "^3.1.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "marked": ">=1 <16" + } + }, + "node_modules/marked-terminal/node_modules/ansi-escapes": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz", + "integrity": "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "environment": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/marked-terminal/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/marked-terminal/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mdast-util-definitions": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-6.0.0.tgz", + "integrity": "sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", + "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.3.tgz", + "integrity": "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", + "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-gfm-autolink-literal": "^2.0.0", + "mdast-util-gfm-footnote": "^2.0.0", + "mdast-util-gfm-strikethrough": "^2.0.0", + "mdast-util-gfm-table": "^2.0.0", + "mdast-util-gfm-task-list-item": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", + "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-find-and-replace": "^3.0.0", + "micromark-util-character": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", + "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", + "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz", + "integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==", + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-expression": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", + "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-jsx": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz", + "integrity": "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdxjs-esm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", + "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", + "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "dev": true, + "license": "Unlicense", + "dependencies": { + "fs-monkey": "^1.0.4" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/meow": { + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", + "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-descriptors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", + "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", + "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", + "license": "MIT", + "dependencies": { + "micromark-extension-gfm-autolink-literal": "^2.0.0", + "micromark-extension-gfm-footnote": "^2.0.0", + "micromark-extension-gfm-strikethrough": "^2.0.0", + "micromark-extension-gfm-table": "^2.0.0", + "micromark-extension-gfm-tagfilter": "^2.0.0", + "micromark-extension-gfm-task-list-item": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", + "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", + "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", + "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", + "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", + "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdx-expression": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.1.tgz", + "integrity": "sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-mdx-expression": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-mdx-jsx": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.2.tgz", + "integrity": "sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "micromark-factory-mdx-expression": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdx-md": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz", + "integrity": "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==", + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdxjs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz", + "integrity": "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==", + "license": "MIT", + "dependencies": { + "acorn": "^8.0.0", + "acorn-jsx": "^5.0.0", + "micromark-extension-mdx-expression": "^3.0.0", + "micromark-extension-mdx-jsx": "^3.0.0", + "micromark-extension-mdx-md": "^2.0.0", + "micromark-extension-mdxjs-esm": "^3.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdxjs-esm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz", + "integrity": "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-mdx-expression": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.3.tgz", + "integrity": "sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-events-to-acorn": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.3.tgz", + "integrity": "sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "estree-util-visit": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "vfile-message": "^4.0.0" + } + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", + "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } ], + "license": "MIT" + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, - "license": "Artistic-2.0", - "workspaces": [ - "docs", - "smoke-tests", - "mock-globals", - "mock-registry", - "workspaces/*" - ], + "license": "MIT", "dependencies": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/arborist": "^9.3.0", - "@npmcli/config": "^10.7.0", - "@npmcli/fs": "^5.0.0", - "@npmcli/map-workspaces": "^5.0.3", - "@npmcli/metavuln-calculator": "^9.0.3", - "@npmcli/package-json": "^7.0.4", - "@npmcli/promise-spawn": "^9.0.1", - "@npmcli/redact": "^4.0.0", - "@npmcli/run-script": "^10.0.3", - "@sigstore/tuf": "^4.0.1", - "abbrev": "^4.0.0", - "archy": "~1.0.0", - "cacache": "^20.0.3", - "chalk": "^5.6.2", - "ci-info": "^4.4.0", - "cli-columns": "^4.0.0", - "fastest-levenshtein": "^1.0.16", - "fs-minipass": "^3.0.3", - "glob": "^13.0.2", - "graceful-fs": "^4.2.11", - "hosted-git-info": "^9.0.2", - "ini": "^6.0.0", - "init-package-json": "^8.2.4", - "is-cidr": "^6.0.3", - "json-parse-even-better-errors": "^5.0.0", - "libnpmaccess": "^10.0.3", - "libnpmdiff": "^8.1.1", - "libnpmexec": "^10.2.1", - "libnpmfund": "^7.0.15", - "libnpmorg": "^8.0.1", - "libnpmpack": "^9.1.1", - "libnpmpublish": "^11.1.3", - "libnpmsearch": "^9.0.1", - "libnpmteam": "^8.0.2", - "libnpmversion": "^8.0.3", - "make-fetch-happen": "^15.0.3", - "minimatch": "^10.1.1", - "minipass": "^7.1.1", - "minipass-pipeline": "^1.2.4", - "ms": "^2.1.2", - "node-gyp": "^12.2.0", - "nopt": "^9.0.0", - "npm-audit-report": "^7.0.0", - "npm-install-checks": "^8.0.0", - "npm-package-arg": "^13.0.2", - "npm-pick-manifest": "^11.0.3", - "npm-profile": "^12.0.1", - "npm-registry-fetch": "^19.1.1", - "npm-user-validate": "^4.0.0", - "p-map": "^7.0.4", - "pacote": "^21.3.1", - "parse-conflict-json": "^5.0.1", - "proc-log": "^6.1.0", - "qrcode-terminal": "^0.12.0", - "read": "^5.0.1", - "semver": "^7.7.4", - "spdx-expression-parse": "^4.0.0", - "ssri": "^13.0.1", - "supports-color": "^10.2.2", - "tar": "^7.5.7", - "text-table": "~0.2.0", - "tiny-relative-date": "^2.0.2", - "treeverse": "^3.0.0", - "validate-npm-package-name": "^7.0.2", - "which": "^6.0.1" - }, - "bin": { - "npm": "bin/npm-cli.js", - "npx": "bin/npx-cli.js" + "braces": "^3.0.3", + "picomatch": "^2.3.1" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=8.6" } }, - "node_modules/npm-bundled": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-5.0.0.tgz", - "integrity": "sha512-JLSpbzh6UUXIEoqPsYBvVNVmyrjVZ1fzEFbqxKkTJQkWBO3xFzFT+KDnSKQWwOQNbuWRwt5LSD6HOTLGIWzfrw==", + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, - "license": "ISC", - "dependencies": { - "npm-normalize-package-bin": "^5.0.0" - }, + "license": "MIT", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/npm-install-checks": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-8.0.0.tgz", - "integrity": "sha512-ScAUdMpyzkbpxoNekQ3tNRdFI8SJ86wgKZSQZdUxT+bj0wVFpsEMWnkXP0twVe1gJyNF5apBWDJhhIbgrIViRA==", + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "semver": "^7.1.1" + "license": "MIT", + "bin": { + "mime": "cli.js" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=4" } }, - "node_modules/npm-normalize-package-bin": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-5.0.0.tgz", - "integrity": "sha512-CJi3OS4JLsNMmr2u07OJlhcrPxCeOeP/4xq67aWNai6TNWWbTrlNDgl8NcFKVlcBKp18GPj+EzbNIgrBfZhsag==", + "node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", "dev": true, - "license": "ISC", + "license": "MIT", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">= 0.6" } }, - "node_modules/npm-package-arg": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-13.0.2.tgz", - "integrity": "sha512-IciCE3SY3uE84Ld8WZU23gAPPV9rIYod4F+rc+vJ7h7cwAJt9Vk6TVsK60ry7Uj3SRS3bqRRIGuTp9YVlk6WNA==", + "node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "hosted-git-info": "^9.0.0", - "proc-log": "^6.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^7.0.0" + "mime-db": "^1.54.0" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/npm-packlist": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-10.0.3.tgz", - "integrity": "sha512-zPukTwJMOu5X5uvm0fztwS5Zxyvmk38H/LfidkOMt3gbZVCyro2cD/ETzwzVPcWZA3JOyPznfUN/nkyFiyUbxg==", + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, - "license": "ISC", - "dependencies": { - "ignore-walk": "^8.0.0", - "proc-log": "^6.0.0" - }, + "license": "MIT", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=6" } }, - "node_modules/npm-pick-manifest": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-11.0.3.tgz", - "integrity": "sha512-buzyCfeoGY/PxKqmBqn1IUJrZnUi1VVJTdSSRPGI60tJdUhUoSQFhs0zycJokDdOznQentgrpf8LayEHyyYlqQ==", + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", "dev": true, - "license": "ISC", - "dependencies": { - "npm-install-checks": "^8.0.0", - "npm-normalize-package-bin": "^5.0.0", - "npm-package-arg": "^13.0.0", - "semver": "^7.3.5" - }, + "license": "MIT", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm-registry-fetch": { - "version": "19.1.1", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-19.1.1.tgz", - "integrity": "sha512-TakBap6OM1w0H73VZVDf44iFXsOS3h+L4wVMXmbWOQroZgFhMch0juN6XSzBNlD965yIKvWg2dfu7NSiaYLxtw==", + "node_modules/mimic-response": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", + "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/redact": "^4.0.0", - "jsonparse": "^1.3.1", - "make-fetch-happen": "^15.0.0", - "minipass": "^7.0.2", - "minipass-fetch": "^5.0.0", - "minizlib": "^3.0.1", - "npm-package-arg": "^13.0.0", - "proc-log": "^6.0.0" + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "license": "MIT", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=4" } }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "node_modules/mini-css-extract-plugin": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.10.0.tgz", + "integrity": "sha512-540P2c5dYnJlyJxTaSloliZexv8rji6rY8FhQN+WF/82iHQfA23j/xtJx97L+mXOML27EqksSek/g4eK7jaL3g==", + "dev": true, "license": "MIT", "dependencies": { - "path-key": "^3.0.0" + "schema-utils": "^4.0.0", + "tapable": "^2.2.1" }, "engines": { - "node": ">=8" + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" } }, - "node_modules/npm/node_modules/@isaacs/balanced-match": { - "version": "4.0.1", + "node_modules/mini-svg-data-uri": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", + "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", "dev": true, - "inBundle": true, "license": "MIT", - "engines": { - "node": "20 || >=22" + "bin": { + "mini-svg-data-uri": "cli.js" } }, - "node_modules/npm/node_modules/@isaacs/brace-expansion": { - "version": "5.0.1", + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", "dev": true, - "inBundle": true, - "license": "MIT", + "license": "ISC" + }, + "node_modules/minimatch": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.1.tgz", + "integrity": "sha512-MClCe8IL5nRRmawL6ib/eT4oLyeKMGCghibcDWK+J0hh0Q8kqSdia6BvbRMVk6mPa6WqUa5uR2oxt6C5jd533A==", + "license": "BlueOak-1.0.0", "dependencies": { - "@isaacs/balanced-match": "^4.0.1" + "brace-expansion": "^5.0.2" }, "engines": { "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/npm/node_modules/@isaacs/fs-minipass": { - "version": "4.0.1", + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", "dev": true, - "inBundle": true, "license": "ISC", "dependencies": { - "minipass": "^7.0.4" + "minipass": "^7.0.3" }, "engines": { - "node": ">=18.0.0" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/npm/node_modules/@isaacs/string-locale-compare": { - "version": "1.1.0", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/@npmcli/agent": { - "version": "4.0.0", + "node_modules/minipass-fetch": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-5.0.2.tgz", + "integrity": "sha512-2d0q2a8eCi2IRg/IGubCNRJoYbA1+YPXAzQVRFmB45gdGZafyivnZ5YSEfo3JikbjGxOdntGFvBQGqaSMXlAFQ==", "dev": true, - "inBundle": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "agent-base": "^7.1.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.1", - "lru-cache": "^11.2.1", - "socks-proxy-agent": "^8.0.3" + "minipass": "^7.0.3", + "minipass-sized": "^2.0.0", + "minizlib": "^3.0.1" }, "engines": { "node": "^20.17.0 || >=22.9.0" + }, + "optionalDependencies": { + "iconv-lite": "^0.7.2" } }, - "node_modules/npm/node_modules/@npmcli/arborist": { - "version": "9.3.0", + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", "dev": true, - "inBundle": true, "license": "ISC", "dependencies": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/fs": "^5.0.0", - "@npmcli/installed-package-contents": "^4.0.0", - "@npmcli/map-workspaces": "^5.0.0", - "@npmcli/metavuln-calculator": "^9.0.2", - "@npmcli/name-from-folder": "^4.0.0", - "@npmcli/node-gyp": "^5.0.0", - "@npmcli/package-json": "^7.0.0", - "@npmcli/query": "^5.0.0", - "@npmcli/redact": "^4.0.0", - "@npmcli/run-script": "^10.0.0", - "bin-links": "^6.0.0", - "cacache": "^20.0.1", - "common-ancestor-path": "^2.0.0", - "hosted-git-info": "^9.0.0", - "json-stringify-nice": "^1.1.4", - "lru-cache": "^11.2.1", - "minimatch": "^10.0.3", - "nopt": "^9.0.0", - "npm-install-checks": "^8.0.0", - "npm-package-arg": "^13.0.0", - "npm-pick-manifest": "^11.0.1", - "npm-registry-fetch": "^19.0.0", - "pacote": "^21.0.2", - "parse-conflict-json": "^5.0.1", - "proc-log": "^6.0.0", - "proggy": "^4.0.0", - "promise-all-reject-late": "^1.0.0", - "promise-call-limit": "^3.0.1", - "semver": "^7.3.7", - "ssri": "^13.0.0", - "treeverse": "^3.0.0", - "walk-up-path": "^4.0.0" - }, - "bin": { - "arborist": "bin/index.js" + "minipass": "^3.0.0" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">= 8" } }, - "node_modules/npm/node_modules/@npmcli/config": { - "version": "10.7.0", + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, - "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/map-workspaces": "^5.0.0", - "@npmcli/package-json": "^7.0.0", - "ci-info": "^4.0.0", - "ini": "^6.0.0", - "nopt": "^9.0.0", - "proc-log": "^6.0.0", - "semver": "^7.3.5", - "walk-up-path": "^4.0.0" + "yallist": "^4.0.0" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=8" } }, - "node_modules/npm/node_modules/@npmcli/fs": { - "version": "5.0.0", + "node_modules/minipass-flush/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", "dev": true, - "inBundle": true, "license": "ISC", "dependencies": { - "semver": "^7.3.5" + "minipass": "^3.0.0" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=8" } }, - "node_modules/npm/node_modules/@npmcli/git": { - "version": "7.0.1", + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, - "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/promise-spawn": "^9.0.0", - "ini": "^6.0.0", - "lru-cache": "^11.2.1", - "npm-pick-manifest": "^11.0.1", - "proc-log": "^6.0.0", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^6.0.0" + "yallist": "^4.0.0" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=8" } }, - "node_modules/npm/node_modules/@npmcli/installed-package-contents": { + "node_modules/minipass-pipeline/node_modules/yallist": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/minipass-sized": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-2.0.0.tgz", + "integrity": "sha512-zSsHhto5BcUVM2m1LurnXY6M//cGhVaegT71OfOXoprxT6o780GZd792ea6FfrQkuU4usHZIUczAQMRUE2plzA==", "dev": true, - "inBundle": true, "license": "ISC", "dependencies": { - "npm-bundled": "^5.0.0", - "npm-normalize-package-bin": "^5.0.0" - }, - "bin": { - "installed-package-contents": "bin/index.js" + "minipass": "^7.1.2" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=8" } }, - "node_modules/npm/node_modules/@npmcli/map-workspaces": { - "version": "5.0.3", + "node_modules/minizlib": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", "dev": true, - "inBundle": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "@npmcli/name-from-folder": "^4.0.0", - "@npmcli/package-json": "^7.0.0", - "glob": "^13.0.0", - "minimatch": "^10.0.3" + "minipass": "^7.1.2" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">= 18" } }, - "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { - "version": "9.0.3", + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, - "inBundle": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "cacache": "^20.0.0", - "json-parse-even-better-errors": "^5.0.0", - "pacote": "^21.0.0", - "proc-log": "^6.0.0", - "semver": "^7.3.5" + "minimist": "^1.2.6" }, - "engines": { - "node": "^20.17.0 || >=22.9.0" + "bin": { + "mkdirp": "bin/cmd.js" } }, - "node_modules/npm/node_modules/@npmcli/name-from-folder": { - "version": "4.0.0", + "node_modules/mlly": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.1.tgz", + "integrity": "sha512-SnL6sNutTwRWWR/vcmCYHSADjiEesp5TGQQ0pXyLhW5IoeibRlF/CbSLailbB3CNqJUk9cVJ9dUDnbD7GrcHBQ==", "dev": true, - "inBundle": true, - "license": "ISC", + "license": "MIT", + "dependencies": { + "acorn": "^8.16.0", + "pathe": "^2.0.3", + "pkg-types": "^1.3.1", + "ufo": "^1.6.3" + } + }, + "node_modules/mlly/node_modules/confbox": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", + "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/mlly/node_modules/pkg-types": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", + "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "confbox": "^0.1.8", + "mlly": "^1.7.4", + "pathe": "^2.0.1" + } + }, + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "dev": true, + "license": "MIT", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=4" + } + }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "license": "MIT", + "engines": { + "node": ">=10" } }, - "node_modules/npm/node_modules/@npmcli/node-gyp": { - "version": "5.0.0", + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/msgpackr": { + "version": "1.11.9", + "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.11.9.tgz", + "integrity": "sha512-FkoAAyyA6HM8wL882EcEyFZ9s7hVADSwG9xrVx3dxxNQAtgADTrJoEWivID82Iv1zWDsv/OtbrrcZAzGzOMdNw==", "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^20.17.0 || >=22.9.0" + "license": "MIT", + "optional": true, + "optionalDependencies": { + "msgpackr-extract": "^3.0.2" } }, - "node_modules/npm/node_modules/@npmcli/package-json": { - "version": "7.0.4", + "node_modules/msgpackr-extract": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.3.tgz", + "integrity": "sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA==", "dev": true, - "inBundle": true, - "license": "ISC", + "hasInstallScript": true, + "license": "MIT", + "optional": true, "dependencies": { - "@npmcli/git": "^7.0.0", - "glob": "^13.0.0", - "hosted-git-info": "^9.0.0", - "json-parse-even-better-errors": "^5.0.0", - "proc-log": "^6.0.0", - "semver": "^7.5.3", - "validate-npm-package-license": "^3.0.4" + "node-gyp-build-optional-packages": "5.2.2" }, - "engines": { - "node": "^20.17.0 || >=22.9.0" + "bin": { + "download-msgpackr-prebuilds": "bin/download-prebuilds.js" + }, + "optionalDependencies": { + "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.3", + "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.3" } }, - "node_modules/npm/node_modules/@npmcli/promise-spawn": { - "version": "9.0.1", + "node_modules/muggle-string": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", + "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "which": "^6.0.0" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } + "license": "MIT" }, - "node_modules/npm/node_modules/@npmcli/query": { - "version": "5.0.0", + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", "dev": true, - "inBundle": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "postcss-selector-parser": "^7.0.0" + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" }, - "engines": { - "node": "^20.17.0 || >=22.9.0" + "bin": { + "multicast-dns": "cli.js" } }, - "node_modules/npm/node_modules/@npmcli/redact": { - "version": "4.0.0", + "node_modules/mute-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", + "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", "dev": true, - "inBundle": true, "license": "ISC", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/@npmcli/run-script": { - "version": "10.0.3", + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", "dev": true, - "inBundle": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "@npmcli/node-gyp": "^5.0.0", - "@npmcli/package-json": "^7.0.0", - "@npmcli/promise-spawn": "^9.0.0", - "node-gyp": "^12.1.0", - "proc-log": "^6.0.0", - "which": "^6.0.0" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" } }, - "node_modules/npm/node_modules/@sigstore/bundle": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/protobuf-specs": "^0.5.0" + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/npm/node_modules/@sigstore/core": { - "version": "3.1.0", + "node_modules/napi-postinstall": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz", + "integrity": "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==", "dev": true, - "inBundle": true, - "license": "Apache-2.0", + "license": "MIT", + "bin": { + "napi-postinstall": "lib/cli.js" + }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/napi-postinstall" } }, - "node_modules/npm/node_modules/@sigstore/protobuf-specs": { - "version": "0.5.0", + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true, - "inBundle": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } + "license": "MIT" }, - "node_modules/npm/node_modules/@sigstore/sign": { - "version": "4.1.0", + "node_modules/needle": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-3.3.1.tgz", + "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==", "dev": true, - "inBundle": true, - "license": "Apache-2.0", + "license": "MIT", + "optional": true, "dependencies": { - "@sigstore/bundle": "^4.0.0", - "@sigstore/core": "^3.1.0", - "@sigstore/protobuf-specs": "^0.5.0", - "make-fetch-happen": "^15.0.3", - "proc-log": "^6.1.0", - "promise-retry": "^2.0.1" + "iconv-lite": "^0.6.3", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">= 4.4.x" } }, - "node_modules/npm/node_modules/@sigstore/tuf": { - "version": "4.0.1", + "node_modules/needle/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, - "inBundle": true, - "license": "Apache-2.0", + "license": "MIT", + "optional": true, "dependencies": { - "@sigstore/protobuf-specs": "^0.5.0", - "tuf-js": "^4.1.0" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=0.10.0" } }, - "node_modules/npm/node_modules/@sigstore/verify": { - "version": "3.1.0", + "node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", "dev": true, - "inBundle": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/bundle": "^4.0.0", - "@sigstore/core": "^3.1.0", - "@sigstore/protobuf-specs": "^0.5.0" - }, + "license": "MIT", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">= 0.6" } }, - "node_modules/npm/node_modules/@tufjs/canonical-json": { - "version": "2.0.0", + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true, - "inBundle": true, + "license": "MIT" + }, + "node_modules/neotraverse": { + "version": "0.6.18", + "resolved": "https://registry.npmjs.org/neotraverse/-/neotraverse-0.6.18.tgz", + "integrity": "sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==", "license": "MIT", "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">= 10" } }, - "node_modules/npm/node_modules/@tufjs/models": { - "version": "4.1.0", + "node_modules/nerf-dart": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/nerf-dart/-/nerf-dart-1.0.0.tgz", + "integrity": "sha512-EZSPZB70jiVsivaBLYDCyntd5eH8NTSMOn3rB+HxwdmKThGELLdYv8qVIMWvZEFy9w8ZZpW9h9OB32l1rGtj7g==", + "dev": true, + "license": "MIT" + }, + "node_modules/ng-packagr": { + "version": "21.2.0", + "resolved": "https://registry.npmjs.org/ng-packagr/-/ng-packagr-21.2.0.tgz", + "integrity": "sha512-ASlXEboqt+ZgKzNPx3YCr924xqQRFA5qgm77GHf0Fm13hx7gVFYVm6WCdYZyeX/p9NJjFWAL+mIMfhsx2SHKoA==", "dev": true, - "inBundle": true, "license": "MIT", "dependencies": { - "@tufjs/canonical-json": "2.0.0", - "minimatch": "^10.1.1" + "@ampproject/remapping": "^2.3.0", + "@rollup/plugin-json": "^6.1.0", + "@rollup/wasm-node": "^4.24.0", + "ajv": "^8.17.1", + "ansi-colors": "^4.1.3", + "browserslist": "^4.26.0", + "chokidar": "^5.0.0", + "commander": "^14.0.0", + "dependency-graph": "^1.0.0", + "esbuild": "^0.27.0", + "find-cache-directory": "^6.0.0", + "injection-js": "^2.4.0", + "jsonc-parser": "^3.3.1", + "less": "^4.2.0", + "ora": "^9.0.0", + "piscina": "^5.0.0", + "postcss": "^8.4.47", + "rollup-plugin-dts": "^6.2.0", + "rxjs": "^7.8.1", + "sass": "^1.81.0", + "tinyglobby": "^0.2.12" + }, + "bin": { + "ng-packagr": "src/cli/main.js" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + }, + "optionalDependencies": { + "rollup": "^4.24.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^21.0.0 || ^21.2.0-next", + "tailwindcss": "^2.0.0 || ^3.0.0 || ^4.0.0", + "tslib": "^2.3.0", + "typescript": ">=5.9 <6.0" + }, + "peerDependenciesMeta": { + "tailwindcss": { + "optional": true + } } }, - "node_modules/npm/node_modules/abbrev": { - "version": "4.0.0", + "node_modules/ng-packagr/node_modules/commander": { + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz", + "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==", "dev": true, - "inBundle": true, - "license": "ISC", + "license": "MIT", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=20" } }, - "node_modules/npm/node_modules/agent-base": { - "version": "7.1.4", - "dev": true, - "inBundle": true, + "node_modules/nlcst-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-4.0.0.tgz", + "integrity": "sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==", "license": "MIT", - "engines": { - "node": ">= 14" + "dependencies": { + "@types/nlcst": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/npm/node_modules/ansi-regex": { - "version": "5.0.1", + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", "dev": true, - "inBundle": true, "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" } }, - "node_modules/npm/node_modules/aproba": { - "version": "2.1.0", + "node_modules/node-abort-controller": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", + "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==", "dev": true, - "inBundle": true, - "license": "ISC" + "license": "MIT" }, - "node_modules/npm/node_modules/archy": { - "version": "1.0.0", + "node_modules/node-addon-api": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", + "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", "dev": true, - "inBundle": true, - "license": "MIT" + "license": "MIT", + "optional": true }, - "node_modules/npm/node_modules/bin-links": { - "version": "6.0.0", + "node_modules/node-emoji": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-2.2.0.tgz", + "integrity": "sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==", "dev": true, - "inBundle": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "cmd-shim": "^8.0.0", - "npm-normalize-package-bin": "^5.0.0", - "proc-log": "^6.0.0", - "read-cmd-shim": "^6.0.0", - "write-file-atomic": "^7.0.0" + "@sindresorhus/is": "^4.6.0", + "char-regex": "^1.0.2", + "emojilib": "^2.4.0", + "skin-tone": "^2.0.0" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=18" } }, - "node_modules/npm/node_modules/binary-extensions": { - "version": "3.1.0", + "node_modules/node-emoji/node_modules/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", "dev": true, - "inBundle": true, "license": "MIT", "engines": { - "node": ">=18.20" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sindresorhus/is?sponsor=1" } }, - "node_modules/npm/node_modules/cacache": { - "version": "20.0.3", + "node_modules/node-exports-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/node-exports-info/-/node-exports-info-1.6.0.tgz", + "integrity": "sha512-pyFS63ptit/P5WqUkt+UUfe+4oevH+bFeIiPPdfb0pFeYEu/1ELnJu5l+5EcTKYL5M7zaAa7S8ddywgXypqKCw==", "dev": true, - "inBundle": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "@npmcli/fs": "^5.0.0", - "fs-minipass": "^3.0.0", - "glob": "^13.0.0", - "lru-cache": "^11.1.0", - "minipass": "^7.0.3", - "minipass-collect": "^2.0.1", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^7.0.2", - "ssri": "^13.0.0", - "unique-filename": "^5.0.0" + "array.prototype.flatmap": "^1.3.3", + "es-errors": "^1.3.0", + "object.entries": "^1.1.9", + "semver": "^6.3.1" }, "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/npm/node_modules/chalk": { - "version": "5.6.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/npm/node_modules/chownr": { - "version": "3.0.0", + "node_modules/node-exports-info/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "inBundle": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/npm/node_modules/ci-info": { - "version": "4.4.0", + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "inBundle": true, "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/cidr-regex": { - "version": "5.0.2", - "dev": true, - "inBundle": true, - "license": "BSD-2-Clause", "dependencies": { - "ip-regex": "5.0.0" + "whatwg-url": "^5.0.0" }, "engines": { - "node": ">=20" + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, - "node_modules/npm/node_modules/cli-columns": { - "version": "4.0.0", + "node_modules/node-fetch-native": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz", + "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==", + "license": "MIT" + }, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">= 10" - } + "license": "MIT" }, - "node_modules/npm/node_modules/cmd-shim": { - "version": "8.0.0", + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^20.17.0 || >=22.9.0" + "license": "BSD-2-Clause" + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" } }, - "node_modules/npm/node_modules/common-ancestor-path": { - "version": "2.0.0", + "node_modules/node-forge": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.3.tgz", + "integrity": "sha512-rLvcdSyRCyouf6jcOIPe/BgwG/d7hKjzMKOas33/pHEr6gbq18IK9zV7DiPvzsz0oBJPme6qr6H6kGZuI9/DZg==", "dev": true, - "inBundle": true, - "license": "BlueOak-1.0.0", + "license": "(BSD-3-Clause OR GPL-2.0)", "engines": { - "node": ">= 18" + "node": ">= 6.13.0" } }, - "node_modules/npm/node_modules/cssesc": { - "version": "3.0.0", + "node_modules/node-gyp": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-12.2.0.tgz", + "integrity": "sha512-q23WdzrQv48KozXlr0U1v9dwO/k59NHeSzn6loGcasyf0UnSrtzs8kRxM+mfwJSf0DkX0s43hcqgnSO4/VNthQ==", "dev": true, - "inBundle": true, "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^15.0.0", + "nopt": "^9.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.5", + "tar": "^7.5.4", + "tinyglobby": "^0.2.12", + "which": "^6.0.0" + }, "bin": { - "cssesc": "bin/cssesc" + "node-gyp": "bin/node-gyp.js" }, "engines": { - "node": ">=4" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/debug": { - "version": "4.4.3", + "node_modules/node-gyp-build-optional-packages": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.2.2.tgz", + "integrity": "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==", "dev": true, - "inBundle": true, "license": "MIT", + "optional": true, "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" + "detect-libc": "^2.0.1" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "bin": { + "node-gyp-build-optional-packages": "bin.js", + "node-gyp-build-optional-packages-optional": "optional.js", + "node-gyp-build-optional-packages-test": "build-test.js" } }, - "node_modules/npm/node_modules/diff": { - "version": "8.0.3", + "node_modules/node-gyp/node_modules/isexe": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-4.0.0.tgz", + "integrity": "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==", "dev": true, - "inBundle": true, - "license": "BSD-3-Clause", + "license": "BlueOak-1.0.0", "engines": { - "node": ">=0.3.1" + "node": ">=20" } }, - "node_modules/npm/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/encoding": { - "version": "0.1.13", + "node_modules/node-gyp/node_modules/which": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-6.0.1.tgz", + "integrity": "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==", "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true, + "license": "ISC", "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/npm/node_modules/env-paths": { - "version": "2.2.1", - "dev": true, - "inBundle": true, - "license": "MIT", + "isexe": "^4.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, "engines": { - "node": ">=6" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/err-code": { - "version": "2.0.3", + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", "dev": true, - "inBundle": true, "license": "MIT" }, - "node_modules/npm/node_modules/exponential-backoff": { - "version": "3.1.3", + "node_modules/node-machine-id": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/node-machine-id/-/node-machine-id-1.1.12.tgz", + "integrity": "sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ==", "dev": true, - "inBundle": true, - "license": "Apache-2.0" + "license": "MIT" }, - "node_modules/npm/node_modules/fastest-levenshtein": { - "version": "1.0.16", + "node_modules/node-mock-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/node-mock-http/-/node-mock-http-1.0.4.tgz", + "integrity": "sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ==", + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.36", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.36.tgz", + "integrity": "sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==", + "license": "MIT" + }, + "node_modules/node-schedule": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/node-schedule/-/node-schedule-2.1.1.tgz", + "integrity": "sha512-OXdegQq03OmXEjt2hZP33W2YPs/E5BcFQks46+G2gAxs4gHOIVD1u7EqlYLYSKsaIpyKCK9Gbk0ta1/gjRSMRQ==", "dev": true, - "inBundle": true, "license": "MIT", + "dependencies": { + "cron-parser": "^4.2.0", + "long-timeout": "0.1.1", + "sorted-array-functions": "^1.3.0" + }, "engines": { - "node": ">= 4.9.1" + "node": ">=6" } }, - "node_modules/npm/node_modules/fs-minipass": { - "version": "3.0.3", + "node_modules/nopt": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-9.0.0.tgz", + "integrity": "sha512-Zhq3a+yFKrYwSBluL4H9XP3m3y5uvQkB/09CwDruCiRmR/UJYnn9W4R48ry0uGC70aeTPKLynBtscP9efFFcPw==", "dev": true, - "inBundle": true, "license": "ISC", "dependencies": { - "minipass": "^7.0.3" + "abbrev": "^4.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/glob": { - "version": "13.0.2", + "node_modules/normalize-package-data": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", + "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", "dev": true, - "inBundle": true, - "license": "BlueOak-1.0.0", + "license": "BSD-2-Clause", "dependencies": { - "minimatch": "^10.1.2", - "minipass": "^7.1.2", - "path-scurry": "^2.0.0" + "hosted-git-info": "^7.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" }, "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/npm/node_modules/graceful-fs": { - "version": "4.2.11", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/hosted-git-info": { - "version": "9.0.2", + "node_modules/normalize-package-data/node_modules/hosted-git-info": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", + "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", "dev": true, - "inBundle": true, "license": "ISC", "dependencies": { - "lru-cache": "^11.1.0" + "lru-cache": "^10.0.1" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/npm/node_modules/http-cache-semantics": { - "version": "4.2.0", + "node_modules/normalize-package-data/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "dev": true, - "inBundle": true, - "license": "BSD-2-Clause" + "license": "ISC" }, - "node_modules/npm/node_modules/http-proxy-agent": { - "version": "7.0.2", - "dev": true, - "inBundle": true, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "license": "MIT", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, "engines": { - "node": ">= 14" + "node": ">=0.10.0" } }, - "node_modules/npm/node_modules/https-proxy-agent": { - "version": "7.0.6", + "node_modules/normalize-url": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.1.1.tgz", + "integrity": "sha512-JYc0DPlpGWB40kH5g07gGTrYuMqV653k3uBKY6uITPWds3M0ov3GaWGp9lbE3Bzngx8+XkfzgvASb9vk9JDFXQ==", "dev": true, - "inBundle": true, "license": "MIT", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" - }, "engines": { - "node": ">= 14" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm/node_modules/iconv-lite": { - "version": "0.6.3", + "node_modules/npm": { + "version": "11.11.1", + "resolved": "https://registry.npmjs.org/npm/-/npm-11.11.1.tgz", + "integrity": "sha512-asazCodkFdz1ReQzukyzS/DD77uGCIqUFeRG3gtaT8b9UR0ne1m9QOBuMgT72ij1rt7TRrOox4A1WzntMWIuEg==", + "bundleDependencies": [ + "@isaacs/string-locale-compare", + "@npmcli/arborist", + "@npmcli/config", + "@npmcli/fs", + "@npmcli/map-workspaces", + "@npmcli/metavuln-calculator", + "@npmcli/package-json", + "@npmcli/promise-spawn", + "@npmcli/redact", + "@npmcli/run-script", + "@sigstore/tuf", + "abbrev", + "archy", + "cacache", + "chalk", + "ci-info", + "fastest-levenshtein", + "fs-minipass", + "glob", + "graceful-fs", + "hosted-git-info", + "ini", + "init-package-json", + "is-cidr", + "json-parse-even-better-errors", + "libnpmaccess", + "libnpmdiff", + "libnpmexec", + "libnpmfund", + "libnpmorg", + "libnpmpack", + "libnpmpublish", + "libnpmsearch", + "libnpmteam", + "libnpmversion", + "make-fetch-happen", + "minimatch", + "minipass", + "minipass-pipeline", + "ms", + "node-gyp", + "nopt", + "npm-audit-report", + "npm-install-checks", + "npm-package-arg", + "npm-pick-manifest", + "npm-profile", + "npm-registry-fetch", + "npm-user-validate", + "p-map", + "pacote", + "parse-conflict-json", + "proc-log", + "qrcode-terminal", + "read", + "semver", + "spdx-expression-parse", + "ssri", + "supports-color", + "tar", + "text-table", + "tiny-relative-date", + "treeverse", + "validate-npm-package-name", + "which" + ], "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true, + "license": "Artistic-2.0", + "workspaces": [ + "docs", + "smoke-tests", + "mock-globals", + "mock-registry", + "workspaces/*" + ], "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/arborist": "^9.4.1", + "@npmcli/config": "^10.7.1", + "@npmcli/fs": "^5.0.0", + "@npmcli/map-workspaces": "^5.0.3", + "@npmcli/metavuln-calculator": "^9.0.3", + "@npmcli/package-json": "^7.0.5", + "@npmcli/promise-spawn": "^9.0.1", + "@npmcli/redact": "^4.0.0", + "@npmcli/run-script": "^10.0.4", + "@sigstore/tuf": "^4.0.1", + "abbrev": "^4.0.0", + "archy": "~1.0.0", + "cacache": "^20.0.3", + "chalk": "^5.6.2", + "ci-info": "^4.4.0", + "fastest-levenshtein": "^1.0.16", + "fs-minipass": "^3.0.3", + "glob": "^13.0.6", + "graceful-fs": "^4.2.11", + "hosted-git-info": "^9.0.2", + "ini": "^6.0.0", + "init-package-json": "^8.2.5", + "is-cidr": "^6.0.3", + "json-parse-even-better-errors": "^5.0.0", + "libnpmaccess": "^10.0.3", + "libnpmdiff": "^8.1.4", + "libnpmexec": "^10.2.4", + "libnpmfund": "^7.0.18", + "libnpmorg": "^8.0.1", + "libnpmpack": "^9.1.4", + "libnpmpublish": "^11.1.3", + "libnpmsearch": "^9.0.1", + "libnpmteam": "^8.0.2", + "libnpmversion": "^8.0.3", + "make-fetch-happen": "^15.0.4", + "minimatch": "^10.2.4", + "minipass": "^7.1.3", + "minipass-pipeline": "^1.2.4", + "ms": "^2.1.2", + "node-gyp": "^12.2.0", + "nopt": "^9.0.0", + "npm-audit-report": "^7.0.0", + "npm-install-checks": "^8.0.0", + "npm-package-arg": "^13.0.2", + "npm-pick-manifest": "^11.0.3", + "npm-profile": "^12.0.1", + "npm-registry-fetch": "^19.1.1", + "npm-user-validate": "^4.0.0", + "p-map": "^7.0.4", + "pacote": "^21.5.0", + "parse-conflict-json": "^5.0.1", + "proc-log": "^6.1.0", + "qrcode-terminal": "^0.12.0", + "read": "^5.0.1", + "semver": "^7.7.4", + "spdx-expression-parse": "^4.0.0", + "ssri": "^13.0.1", + "supports-color": "^10.2.2", + "tar": "^7.5.11", + "text-table": "~0.2.0", + "tiny-relative-date": "^2.0.2", + "treeverse": "^3.0.0", + "validate-npm-package-name": "^7.0.2", + "which": "^6.0.1" + }, + "bin": { + "npm": "bin/npm-cli.js", + "npx": "bin/npx-cli.js" }, "engines": { - "node": ">=0.10.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/ignore-walk": { - "version": "8.0.0", + "node_modules/npm-bundled": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-5.0.0.tgz", + "integrity": "sha512-JLSpbzh6UUXIEoqPsYBvVNVmyrjVZ1fzEFbqxKkTJQkWBO3xFzFT+KDnSKQWwOQNbuWRwt5LSD6HOTLGIWzfrw==", "dev": true, - "inBundle": true, "license": "ISC", "dependencies": { - "minimatch": "^10.0.3" + "npm-normalize-package-bin": "^5.0.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/imurmurhash": { - "version": "0.1.4", + "node_modules/npm-check-updates": { + "version": "19.6.3", + "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-19.6.3.tgz", + "integrity": "sha512-VAt9Bp26eLaymZ0nZyh5n/by+YZIuegXlvWR0yv1zBqd984f8VnEnBbn+1lS3nN5LyEjn62BJ+yYgzNSpb6Gzg==", "dev": true, - "inBundle": true, - "license": "MIT", + "license": "Apache-2.0", + "bin": { + "ncu": "build/cli.js", + "npm-check-updates": "build/cli.js" + }, "engines": { - "node": ">=0.8.19" + "node": ">=20.0.0", + "npm": ">=8.12.1" } }, - "node_modules/npm/node_modules/ini": { - "version": "6.0.0", + "node_modules/npm-install-checks": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-8.0.0.tgz", + "integrity": "sha512-ScAUdMpyzkbpxoNekQ3tNRdFI8SJ86wgKZSQZdUxT+bj0wVFpsEMWnkXP0twVe1gJyNF5apBWDJhhIbgrIViRA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-5.0.0.tgz", + "integrity": "sha512-CJi3OS4JLsNMmr2u07OJlhcrPxCeOeP/4xq67aWNai6TNWWbTrlNDgl8NcFKVlcBKp18GPj+EzbNIgrBfZhsag==", "dev": true, - "inBundle": true, "license": "ISC", "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/init-package-json": { - "version": "8.2.4", + "node_modules/npm-package-arg": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-13.0.2.tgz", + "integrity": "sha512-IciCE3SY3uE84Ld8WZU23gAPPV9rIYod4F+rc+vJ7h7cwAJt9Vk6TVsK60ry7Uj3SRS3bqRRIGuTp9YVlk6WNA==", "dev": true, - "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/package-json": "^7.0.0", - "npm-package-arg": "^13.0.0", - "promzard": "^3.0.1", - "read": "^5.0.1", - "semver": "^7.7.2", - "validate-npm-package-license": "^3.0.4", + "hosted-git-info": "^9.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.5", "validate-npm-package-name": "^7.0.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/ip-address": { - "version": "10.1.0", + "node_modules/npm-packlist": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-10.0.4.tgz", + "integrity": "sha512-uMW73iajD8hiH4ZBxEV3HC+eTnppIqwakjOYuvgddnalIw2lJguKviK1pcUJDlIWm1wSJkchpDZDSVVsZEYRng==", "dev": true, - "inBundle": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "ignore-walk": "^8.0.0", + "proc-log": "^6.0.0" + }, "engines": { - "node": ">= 12" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/ip-regex": { - "version": "5.0.0", + "node_modules/npm-pick-manifest": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-11.0.3.tgz", + "integrity": "sha512-buzyCfeoGY/PxKqmBqn1IUJrZnUi1VVJTdSSRPGI60tJdUhUoSQFhs0zycJokDdOznQentgrpf8LayEHyyYlqQ==", "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "license": "ISC", + "dependencies": { + "npm-install-checks": "^8.0.0", + "npm-normalize-package-bin": "^5.0.0", + "npm-package-arg": "^13.0.0", + "semver": "^7.3.5" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/is-cidr": { - "version": "6.0.3", + "node_modules/npm-registry-fetch": { + "version": "19.1.1", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-19.1.1.tgz", + "integrity": "sha512-TakBap6OM1w0H73VZVDf44iFXsOS3h+L4wVMXmbWOQroZgFhMch0juN6XSzBNlD965yIKvWg2dfu7NSiaYLxtw==", "dev": true, - "inBundle": true, - "license": "BSD-2-Clause", + "license": "ISC", "dependencies": { - "cidr-regex": "^5.0.1" + "@npmcli/redact": "^4.0.0", + "jsonparse": "^1.3.1", + "make-fetch-happen": "^15.0.0", + "minipass": "^7.0.2", + "minipass-fetch": "^5.0.0", + "minizlib": "^3.0.1", + "npm-package-arg": "^13.0.0", + "proc-log": "^6.0.0" }, "engines": { - "node": ">=20" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, - "inBundle": true, "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, "engines": { "node": ">=8" } }, - "node_modules/npm/node_modules/isexe": { - "version": "4.0.0", + "node_modules/npm/node_modules/@gar/promise-retry": { + "version": "1.0.2", "dev": true, "inBundle": true, - "license": "BlueOak-1.0.0", + "license": "MIT", + "dependencies": { + "retry": "^0.13.1" + }, "engines": { - "node": ">=20" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/json-parse-even-better-errors": { - "version": "5.0.0", + "node_modules/npm/node_modules/@gar/promise-retry/node_modules/retry": { + "version": "0.13.1", "dev": true, "inBundle": true, "license": "MIT", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">= 4" } }, - "node_modules/npm/node_modules/json-stringify-nice": { - "version": "1.1.4", + "node_modules/npm/node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", "dev": true, "inBundle": true, "license": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/npm/node_modules/jsonparse": { - "version": "1.3.1", - "dev": true, - "engines": [ - "node >= 0.2.0" - ], - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/just-diff": { - "version": "6.0.2", + "node_modules/npm/node_modules/@isaacs/string-locale-compare": { + "version": "1.1.0", "dev": true, "inBundle": true, - "license": "MIT" + "license": "ISC" }, - "node_modules/npm/node_modules/just-diff-apply": { - "version": "5.5.0", + "node_modules/npm/node_modules/@npmcli/agent": { + "version": "4.0.0", "dev": true, "inBundle": true, - "license": "MIT" + "license": "ISC", + "dependencies": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^11.2.1", + "socks-proxy-agent": "^8.0.3" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } }, - "node_modules/npm/node_modules/libnpmaccess": { - "version": "10.0.3", + "node_modules/npm/node_modules/@npmcli/arborist": { + "version": "9.4.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { + "@gar/promise-retry": "^1.0.0", + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/fs": "^5.0.0", + "@npmcli/installed-package-contents": "^4.0.0", + "@npmcli/map-workspaces": "^5.0.0", + "@npmcli/metavuln-calculator": "^9.0.2", + "@npmcli/name-from-folder": "^4.0.0", + "@npmcli/node-gyp": "^5.0.0", + "@npmcli/package-json": "^7.0.0", + "@npmcli/query": "^5.0.0", + "@npmcli/redact": "^4.0.0", + "@npmcli/run-script": "^10.0.0", + "bin-links": "^6.0.0", + "cacache": "^20.0.1", + "common-ancestor-path": "^2.0.0", + "hosted-git-info": "^9.0.0", + "json-stringify-nice": "^1.1.4", + "lru-cache": "^11.2.1", + "minimatch": "^10.0.3", + "nopt": "^9.0.0", + "npm-install-checks": "^8.0.0", "npm-package-arg": "^13.0.0", - "npm-registry-fetch": "^19.0.0" + "npm-pick-manifest": "^11.0.1", + "npm-registry-fetch": "^19.0.0", + "pacote": "^21.0.2", + "parse-conflict-json": "^5.0.1", + "proc-log": "^6.0.0", + "proggy": "^4.0.0", + "promise-all-reject-late": "^1.0.0", + "promise-call-limit": "^3.0.1", + "semver": "^7.3.7", + "ssri": "^13.0.0", + "treeverse": "^3.0.0", + "walk-up-path": "^4.0.0" + }, + "bin": { + "arborist": "bin/index.js" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/libnpmdiff": { - "version": "8.1.1", + "node_modules/npm/node_modules/@npmcli/config": { + "version": "10.7.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^9.3.0", - "@npmcli/installed-package-contents": "^4.0.0", - "binary-extensions": "^3.0.0", - "diff": "^8.0.2", - "minimatch": "^10.0.3", - "npm-package-arg": "^13.0.0", - "pacote": "^21.0.2", - "tar": "^7.5.1" + "@npmcli/map-workspaces": "^5.0.0", + "@npmcli/package-json": "^7.0.0", + "ci-info": "^4.0.0", + "ini": "^6.0.0", + "nopt": "^9.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.5", + "walk-up-path": "^4.0.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/libnpmexec": { - "version": "10.2.1", + "node_modules/npm/node_modules/@npmcli/fs": { + "version": "5.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^9.3.0", - "@npmcli/package-json": "^7.0.0", - "@npmcli/run-script": "^10.0.0", - "ci-info": "^4.0.0", - "npm-package-arg": "^13.0.0", - "pacote": "^21.0.2", - "proc-log": "^6.0.0", - "promise-retry": "^2.0.1", - "read": "^5.0.1", - "semver": "^7.3.7", - "signal-exit": "^4.1.0", - "walk-up-path": "^4.0.0" + "semver": "^7.3.5" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/libnpmfund": { - "version": "7.0.15", + "node_modules/npm/node_modules/@npmcli/git": { + "version": "7.0.2", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^9.3.0" + "@gar/promise-retry": "^1.0.0", + "@npmcli/promise-spawn": "^9.0.0", + "ini": "^6.0.0", + "lru-cache": "^11.2.1", + "npm-pick-manifest": "^11.0.1", + "proc-log": "^6.0.0", + "semver": "^7.3.5", + "which": "^6.0.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/libnpmorg": { - "version": "8.0.1", + "node_modules/npm/node_modules/@npmcli/installed-package-contents": { + "version": "4.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^19.0.0" + "npm-bundled": "^5.0.0", + "npm-normalize-package-bin": "^5.0.0" + }, + "bin": { + "installed-package-contents": "bin/index.js" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/libnpmpack": { - "version": "9.1.1", + "node_modules/npm/node_modules/@npmcli/map-workspaces": { + "version": "5.0.3", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^9.3.0", - "@npmcli/run-script": "^10.0.0", - "npm-package-arg": "^13.0.0", - "pacote": "^21.0.2" + "@npmcli/name-from-folder": "^4.0.0", + "@npmcli/package-json": "^7.0.0", + "glob": "^13.0.0", + "minimatch": "^10.0.3" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/libnpmpublish": { - "version": "11.1.3", + "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { + "version": "9.0.3", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/package-json": "^7.0.0", - "ci-info": "^4.0.0", - "npm-package-arg": "^13.0.0", - "npm-registry-fetch": "^19.0.0", + "cacache": "^20.0.0", + "json-parse-even-better-errors": "^5.0.0", + "pacote": "^21.0.0", "proc-log": "^6.0.0", - "semver": "^7.3.7", - "sigstore": "^4.0.0", - "ssri": "^13.0.0" + "semver": "^7.3.5" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/libnpmsearch": { - "version": "9.0.1", + "node_modules/npm/node_modules/@npmcli/name-from-folder": { + "version": "4.0.0", "dev": true, "inBundle": true, "license": "ISC", - "dependencies": { - "npm-registry-fetch": "^19.0.0" - }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/libnpmteam": { - "version": "8.0.2", + "node_modules/npm/node_modules/@npmcli/node-gyp": { + "version": "5.0.0", "dev": true, "inBundle": true, "license": "ISC", - "dependencies": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^19.0.0" - }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/libnpmversion": { - "version": "8.0.3", + "node_modules/npm/node_modules/@npmcli/package-json": { + "version": "7.0.5", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "@npmcli/git": "^7.0.0", - "@npmcli/run-script": "^10.0.0", + "glob": "^13.0.0", + "hosted-git-info": "^9.0.0", "json-parse-even-better-errors": "^5.0.0", "proc-log": "^6.0.0", - "semver": "^7.3.7" + "semver": "^7.5.3", + "spdx-expression-parse": "^4.0.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/lru-cache": { - "version": "11.2.6", - "dev": true, - "inBundle": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/npm/node_modules/make-fetch-happen": { - "version": "15.0.3", + "node_modules/npm/node_modules/@npmcli/promise-spawn": { + "version": "9.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/agent": "^4.0.0", - "cacache": "^20.0.1", - "http-cache-semantics": "^4.1.1", - "minipass": "^7.0.2", - "minipass-fetch": "^5.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^1.0.0", - "proc-log": "^6.0.0", - "promise-retry": "^2.0.1", - "ssri": "^13.0.0" + "which": "^6.0.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/minimatch": { - "version": "10.1.2", + "node_modules/npm/node_modules/@npmcli/query": { + "version": "5.0.0", "dev": true, "inBundle": true, - "license": "BlueOak-1.0.0", + "license": "ISC", "dependencies": { - "@isaacs/brace-expansion": "^5.0.1" + "postcss-selector-parser": "^7.0.0" }, "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/minipass": { - "version": "7.1.2", + "node_modules/npm/node_modules/@npmcli/redact": { + "version": "4.0.0", "dev": true, "inBundle": true, "license": "ISC", "engines": { - "node": ">=16 || 14 >=14.17" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/minipass-collect": { - "version": "2.0.1", + "node_modules/npm/node_modules/@npmcli/run-script": { + "version": "10.0.4", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "minipass": "^7.0.3" + "@npmcli/node-gyp": "^5.0.0", + "@npmcli/package-json": "^7.0.0", + "@npmcli/promise-spawn": "^9.0.0", + "node-gyp": "^12.1.0", + "proc-log": "^6.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/minipass-fetch": { - "version": "5.0.1", + "node_modules/npm/node_modules/@sigstore/bundle": { + "version": "4.0.0", "dev": true, "inBundle": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "minipass": "^7.0.3", - "minipass-sized": "^2.0.0", - "minizlib": "^3.0.1" + "@sigstore/protobuf-specs": "^0.5.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" } }, - "node_modules/npm/node_modules/minipass-flush": { - "version": "1.0.5", + "node_modules/npm/node_modules/@sigstore/core": { + "version": "3.1.0", "dev": true, "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, + "license": "Apache-2.0", "engines": { - "node": ">= 8" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/minipass-flush/node_modules/minipass": { - "version": "3.3.6", + "node_modules/npm/node_modules/@sigstore/protobuf-specs": { + "version": "0.5.0", "dev": true, "inBundle": true, - "license": "ISC", + "license": "Apache-2.0", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@sigstore/sign": { + "version": "4.1.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", "dependencies": { - "yallist": "^4.0.0" + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.1.0", + "@sigstore/protobuf-specs": "^0.5.0", + "make-fetch-happen": "^15.0.3", + "proc-log": "^6.1.0", + "promise-retry": "^2.0.1" }, "engines": { - "node": ">=8" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/minipass-pipeline": { - "version": "1.2.4", + "node_modules/npm/node_modules/@sigstore/tuf": { + "version": "4.0.1", "dev": true, "inBundle": true, - "license": "ISC", + "license": "Apache-2.0", "dependencies": { - "minipass": "^3.0.0" + "@sigstore/protobuf-specs": "^0.5.0", + "tuf-js": "^4.1.0" }, "engines": { - "node": ">=8" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass": { - "version": "3.3.6", + "node_modules/npm/node_modules/@sigstore/verify": { + "version": "3.1.0", "dev": true, "inBundle": true, - "license": "ISC", + "license": "Apache-2.0", "dependencies": { - "yallist": "^4.0.0" + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.1.0", + "@sigstore/protobuf-specs": "^0.5.0" }, "engines": { - "node": ">=8" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/minipass-sized": { + "node_modules/npm/node_modules/@tufjs/canonical-json": { "version": "2.0.0", "dev": true, "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.1.2" - }, + "license": "MIT", "engines": { - "node": ">=8" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/npm/node_modules/minizlib": { - "version": "3.1.0", + "node_modules/npm/node_modules/@tufjs/models": { + "version": "4.1.0", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "minipass": "^7.1.2" + "@tufjs/canonical-json": "2.0.0", + "minimatch": "^10.1.1" }, "engines": { - "node": ">= 18" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/ms": { - "version": "2.1.3", + "node_modules/npm/node_modules/abbrev": { + "version": "4.0.0", "dev": true, "inBundle": true, - "license": "MIT" + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } }, - "node_modules/npm/node_modules/mute-stream": { - "version": "3.0.0", + "node_modules/npm/node_modules/agent-base": { + "version": "7.1.4", "dev": true, "inBundle": true, - "license": "ISC", + "license": "MIT", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">= 14" } }, - "node_modules/npm/node_modules/negotiator": { + "node_modules/npm/node_modules/aproba": { + "version": "2.1.0", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/archy": { "version": "1.0.0", "dev": true, "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/balanced-match": { + "version": "4.0.4", + "dev": true, + "inBundle": true, "license": "MIT", "engines": { - "node": ">= 0.6" + "node": "18 || 20 || >=22" } }, - "node_modules/npm/node_modules/node-gyp": { - "version": "12.2.0", + "node_modules/npm/node_modules/bin-links": { + "version": "6.0.0", "dev": true, "inBundle": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^15.0.0", - "nopt": "^9.0.0", + "cmd-shim": "^8.0.0", + "npm-normalize-package-bin": "^5.0.0", "proc-log": "^6.0.0", - "semver": "^7.3.5", - "tar": "^7.5.4", - "tinyglobby": "^0.2.12", - "which": "^6.0.0" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" + "read-cmd-shim": "^6.0.0", + "write-file-atomic": "^7.0.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/nopt": { - "version": "9.0.0", + "node_modules/npm/node_modules/binary-extensions": { + "version": "3.1.0", "dev": true, "inBundle": true, - "license": "ISC", - "dependencies": { - "abbrev": "^4.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" - }, + "license": "MIT", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=18.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm/node_modules/npm-audit-report": { - "version": "7.0.0", + "node_modules/npm/node_modules/brace-expansion": { + "version": "5.0.4", "dev": true, "inBundle": true, - "license": "ISC", + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": "18 || 20 || >=22" } }, - "node_modules/npm/node_modules/npm-bundled": { - "version": "5.0.0", + "node_modules/npm/node_modules/cacache": { + "version": "20.0.3", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "npm-normalize-package-bin": "^5.0.0" + "@npmcli/fs": "^5.0.0", + "fs-minipass": "^3.0.0", + "glob": "^13.0.0", + "lru-cache": "^11.1.0", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^7.0.2", + "ssri": "^13.0.0", + "unique-filename": "^5.0.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/npm-install-checks": { - "version": "8.0.0", + "node_modules/npm/node_modules/chalk": { + "version": "5.6.2", "dev": true, "inBundle": true, - "license": "BSD-2-Clause", - "dependencies": { - "semver": "^7.1.1" + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/npm/node_modules/chownr": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "BlueOak-1.0.0", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=18" } }, - "node_modules/npm/node_modules/npm-normalize-package-bin": { - "version": "5.0.0", + "node_modules/npm/node_modules/ci-info": { + "version": "4.4.0", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], "inBundle": true, - "license": "ISC", + "license": "MIT", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=8" } }, - "node_modules/npm/node_modules/npm-package-arg": { - "version": "13.0.2", + "node_modules/npm/node_modules/cidr-regex": { + "version": "5.0.3", "dev": true, "inBundle": true, - "license": "ISC", - "dependencies": { - "hosted-git-info": "^9.0.0", - "proc-log": "^6.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^7.0.0" - }, + "license": "BSD-2-Clause", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=20" } }, - "node_modules/npm/node_modules/npm-packlist": { - "version": "10.0.3", + "node_modules/npm/node_modules/cmd-shim": { + "version": "8.0.0", "dev": true, "inBundle": true, "license": "ISC", - "dependencies": { - "ignore-walk": "^8.0.0", - "proc-log": "^6.0.0" - }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/npm-pick-manifest": { - "version": "11.0.3", + "node_modules/npm/node_modules/common-ancestor-path": { + "version": "2.0.0", "dev": true, "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-install-checks": "^8.0.0", - "npm-normalize-package-bin": "^5.0.0", - "npm-package-arg": "^13.0.0", - "semver": "^7.3.5" - }, + "license": "BlueOak-1.0.0", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">= 18" } }, - "node_modules/npm/node_modules/npm-profile": { - "version": "12.0.1", + "node_modules/npm/node_modules/cssesc": { + "version": "3.0.0", "dev": true, "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-registry-fetch": "^19.0.0", - "proc-log": "^6.0.0" + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=4" } }, - "node_modules/npm/node_modules/npm-registry-fetch": { - "version": "19.1.1", + "node_modules/npm/node_modules/debug": { + "version": "4.4.3", "dev": true, "inBundle": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "@npmcli/redact": "^4.0.0", - "jsonparse": "^1.3.1", - "make-fetch-happen": "^15.0.0", - "minipass": "^7.0.2", - "minipass-fetch": "^5.0.0", - "minizlib": "^3.0.1", - "npm-package-arg": "^13.0.0", - "proc-log": "^6.0.0" + "ms": "^2.1.3" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/npm/node_modules/npm-user-validate": { - "version": "4.0.0", + "node_modules/npm/node_modules/diff": { + "version": "8.0.3", "dev": true, "inBundle": true, - "license": "BSD-2-Clause", + "license": "BSD-3-Clause", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=0.3.1" } }, - "node_modules/npm/node_modules/p-map": { - "version": "7.0.4", + "node_modules/npm/node_modules/env-paths": { + "version": "2.2.1", "dev": true, "inBundle": true, "license": "MIT", "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6" } }, - "node_modules/npm/node_modules/pacote": { - "version": "21.3.1", + "node_modules/npm/node_modules/err-code": { + "version": "2.0.3", "dev": true, "inBundle": true, - "license": "ISC", - "dependencies": { - "@npmcli/git": "^7.0.0", - "@npmcli/installed-package-contents": "^4.0.0", - "@npmcli/package-json": "^7.0.0", - "@npmcli/promise-spawn": "^9.0.0", - "@npmcli/run-script": "^10.0.0", - "cacache": "^20.0.0", - "fs-minipass": "^3.0.0", - "minipass": "^7.0.2", - "npm-package-arg": "^13.0.0", - "npm-packlist": "^10.0.1", - "npm-pick-manifest": "^11.0.1", - "npm-registry-fetch": "^19.0.0", - "proc-log": "^6.0.0", - "promise-retry": "^2.0.1", - "sigstore": "^4.0.0", - "ssri": "^13.0.0", - "tar": "^7.4.3" - }, - "bin": { - "pacote": "bin/index.js" - }, + "license": "MIT" + }, + "node_modules/npm/node_modules/exponential-backoff": { + "version": "3.1.3", + "dev": true, + "inBundle": true, + "license": "Apache-2.0" + }, + "node_modules/npm/node_modules/fastest-levenshtein": { + "version": "1.0.16", + "dev": true, + "inBundle": true, + "license": "MIT", "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">= 4.9.1" } }, - "node_modules/npm/node_modules/parse-conflict-json": { - "version": "5.0.1", + "node_modules/npm/node_modules/fs-minipass": { + "version": "3.0.3", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "json-parse-even-better-errors": "^5.0.0", - "just-diff": "^6.0.0", - "just-diff-apply": "^5.2.0" + "minipass": "^7.0.3" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/npm/node_modules/path-scurry": { - "version": "2.0.1", + "node_modules/npm/node_modules/glob": { + "version": "13.0.6", "dev": true, "inBundle": true, "license": "BlueOak-1.0.0", "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" + "minimatch": "^10.2.2", + "minipass": "^7.1.3", + "path-scurry": "^2.0.2" }, "engines": { - "node": "20 || >=22" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/npm/node_modules/postcss-selector-parser": { - "version": "7.1.1", + "node_modules/npm/node_modules/graceful-fs": { + "version": "4.2.11", "dev": true, "inBundle": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } + "license": "ISC" }, - "node_modules/npm/node_modules/proc-log": { - "version": "6.1.0", + "node_modules/npm/node_modules/hosted-git-info": { + "version": "9.0.2", "dev": true, "inBundle": true, "license": "ISC", + "dependencies": { + "lru-cache": "^11.1.0" + }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/proggy": { - "version": "4.0.0", + "node_modules/npm/node_modules/http-cache-semantics": { + "version": "4.2.0", "dev": true, "inBundle": true, - "license": "ISC", - "engines": { - "node": "^20.17.0 || >=22.9.0" - } + "license": "BSD-2-Clause" }, - "node_modules/npm/node_modules/promise-all-reject-late": { - "version": "1.0.1", + "node_modules/npm/node_modules/http-proxy-agent": { + "version": "7.0.2", "dev": true, "inBundle": true, - "license": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" } }, - "node_modules/npm/node_modules/promise-call-limit": { - "version": "3.0.2", + "node_modules/npm/node_modules/https-proxy-agent": { + "version": "7.0.6", "dev": true, "inBundle": true, - "license": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" } }, - "node_modules/npm/node_modules/promise-retry": { - "version": "2.0.1", + "node_modules/npm/node_modules/iconv-lite": { + "version": "0.7.2", "dev": true, "inBundle": true, "license": "MIT", + "optional": true, "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { - "node": ">=10" + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/npm/node_modules/promzard": { - "version": "3.0.1", + "node_modules/npm/node_modules/ignore-walk": { + "version": "8.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "read": "^5.0.0" + "minimatch": "^10.0.3" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/qrcode-terminal": { - "version": "0.12.0", + "node_modules/npm/node_modules/imurmurhash": { + "version": "0.1.4", "dev": true, "inBundle": true, - "bin": { - "qrcode-terminal": "bin/qrcode-terminal.js" + "license": "MIT", + "engines": { + "node": ">=0.8.19" } }, - "node_modules/npm/node_modules/read": { - "version": "5.0.1", + "node_modules/npm/node_modules/ini": { + "version": "6.0.0", "dev": true, "inBundle": true, "license": "ISC", - "dependencies": { - "mute-stream": "^3.0.0" - }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/read-cmd-shim": { - "version": "6.0.0", + "node_modules/npm/node_modules/init-package-json": { + "version": "8.2.5", "dev": true, "inBundle": true, "license": "ISC", + "dependencies": { + "@npmcli/package-json": "^7.0.0", + "npm-package-arg": "^13.0.0", + "promzard": "^3.0.1", + "read": "^5.0.1", + "semver": "^7.7.2", + "validate-npm-package-name": "^7.0.0" + }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/retry": { - "version": "0.12.0", + "node_modules/npm/node_modules/ip-address": { + "version": "10.1.0", "dev": true, "inBundle": true, "license": "MIT", "engines": { - "node": ">= 4" + "node": ">= 12" } }, - "node_modules/npm/node_modules/safer-buffer": { - "version": "2.1.2", + "node_modules/npm/node_modules/is-cidr": { + "version": "6.0.3", "dev": true, "inBundle": true, - "license": "MIT", - "optional": true + "license": "BSD-2-Clause", + "dependencies": { + "cidr-regex": "^5.0.1" + }, + "engines": { + "node": ">=20" + } }, - "node_modules/npm/node_modules/semver": { - "version": "7.7.4", + "node_modules/npm/node_modules/isexe": { + "version": "4.0.0", "dev": true, "inBundle": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, + "license": "BlueOak-1.0.0", "engines": { - "node": ">=10" + "node": ">=20" } }, - "node_modules/npm/node_modules/signal-exit": { - "version": "4.1.0", + "node_modules/npm/node_modules/json-parse-even-better-errors": { + "version": "5.0.0", "dev": true, "inBundle": true, - "license": "ISC", + "license": "MIT", "engines": { - "node": ">=14" - }, + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/json-stringify-nice": { + "version": "1.1.4", + "dev": true, + "inBundle": true, + "license": "ISC", "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/npm/node_modules/sigstore": { - "version": "4.1.0", + "node_modules/npm/node_modules/jsonparse": { + "version": "1.3.1", + "dev": true, + "engines": [ + "node >= 0.2.0" + ], + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/just-diff": { + "version": "6.0.2", "dev": true, "inBundle": true, - "license": "Apache-2.0", + "license": "MIT" + }, + "node_modules/npm/node_modules/just-diff-apply": { + "version": "5.5.0", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/libnpmaccess": { + "version": "10.0.3", + "dev": true, + "inBundle": true, + "license": "ISC", "dependencies": { - "@sigstore/bundle": "^4.0.0", - "@sigstore/core": "^3.1.0", - "@sigstore/protobuf-specs": "^0.5.0", - "@sigstore/sign": "^4.1.0", - "@sigstore/tuf": "^4.0.1", - "@sigstore/verify": "^3.1.0" + "npm-package-arg": "^13.0.0", + "npm-registry-fetch": "^19.0.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/smart-buffer": { - "version": "4.2.0", + "node_modules/npm/node_modules/libnpmdiff": { + "version": "8.1.4", "dev": true, "inBundle": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^9.4.1", + "@npmcli/installed-package-contents": "^4.0.0", + "binary-extensions": "^3.0.0", + "diff": "^8.0.2", + "minimatch": "^10.0.3", + "npm-package-arg": "^13.0.0", + "pacote": "^21.0.2", + "tar": "^7.5.1" + }, "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/socks": { - "version": "2.8.7", + "node_modules/npm/node_modules/libnpmexec": { + "version": "10.2.4", "dev": true, "inBundle": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "ip-address": "^10.0.1", - "smart-buffer": "^4.2.0" + "@gar/promise-retry": "^1.0.0", + "@npmcli/arborist": "^9.4.1", + "@npmcli/package-json": "^7.0.0", + "@npmcli/run-script": "^10.0.0", + "ci-info": "^4.0.0", + "npm-package-arg": "^13.0.0", + "pacote": "^21.0.2", + "proc-log": "^6.0.0", + "read": "^5.0.1", + "semver": "^7.3.7", + "signal-exit": "^4.1.0", + "walk-up-path": "^4.0.0" }, "engines": { - "node": ">= 10.0.0", - "npm": ">= 3.0.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/socks-proxy-agent": { - "version": "8.0.5", + "node_modules/npm/node_modules/libnpmfund": { + "version": "7.0.18", "dev": true, "inBundle": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "agent-base": "^7.1.2", - "debug": "^4.3.4", - "socks": "^2.8.3" + "@npmcli/arborist": "^9.4.1" }, "engines": { - "node": ">= 14" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/spdx-correct": { - "version": "3.2.0", + "node_modules/npm/node_modules/libnpmorg": { + "version": "8.0.1", "dev": true, "inBundle": true, - "license": "Apache-2.0", + "license": "ISC", "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" + "aproba": "^2.0.0", + "npm-registry-fetch": "^19.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/spdx-correct/node_modules/spdx-expression-parse": { - "version": "3.0.1", + "node_modules/npm/node_modules/libnpmpack": { + "version": "9.1.4", "dev": true, "inBundle": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "@npmcli/arborist": "^9.4.1", + "@npmcli/run-script": "^10.0.0", + "npm-package-arg": "^13.0.0", + "pacote": "^21.0.2" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/spdx-exceptions": { - "version": "2.5.0", - "dev": true, - "inBundle": true, - "license": "CC-BY-3.0" - }, - "node_modules/npm/node_modules/spdx-expression-parse": { - "version": "4.0.0", + "node_modules/npm/node_modules/libnpmpublish": { + "version": "11.1.3", "dev": true, "inBundle": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "@npmcli/package-json": "^7.0.0", + "ci-info": "^4.0.0", + "npm-package-arg": "^13.0.0", + "npm-registry-fetch": "^19.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.7", + "sigstore": "^4.0.0", + "ssri": "^13.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/spdx-license-ids": { - "version": "3.0.22", - "dev": true, - "inBundle": true, - "license": "CC0-1.0" - }, - "node_modules/npm/node_modules/ssri": { - "version": "13.0.1", + "node_modules/npm/node_modules/libnpmsearch": { + "version": "9.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "minipass": "^7.0.3" + "npm-registry-fetch": "^19.0.0" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/string-width": { - "version": "4.2.3", + "node_modules/npm/node_modules/libnpmteam": { + "version": "8.0.2", "dev": true, "inBundle": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "aproba": "^2.0.0", + "npm-registry-fetch": "^19.0.0" }, "engines": { - "node": ">=8" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/strip-ansi": { - "version": "6.0.1", + "node_modules/npm/node_modules/libnpmversion": { + "version": "8.0.3", "dev": true, "inBundle": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "ansi-regex": "^5.0.1" + "@npmcli/git": "^7.0.0", + "@npmcli/run-script": "^10.0.0", + "json-parse-even-better-errors": "^5.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.7" }, "engines": { - "node": ">=8" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/supports-color": { - "version": "10.2.2", + "node_modules/npm/node_modules/lru-cache": { + "version": "11.2.6", "dev": true, "inBundle": true, - "license": "MIT", + "license": "BlueOak-1.0.0", "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "node": "20 || >=22" } }, - "node_modules/npm/node_modules/tar": { - "version": "7.5.7", + "node_modules/npm/node_modules/make-fetch-happen": { + "version": "15.0.4", "dev": true, "inBundle": true, - "license": "BlueOak-1.0.0", + "license": "ISC", "dependencies": { - "@isaacs/fs-minipass": "^4.0.0", - "chownr": "^3.0.0", - "minipass": "^7.1.2", - "minizlib": "^3.1.0", - "yallist": "^5.0.0" + "@gar/promise-retry": "^1.0.0", + "@npmcli/agent": "^4.0.0", + "cacache": "^20.0.1", + "http-cache-semantics": "^4.1.1", + "minipass": "^7.0.2", + "minipass-fetch": "^5.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^1.0.0", + "proc-log": "^6.0.0", + "ssri": "^13.0.0" }, "engines": { - "node": ">=18" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/tar/node_modules/yallist": { - "version": "5.0.0", + "node_modules/npm/node_modules/minimatch": { + "version": "10.2.4", "dev": true, "inBundle": true, "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.2" + }, "engines": { - "node": ">=18" + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/npm/node_modules/text-table": { - "version": "0.2.0", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/tiny-relative-date": { - "version": "2.0.2", + "node_modules/npm/node_modules/minipass": { + "version": "7.1.3", "dev": true, "inBundle": true, - "license": "MIT" + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=16 || 14 >=14.17" + } }, - "node_modules/npm/node_modules/tinyglobby": { - "version": "0.2.15", + "node_modules/npm/node_modules/minipass-collect": { + "version": "2.0.1", "dev": true, "inBundle": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "fdir": "^6.5.0", - "picomatch": "^4.0.3" + "minipass": "^7.0.3" }, "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/npm/node_modules/tinyglobby/node_modules/fdir": { - "version": "6.5.0", + "node_modules/npm/node_modules/minipass-fetch": { + "version": "5.0.2", "dev": true, "inBundle": true, "license": "MIT", - "engines": { - "node": ">=12.0.0" + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^2.0.0", + "minizlib": "^3.0.1" }, - "peerDependencies": { - "picomatch": "^3 || ^4" + "engines": { + "node": "^20.17.0 || >=22.9.0" }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } + "optionalDependencies": { + "iconv-lite": "^0.7.2" } }, - "node_modules/npm/node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.3", + "node_modules/npm/node_modules/minipass-flush": { + "version": "1.0.5", "dev": true, "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=12" + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "engines": { + "node": ">= 8" } }, - "node_modules/npm/node_modules/treeverse": { - "version": "3.0.0", + "node_modules/npm/node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", "dev": true, "inBundle": true, "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/npm/node_modules/tuf-js": { - "version": "4.1.0", + "node_modules/npm/node_modules/minipass-flush/node_modules/yallist": { + "version": "4.0.0", "dev": true, "inBundle": true, - "license": "MIT", + "license": "ISC" + }, + "node_modules/npm/node_modules/minipass-pipeline": { + "version": "1.2.4", + "dev": true, + "inBundle": true, + "license": "ISC", "dependencies": { - "@tufjs/models": "4.1.0", - "debug": "^4.4.3", - "make-fetch-happen": "^15.0.1" + "minipass": "^3.0.0" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=8" } }, - "node_modules/npm/node_modules/unique-filename": { - "version": "5.0.0", + "node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "unique-slug": "^6.0.0" + "yallist": "^4.0.0" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=8" } }, - "node_modules/npm/node_modules/unique-slug": { - "version": "6.0.0", + "node_modules/npm/node_modules/minipass-pipeline/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/minipass-sized": { + "version": "2.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "imurmurhash": "^0.1.4" + "minipass": "^7.1.2" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=8" } }, - "node_modules/npm/node_modules/util-deprecate": { - "version": "1.0.2", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/validate-npm-package-license": { - "version": "3.0.4", + "node_modules/npm/node_modules/minizlib": { + "version": "3.1.0", "dev": true, "inBundle": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" } }, - "node_modules/npm/node_modules/validate-npm-package-license/node_modules/spdx-expression-parse": { - "version": "3.0.1", + "node_modules/npm/node_modules/ms": { + "version": "2.1.3", "dev": true, "inBundle": true, - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } + "license": "MIT" }, - "node_modules/npm/node_modules/validate-npm-package-name": { - "version": "7.0.2", + "node_modules/npm/node_modules/mute-stream": { + "version": "3.0.0", "dev": true, "inBundle": true, "license": "ISC", @@ -37520,1083 +37166,974 @@ "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/walk-up-path": { - "version": "4.0.0", + "node_modules/npm/node_modules/negotiator": { + "version": "1.0.0", "dev": true, "inBundle": true, - "license": "ISC", + "license": "MIT", "engines": { - "node": "20 || >=22" + "node": ">= 0.6" } }, - "node_modules/npm/node_modules/which": { - "version": "6.0.1", + "node_modules/npm/node_modules/node-gyp": { + "version": "12.2.0", "dev": true, "inBundle": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "isexe": "^4.0.0" + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^15.0.0", + "nopt": "^9.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.5", + "tar": "^7.5.4", + "tinyglobby": "^0.2.12", + "which": "^6.0.0" }, "bin": { - "node-which": "bin/which.js" + "node-gyp": "bin/node-gyp.js" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/write-file-atomic": { - "version": "7.0.0", + "node_modules/npm/node_modules/nopt": { + "version": "9.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^4.0.1" + "abbrev": "^4.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" }, "engines": { "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm/node_modules/yallist": { - "version": "4.0.0", + "node_modules/npm/node_modules/npm-audit-report": { + "version": "7.0.0", "dev": true, "inBundle": true, - "license": "ISC" - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/nwsapi": { - "version": "2.2.22", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.22.tgz", - "integrity": "sha512-ujSMe1OWVn55euT1ihwCI1ZcAaAU3nxUiDwfDQldc51ZXaB9m2AyOn6/jh1BLe2t/G8xd6uKG1UBF2aZJeg2SQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/nx": { - "version": "22.3.3", - "resolved": "https://registry.npmjs.org/nx/-/nx-22.3.3.tgz", - "integrity": "sha512-pOxtKWUfvf0oD8Geqs8D89Q2xpstRTaSY+F6Ut/Wd0GnEjUjO32SS1ymAM6WggGPHDZN4qpNrd5cfIxQmAbRLg==", + "node_modules/npm/node_modules/npm-bundled": { + "version": "5.0.0", "dev": true, - "hasInstallScript": true, - "license": "MIT", + "inBundle": true, + "license": "ISC", "dependencies": { - "@napi-rs/wasm-runtime": "0.2.4", - "@yarnpkg/lockfile": "^1.1.0", - "@yarnpkg/parsers": "3.0.2", - "@zkochan/js-yaml": "0.0.7", - "axios": "^1.12.0", - "chalk": "^4.1.0", - "cli-cursor": "3.1.0", - "cli-spinners": "2.6.1", - "cliui": "^8.0.1", - "dotenv": "~16.4.5", - "dotenv-expand": "~11.0.6", - "enquirer": "~2.3.6", - "figures": "3.2.0", - "flat": "^5.0.2", - "front-matter": "^4.0.2", - "ignore": "^7.0.5", - "jest-diff": "^30.0.2", - "jsonc-parser": "3.2.0", - "lines-and-columns": "2.0.3", - "minimatch": "9.0.3", - "node-machine-id": "1.1.12", - "npm-run-path": "^4.0.1", - "open": "^8.4.0", - "ora": "5.3.0", - "resolve.exports": "2.0.3", - "semver": "^7.6.3", - "string-width": "^4.2.3", - "tar-stream": "~2.2.0", - "tmp": "~0.2.1", - "tree-kill": "^1.2.2", - "tsconfig-paths": "^4.1.2", - "tslib": "^2.3.0", - "yaml": "^2.6.0", - "yargs": "^17.6.2", - "yargs-parser": "21.1.1" - }, - "bin": { - "nx": "bin/nx.js", - "nx-cloud": "bin/nx-cloud.js" - }, - "optionalDependencies": { - "@nx/nx-darwin-arm64": "22.3.3", - "@nx/nx-darwin-x64": "22.3.3", - "@nx/nx-freebsd-x64": "22.3.3", - "@nx/nx-linux-arm-gnueabihf": "22.3.3", - "@nx/nx-linux-arm64-gnu": "22.3.3", - "@nx/nx-linux-arm64-musl": "22.3.3", - "@nx/nx-linux-x64-gnu": "22.3.3", - "@nx/nx-linux-x64-musl": "22.3.3", - "@nx/nx-win32-arm64-msvc": "22.3.3", - "@nx/nx-win32-x64-msvc": "22.3.3" - }, - "peerDependencies": { - "@swc-node/register": "^1.8.0", - "@swc/core": "^1.3.85" + "npm-normalize-package-bin": "^5.0.0" }, - "peerDependenciesMeta": { - "@swc-node/register": { - "optional": true - }, - "@swc/core": { - "optional": true - } + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/nx/node_modules/@jest/schemas": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.5.tgz", - "integrity": "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==", + "node_modules/npm/node_modules/npm-install-checks": { + "version": "8.0.0", "dev": true, - "license": "MIT", + "inBundle": true, + "license": "BSD-2-Clause", "dependencies": { - "@sinclair/typebox": "^0.34.0" + "semver": "^7.1.1" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/nx/node_modules/@napi-rs/wasm-runtime": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.4.tgz", - "integrity": "sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@emnapi/core": "^1.1.0", - "@emnapi/runtime": "^1.1.0", - "@tybys/wasm-util": "^0.9.0" - } - }, - "node_modules/nx/node_modules/@sinclair/typebox": { - "version": "0.34.47", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.47.tgz", - "integrity": "sha512-ZGIBQ+XDvO5JQku9wmwtabcVTHJsgSWAHYtVuM9pBNNR5E88v6Jcj/llpmsjivig5X8A8HHOb4/mbEKPS5EvAw==", - "dev": true, - "license": "MIT" - }, - "node_modules/nx/node_modules/@tybys/wasm-util": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.9.0.tgz", - "integrity": "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.4.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/nx/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/npm/node_modules/npm-normalize-package-bin": { + "version": "5.0.0", "dev": true, - "license": "MIT", + "inBundle": true, + "license": "ISC", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/nx/node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "node_modules/npm/node_modules/npm-package-arg": { + "version": "13.0.2", "dev": true, - "license": "MIT", + "inBundle": true, + "license": "ISC", "dependencies": { - "restore-cursor": "^3.1.0" + "hosted-git-info": "^9.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^7.0.0" }, "engines": { - "node": ">=8" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/nx/node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "node_modules/npm/node_modules/npm-packlist": { + "version": "10.0.4", "dev": true, - "license": "MIT", + "inBundle": true, + "license": "ISC", + "dependencies": { + "ignore-walk": "^8.0.0", + "proc-log": "^6.0.0" + }, "engines": { - "node": ">=8" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/nx/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/nx/node_modules/ignore": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "node_modules/npm/node_modules/npm-pick-manifest": { + "version": "11.0.3", "dev": true, - "license": "MIT", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-install-checks": "^8.0.0", + "npm-normalize-package-bin": "^5.0.0", + "npm-package-arg": "^13.0.0", + "semver": "^7.3.5" + }, "engines": { - "node": ">= 4" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/nx/node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "node_modules/npm/node_modules/npm-profile": { + "version": "12.0.1", "dev": true, - "license": "MIT", - "bin": { - "is-docker": "cli.js" + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-registry-fetch": "^19.0.0", + "proc-log": "^6.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/nx/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/npm/node_modules/npm-registry-fetch": { + "version": "19.1.1", "dev": true, - "license": "MIT", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/redact": "^4.0.0", + "jsonparse": "^1.3.1", + "make-fetch-happen": "^15.0.0", + "minipass": "^7.0.2", + "minipass-fetch": "^5.0.0", + "minizlib": "^3.0.1", + "npm-package-arg": "^13.0.0", + "proc-log": "^6.0.0" + }, "engines": { - "node": ">=8" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/nx/node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "node_modules/npm/node_modules/npm-user-validate": { + "version": "4.0.0", "dev": true, - "license": "MIT", + "inBundle": true, + "license": "BSD-2-Clause", "engines": { - "node": ">=8" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/nx/node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "node_modules/npm/node_modules/p-map": { + "version": "7.0.4", "dev": true, + "inBundle": true, "license": "MIT", "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/nx/node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "node_modules/npm/node_modules/pacote": { + "version": "21.5.0", "dev": true, - "license": "MIT", + "inBundle": true, + "license": "ISC", "dependencies": { - "is-docker": "^2.0.0" + "@gar/promise-retry": "^1.0.0", + "@npmcli/git": "^7.0.0", + "@npmcli/installed-package-contents": "^4.0.0", + "@npmcli/package-json": "^7.0.0", + "@npmcli/promise-spawn": "^9.0.0", + "@npmcli/run-script": "^10.0.0", + "cacache": "^20.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^7.0.2", + "npm-package-arg": "^13.0.0", + "npm-packlist": "^10.0.1", + "npm-pick-manifest": "^11.0.1", + "npm-registry-fetch": "^19.0.0", + "proc-log": "^6.0.0", + "sigstore": "^4.0.0", + "ssri": "^13.0.0", + "tar": "^7.4.3" + }, + "bin": { + "pacote": "bin/index.js" }, "engines": { - "node": ">=8" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/nx/node_modules/jest-diff": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.2.0.tgz", - "integrity": "sha512-dQHFo3Pt4/NLlG5z4PxZ/3yZTZ1C7s9hveiOj+GCN+uT109NC2QgsoVZsVOAvbJ3RgKkvyLGXZV9+piDpWbm6A==", + "node_modules/npm/node_modules/parse-conflict-json": { + "version": "5.0.1", "dev": true, - "license": "MIT", + "inBundle": true, + "license": "ISC", "dependencies": { - "@jest/diff-sequences": "30.0.1", - "@jest/get-type": "30.1.0", - "chalk": "^4.1.2", - "pretty-format": "30.2.0" + "json-parse-even-better-errors": "^5.0.0", + "just-diff": "^6.0.0", + "just-diff-apply": "^5.2.0" }, "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/nx/node_modules/jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "dev": true, - "license": "MIT" - }, - "node_modules/nx/node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "node_modules/npm/node_modules/path-scurry": { + "version": "2.0.2", "dev": true, - "license": "MIT", + "inBundle": true, + "license": "BlueOak-1.0.0", "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" }, "engines": { - "node": ">=10" + "node": "18 || 20 || >=22" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/nx/node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "node_modules/npm/node_modules/postcss-selector-parser": { + "version": "7.1.1", "dev": true, + "inBundle": true, "license": "MIT", "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/nx/node_modules/ora": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.3.0.tgz", - "integrity": "sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==", + "node_modules/npm/node_modules/proc-log": { + "version": "6.1.0", "dev": true, - "license": "MIT", - "dependencies": { - "bl": "^4.0.3", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "log-symbols": "^4.0.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, + "inBundle": true, + "license": "ISC", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/nx/node_modules/pretty-format": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.2.0.tgz", - "integrity": "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==", + "node_modules/npm/node_modules/proggy": { + "version": "4.0.0", "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "30.0.5", - "ansi-styles": "^5.2.0", - "react-is": "^18.3.1" - }, + "inBundle": true, + "license": "ISC", "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/nx/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "node_modules/npm/node_modules/promise-all-reject-late": { + "version": "1.0.1", "dev": true, - "license": "MIT" + "inBundle": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, - "node_modules/nx/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "node_modules/npm/node_modules/promise-call-limit": { + "version": "3.0.2", "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" + "inBundle": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/nx/node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "node_modules/npm/node_modules/promise-retry": { + "version": "2.0.1", "dev": true, + "inBundle": true, "license": "MIT", "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" + "err-code": "^2.0.2", + "retry": "^0.12.0" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/nx/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/nx/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/npm/node_modules/promzard": { + "version": "3.0.1", "dev": true, - "license": "MIT", + "inBundle": true, + "license": "ISC", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "read": "^5.0.0" }, "engines": { - "node": ">=8" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/nx/node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "node_modules/npm/node_modules/qrcode-terminal": { + "version": "0.12.0", "dev": true, - "license": "MIT", - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" + "inBundle": true, + "bin": { + "qrcode-terminal": "bin/qrcode-terminal.js" + } + }, + "node_modules/npm/node_modules/read": { + "version": "5.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "mute-stream": "^3.0.0" }, "engines": { - "node": ">=6" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/nx/node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "node_modules/npm/node_modules/read-cmd-shim": { + "version": "6.0.0", "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, + "inBundle": true, + "license": "ISC", "engines": { - "node": ">=12" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "node_modules/npm/node_modules/retry": { + "version": "0.12.0", "dev": true, + "inBundle": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">= 4" } }, - "node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "node_modules/npm/node_modules/safer-buffer": { + "version": "2.1.2", + "dev": true, + "inBundle": true, "license": "MIT", - "engines": { - "node": ">= 0.4" + "optional": true + }, + "node_modules/npm/node_modules/semver": { + "version": "7.7.4", + "dev": true, + "inBundle": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=10" } }, - "node_modules/object-is": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", - "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1" - }, + "node_modules/npm/node_modules/signal-exit": { + "version": "4.1.0", + "dev": true, + "inBundle": true, + "license": "ISC", "engines": { - "node": ">= 0.4" + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "license": "MIT", + "node_modules/npm/node_modules/sigstore": { + "version": "4.1.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.1.0", + "@sigstore/protobuf-specs": "^0.5.0", + "@sigstore/sign": "^4.1.0", + "@sigstore/tuf": "^4.0.1", + "@sigstore/verify": "^3.1.0" + }, "engines": { - "node": ">= 0.4" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/object-path": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.8.tgz", - "integrity": "sha512-YJjNZrlXJFM42wTBn6zgOJVar9KFJvzx6sTWDte8sWZF//cnjl0BxHNpfZx+ZffXX63A9q0b1zsFiBX4g4X5KA==", + "node_modules/npm/node_modules/smart-buffer": { + "version": "4.2.0", "dev": true, + "inBundle": true, "license": "MIT", "engines": { - "node": ">= 10.12.0" + "node": ">= 6.0.0", + "npm": ">= 3.0.0" } }, - "node_modules/object.assign": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", - "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "node_modules/npm/node_modules/socks": { + "version": "2.8.7", + "dev": true, + "inBundle": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0", - "has-symbols": "^1.1.0", - "object-keys": "^1.1.1" + "ip-address": "^10.0.1", + "smart-buffer": "^4.2.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 10.0.0", + "npm": ">= 3.0.0" } }, - "node_modules/object.entries": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", - "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", + "node_modules/npm/node_modules/socks-proxy-agent": { + "version": "8.0.5", "dev": true, + "inBundle": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.1.1" + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" }, "engines": { - "node": ">= 0.4" + "node": ">= 14" } }, - "node_modules/object.fromentries": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "node_modules/npm/node_modules/spdx-exceptions": { + "version": "2.5.0", + "dev": true, + "inBundle": true, + "license": "CC-BY-3.0" + }, + "node_modules/npm/node_modules/spdx-expression-parse": { + "version": "4.0.0", "dev": true, + "inBundle": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/object.groupby": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", - "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "node_modules/npm/node_modules/spdx-license-ids": { + "version": "3.0.23", "dev": true, - "license": "MIT", + "inBundle": true, + "license": "CC0-1.0" + }, + "node_modules/npm/node_modules/ssri": { + "version": "13.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2" + "minipass": "^7.0.3" }, "engines": { - "node": ">= 0.4" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/object.hasown": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.4.tgz", - "integrity": "sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==", + "node_modules/npm/node_modules/supports-color": { + "version": "10.2.2", "dev": true, + "inBundle": true, "license": "MIT", - "dependencies": { - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - }, "engines": { - "node": ">= 0.4" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/object.values": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", - "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", + "node_modules/npm/node_modules/tar": { + "version": "7.5.11", "dev": true, - "license": "MIT", + "inBundle": true, + "license": "BlueOak-1.0.0", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=18" } }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "node_modules/npm/node_modules/text-table": { + "version": "0.2.0", "dev": true, + "inBundle": true, "license": "MIT" }, - "node_modules/obug": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.1.tgz", - "integrity": "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==", + "node_modules/npm/node_modules/tiny-relative-date": { + "version": "2.0.2", "dev": true, - "funding": [ - "https://github.com/sponsors/sxzz", - "https://opencollective.com/debug" - ], + "inBundle": true, "license": "MIT" }, - "node_modules/ofetch": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.5.1.tgz", - "integrity": "sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==", + "node_modules/npm/node_modules/tinyglobby": { + "version": "0.2.15", + "dev": true, + "inBundle": true, "license": "MIT", "dependencies": { - "destr": "^2.0.5", - "node-fetch-native": "^1.6.7", - "ufo": "^1.6.1" + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" } }, - "node_modules/ohash": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", - "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==", - "license": "MIT" - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "node_modules/npm/node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", "dev": true, + "inBundle": true, "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, "engines": { - "node": ">= 0.8" + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } } }, - "node_modules/on-headers": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", - "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", + "node_modules/npm/node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", "dev": true, + "inBundle": true, "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "node_modules/npm/node_modules/treeverse": { + "version": "3.0.0", + "dev": true, + "inBundle": true, "license": "ISC", - "dependencies": { - "wrappy": "1" + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "node_modules/npm/node_modules/tuf-js": { + "version": "4.1.0", + "dev": true, + "inBundle": true, "license": "MIT", "dependencies": { - "mimic-fn": "^2.1.0" + "@tufjs/models": "4.1.0", + "debug": "^4.4.3", + "make-fetch-happen": "^15.0.1" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/oniguruma-parser": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/oniguruma-parser/-/oniguruma-parser-0.12.1.tgz", - "integrity": "sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==", - "license": "MIT" - }, - "node_modules/oniguruma-to-es": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.4.tgz", - "integrity": "sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA==", - "license": "MIT", + "node_modules/npm/node_modules/unique-filename": { + "version": "5.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", "dependencies": { - "oniguruma-parser": "^0.12.1", - "regex": "^6.0.1", - "regex-recursion": "^6.0.2" + "unique-slug": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/open": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", - "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", + "node_modules/npm/node_modules/unique-slug": { + "version": "6.0.0", "dev": true, - "license": "MIT", + "inBundle": true, + "license": "ISC", "dependencies": { - "default-browser": "^5.2.1", - "define-lazy-prop": "^3.0.0", - "is-inside-container": "^1.0.0", - "wsl-utils": "^0.1.0" + "imurmurhash": "^0.1.4" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "node_modules/npm/node_modules/util-deprecate": { + "version": "1.0.2", "dev": true, - "license": "(WTFPL OR MIT)", - "bin": { - "opener": "bin/opener-bin.js" + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/validate-npm-package-name": { + "version": "7.0.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "node_modules/npm/node_modules/walk-up-path": { + "version": "4.0.0", "dev": true, - "license": "MIT", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/npm/node_modules/which": { + "version": "6.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" + "isexe": "^4.0.0" + }, + "bin": { + "node-which": "bin/which.js" }, "engines": { - "node": ">= 0.8.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/ora": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-8.2.0.tgz", - "integrity": "sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==", + "node_modules/npm/node_modules/write-file-atomic": { + "version": "7.0.1", "dev": true, - "license": "MIT", + "inBundle": true, + "license": "ISC", "dependencies": { - "chalk": "^5.3.0", - "cli-cursor": "^5.0.0", - "cli-spinners": "^2.9.2", - "is-interactive": "^2.0.0", - "is-unicode-supported": "^2.0.0", - "log-symbols": "^6.0.0", - "stdin-discarder": "^0.2.2", - "string-width": "^7.2.0", - "strip-ansi": "^7.1.0" + "signal-exit": "^4.0.1" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/ora/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "node_modules/npm/node_modules/yallist": { + "version": "5.0.0", "dev": true, - "license": "MIT", + "inBundle": true, + "license": "BlueOak-1.0.0", "engines": { - "node": ">=12" + "node": ">=18" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "url": "https://github.com/fb55/nth-check?sponsor=1" } }, - "node_modules/ora/node_modules/chalk": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", - "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "node_modules/nwsapi": { + "version": "2.2.23", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.23.tgz", + "integrity": "sha512-7wfH4sLbt4M0gCDzGE6vzQBo0bfTKjU7Sfpqy/7gs1qBfYz2vEJH6vXcBKpO3+6Yu1telwd0t9HpyOoLEQQbIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/nx": { + "version": "22.5.4", + "resolved": "https://registry.npmjs.org/nx/-/nx-22.5.4.tgz", + "integrity": "sha512-L8wL7uCjnmpyvq4r2mN9s+oriUE4lY+mX9VgOpjj0ucRd5nzaEaBQppVs0zQGkbKC0BnHS8PGtnAglspd5Gh1Q==", "dev": true, + "hasInstallScript": true, "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" + "dependencies": { + "@napi-rs/wasm-runtime": "0.2.4", + "@yarnpkg/lockfile": "^1.1.0", + "@yarnpkg/parsers": "3.0.2", + "@zkochan/js-yaml": "0.0.7", + "axios": "^1.12.0", + "cli-cursor": "3.1.0", + "cli-spinners": "2.6.1", + "cliui": "^8.0.1", + "dotenv": "~16.4.5", + "dotenv-expand": "~11.0.6", + "ejs": "^3.1.7", + "enquirer": "~2.3.6", + "figures": "3.2.0", + "flat": "^5.0.2", + "front-matter": "^4.0.2", + "ignore": "^7.0.5", + "jest-diff": "^30.0.2", + "jsonc-parser": "3.2.0", + "lines-and-columns": "2.0.3", + "minimatch": "10.2.4", + "node-machine-id": "1.1.12", + "npm-run-path": "^4.0.1", + "open": "^8.4.0", + "ora": "5.3.0", + "picocolors": "^1.1.0", + "resolve.exports": "2.0.3", + "semver": "^7.6.3", + "string-width": "^4.2.3", + "tar-stream": "~2.2.0", + "tmp": "~0.2.1", + "tree-kill": "^1.2.2", + "tsconfig-paths": "^4.1.2", + "tslib": "^2.3.0", + "yaml": "^2.6.0", + "yargs": "^17.6.2", + "yargs-parser": "21.1.1" + }, + "bin": { + "nx": "bin/nx.js", + "nx-cloud": "bin/nx-cloud.js" + }, + "optionalDependencies": { + "@nx/nx-darwin-arm64": "22.5.4", + "@nx/nx-darwin-x64": "22.5.4", + "@nx/nx-freebsd-x64": "22.5.4", + "@nx/nx-linux-arm-gnueabihf": "22.5.4", + "@nx/nx-linux-arm64-gnu": "22.5.4", + "@nx/nx-linux-arm64-musl": "22.5.4", + "@nx/nx-linux-x64-gnu": "22.5.4", + "@nx/nx-linux-x64-musl": "22.5.4", + "@nx/nx-win32-arm64-msvc": "22.5.4", + "@nx/nx-win32-x64-msvc": "22.5.4" + }, + "peerDependencies": { + "@swc-node/register": "^1.11.1", + "@swc/core": "^1.15.8" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "peerDependenciesMeta": { + "@swc-node/register": { + "optional": true + }, + "@swc/core": { + "optional": true + } } }, - "node_modules/ora/node_modules/cli-spinners": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", - "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "node_modules/nx/node_modules/@napi-rs/wasm-runtime": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.4.tgz", + "integrity": "sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ==", "dev": true, "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "@emnapi/core": "^1.1.0", + "@emnapi/runtime": "^1.1.0", + "@tybys/wasm-util": "^0.9.0" } }, - "node_modules/ora/node_modules/emoji-regex": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", - "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", - "dev": true, - "license": "MIT" - }, - "node_modules/ora/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "node_modules/nx/node_modules/@tybys/wasm-util": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.9.0.tgz", + "integrity": "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==", "dev": true, "license": "MIT", "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "tslib": "^2.4.0" } }, - "node_modules/ora/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "node_modules/nx/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/ordered-binary": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.6.1.tgz", - "integrity": "sha512-QkCdPooczexPLiXIrbVOPYkR3VO3T6v2OyKRkR1Xbhpy7/LAVXwahnRCgRp78Oe/Ehf0C/HATAxfSr6eA1oX+w==", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/own-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", - "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "node_modules/nx/node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.6", - "object-keys": "^1.1.1", - "safe-push-apply": "^1.0.0" + "restore-cursor": "^3.1.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/p-cancelable": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", - "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", + "node_modules/nx/node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", "dev": true, "license": "MIT", "engines": { - "node": ">=12.20" + "node": ">=8" } }, - "node_modules/p-each-series": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-3.0.0.tgz", - "integrity": "sha512-lastgtAdoH9YaLyDa5i5z64q+kzOcQHsQ5SsZJD3q0VEyI8mq872S3geuNbRUQLVAE9siMfgKrpj7MloKFHruw==", + "node_modules/nx/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "license": "MIT" }, - "node_modules/p-event": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-6.0.1.tgz", - "integrity": "sha512-Q6Bekk5wpzW5qIyUP4gdMEujObYstZl6DMMOSenwBvV0BlE5LkDwkjs5yHbZmdCEq2o4RJx4tE1vwxFVf2FG1w==", + "node_modules/nx/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", "dev": true, "license": "MIT", - "dependencies": { - "p-timeout": "^6.1.2" - }, "engines": { - "node": ">=16.17" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 4" } }, - "node_modules/p-event/node_modules/p-timeout": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.4.tgz", - "integrity": "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==", + "node_modules/nx/node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true, "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, "engines": { - "node": ">=14.16" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-filter": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-4.1.0.tgz", - "integrity": "sha512-37/tPdZ3oJwHaS3gNJdenCDB3Tz26i9sjhnguBtvN0vYlRIiDNnvTWkuh+0hETV9rLPdJ3rlL3yVOYPIAnM8rw==", + "node_modules/nx/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "license": "MIT", - "dependencies": { - "p-map": "^7.0.1" - }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/p-finally": { + "node_modules/nx/node_modules/is-interactive": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/p-is-promise": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz", - "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==", + "node_modules/nx/node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "node_modules/nx/node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, "license": "MIT", "dependencies": { - "yocto-queue": "^0.1.0" + "is-docker": "^2.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "node_modules/nx/node_modules/jest-diff": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.2.0.tgz", + "integrity": "sha512-dQHFo3Pt4/NLlG5z4PxZ/3yZTZ1C7s9hveiOj+GCN+uT109NC2QgsoVZsVOAvbJ3RgKkvyLGXZV9+piDpWbm6A==", "dev": true, "license": "MIT", "dependencies": { - "p-limit": "^3.0.2" + "@jest/diff-sequences": "30.0.1", + "@jest/get-type": "30.1.0", + "chalk": "^4.1.2", + "pretty-format": "30.2.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/p-map": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.4.tgz", - "integrity": "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==", + "node_modules/nx/node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true, + "license": "MIT" + }, + "node_modules/nx/node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, "engines": { - "node": ">=18" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-queue": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", - "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "node_modules/nx/node_modules/minimatch": { + "version": "10.2.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", + "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", "dev": true, - "license": "MIT", + "license": "BlueOak-1.0.0", "dependencies": { - "eventemitter3": "^4.0.4", - "p-timeout": "^3.2.0" + "brace-expansion": "^5.0.2" }, "engines": { - "node": ">=8" + "node": "18 || 20 || >=22" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/p-reduce": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-3.0.0.tgz", - "integrity": "sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q==", + "node_modules/nx/node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", "dev": true, "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, "engines": { "node": ">=12" }, @@ -38604,1665 +38141,1648 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-retry": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.1.tgz", - "integrity": "sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==", + "node_modules/nx/node_modules/ora": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.3.0.tgz", + "integrity": "sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==", "dev": true, "license": "MIT", "dependencies": { - "@types/retry": "0.12.2", - "is-network-error": "^1.0.0", - "retry": "^0.13.1" + "bl": "^4.0.3", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "log-symbols": "^4.0.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" }, "engines": { - "node": ">=16.17" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "node_modules/nx/node_modules/pretty-format": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.2.0.tgz", + "integrity": "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==", "dev": true, "license": "MIT", "dependencies": { - "p-finally": "^1.0.0" + "@jest/schemas": "30.0.5", + "ansi-styles": "^5.2.0", + "react-is": "^18.3.1" }, "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "license": "MIT", - "engines": { - "node": ">=6" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "license": "BlueOak-1.0.0" - }, - "node_modules/package-manager-detector": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.6.0.tgz", - "integrity": "sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==", + "node_modules/nx/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, "license": "MIT" }, - "node_modules/pacote": { - "version": "21.0.4", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-21.0.4.tgz", - "integrity": "sha512-RplP/pDW0NNNDh3pnaoIWYPvNenS7UqMbXyvMqJczosiFWTeGGwJC2NQBLqKf4rGLFfwCOnntw1aEp9Jiqm1MA==", + "node_modules/nx/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/git": "^7.0.0", - "@npmcli/installed-package-contents": "^4.0.0", - "@npmcli/package-json": "^7.0.0", - "@npmcli/promise-spawn": "^9.0.0", - "@npmcli/run-script": "^10.0.0", - "cacache": "^20.0.0", - "fs-minipass": "^3.0.0", - "minipass": "^7.0.2", - "npm-package-arg": "^13.0.0", - "npm-packlist": "^10.0.1", - "npm-pick-manifest": "^11.0.1", - "npm-registry-fetch": "^19.0.0", - "proc-log": "^6.0.0", - "promise-retry": "^2.0.1", - "sigstore": "^4.0.0", - "ssri": "^13.0.0", - "tar": "^7.4.3" - }, - "bin": { - "pacote": "bin/index.js" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "license": "MIT", "dependencies": { - "callsites": "^3.0.0" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, "engines": { - "node": ">=6" + "node": ">= 6" } }, - "node_modules/parse-entities": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", - "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", + "node_modules/nx/node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0", - "character-entities-legacy": "^3.0.0", - "character-reference-invalid": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "is-alphanumerical": "^2.0.0", - "is-decimal": "^2.0.0", - "is-hexadecimal": "^2.0.0" + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "engines": { + "node": ">=8" } }, - "node_modules/parse-entities/node_modules/@types/unist": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", - "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", - "license": "MIT" + "node_modules/nx/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "node_modules/nx/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/parse-json/node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "license": "MIT" - }, - "node_modules/parse-json/node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "license": "MIT" - }, - "node_modules/parse-latin": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse-latin/-/parse-latin-7.0.0.tgz", - "integrity": "sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==", + "node_modules/nx/node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, "license": "MIT", "dependencies": { - "@types/nlcst": "^2.0.0", - "@types/unist": "^3.0.0", - "nlcst-to-string": "^4.0.0", - "unist-util-modify-children": "^4.0.0", - "unist-util-visit-children": "^3.0.0", - "vfile": "^6.0.0" + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/parse-ms": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz", - "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==", - "dev": true, - "license": "MIT", "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6" } }, - "node_modules/parse-node-version": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", - "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "node_modules/nx/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, "engines": { - "node": ">= 0.10" + "node": ">=12" } }, - "node_modules/parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/parse5": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", - "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", - "dev": true, - "license": "MIT" - }, - "node_modules/parse5-html-rewriting-stream": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-8.0.0.tgz", - "integrity": "sha512-wzh11mj8KKkno1pZEu+l2EVeWsuKDfR5KNWZOTsslfUX8lPDZx77m9T0kIoAVkFtD1nx6YF8oh4BnPHvxMtNMw==", - "dev": true, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "license": "MIT", - "dependencies": { - "entities": "^6.0.0", - "parse5": "^8.0.0", - "parse5-sax-parser": "^8.0.0" + "engines": { + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/parse5-html-rewriting-stream/node_modules/entities": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", - "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", - "dev": true, - "license": "BSD-2-Clause", + "node_modules/object-is": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", + "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1" + }, "engines": { - "node": ">=0.12" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/parse5-html-rewriting-stream/node_modules/parse5": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.0.tgz", - "integrity": "sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==", - "dev": true, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "license": "MIT", - "dependencies": { - "entities": "^6.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" + "engines": { + "node": ">= 0.4" } }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", - "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "node_modules/object-path": { + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.8.tgz", + "integrity": "sha512-YJjNZrlXJFM42wTBn6zgOJVar9KFJvzx6sTWDte8sWZF//cnjl0BxHNpfZx+ZffXX63A9q0b1zsFiBX4g4X5KA==", "dev": true, "license": "MIT", - "dependencies": { - "parse5": "^6.0.1" + "engines": { + "node": ">= 10.12.0" } }, - "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true, - "license": "MIT" - }, - "node_modules/parse5-sax-parser": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-8.0.0.tgz", - "integrity": "sha512-/dQ8UzHZwnrzs3EvDj6IkKrD/jIZyTlB+8XrHJvcjNgRdmWruNdN9i9RK/JtxakmlUdPwKubKPTCqvbTgzGhrw==", - "dev": true, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", "license": "MIT", "dependencies": { - "parse5": "^8.0.0" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/parse5-sax-parser/node_modules/entities": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", - "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "node_modules/object.entries": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", + "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.1.1" }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "engines": { + "node": ">= 0.4" } }, - "node_modules/parse5-sax-parser/node_modules/parse5": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.0.tgz", - "integrity": "sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==", + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, "license": "MIT", "dependencies": { - "entities": "^6.0.0" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, "engines": { - "node": ">= 0.8" + "node": ">= 0.4" } }, - "node_modules/path": { - "version": "0.12.7", - "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", - "integrity": "sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==", + "node_modules/object.values": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", + "dev": true, "license": "MIT", "dependencies": { - "process": "^0.11.1", - "util": "^0.10.3" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", "dev": true, "license": "MIT" }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "license": "MIT", - "engines": { - "node": ">=8" - } + "node_modules/obug": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.1.tgz", + "integrity": "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==", + "dev": true, + "funding": [ + "https://github.com/sponsors/sxzz", + "https://opencollective.com/debug" + ], + "license": "MIT" }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "node_modules/ofetch": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.5.1.tgz", + "integrity": "sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==", "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "destr": "^2.0.5", + "node-fetch-native": "^1.6.7", + "ufo": "^1.6.1" } }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "node_modules/ohash": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", + "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==", "license": "MIT" }, - "node_modules/path-scurry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz", - "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", - "license": "BlueOak-1.0.0", + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "license": "MIT", "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" + "ee-first": "1.1.1" }, "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">= 0.8" } }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "11.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.2.tgz", - "integrity": "sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==", - "license": "ISC", + "node_modules/on-headers": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", + "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", + "dev": true, + "license": "MIT", "engines": { - "node": "20 || >=22" + "node": ">= 0.8" } }, - "node_modules/path-to-regexp": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", - "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==", + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "license": "ISC", + "dependencies": { + "wrappy": "1" } }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, "engines": { - "node": ">=8" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/path-unified": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/path-unified/-/path-unified-0.2.0.tgz", - "integrity": "sha512-MNKqvrKbbbb5p7XHXV6ZAsf/1f/yJQa13S/fcX0uua8ew58Tgc6jXV+16JyAbnR/clgCH+euKDxrF2STxMHdrg==", + "node_modules/oniguruma-parser": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/oniguruma-parser/-/oniguruma-parser-0.12.1.tgz", + "integrity": "sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==", "license": "MIT" }, - "node_modules/path/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "license": "ISC" - }, - "node_modules/path/node_modules/util": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", - "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "node_modules/oniguruma-to-es": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.5.tgz", + "integrity": "sha512-Zjygswjpsewa0NLTsiizVuMQZbp0MDyM6lIt66OxsF21npUDlzpHi1Mgb/qhQdkb+dWFTzJmFbEWdvZgRho8eQ==", "license": "MIT", "dependencies": { - "inherits": "2.0.3" + "oniguruma-parser": "^0.12.1", + "regex": "^6.1.0", + "regex-recursion": "^6.0.2" } }, - "node_modules/pathe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "dev": true, - "license": "MIT" - }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true, - "license": "MIT" - }, - "node_modules/periscopic": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", - "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", + "node_modules/open": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/open/-/open-11.0.0.tgz", + "integrity": "sha512-smsWv2LzFjP03xmvFoJ331ss6h+jixfA4UUV/Bsiyuu4YJPfN+FIQGOIiv4w9/+MoHkfkJ22UIaQWRVFRfH6Vw==", "dev": true, "license": "MIT", "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^3.0.0", - "is-reference": "^3.0.0" + "default-browser": "^5.4.0", + "define-lazy-prop": "^3.0.0", + "is-in-ssh": "^1.0.0", + "is-inside-container": "^1.0.0", + "powershell-utils": "^0.1.0", + "wsl-utils": "^0.3.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/periscopic/node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0" + "license": "(WTFPL OR MIT)", + "bin": { + "opener": "bin/opener-bin.js" } }, - "node_modules/periscopic/node_modules/is-reference": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz", - "integrity": "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==", + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, "license": "MIT", "dependencies": { - "@types/estree": "^1.0.6" + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/piccolore": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/piccolore/-/piccolore-0.1.3.tgz", - "integrity": "sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw==", - "license": "ISC" - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "node_modules/ora": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-9.3.0.tgz", + "integrity": "sha512-lBX72MWFduWEf7v7uWf5DHp9Jn5BI8bNPGuFgtXMmr2uDz2Gz2749y3am3agSDdkhHPHYmmxEGSKH85ZLGzgXw==", + "dev": true, "license": "MIT", + "dependencies": { + "chalk": "^5.6.2", + "cli-cursor": "^5.0.0", + "cli-spinners": "^3.2.0", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^2.1.0", + "log-symbols": "^7.0.1", + "stdin-discarder": "^0.3.1", + "string-width": "^8.1.0" + }, "engines": { - "node": ">=12" + "node": ">=20" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "node_modules/ora/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pirates": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", - "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", - "license": "MIT", - "engines": { - "node": ">= 6" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/piscina": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/piscina/-/piscina-5.1.3.tgz", - "integrity": "sha512-0u3N7H4+hbr40KjuVn2uNhOcthu/9usKhnw5vT3J7ply79v3D3M8naI00el9Klcy16x557VsEkkUQaHCWFXC/g==", + "node_modules/ora/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", "dev": true, "license": "MIT", "engines": { - "node": ">=20.x" - }, - "optionalDependencies": { - "@napi-rs/nice": "^1.0.4" - } - }, - "node_modules/pixelmatch": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-7.1.0.tgz", - "integrity": "sha512-1wrVzJ2STrpmONHKBy228LM1b84msXDUoAzVEl0R8Mz4Ce6EPr+IVtxm8+yvrqLYMHswREkjYFaMxnyGnaY3Ng==", - "dev": true, - "license": "ISC", - "dependencies": { - "pngjs": "^7.0.0" + "node": "^12.17.0 || ^14.13 || >=16.0.0" }, - "bin": { - "pixelmatch": "bin/pixelmatch" + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/pkce-challenge": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.1.tgz", - "integrity": "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==", + "node_modules/ora/node_modules/cli-spinners": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-3.4.0.tgz", + "integrity": "sha512-bXfOC4QcT1tKXGorxL3wbJm6XJPDqEnij2gQ2m7ESQuE+/z9YFIWnl/5RpTiKWbMq3EVKR4fRLJGn6DVfu0mpw==", "dev": true, "license": "MIT", "engines": { - "node": ">=16.20.0" + "node": ">=18.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pkg-conf": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", - "integrity": "sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==", + "node_modules/ora/node_modules/string-width": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.0.tgz", + "integrity": "sha512-6hJPQ8N0V0P3SNmP6h2J99RLuzrWz2gvT7VnK5tKvrNqJoyS9W4/Fb8mo31UiPvy00z7DQXkP2hnKBVav76thw==", "dev": true, "license": "MIT", "dependencies": { - "find-up": "^2.0.0", - "load-json-file": "^4.0.0" + "get-east-asian-width": "^1.5.0", + "strip-ansi": "^7.1.2" }, "engines": { - "node": ">=4" + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pkg-conf/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "node_modules/ora/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", "dev": true, "license": "MIT", "dependencies": { - "locate-path": "^2.0.0" + "ansi-regex": "^6.2.2" }, "engines": { - "node": ">=4" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/pkg-conf/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "node_modules/ordered-binary": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.6.1.tgz", + "integrity": "sha512-QkCdPooczexPLiXIrbVOPYkR3VO3T6v2OyKRkR1Xbhpy7/LAVXwahnRCgRp78Oe/Ehf0C/HATAxfSr6eA1oX+w==", "dev": true, "license": "MIT", - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } + "optional": true }, - "node_modules/pkg-conf/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", "dev": true, "license": "MIT", "dependencies": { - "p-try": "^1.0.0" + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" }, "engines": { - "node": ">=4" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/pkg-conf/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "node_modules/oxc-resolver": { + "version": "11.19.1", + "resolved": "https://registry.npmjs.org/oxc-resolver/-/oxc-resolver-11.19.1.tgz", + "integrity": "sha512-qE/CIg/spwrTBFt5aKmwe3ifeDdLfA2NESN30E42X/lII5ClF8V7Wt6WIJhcGZjp0/Q+nQ+9vgxGk//xZNX2hg==", "dev": true, "license": "MIT", - "dependencies": { - "p-limit": "^1.1.0" + "funding": { + "url": "https://github.com/sponsors/Boshen" }, - "engines": { - "node": ">=4" + "optionalDependencies": { + "@oxc-resolver/binding-android-arm-eabi": "11.19.1", + "@oxc-resolver/binding-android-arm64": "11.19.1", + "@oxc-resolver/binding-darwin-arm64": "11.19.1", + "@oxc-resolver/binding-darwin-x64": "11.19.1", + "@oxc-resolver/binding-freebsd-x64": "11.19.1", + "@oxc-resolver/binding-linux-arm-gnueabihf": "11.19.1", + "@oxc-resolver/binding-linux-arm-musleabihf": "11.19.1", + "@oxc-resolver/binding-linux-arm64-gnu": "11.19.1", + "@oxc-resolver/binding-linux-arm64-musl": "11.19.1", + "@oxc-resolver/binding-linux-ppc64-gnu": "11.19.1", + "@oxc-resolver/binding-linux-riscv64-gnu": "11.19.1", + "@oxc-resolver/binding-linux-riscv64-musl": "11.19.1", + "@oxc-resolver/binding-linux-s390x-gnu": "11.19.1", + "@oxc-resolver/binding-linux-x64-gnu": "11.19.1", + "@oxc-resolver/binding-linux-x64-musl": "11.19.1", + "@oxc-resolver/binding-openharmony-arm64": "11.19.1", + "@oxc-resolver/binding-wasm32-wasi": "11.19.1", + "@oxc-resolver/binding-win32-arm64-msvc": "11.19.1", + "@oxc-resolver/binding-win32-ia32-msvc": "11.19.1", + "@oxc-resolver/binding-win32-x64-msvc": "11.19.1" } }, - "node_modules/pkg-conf/node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", + "node_modules/p-cancelable": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", + "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">=12.20" } }, - "node_modules/pkg-conf/node_modules/path-exists": { + "node_modules/p-each-series": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-3.0.0.tgz", + "integrity": "sha512-lastgtAdoH9YaLyDa5i5z64q+kzOcQHsQ5SsZJD3q0VEyI8mq872S3geuNbRUQLVAE9siMfgKrpj7MloKFHruw==", "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "node_modules/p-event": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-6.0.1.tgz", + "integrity": "sha512-Q6Bekk5wpzW5qIyUP4gdMEujObYstZl6DMMOSenwBvV0BlE5LkDwkjs5yHbZmdCEq2o4RJx4tE1vwxFVf2FG1w==", "dev": true, "license": "MIT", "dependencies": { - "find-up": "^4.0.0" + "p-timeout": "^6.1.2" }, "engines": { - "node": ">=8" + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pkg-dir/node_modules/find-up": { + "node_modules/p-filter": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-4.1.0.tgz", + "integrity": "sha512-37/tPdZ3oJwHaS3gNJdenCDB3Tz26i9sjhnguBtvN0vYlRIiDNnvTWkuh+0hETV9rLPdJ3rlL3yVOYPIAnM8rw==", "dev": true, "license": "MIT", "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "p-map": "^7.0.1" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/p-is-promise": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz", + "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==", "dev": true, "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, "engines": { "node": ">=8" } }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, + "node_modules/p-limit": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-6.2.0.tgz", + "integrity": "sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==", "license": "MIT", "dependencies": { - "p-try": "^2.0.0" + "yocto-queue": "^1.1.1" }, "engines": { - "node": ">=6" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "license": "MIT", "dependencies": { - "p-limit": "^2.2.0" + "p-limit": "^3.0.2" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pkg-types": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.0.tgz", - "integrity": "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==", + "node_modules/p-locate/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "license": "MIT", "dependencies": { - "confbox": "^0.2.2", - "exsolve": "^1.0.7", - "pathe": "^2.0.3" + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/playwright": { - "version": "1.56.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.56.1.tgz", - "integrity": "sha512-aFi5B0WovBHTEvpM3DzXTUaeN6eN0qWnTkKx4NQaH4Wvcmc153PdaY2UBdSYKaGYw+UyWXSVyxDUg5DoPEttjw==", + "node_modules/p-locate/node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright-core": "1.56.1" - }, - "bin": { - "playwright": "cli.js" - }, + "license": "MIT", "engines": { - "node": ">=18" + "node": ">=10" }, - "optionalDependencies": { - "fsevents": "2.3.2" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/playwright-core": { - "version": "1.56.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.56.1.tgz", - "integrity": "sha512-hutraynyn31F+Bifme+Ps9Vq59hKuUCz7H1kDOcBs+2oGguKkWTU50bBWrtz34OUWmIwpBTWDxaRPXrIXkgvmQ==", + "node_modules/p-map": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.4.tgz", + "integrity": "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==", "dev": true, - "license": "Apache-2.0", - "bin": { - "playwright-core": "cli.js" - }, + "license": "MIT", "engines": { "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/playwright/node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, + "node_modules/p-queue": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-8.1.1.tgz", + "integrity": "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ==", "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], + "dependencies": { + "eventemitter3": "^5.0.1", + "p-timeout": "^6.1.2" + }, "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pngjs": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-7.0.0.tgz", - "integrity": "sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==", + "node_modules/p-queue/node_modules/eventemitter3": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", + "license": "MIT" + }, + "node_modules/p-reduce": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-3.0.0.tgz", + "integrity": "sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q==", "dev": true, "license": "MIT", "engines": { - "node": ">=14.19.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/portfinder": { - "version": "1.0.38", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.38.tgz", - "integrity": "sha512-rEwq/ZHlJIKw++XtLAO8PPuOQA/zaPJOZJ37BVuN97nLpMJeuDVLVGRwbFoBgLudgdTMP2hdRJP++H+8QOA3vg==", + "node_modules/p-retry": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.1.tgz", + "integrity": "sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==", "dev": true, "license": "MIT", "dependencies": { - "async": "^3.2.6", - "debug": "^4.3.6" + "@types/retry": "0.12.2", + "is-network-error": "^1.0.0", + "retry": "^0.13.1" }, "engines": { - "node": ">= 10.12" + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/possible-typed-array-names": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", - "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "node_modules/p-timeout": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.4.tgz", + "integrity": "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==", "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/postcss": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, "license": "MIT", - "dependencies": { - "nanoid": "^3.3.11", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, "engines": { - "node": "^10 || ^12 || >=14" + "node": ">=6" } }, - "node_modules/postcss-attribute-case-insensitive": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz", - "integrity": "sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==", + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "license": "BlueOak-1.0.0" + }, + "node_modules/package-manager-detector": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.6.0.tgz", + "integrity": "sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==", + "license": "MIT" + }, + "node_modules/pacote": { + "version": "21.3.1", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-21.3.1.tgz", + "integrity": "sha512-O0EDXi85LF4AzdjG74GUwEArhdvawi/YOHcsW6IijKNj7wm8IvEWNF5GnfuxNpQ/ZpO3L37+v8hqdVh8GgWYhg==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" + "@npmcli/git": "^7.0.0", + "@npmcli/installed-package-contents": "^4.0.0", + "@npmcli/package-json": "^7.0.0", + "@npmcli/promise-spawn": "^9.0.0", + "@npmcli/run-script": "^10.0.0", + "cacache": "^20.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^7.0.2", + "npm-package-arg": "^13.0.0", + "npm-packlist": "^10.0.1", + "npm-pick-manifest": "^11.0.1", + "npm-registry-fetch": "^19.0.0", + "proc-log": "^6.0.0", + "promise-retry": "^2.0.1", + "sigstore": "^4.0.0", + "ssri": "^13.0.0", + "tar": "^7.4.3" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" + "bin": { + "pacote": "bin/index.js" }, - "peerDependencies": { - "postcss": "^8.2" + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/postcss-calc": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.1.tgz", - "integrity": "sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==", + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "license": "MIT", "dependencies": { - "postcss-selector-parser": "^6.0.11", - "postcss-value-parser": "^4.2.0" + "callsites": "^3.0.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.2.2" + "node": ">=6" } }, - "node_modules/postcss-clamp": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", - "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", - "dev": true, + "node_modules/parse-entities": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", + "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", "license": "MIT", "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=7.6.0" + "@types/unist": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" }, - "peerDependencies": { - "postcss": "^8.4.6" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/postcss-color-functional-notation": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz", - "integrity": "sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==", + "node_modules/parse-entities/node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "license": "MIT" + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, - "license": "CC0-1.0", + "license": "MIT", "dependencies": { - "postcss-value-parser": "^4.2.0" + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" }, "engines": { - "node": "^12 || ^14 || >=16" + "node": ">=8" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/postcss-color-hex-alpha": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz", - "integrity": "sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==", + "node_modules/parse-json/node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true, + "license": "MIT" + }, + "node_modules/parse-json/node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/parse-latin": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse-latin/-/parse-latin-7.0.0.tgz", + "integrity": "sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==", "license": "MIT", "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" + "@types/nlcst": "^2.0.0", + "@types/unist": "^3.0.0", + "nlcst-to-string": "^4.0.0", + "unist-util-modify-children": "^4.0.0", + "unist-util-visit-children": "^3.0.0", + "vfile": "^6.0.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.4" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/postcss-color-rebeccapurple": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz", - "integrity": "sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==", + "node_modules/parse-ms": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz", + "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==", "dev": true, - "license": "CC0-1.0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, + "license": "MIT", "engines": { - "node": "^12 || ^14 || >=16" + "node": ">=18" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/postcss-colormin": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.1.0.tgz", - "integrity": "sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw==", + "node_modules/parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", "dev": true, "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "caniuse-api": "^3.0.0", - "colord": "^2.9.3", - "postcss-value-parser": "^4.2.0" - }, "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" + "node": ">= 0.10" } }, - "node_modules/postcss-convert-values": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.1.0.tgz", - "integrity": "sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w==", + "node_modules/parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", "dev": true, "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "postcss-value-parser": "^4.2.0" - }, "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" + "node": ">=0.10.0" } }, - "node_modules/postcss-custom-media": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz", - "integrity": "sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==", + "node_modules/parse5": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", + "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", + "dev": true, + "license": "MIT" + }, + "node_modules/parse5-html-rewriting-stream": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-8.0.0.tgz", + "integrity": "sha512-wzh11mj8KKkno1pZEu+l2EVeWsuKDfR5KNWZOTsslfUX8lPDZx77m9T0kIoAVkFtD1nx6YF8oh4BnPHvxMtNMw==", "dev": true, "license": "MIT", "dependencies": { - "postcss-value-parser": "^4.2.0" + "entities": "^6.0.0", + "parse5": "^8.0.0", + "parse5-sax-parser": "^8.0.0" }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-html-rewriting-stream/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "dev": true, + "license": "BSD-2-Clause", "engines": { - "node": "^12 || ^14 || >=16" + "node": ">=0.12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.3" + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/postcss-custom-properties": { - "version": "12.1.11", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.11.tgz", - "integrity": "sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ==", + "node_modules/parse5-html-rewriting-stream/node_modules/parse5": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.0.tgz", + "integrity": "sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==", "dev": true, "license": "MIT", "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" + "entities": "^6.0.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/postcss-custom-selectors": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz", - "integrity": "sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==", + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", "dev": true, "license": "MIT", "dependencies": { - "postcss-selector-parser": "^6.0.4" + "parse5": "^6.0.1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true, + "license": "MIT" + }, + "node_modules/parse5-sax-parser": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-8.0.0.tgz", + "integrity": "sha512-/dQ8UzHZwnrzs3EvDj6IkKrD/jIZyTlB+8XrHJvcjNgRdmWruNdN9i9RK/JtxakmlUdPwKubKPTCqvbTgzGhrw==", + "dev": true, + "license": "MIT", + "dependencies": { + "parse5": "^8.0.0" }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-sax-parser/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "dev": true, + "license": "BSD-2-Clause", "engines": { - "node": "^12 || ^14 || >=16" + "node": ">=0.12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.3" + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/postcss-dir-pseudo-class": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz", - "integrity": "sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==", + "node_modules/parse5-sax-parser/node_modules/parse5": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.0.tgz", + "integrity": "sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==", "dev": true, - "license": "CC0-1.0", + "license": "MIT", "dependencies": { - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" + "entities": "^6.0.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/postcss-discard-comments": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.2.tgz", - "integrity": "sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw==", + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true, "license": "MIT", "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" + "node": ">= 0.8" } }, - "node_modules/postcss-discard-duplicates": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.3.tgz", - "integrity": "sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw==", - "dev": true, + "node_modules/path": { + "version": "0.12.7", + "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", + "integrity": "sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==", "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" + "dependencies": { + "process": "^0.11.1", + "util": "^0.10.3" } }, - "node_modules/postcss-discard-empty": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.3.tgz", - "integrity": "sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ==", + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "license": "MIT", "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" + "node": ">=8" } }, - "node_modules/postcss-discard-overridden": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.2.tgz", - "integrity": "sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ==", - "dev": true, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "license": "MIT", "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" + "node": ">=8" } }, - "node_modules/postcss-double-position-gradients": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz", - "integrity": "sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==", + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true, - "license": "CC0-1.0", + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", + "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", + "license": "BlueOak-1.0.0", "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" }, "engines": { - "node": "^12 || ^14 || >=16" + "node": "18 || 20 || >=22" }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "11.2.6", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.6.tgz", + "integrity": "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==", + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/path-to-regexp": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", + "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==", + "dev": true, + "license": "MIT", "funding": { "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" + "url": "https://opencollective.com/express" } }, - "node_modules/postcss-env-function": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz", - "integrity": "sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==", + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, - "license": "CC0-1.0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, + "license": "MIT", "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" + "node": ">=8" } }, - "node_modules/postcss-focus-visible": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz", - "integrity": "sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==", - "dev": true, - "license": "CC0-1.0", + "node_modules/path-unified": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/path-unified/-/path-unified-0.2.0.tgz", + "integrity": "sha512-MNKqvrKbbbb5p7XHXV6ZAsf/1f/yJQa13S/fcX0uua8ew58Tgc6jXV+16JyAbnR/clgCH+euKDxrF2STxMHdrg==", + "license": "MIT" + }, + "node_modules/path/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "license": "ISC" + }, + "node_modules/path/node_modules/util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "license": "MIT", "dependencies": { - "postcss-selector-parser": "^6.0.9" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" + "inherits": "2.0.3" } }, - "node_modules/postcss-focus-within": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz", - "integrity": "sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==", + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", "dev": true, - "license": "CC0-1.0", + "license": "MIT" + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true, + "license": "MIT" + }, + "node_modules/periscopic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", + "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", + "dev": true, + "license": "MIT", "dependencies": { - "postcss-selector-parser": "^6.0.9" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" + "@types/estree": "^1.0.0", + "estree-walker": "^3.0.0", + "is-reference": "^3.0.0" } }, - "node_modules/postcss-font-variant": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", - "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", + "node_modules/periscopic/node_modules/is-reference": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz", + "integrity": "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==", "dev": true, "license": "MIT", - "peerDependencies": { - "postcss": "^8.1.0" + "dependencies": { + "@types/estree": "^1.0.6" } }, - "node_modules/postcss-gap-properties": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz", - "integrity": "sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==", - "dev": true, - "license": "CC0-1.0", + "node_modules/piccolore": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/piccolore/-/piccolore-0.1.3.tgz", + "integrity": "sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw==", + "license": "ISC" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "license": "MIT", "engines": { - "node": "^12 || ^14 || >=16" + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/postcss-image-set-function": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz", - "integrity": "sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==", + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, - "license": "CC0-1.0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, + "license": "MIT", "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" + "node": ">=0.10.0" } }, - "node_modules/postcss-import": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", - "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", "dev": true, "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - }, "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "postcss": "^8.0.0" + "node": ">= 6" } }, - "node_modules/postcss-initial": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", - "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", + "node_modules/piscina": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-5.1.4.tgz", + "integrity": "sha512-7uU4ZnKeQq22t9AsmHGD2w4OYQGonwFnTypDypaWi7Qr2EvQIFVtG8J5D/3bE7W123Wdc9+v4CZDu5hJXVCtBg==", "dev": true, "license": "MIT", - "peerDependencies": { - "postcss": "^8.0.0" + "engines": { + "node": ">=20.x" + }, + "optionalDependencies": { + "@napi-rs/nice": "^1.0.4" } }, - "node_modules/postcss-lab-function": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz", - "integrity": "sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==", + "node_modules/pkce-challenge": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.1.tgz", + "integrity": "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==", "dev": true, - "license": "CC0-1.0", - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - }, + "license": "MIT", "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" + "node": ">=16.20.0" } }, - "node_modules/postcss-load-config": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", - "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "node_modules/pkg-conf": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", + "integrity": "sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==", "dev": true, "license": "MIT", "dependencies": { - "lilconfig": "^2.0.5", - "yaml": "^1.10.2" + "find-up": "^2.0.0", + "load-json-file": "^4.0.0" }, "engines": { - "node": ">= 10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - }, - "ts-node": { - "optional": true - } + "node": ">=4" } }, - "node_modules/postcss-load-config/node_modules/lilconfig": { + "node_modules/pkg-conf/node_modules/find-up": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", "dev": true, "license": "MIT", + "dependencies": { + "locate-path": "^2.0.0" + }, "engines": { - "node": ">=10" + "node": ">=4" } }, - "node_modules/postcss-load-config/node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "node_modules/pkg-conf/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", "dev": true, - "license": "ISC", + "license": "MIT", + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, "engines": { - "node": ">= 6" + "node": ">=4" } }, - "node_modules/postcss-loader": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-8.1.1.tgz", - "integrity": "sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ==", + "node_modules/pkg-conf/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, "license": "MIT", "dependencies": { - "cosmiconfig": "^9.0.0", - "jiti": "^1.20.0", - "semver": "^7.5.4" + "p-try": "^1.0.0" }, "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } + "node": ">=4" } }, - "node_modules/postcss-loader/node_modules/cosmiconfig": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", - "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "node_modules/pkg-conf/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", "dev": true, "license": "MIT", "dependencies": { - "env-paths": "^2.2.1", - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0" + "p-limit": "^1.1.0" }, "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=4" } }, - "node_modules/postcss-loader/node_modules/jiti": { - "version": "1.21.7", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", - "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "node_modules/pkg-conf/node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", "dev": true, "license": "MIT", - "bin": { - "jiti": "bin/jiti.js" + "engines": { + "node": ">=4" } }, - "node_modules/postcss-loader/node_modules/js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "node_modules/pkg-conf/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true, "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">=4" } }, - "node_modules/postcss-logical": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", - "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==", + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, - "license": "CC0-1.0", - "engines": { - "node": "^12 || ^14 || >=16" + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" }, - "peerDependencies": { - "postcss": "^8.4" + "engines": { + "node": ">=8" } }, - "node_modules/postcss-media-minmax": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", - "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "license": "MIT", - "engines": { - "node": ">=10.0.0" + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, - "peerDependencies": { - "postcss": "^8.1.0" + "engines": { + "node": ">=8" } }, - "node_modules/postcss-media-query-parser": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", - "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", - "dev": true, - "license": "MIT" - }, - "node_modules/postcss-merge-longhand": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.5.tgz", - "integrity": "sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w==", + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "license": "MIT", "dependencies": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^6.1.1" + "p-locate": "^4.1.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" + "node": ">=8" } }, - "node_modules/postcss-merge-rules": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.1.1.tgz", - "integrity": "sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ==", + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.23.0", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^4.0.2", - "postcss-selector-parser": "^6.0.16" + "p-try": "^2.0.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": ">=6" }, - "peerDependencies": { - "postcss": "^8.4.31" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/postcss-minify-font-values": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.1.0.tgz", - "integrity": "sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg==", + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "license": "MIT", "dependencies": { - "postcss-value-parser": "^4.2.0" + "p-limit": "^2.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" + "node": ">=8" } }, - "node_modules/postcss-minify-gradients": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.3.tgz", - "integrity": "sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q==", + "node_modules/pkg-types": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.0.tgz", + "integrity": "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==", "dev": true, "license": "MIT", "dependencies": { - "colord": "^2.9.3", - "cssnano-utils": "^4.0.2", - "postcss-value-parser": "^4.2.0" + "confbox": "^0.2.2", + "exsolve": "^1.0.7", + "pathe": "^2.0.3" + } + }, + "node_modules/pkijs": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/pkijs/-/pkijs-3.3.3.tgz", + "integrity": "sha512-+KD8hJtqQMYoTuL1bbGOqxb4z+nZkTAwVdNtWwe8Tc2xNbEmdJYIYoc6Qt0uF55e6YW6KuTHw1DjQ18gMhzepw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@noble/hashes": "1.4.0", + "asn1js": "^3.0.6", + "bytestreamjs": "^2.0.1", + "pvtsutils": "^1.3.6", + "pvutils": "^1.1.3", + "tslib": "^2.8.1" }, "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" + "node": ">=16.0.0" } }, - "node_modules/postcss-minify-params": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.1.0.tgz", - "integrity": "sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA==", + "node_modules/playwright": { + "version": "1.58.2", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.58.2.tgz", + "integrity": "sha512-vA30H8Nvkq/cPBnNw4Q8TWz1EJyqgpuinBcHET0YVJVFldr8JDNiU9LaWAE1KqSkRYazuaBhTpB5ZzShOezQ6A==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "browserslist": "^4.23.0", - "cssnano-utils": "^4.0.2", - "postcss-value-parser": "^4.2.0" + "playwright-core": "1.58.2" + }, + "bin": { + "playwright": "cli.js" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": ">=18" }, - "peerDependencies": { - "postcss": "^8.4.31" + "optionalDependencies": { + "fsevents": "2.3.2" } }, - "node_modules/postcss-minify-selectors": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.4.tgz", - "integrity": "sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ==", + "node_modules/playwright-core": { + "version": "1.58.2", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.58.2.tgz", + "integrity": "sha512-yZkEtftgwS8CsfYo7nm0KE8jsvm6i/PTgVtB8DL726wNf6H2IMsDuxCpJj59KDaxCtSnrWan2AeDqM7JBaultg==", "dev": true, - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.16" + "license": "Apache-2.0", + "bin": { + "playwright-core": "cli.js" }, "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" + "node": ">=18" } }, - "node_modules/postcss-modules": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-4.3.1.tgz", - "integrity": "sha512-ItUhSUxBBdNamkT3KzIZwYNNRFKmkJrofvC2nWab3CPKhYBQ1f27XXh1PAPE27Psx58jeelPsxWB/+og+KEH0Q==", + "node_modules/playwright/node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, + "hasInstallScript": true, "license": "MIT", - "dependencies": { - "generic-names": "^4.0.0", - "icss-replace-symbols": "^1.1.0", - "lodash.camelcase": "^4.3.0", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "string-hash": "^1.1.1" - }, - "peerDependencies": { - "postcss": "^8.0.0" + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", - "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", + "node_modules/pngjs": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-7.0.0.tgz", + "integrity": "sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==", "dev": true, - "license": "ISC", + "license": "MIT", "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" + "node": ">=14.19.0" } }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz", - "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==", + "node_modules/portfinder": { + "version": "1.0.38", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.38.tgz", + "integrity": "sha512-rEwq/ZHlJIKw++XtLAO8PPuOQA/zaPJOZJ37BVuN97nLpMJeuDVLVGRwbFoBgLudgdTMP2hdRJP++H+8QOA3vg==", "dev": true, "license": "MIT", "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^7.0.0", - "postcss-value-parser": "^4.1.0" + "async": "^3.2.6", + "debug": "^4.3.6" }, "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" + "node": ">= 10.12" } }, - "node_modules/postcss-modules-local-by-default/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "dev": true, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.5.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz", + "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" }, "engines": { - "node": ">=4" + "node": "^10 || ^12 || >=14" } }, - "node_modules/postcss-modules-scope": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", - "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", + "node_modules/postcss-attribute-case-insensitive": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz", + "integrity": "sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "postcss-selector-parser": "^7.0.0" + "postcss-selector-parser": "^6.0.10" }, "engines": { - "node": "^10 || ^12 || >= 14" + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" }, "peerDependencies": { - "postcss": "^8.1.0" + "postcss": "^8.2" } }, - "node_modules/postcss-modules-scope/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "node_modules/postcss-calc": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.1.tgz", + "integrity": "sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==", "dev": true, "license": "MIT", "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" + "postcss-selector-parser": "^6.0.11", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=4" + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.2" } }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "node_modules/postcss-clamp": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", + "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "icss-utils": "^5.0.0" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^10 || ^12 || >= 14" + "node": ">=7.6.0" }, "peerDependencies": { - "postcss": "^8.1.0" + "postcss": "^8.4.6" } }, - "node_modules/postcss-nesting": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.2.0.tgz", - "integrity": "sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==", + "node_modules/postcss-color-functional-notation": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz", + "integrity": "sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==", "dev": true, "license": "CC0-1.0", "dependencies": { - "@csstools/selector-specificity": "^2.0.0", - "postcss-selector-parser": "^6.0.10" + "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^12 || ^14 || >=16" @@ -40275,42 +39795,56 @@ "postcss": "^8.2" } }, - "node_modules/postcss-normalize-charset": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.2.tgz", - "integrity": "sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ==", + "node_modules/postcss-color-hex-alpha": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz", + "integrity": "sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==", "dev": true, "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4" } }, - "node_modules/postcss-normalize-display-values": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.2.tgz", - "integrity": "sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg==", + "node_modules/postcss-color-rebeccapurple": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz", + "integrity": "sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==", "dev": true, - "license": "MIT", + "license": "CC0-1.0", "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.2" } }, - "node_modules/postcss-normalize-positions": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.2.tgz", - "integrity": "sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q==", + "node_modules/postcss-colormin": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.1.0.tgz", + "integrity": "sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw==", "dev": true, "license": "MIT", "dependencies": { + "browserslist": "^4.23.0", + "caniuse-api": "^3.0.0", + "colord": "^2.9.3", "postcss-value-parser": "^4.2.0" }, "engines": { @@ -40320,13 +39854,14 @@ "postcss": "^8.4.31" } }, - "node_modules/postcss-normalize-repeat-style": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.2.tgz", - "integrity": "sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ==", + "node_modules/postcss-convert-values": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.1.0.tgz", + "integrity": "sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w==", "dev": true, "license": "MIT", "dependencies": { + "browserslist": "^4.23.0", "postcss-value-parser": "^4.2.0" }, "engines": { @@ -40336,80 +39871,105 @@ "postcss": "^8.4.31" } }, - "node_modules/postcss-normalize-string": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.2.tgz", - "integrity": "sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ==", + "node_modules/postcss-custom-media": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz", + "integrity": "sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==", "dev": true, "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.3" } }, - "node_modules/postcss-normalize-timing-functions": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.2.tgz", - "integrity": "sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA==", + "node_modules/postcss-custom-properties": { + "version": "12.1.11", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.11.tgz", + "integrity": "sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ==", "dev": true, "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.2" } }, - "node_modules/postcss-normalize-unicode": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.1.0.tgz", - "integrity": "sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg==", + "node_modules/postcss-custom-selectors": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz", + "integrity": "sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==", "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.23.0", - "postcss-value-parser": "^4.2.0" + "postcss-selector-parser": "^6.0.4" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.3" } }, - "node_modules/postcss-normalize-url": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.2.tgz", - "integrity": "sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ==", + "node_modules/postcss-dir-pseudo-class": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz", + "integrity": "sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==", "dev": true, - "license": "MIT", + "license": "CC0-1.0", "dependencies": { - "postcss-value-parser": "^4.2.0" + "postcss-selector-parser": "^6.0.10" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.2" } }, - "node_modules/postcss-normalize-whitespace": { + "node_modules/postcss-discard-comments": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.2.tgz", - "integrity": "sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q==", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.2.tgz", + "integrity": "sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw==", "dev": true, "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" + "engines": { + "node": "^14 || ^16 || >=18.0" }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.3.tgz", + "integrity": "sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw==", + "dev": true, + "license": "MIT", "engines": { "node": "^14 || ^16 || >=18.0" }, @@ -40417,39 +39977,25 @@ "postcss": "^8.4.31" } }, - "node_modules/postcss-opacity-percentage": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.3.tgz", - "integrity": "sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A==", + "node_modules/postcss-discard-empty": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.3.tgz", + "integrity": "sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ==", "dev": true, - "funding": [ - { - "type": "kofi", - "url": "https://ko-fi.com/mrcgrtz" - }, - { - "type": "liberapay", - "url": "https://liberapay.com/mrcgrtz" - } - ], "license": "MIT", "engines": { - "node": "^12 || ^14 || >=16" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { - "postcss": "^8.2" + "postcss": "^8.4.31" } }, - "node_modules/postcss-ordered-values": { + "node_modules/postcss-discard-overridden": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.2.tgz", - "integrity": "sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q==", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.2.tgz", + "integrity": "sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ==", "dev": true, "license": "MIT", - "dependencies": { - "cssnano-utils": "^4.0.2", - "postcss-value-parser": "^4.2.0" - }, "engines": { "node": "^14 || ^16 || >=18.0" }, @@ -40457,13 +40003,14 @@ "postcss": "^8.4.31" } }, - "node_modules/postcss-overflow-shorthand": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz", - "integrity": "sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==", + "node_modules/postcss-double-position-gradients": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz", + "integrity": "sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==", "dev": true, "license": "CC0-1.0", "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", "postcss-value-parser": "^4.2.0" }, "engines": { @@ -40477,89 +40024,70 @@ "postcss": "^8.2" } }, - "node_modules/postcss-page-break": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", - "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", + "node_modules/postcss-env-function": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz", + "integrity": "sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==", "dev": true, - "license": "MIT", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, "peerDependencies": { - "postcss": "^8" + "postcss": "^8.4" } }, - "node_modules/postcss-place": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.5.tgz", - "integrity": "sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==", + "node_modules/postcss-focus-visible": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz", + "integrity": "sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==", "dev": true, "license": "CC0-1.0", "dependencies": { - "postcss-value-parser": "^4.2.0" + "postcss-selector-parser": "^6.0.9" }, "engines": { "node": "^12 || ^14 || >=16" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, "peerDependencies": { - "postcss": "^8.2" + "postcss": "^8.4" } }, - "node_modules/postcss-preset-env": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.5.0.tgz", - "integrity": "sha512-0BJzWEfCdTtK2R3EiKKSdkE51/DI/BwnhlnicSW482Ym6/DGHud8K0wGLcdjip1epVX0HKo4c8zzTeV/SkiejQ==", + "node_modules/postcss-focus-within": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz", + "integrity": "sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==", "dev": true, "license": "CC0-1.0", "dependencies": { - "@csstools/postcss-color-function": "^1.1.0", - "@csstools/postcss-font-format-keywords": "^1.0.0", - "@csstools/postcss-hwb-function": "^1.0.0", - "@csstools/postcss-ic-unit": "^1.0.0", - "@csstools/postcss-is-pseudo-class": "^2.0.2", - "@csstools/postcss-normalize-display-values": "^1.0.0", - "@csstools/postcss-oklab-function": "^1.1.0", - "@csstools/postcss-progressive-custom-properties": "^1.3.0", - "@csstools/postcss-stepped-value-functions": "^1.0.0", - "@csstools/postcss-unset-value": "^1.0.0", - "autoprefixer": "^10.4.6", - "browserslist": "^4.20.3", - "css-blank-pseudo": "^3.0.3", - "css-has-pseudo": "^3.0.4", - "css-prefers-color-scheme": "^6.0.3", - "cssdb": "^6.6.1", - "postcss-attribute-case-insensitive": "^5.0.0", - "postcss-clamp": "^4.1.0", - "postcss-color-functional-notation": "^4.2.2", - "postcss-color-hex-alpha": "^8.0.3", - "postcss-color-rebeccapurple": "^7.0.2", - "postcss-custom-media": "^8.0.0", - "postcss-custom-properties": "^12.1.7", - "postcss-custom-selectors": "^6.0.0", - "postcss-dir-pseudo-class": "^6.0.4", - "postcss-double-position-gradients": "^3.1.1", - "postcss-env-function": "^4.0.6", - "postcss-focus-visible": "^6.0.4", - "postcss-focus-within": "^5.0.4", - "postcss-font-variant": "^5.0.0", - "postcss-gap-properties": "^3.0.3", - "postcss-image-set-function": "^4.0.6", - "postcss-initial": "^4.0.1", - "postcss-lab-function": "^4.2.0", - "postcss-logical": "^5.0.4", - "postcss-media-minmax": "^5.0.0", - "postcss-nesting": "^10.1.4", - "postcss-opacity-percentage": "^1.1.2", - "postcss-overflow-shorthand": "^3.0.3", - "postcss-page-break": "^3.0.4", - "postcss-place": "^7.0.4", - "postcss-pseudo-class-any-link": "^7.1.2", - "postcss-replace-overflow-wrap": "^4.0.0", - "postcss-selector-not": "^5.0.0", - "postcss-value-parser": "^4.2.0" + "postcss-selector-parser": "^6.0.9" + }, + "engines": { + "node": "^12 || ^14 || >=16" }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-font-variant": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", + "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-gap-properties": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz", + "integrity": "sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==", + "dev": true, + "license": "CC0-1.0", "engines": { "node": "^12 || ^14 || >=16" }, @@ -40568,17 +40096,17 @@ "url": "https://opencollective.com/csstools" }, "peerDependencies": { - "postcss": "^8.4" + "postcss": "^8.2" } }, - "node_modules/postcss-pseudo-class-any-link": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz", - "integrity": "sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==", + "node_modules/postcss-image-set-function": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz", + "integrity": "sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==", "dev": true, "license": "CC0-1.0", "dependencies": { - "postcss-selector-parser": "^6.0.10" + "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^12 || ^14 || >=16" @@ -40591,117 +40119,174 @@ "postcss": "^8.2" } }, - "node_modules/postcss-reduce-initial": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.1.0.tgz", - "integrity": "sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw==", + "node_modules/postcss-import": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", + "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.23.0", - "caniuse-api": "^3.0.0" + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": ">=10.0.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.0.0" } }, - "node_modules/postcss-reduce-transforms": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.2.tgz", - "integrity": "sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA==", + "node_modules/postcss-initial": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", + "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", "dev": true, "license": "MIT", + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-lab-function": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz", + "integrity": "sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==", + "dev": true, + "license": "CC0-1.0", "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.2" } }, - "node_modules/postcss-replace": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-replace/-/postcss-replace-2.0.1.tgz", - "integrity": "sha512-T83GVovCkBQkFCTmuid0B2bWNu/O0Bh/HDMeEGFC62EwMvVBLZQFYM7iBbcGT48QDXSNSX6e/X1Q7/Syh5NFng==", + "node_modules/postcss-loader": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-8.2.0.tgz", + "integrity": "sha512-tHX+RkpsXVcc7st4dSdDGliI+r4aAQDuv+v3vFYHixb6YgjreG5AG4SEB0kDK8u2s6htqEEpKlkhSBUTvWKYnA==", "dev": true, "license": "MIT", "dependencies": { - "kind-of": "^6.0.3", - "object-path": "^0.11.8" + "cosmiconfig": "^9.0.0", + "jiti": "^2.5.1", + "semver": "^7.6.2" }, "engines": { - "node": "^12 || ^14 || >=16" + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "postcss": "^8.4" + "@rspack/core": "0.x || 1.x", + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } } }, - "node_modules/postcss-replace-overflow-wrap": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", - "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", + "node_modules/postcss-loader/node_modules/cosmiconfig": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.1.tgz", + "integrity": "sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ==", "dev": true, "license": "MIT", + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, "peerDependencies": { - "postcss": "^8.0.3" + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/postcss-selector-not": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-5.0.0.tgz", - "integrity": "sha512-/2K3A4TCP9orP4TNS7u3tGdRFVKqz/E6pX3aGnriPG0jU78of8wsUcqE4QAhWEU0d+WnMSF93Ah3F//vUtK+iQ==", + "node_modules/postcss-logical": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", + "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==", "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" + "license": "CC0-1.0", + "engines": { + "node": "^12 || ^14 || >=16" }, "peerDependencies": { - "postcss": "^8.1.0" + "postcss": "^8.4" } }, - "node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "node_modules/postcss-media-minmax": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", + "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", "dev": true, "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, "engines": { - "node": ">=4" + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/postcss-svgo": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.3.tgz", - "integrity": "sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g==", + "node_modules/postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", + "dev": true, + "license": "MIT" + }, + "node_modules/postcss-merge-longhand": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.5.tgz", + "integrity": "sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w==", "dev": true, "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0", - "svgo": "^3.2.0" + "stylehacks": "^6.1.1" }, "engines": { - "node": "^14 || ^16 || >= 18" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, - "node_modules/postcss-unique-selectors": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.4.tgz", - "integrity": "sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg==", + "node_modules/postcss-merge-rules": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.1.1.tgz", + "integrity": "sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ==", "dev": true, "license": "MIT", "dependencies": { + "browserslist": "^4.23.0", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^4.0.2", "postcss-selector-parser": "^6.0.16" }, "engines": { @@ -40711,706 +40296,782 @@ "postcss": "^8.4.31" } }, - "node_modules/postcss-url": { - "version": "10.1.3", - "resolved": "https://registry.npmjs.org/postcss-url/-/postcss-url-10.1.3.tgz", - "integrity": "sha512-FUzyxfI5l2tKmXdYc6VTu3TWZsInayEKPbiyW+P6vmmIrrb4I6CGX0BFoewgYHLK+oIL5FECEK02REYRpBvUCw==", + "node_modules/postcss-minify-font-values": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.1.0.tgz", + "integrity": "sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg==", "dev": true, "license": "MIT", "dependencies": { - "make-dir": "~3.1.0", - "mime": "~2.5.2", - "minimatch": "~3.0.4", - "xxhashjs": "~0.2.2" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=10" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { - "postcss": "^8.0.0" + "postcss": "^8.4.31" } }, - "node_modules/postcss-url/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "node_modules/postcss-minify-gradients": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.3.tgz", + "integrity": "sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q==", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "colord": "^2.9.3", + "cssnano-utils": "^4.0.2", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/postcss-url/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "node_modules/postcss-minify-params": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.1.0.tgz", + "integrity": "sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA==", "dev": true, "license": "MIT", "dependencies": { - "semver": "^6.0.0" + "browserslist": "^4.23.0", + "cssnano-utils": "^4.0.2", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=8" + "node": "^14 || ^16 || >=18.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/postcss-url/node_modules/mime": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", + "node_modules/postcss-minify-selectors": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.4.tgz", + "integrity": "sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ==", "dev": true, "license": "MIT", - "bin": { - "mime": "cli.js" + "dependencies": { + "postcss-selector-parser": "^6.0.16" }, "engines": { - "node": ">=4.0.0" + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/postcss-url/node_modules/minimatch": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", - "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", + "node_modules/postcss-modules": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-6.0.1.tgz", + "integrity": "sha512-zyo2sAkVvuZFFy0gc2+4O+xar5dYlaVy/ebO24KT0ftk/iJevSNyPyQellsBLlnccwh7f6V6Y4GvuKRYToNgpQ==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" + "generic-names": "^4.0.0", + "icss-utils": "^5.1.0", + "lodash.camelcase": "^4.3.0", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", + "postcss-modules-values": "^4.0.0", + "string-hash": "^1.1.3" }, - "engines": { - "node": "*" + "peerDependencies": { + "postcss": "^8.0.0" } }, - "node_modules/postcss-url/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "node_modules/postcss-modules-extract-imports": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", "dev": true, "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/postcss-value-parser": { + "node_modules/postcss-modules-local-by-default": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz", + "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", - "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", - "license": "MIT", - "bin": { - "prettier": "bin/prettier.cjs" + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^7.0.0", + "postcss-value-parser": "^4.1.0" }, "engines": { - "node": ">=14" + "node": "^10 || ^12 || >= 14" }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/prettier-plugin-svelte": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-3.4.0.tgz", - "integrity": "sha512-pn1ra/0mPObzqoIQn/vUTR3ZZI6UuZ0sHqMK5x2jMLGrs53h0sXhkVuDcrlssHwIMk7FYrMjHBPoUSyyEEDlBQ==", - "dev": true, - "license": "MIT", "peerDependencies": { - "prettier": "^3.0.0", - "svelte": "^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0" + "postcss": "^8.1.0" } }, - "node_modules/pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "node_modules/postcss-modules-local-by-default/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=4" } }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/postcss-modules-scope": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", + "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", "dev": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, "engines": { - "node": ">=10" + "node": "^10 || ^12 || >= 14" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/pretty-ms": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.3.0.tgz", - "integrity": "sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==", + "node_modules/postcss-modules-scope/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "dev": true, "license": "MIT", "dependencies": { - "parse-ms": "^4.0.0" - }, - "engines": { - "node": ">=18" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/prismjs": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", - "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", - "license": "MIT", "engines": { - "node": ">=6" + "node": ">=4" } }, - "node_modules/proc-log": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", - "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", "dev": true, "license": "ISC", + "dependencies": { + "icss-utils": "^5.0.0" + }, "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "license": "MIT", - "engines": { - "node": ">= 0.6.0" + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true, - "license": "MIT" - }, - "node_modules/promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "node_modules/postcss-nesting": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.2.0.tgz", + "integrity": "sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==", "dev": true, - "license": "MIT", + "license": "CC0-1.0", "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" + "@csstools/selector-specificity": "^2.0.0", + "postcss-selector-parser": "^6.0.10" }, "engines": { - "node": ">=10" + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" } }, - "node_modules/promise-retry/node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "node_modules/postcss-normalize-charset": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.2.tgz", + "integrity": "sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ==", "dev": true, "license": "MIT", "engines": { - "node": ">= 4" + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/promise.series": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/promise.series/-/promise.series-0.2.0.tgz", - "integrity": "sha512-VWQJyU2bcDTgZw8kpfBpB/ejZASlCrzwz5f2hjb/zlujOEB4oeiAhHygAWq8ubsX2GVkD4kCU5V2dwOTaCY5EQ==", + "node_modules/postcss-normalize-display-values": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.2.tgz", + "integrity": "sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg==", "dev": true, "license": "MIT", - "engines": { - "node": ">=0.12" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "license": "MIT", "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">= 6" - } - }, - "node_modules/prompts/node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, - "license": "MIT", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/prop-types/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/property-information": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", - "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", - "dev": true, - "license": "ISC" - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "node_modules/postcss-normalize-positions": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.2.tgz", + "integrity": "sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q==", "dev": true, "license": "MIT", "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">= 0.10" + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "license": "MIT" - }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "node_modules/postcss-normalize-repeat-style": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.2.tgz", + "integrity": "sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ==", "dev": true, "license": "MIT", - "optional": true + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } }, - "node_modules/psl": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", - "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", + "node_modules/postcss-normalize-string": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.2.tgz", + "integrity": "sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ==", "dev": true, "license": "MIT", "dependencies": { - "punycode": "^2.3.1" + "postcss-value-parser": "^4.2.0" }, - "funding": { - "url": "https://github.com/sponsors/lupomontero" + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/psl/node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "node_modules/postcss-normalize-timing-functions": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.2.tgz", + "integrity": "sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA==", "dev": true, "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, "engines": { - "node": ">=6" + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "license": "MIT" - }, - "node_modules/pure-rand": { + "node_modules/postcss-normalize-unicode": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", - "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ], - "license": "MIT" - }, - "node_modules/qs": { - "version": "6.14.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz", - "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.1.0.tgz", + "integrity": "sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg==", + "dev": true, + "license": "MIT", "dependencies": { - "side-channel": "^1.1.0" + "browserslist": "^4.23.0", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=0.6" + "node": "^14 || ^16 || >=18.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/quansync": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.11.tgz", - "integrity": "sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==", + "node_modules/postcss-normalize-url": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.2.tgz", + "integrity": "sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/antfu" - }, - { - "type": "individual", - "url": "https://github.com/sponsors/sxzz" - } - ], - "license": "MIT" + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "node_modules/postcss-normalize-whitespace": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.2.tgz", + "integrity": "sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "node_modules/postcss-opacity-percentage": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.3.tgz", + "integrity": "sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A==", + "dev": true, "funding": [ { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "type": "kofi", + "url": "https://ko-fi.com/mrcgrtz" }, { - "type": "consulting", - "url": "https://feross.org/support" + "type": "liberapay", + "url": "https://liberapay.com/mrcgrtz" } ], - "license": "MIT" + "license": "MIT", + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.2" + } }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "node_modules/postcss-ordered-values": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.2.tgz", + "integrity": "sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q==", "dev": true, "license": "MIT", + "dependencies": { + "cssnano-utils": "^4.0.2", + "postcss-value-parser": "^4.2.0" + }, "engines": { - "node": ">=10" + "node": "^14 || ^16 || >=18.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/radix3": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz", - "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==", - "license": "MIT" - }, - "node_modules/rambda": { - "version": "9.4.2", - "resolved": "https://registry.npmjs.org/rambda/-/rambda-9.4.2.tgz", - "integrity": "sha512-++euMfxnl7OgaEKwXh9QqThOjMeta2HH001N1v4mYQzBjJBnmXBh2BCK6dZAbICFVXOFUVD3xFG0R3ZPU0mxXw==", + "node_modules/postcss-overflow-shorthand": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz", + "integrity": "sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==", "dev": true, - "license": "MIT" + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "node_modules/postcss-page-break": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", + "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", "dev": true, "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" + "peerDependencies": { + "postcss": "^8" } }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "node_modules/postcss-place": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.5.tgz", + "integrity": "sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==", "dev": true, - "license": "MIT", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, "engines": { - "node": ">= 0.6" + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" } }, - "node_modules/raw-body": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", - "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", + "node_modules/postcss-preset-env": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.8.3.tgz", + "integrity": "sha512-T1LgRm5uEVFSEF83vHZJV2z19lHg4yJuZ6gXZZkqVsqv63nlr6zabMH3l4Pc01FQCyfWVrh2GaUeCVy9Po+Aag==", "dev": true, - "license": "MIT", + "license": "CC0-1.0", "dependencies": { - "bytes": "~3.1.2", - "http-errors": "~2.0.1", - "iconv-lite": "~0.7.0", - "unpipe": "~1.0.0" + "@csstools/postcss-cascade-layers": "^1.1.1", + "@csstools/postcss-color-function": "^1.1.1", + "@csstools/postcss-font-format-keywords": "^1.0.1", + "@csstools/postcss-hwb-function": "^1.0.2", + "@csstools/postcss-ic-unit": "^1.0.1", + "@csstools/postcss-is-pseudo-class": "^2.0.7", + "@csstools/postcss-nested-calc": "^1.0.0", + "@csstools/postcss-normalize-display-values": "^1.0.1", + "@csstools/postcss-oklab-function": "^1.1.1", + "@csstools/postcss-progressive-custom-properties": "^1.3.0", + "@csstools/postcss-stepped-value-functions": "^1.0.1", + "@csstools/postcss-text-decoration-shorthand": "^1.0.0", + "@csstools/postcss-trigonometric-functions": "^1.0.2", + "@csstools/postcss-unset-value": "^1.0.2", + "autoprefixer": "^10.4.13", + "browserslist": "^4.21.4", + "css-blank-pseudo": "^3.0.3", + "css-has-pseudo": "^3.0.4", + "css-prefers-color-scheme": "^6.0.3", + "cssdb": "^7.1.0", + "postcss-attribute-case-insensitive": "^5.0.2", + "postcss-clamp": "^4.1.0", + "postcss-color-functional-notation": "^4.2.4", + "postcss-color-hex-alpha": "^8.0.4", + "postcss-color-rebeccapurple": "^7.1.1", + "postcss-custom-media": "^8.0.2", + "postcss-custom-properties": "^12.1.10", + "postcss-custom-selectors": "^6.0.3", + "postcss-dir-pseudo-class": "^6.0.5", + "postcss-double-position-gradients": "^3.1.2", + "postcss-env-function": "^4.0.6", + "postcss-focus-visible": "^6.0.4", + "postcss-focus-within": "^5.0.4", + "postcss-font-variant": "^5.0.0", + "postcss-gap-properties": "^3.0.5", + "postcss-image-set-function": "^4.0.7", + "postcss-initial": "^4.0.1", + "postcss-lab-function": "^4.2.1", + "postcss-logical": "^5.0.4", + "postcss-media-minmax": "^5.0.0", + "postcss-nesting": "^10.2.0", + "postcss-opacity-percentage": "^1.1.2", + "postcss-overflow-shorthand": "^3.0.4", + "postcss-page-break": "^3.0.4", + "postcss-place": "^7.0.5", + "postcss-pseudo-class-any-link": "^7.1.6", + "postcss-replace-overflow-wrap": "^4.0.0", + "postcss-selector-not": "^6.0.1", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">= 0.10" + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" } }, - "node_modules/raw-body/node_modules/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "node_modules/postcss-pseudo-class-any-link": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz", + "integrity": "sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==", "dev": true, - "license": "MIT", + "license": "CC0-1.0", "dependencies": { - "depd": "~2.0.0", - "inherits": "~2.0.4", - "setprototypeof": "~1.2.0", - "statuses": "~2.0.2", - "toidentifier": "~1.0.1" + "postcss-selector-parser": "^6.0.10" }, "engines": { - "node": ">= 0.8" + "node": "^12 || ^14 || >=16" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/express" + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" } }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "node_modules/postcss-reduce-initial": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.1.0.tgz", + "integrity": "sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw==", "dev": true, - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "license": "MIT", "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" + "browserslist": "^4.23.0", + "caniuse-api": "^3.0.0" }, - "bin": { - "rc": "cli.js" + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/rc/node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "node_modules/postcss-reduce-transforms": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.2.tgz", + "integrity": "sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA==", "dev": true, - "license": "ISC" + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } }, - "node_modules/rc/node_modules/strip-json-comments": { + "node_modules/postcss-replace": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "resolved": "https://registry.npmjs.org/postcss-replace/-/postcss-replace-2.0.1.tgz", + "integrity": "sha512-T83GVovCkBQkFCTmuid0B2bWNu/O0Bh/HDMeEGFC62EwMvVBLZQFYM7iBbcGT48QDXSNSX6e/X1Q7/Syh5NFng==", "dev": true, "license": "MIT", + "dependencies": { + "kind-of": "^6.0.3", + "object-path": "^0.11.8" + }, "engines": { - "node": ">=0.10.0" + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" } }, - "node_modules/react": { - "version": "19.2.4", - "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", - "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==", + "node_modules/postcss-replace-overflow-wrap": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", + "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "postcss": "^8.0.3" + } + }, + "node_modules/postcss-safe-parser": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.1.tgz", + "integrity": "sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss-safe-parser" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/react-dom": { - "version": "19.2.4", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz", - "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==", + "node_modules/postcss-selector-not": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz", + "integrity": "sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==", + "dev": true, "license": "MIT", "dependencies": { - "scheduler": "^0.27.0" + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" }, "peerDependencies": { - "react": "^19.2.4" + "postcss": "^8.2" } }, - "node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } }, - "node_modules/react-refresh": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", - "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", + "node_modules/postcss-svgo": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.3.tgz", + "integrity": "sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g==", + "dev": true, "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^3.2.0" + }, "engines": { - "node": ">=0.10.0" + "node": "^14 || ^16 || >= 18" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/react-router": { - "version": "6.30.3", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.30.3.tgz", - "integrity": "sha512-XRnlbKMTmktBkjCLE8/XcZFlnHvr2Ltdr1eJX4idL55/9BbORzyZEaIkBFDhFGCEWBBItsVrDxwx3gnisMitdw==", + "node_modules/postcss-unique-selectors": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.4.tgz", + "integrity": "sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg==", + "dev": true, "license": "MIT", "dependencies": { - "@remix-run/router": "1.23.2" + "postcss-selector-parser": "^6.0.16" }, "engines": { - "node": ">=14.0.0" + "node": "^14 || ^16 || >=18.0" }, "peerDependencies": { - "react": ">=16.8" + "postcss": "^8.4.31" } }, - "node_modules/react-router-dom": { - "version": "6.30.3", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.30.3.tgz", - "integrity": "sha512-pxPcv1AczD4vso7G4Z3TKcvlxK7g7TNt3/FNGMhfqyntocvYKj+GCatfigGDjbLozC4baguJ0ReCigoDJXb0ag==", + "node_modules/postcss-url": { + "version": "10.1.3", + "resolved": "https://registry.npmjs.org/postcss-url/-/postcss-url-10.1.3.tgz", + "integrity": "sha512-FUzyxfI5l2tKmXdYc6VTu3TWZsInayEKPbiyW+P6vmmIrrb4I6CGX0BFoewgYHLK+oIL5FECEK02REYRpBvUCw==", + "dev": true, "license": "MIT", "dependencies": { - "@remix-run/router": "1.23.2", - "react-router": "6.30.3" + "make-dir": "~3.1.0", + "mime": "~2.5.2", + "minimatch": "~3.0.4", + "xxhashjs": "~0.2.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=10" }, "peerDependencies": { - "react": ">=16.8", - "react-dom": ">=16.8" + "postcss": "^8.0.0" } }, - "node_modules/read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "node_modules/postcss-url/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/postcss-url/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "license": "MIT", "dependencies": { - "pify": "^2.3.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/read-package-up": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/read-package-up/-/read-package-up-12.0.0.tgz", - "integrity": "sha512-Q5hMVBYur/eQNWDdbF4/Wqqr9Bjvtrw2kjGxxBbKLbx8bVCL8gcArjTy8zDUuLGQicftpMuU0riQNcAsbtOVsw==", + "node_modules/postcss-url/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "license": "MIT", "dependencies": { - "find-up-simple": "^1.0.1", - "read-pkg": "^10.0.0", - "type-fest": "^5.2.0" + "semver": "^6.0.0" }, "engines": { - "node": ">=20" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/read-package-up/node_modules/normalize-package-data": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-8.0.0.tgz", - "integrity": "sha512-RWk+PI433eESQ7ounYxIp67CYuVsS1uYSonX3kA6ps/3LWfjVQa/ptEg6Y3T6uAMq1mWpX9PQ+qx+QaHpsc7gQ==", + "node_modules/postcss-url/node_modules/mime": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^9.0.0", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" + "license": "MIT", + "bin": { + "mime": "cli.js" }, "engines": { - "node": "^20.17.0 || >=22.9.0" + "node": ">=4.0.0" } }, - "node_modules/read-package-up/node_modules/parse-json": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz", - "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==", + "node_modules/postcss-url/node_modules/minimatch": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", + "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@babel/code-frame": "^7.26.2", - "index-to-position": "^1.1.0", - "type-fest": "^4.39.1" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "*" } }, - "node_modules/read-package-up/node_modules/parse-json/node_modules/type-fest": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", - "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "node_modules/postcss-url/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/read-package-up/node_modules/read-pkg": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-10.0.0.tgz", - "integrity": "sha512-A70UlgfNdKI5NSvTTfHzLQj7NJRpJ4mT5tGafkllJ4wh71oYuGm/pzphHcmW4s35iox56KSK721AihodoXSc/A==", + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/powershell-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/powershell-utils/-/powershell-utils-0.1.0.tgz", + "integrity": "sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A==", "dev": true, "license": "MIT", - "dependencies": { - "@types/normalize-package-data": "^2.4.4", - "normalize-package-data": "^8.0.0", - "parse-json": "^8.3.0", - "type-fest": "^5.2.0", - "unicorn-magic": "^0.3.0" - }, "engines": { "node": ">=20" }, @@ -41418,97 +41079,78 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/read-package-up/node_modules/type-fest": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.3.1.tgz", - "integrity": "sha512-VCn+LMHbd4t6sF3wfU/+HKT63C9OoyrSIf4b+vtWHpt2U7/4InZG467YDNMFMR70DdHjAdpPWmw2lzRdg0Xqqg==", + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, - "license": "(MIT OR CC0-1.0)", - "dependencies": { - "tagged-tag": "^1.0.0" - }, + "license": "MIT", "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.8.0" } }, - "node_modules/read-package-up/node_modules/unicorn-magic": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", - "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", - "dev": true, + "node_modules/prettier": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.1.tgz", + "integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==", "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, "engines": { - "node": ">=18" + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/read-pkg": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-9.0.1.tgz", - "integrity": "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==", + "node_modules/prettier-plugin-svelte": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-3.5.1.tgz", + "integrity": "sha512-65+fr5+cgIKWKiqM1Doum4uX6bY8iFCdztvvp2RcF+AJoieaw9kJOFMNcJo/bkmKYsxFaM9OsVZK/gWauG/5mg==", "dev": true, "license": "MIT", - "dependencies": { - "@types/normalize-package-data": "^2.4.3", - "normalize-package-data": "^6.0.0", - "parse-json": "^8.0.0", - "type-fest": "^4.6.0", - "unicorn-magic": "^0.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "prettier": "^3.0.0", + "svelte": "^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0" } }, - "node_modules/read-pkg-up": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-11.0.0.tgz", - "integrity": "sha512-LOVbvF1Q0SZdjClSefZ0Nz5z8u+tIE7mV5NibzmE9VYmDe9CaBbAVtz1veOSZbofrdsilxuDAYnFenukZVp8/Q==", - "deprecated": "Renamed to read-package-up", + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "dev": true, "license": "MIT", "dependencies": { - "find-up-simple": "^1.0.0", - "read-pkg": "^9.0.0", - "type-fest": "^4.6.0" + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/read-pkg-up/node_modules/type-fest": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", - "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "MIT", "engines": { - "node": ">=16" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/read-pkg/node_modules/parse-json": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz", - "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==", + "node_modules/pretty-ms": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.3.0.tgz", + "integrity": "sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.26.2", - "index-to-position": "^1.1.0", - "type-fest": "^4.39.1" + "parse-ms": "^4.0.0" }, "engines": { "node": ">=18" @@ -41517,628 +41159,594 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/read-pkg/node_modules/type-fest": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", - "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, + "node_modules/prismjs": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", + "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "engines": { + "node": ">=6" } }, - "node_modules/readable-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "license": "MIT" - }, - "node_modules/readdirp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", - "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "node_modules/proc-log": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", + "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", "dev": true, - "license": "MIT", + "license": "ISC", "engines": { - "node": ">= 14.18.0" - }, - "funding": { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/recma-build-jsx": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/recma-build-jsx/-/recma-build-jsx-1.0.0.tgz", - "integrity": "sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "estree-util-build-jsx": "^3.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/recma-jsx": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/recma-jsx/-/recma-jsx-1.0.1.tgz", - "integrity": "sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==", + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", "license": "MIT", - "dependencies": { - "acorn-jsx": "^5.0.0", - "estree-util-to-js": "^2.0.0", - "recma-parse": "^1.0.0", - "recma-stringify": "^1.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + "engines": { + "node": ">= 0.6.0" } }, - "node_modules/recma-parse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/recma-parse/-/recma-parse-1.0.0.tgz", - "integrity": "sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "esast-util-from-js": "^2.0.0", - "unified": "^11.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true, + "license": "MIT" }, - "node_modules/recma-stringify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/recma-stringify/-/recma-stringify-1.0.0.tgz", - "integrity": "sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==", + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, "license": "MIT", "dependencies": { - "@types/estree": "^1.0.0", - "estree-util-to-js": "^2.0.0", - "unified": "^11.0.0", - "vfile": "^6.0.0" + "err-code": "^2.0.2", + "retry": "^0.12.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=10" } }, - "node_modules/redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "node_modules/promise-retry/node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", "dev": true, "license": "MIT", - "dependencies": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - }, "engines": { - "node": ">=8" + "node": ">= 4" } }, - "node_modules/reflect-metadata": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", - "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/reflect.getprototypeof": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", - "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", - "dev": true, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.9", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.7", - "get-proto": "^1.0.1", - "which-builtin-type": "^1.2.1" + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 6" } }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "license": "MIT" - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz", - "integrity": "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==", + "node_modules/prompts/node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "license": "MIT", - "dependencies": { - "regenerate": "^1.4.2" - }, "engines": { - "node": ">=4" + "node": ">=6" } }, - "node_modules/regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/regex/-/regex-6.1.0.tgz", - "integrity": "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==", + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, "license": "MIT", "dependencies": { - "regex-utilities": "^2.3.0" + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" } }, - "node_modules/regex-parser": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.3.1.tgz", - "integrity": "sha512-yXLRqatcCuKtVHsWrNg0JL3l1zGfdXeEvDa0bdu4tCDQw0RpMDZsqbkyRTUnKMR0tXF627V2oEWjBEaEdqTwtQ==", + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "dev": true, "license": "MIT" }, - "node_modules/regex-recursion": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz", - "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==", + "node_modules/property-information": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", + "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", "license": "MIT", - "dependencies": { - "regex-utilities": "^2.3.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/regex-utilities": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz", - "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==", - "license": "MIT" + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "dev": true, + "license": "ISC" }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", - "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "set-function-name": "^2.0.2" + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.10" } }, - "node_modules/regexpu-core": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.4.0.tgz", - "integrity": "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==", + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, "license": "MIT", - "dependencies": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.2.2", - "regjsgen": "^0.8.0", - "regjsparser": "^0.13.0", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.2.1" - }, "engines": { - "node": ">=4" + "node": ">= 0.10" } }, - "node_modules/registry-auth-token": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.0.tgz", - "integrity": "sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw==", + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true, + "license": "MIT" + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", "dev": true, "license": "MIT", - "dependencies": { - "@pnpm/npm-conf": "^2.1.0" - }, - "engines": { - "node": ">=14" - } + "optional": true }, - "node_modules/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", + "node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", "license": "MIT" }, - "node_modules/regjsparser": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.0.tgz", - "integrity": "sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==", - "license": "BSD-2-Clause", - "dependencies": { - "jsesc": "~3.1.0" - }, - "bin": { - "regjsparser": "bin/parser" - } + "node_modules/pure-rand": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-7.0.1.tgz", + "integrity": "sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT" }, - "node_modules/rehype": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/rehype/-/rehype-13.0.2.tgz", - "integrity": "sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A==", + "node_modules/pvtsutils": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.6.tgz", + "integrity": "sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==", + "dev": true, "license": "MIT", "dependencies": { - "@types/hast": "^3.0.0", - "rehype-parse": "^9.0.0", - "rehype-stringify": "^10.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "tslib": "^2.8.1" } }, - "node_modules/rehype-parse": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-9.0.1.tgz", - "integrity": "sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==", + "node_modules/pvutils": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.5.tgz", + "integrity": "sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA==", + "dev": true, "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "hast-util-from-html": "^2.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=16.0.0" } }, - "node_modules/rehype-raw": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz", - "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==", - "license": "MIT", + "node_modules/qs": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.0.tgz", + "integrity": "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==", + "license": "BSD-3-Clause", "dependencies": { - "@types/hast": "^3.0.0", - "hast-util-raw": "^9.0.0", - "vfile": "^6.0.0" + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/rehype-recma": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rehype-recma/-/rehype-recma-1.0.0.tgz", - "integrity": "sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==", + "node_modules/quansync": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.11.tgz", + "integrity": "sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/antfu" + }, + { + "type": "individual", + "url": "https://github.com/sponsors/sxzz" + } + ], + "license": "MIT" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "@types/hast": "^3.0.0", - "hast-util-to-estree": "^3.0.0" + "engines": { + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/rehype-stringify": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-10.0.1.tgz", - "integrity": "sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==", + "node_modules/radix3": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz", + "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==", + "license": "MIT" + }, + "node_modules/rambda": { + "version": "9.4.2", + "resolved": "https://registry.npmjs.org/rambda/-/rambda-9.4.2.tgz", + "integrity": "sha512-++euMfxnl7OgaEKwXh9QqThOjMeta2HH001N1v4mYQzBjJBnmXBh2BCK6dZAbICFVXOFUVD3xFG0R3ZPU0mxXw==", + "dev": true, + "license": "MIT" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, "license": "MIT", "dependencies": { - "@types/hast": "^3.0.0", - "hast-util-to-html": "^9.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "safe-buffer": "^5.1.0" } }, - "node_modules/remark-gfm": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz", - "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-gfm": "^3.0.0", - "micromark-extension-gfm": "^3.0.0", - "remark-parse": "^11.0.0", - "remark-stringify": "^11.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">= 0.6" } }, - "node_modules/remark-mdx": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.1.1.tgz", - "integrity": "sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==", + "node_modules/raw-body": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", + "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", + "dev": true, "license": "MIT", "dependencies": { - "mdast-util-mdx": "^3.0.0", - "micromark-extension-mdxjs": "^3.0.0" + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">= 0.10" } }, - "node_modules/remark-parse": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", - "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", - "license": "MIT", + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-from-markdown": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unified": "^11.0.0" + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "bin": { + "rc": "cli.js" } }, - "node_modules/remark-rehype": { - "version": "11.1.2", - "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz", - "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==", + "node_modules/rc/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, + "license": "ISC" + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "mdast-util-to-hast": "^13.0.0", - "unified": "^11.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/remark-smartypants": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/remark-smartypants/-/remark-smartypants-3.0.2.tgz", - "integrity": "sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA==", + "node_modules/react": { + "version": "19.2.4", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", + "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==", "license": "MIT", - "dependencies": { - "retext": "^9.0.0", - "retext-smartypants": "^6.0.0", - "unified": "^11.0.4", - "unist-util-visit": "^5.0.0" - }, "engines": { - "node": ">=16.0.0" + "node": ">=0.10.0" } }, - "node_modules/remark-stringify": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", - "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", + "node_modules/react-dom": { + "version": "19.2.4", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz", + "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==", "license": "MIT", "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-to-markdown": "^2.0.0", - "unified": "^11.0.0" + "scheduler": "^0.27.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "peerDependencies": { + "react": "^19.2.4" } }, - "node_modules/request-light": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/request-light/-/request-light-0.7.0.tgz", - "integrity": "sha512-lMbBMrDoxgsyO+yB3sDcrDuX85yYt7sS8BfQd11jtbW/z5ZWgLZRcEGLsLoYw7I0WSUGQBs8CC8ScIxkTX1+6Q==", + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true, "license": "MIT" }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "node_modules/react-refresh": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", + "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, + "node_modules/react-router": { + "version": "6.30.3", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.30.3.tgz", + "integrity": "sha512-XRnlbKMTmktBkjCLE8/XcZFlnHvr2Ltdr1eJX4idL55/9BbORzyZEaIkBFDhFGCEWBBItsVrDxwx3gnisMitdw==", + "license": "MIT", + "dependencies": { + "@remix-run/router": "1.23.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.30.3", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.30.3.tgz", + "integrity": "sha512-pxPcv1AczD4vso7G4Z3TKcvlxK7g7TNt3/FNGMhfqyntocvYKj+GCatfigGDjbLozC4baguJ0ReCigoDJXb0ag==", "license": "MIT", + "dependencies": { + "@remix-run/router": "1.23.2", + "react-router": "6.30.3" + }, "engines": { - "node": ">=0.10.0" + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" } }, - "node_modules/requires-port": { + "node_modules/read-cache": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } }, - "node_modules/resolve": { - "version": "1.22.11", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", - "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "node_modules/read-package-up": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/read-package-up/-/read-package-up-12.0.0.tgz", + "integrity": "sha512-Q5hMVBYur/eQNWDdbF4/Wqqr9Bjvtrw2kjGxxBbKLbx8bVCL8gcArjTy8zDUuLGQicftpMuU0riQNcAsbtOVsw==", + "dev": true, "license": "MIT", "dependencies": { - "is-core-module": "^2.16.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" + "find-up-simple": "^1.0.1", + "read-pkg": "^10.0.0", + "type-fest": "^5.2.0" }, "engines": { - "node": ">= 0.4" + "node": ">=20" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "dev": true, - "license": "MIT" - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "node_modules/read-package-up/node_modules/normalize-package-data": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-8.0.0.tgz", + "integrity": "sha512-RWk+PI433eESQ7ounYxIp67CYuVsS1uYSonX3kA6ps/3LWfjVQa/ptEg6Y3T6uAMq1mWpX9PQ+qx+QaHpsc7gQ==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "resolve-from": "^5.0.0" + "hosted-git-info": "^9.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" }, "engines": { - "node": ">=8" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", + "node_modules/read-package-up/node_modules/parse-json": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz", + "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==", "dev": true, "license": "MIT", "dependencies": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" + "@babel/code-frame": "^7.26.2", + "index-to-position": "^1.1.0", + "type-fest": "^4.39.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "license": "MIT", + "node_modules/read-package-up/node_modules/parse-json/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=8" + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/resolve-url-loader": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", - "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", + "node_modules/read-package-up/node_modules/read-pkg": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-10.1.0.tgz", + "integrity": "sha512-I8g2lArQiP78ll51UeMZojewtYgIRCKCWqZEgOO8c/uefTI+XDXvCSXu3+YNUaTNvZzobrL5+SqHjBrByRRTdg==", "dev": true, "license": "MIT", "dependencies": { - "adjust-sourcemap-loader": "^4.0.0", - "convert-source-map": "^1.7.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.14", - "source-map": "0.6.1" + "@types/normalize-package-data": "^2.4.4", + "normalize-package-data": "^8.0.0", + "parse-json": "^8.3.0", + "type-fest": "^5.4.4", + "unicorn-magic": "^0.4.0" }, "engines": { - "node": ">=12" + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/resolve-url-loader/node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "node_modules/read-package-up/node_modules/type-fest": { + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.4.4.tgz", + "integrity": "sha512-JnTrzGu+zPV3aXIUhnyWJj4z/wigMsdYajGLIYakqyOW1nPllzXEJee0QQbHj+CTIQtXGlAjuK0UY+2xTyjVAw==", "dev": true, - "license": "MIT", + "license": "(MIT OR CC0-1.0)", "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" + "tagged-tag": "^1.0.0" }, "engines": { - "node": ">=8.9.0" + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/resolve-url-loader/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/read-package-up/node_modules/unicorn-magic": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.4.0.tgz", + "integrity": "sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/resolve.exports": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", - "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", + "node_modules/read-pkg": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-9.0.1.tgz", + "integrity": "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==", + "dev": true, "license": "MIT", + "dependencies": { + "@types/normalize-package-data": "^2.4.3", + "normalize-package-data": "^6.0.0", + "parse-json": "^8.0.0", + "type-fest": "^4.6.0", + "unicorn-magic": "^0.1.0" + }, "engines": { - "node": ">=10" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/responselike": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", - "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", + "node_modules/read-pkg-up": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-11.0.0.tgz", + "integrity": "sha512-LOVbvF1Q0SZdjClSefZ0Nz5z8u+tIE7mV5NibzmE9VYmDe9CaBbAVtz1veOSZbofrdsilxuDAYnFenukZVp8/Q==", + "deprecated": "Renamed to read-package-up", "dev": true, "license": "MIT", "dependencies": { - "lowercase-keys": "^3.0.0" + "find-up-simple": "^1.0.0", + "read-pkg": "^9.0.0", + "type-fest": "^4.6.0" }, "engines": { - "node": ">=14.16" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/restore-cursor": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", - "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "node_modules/read-pkg/node_modules/parse-json": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz", + "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==", "dev": true, "license": "MIT", "dependencies": { - "onetime": "^7.0.0", - "signal-exit": "^4.1.0" + "@babel/code-frame": "^7.26.2", + "index-to-position": "^1.1.0", + "type-fest": "^4.39.1" }, "engines": { "node": ">=18" @@ -42147,966 +41755,857 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/restore-cursor/node_modules/onetime": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", - "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true, + "license": "MIT" + }, + "node_modules/readdirp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz", + "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==", "license": "MIT", - "dependencies": { - "mimic-function": "^5.0.0" - }, "engines": { - "node": ">=18" + "node": ">= 20.19.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "individual", + "url": "https://paulmillr.com/funding/" } }, - "node_modules/retext": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/retext/-/retext-9.0.0.tgz", - "integrity": "sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==", + "node_modules/recma-build-jsx": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-build-jsx/-/recma-build-jsx-1.0.0.tgz", + "integrity": "sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==", "license": "MIT", "dependencies": { - "@types/nlcst": "^2.0.0", - "retext-latin": "^4.0.0", - "retext-stringify": "^4.0.0", - "unified": "^11.0.0" + "@types/estree": "^1.0.0", + "estree-util-build-jsx": "^3.0.0", + "vfile": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/retext-latin": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/retext-latin/-/retext-latin-4.0.0.tgz", - "integrity": "sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==", + "node_modules/recma-jsx": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/recma-jsx/-/recma-jsx-1.0.1.tgz", + "integrity": "sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==", "license": "MIT", "dependencies": { - "@types/nlcst": "^2.0.0", - "parse-latin": "^7.0.0", + "acorn-jsx": "^5.0.0", + "estree-util-to-js": "^2.0.0", + "recma-parse": "^1.0.0", + "recma-stringify": "^1.0.0", "unified": "^11.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/retext-smartypants": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/retext-smartypants/-/retext-smartypants-6.2.0.tgz", - "integrity": "sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==", + "node_modules/recma-parse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-parse/-/recma-parse-1.0.0.tgz", + "integrity": "sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==", "license": "MIT", "dependencies": { - "@types/nlcst": "^2.0.0", - "nlcst-to-string": "^4.0.0", - "unist-util-visit": "^5.0.0" + "@types/estree": "^1.0.0", + "esast-util-from-js": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/retext-stringify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/retext-stringify/-/retext-stringify-4.0.0.tgz", - "integrity": "sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==", + "node_modules/recma-stringify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-stringify/-/recma-stringify-1.0.0.tgz", + "integrity": "sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==", "license": "MIT", "dependencies": { - "@types/nlcst": "^2.0.0", - "nlcst-to-string": "^4.0.0", - "unified": "^11.0.0" + "@types/estree": "^1.0.0", + "estree-util-to-js": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, "license": "MIT", + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/rfdc": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", - "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "node_modules/reflect-metadata": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", "dev": true, - "license": "MIT" + "license": "Apache-2.0" }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rollup": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.53.2.tgz", - "integrity": "sha512-MHngMYwGJVi6Fmnk6ISmnk7JAHRNF0UkuucA0CUW3N3a4KnONPEZz+vUanQP/ZC/iY1Qkf3bwPWzyY84wEks1g==", "license": "MIT", "dependencies": { - "@types/estree": "1.0.8" - }, - "bin": { - "rollup": "dist/bin/rollup" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" }, "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" + "node": ">= 0.4" }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.53.2", - "@rollup/rollup-android-arm64": "4.53.2", - "@rollup/rollup-darwin-arm64": "4.53.2", - "@rollup/rollup-darwin-x64": "4.53.2", - "@rollup/rollup-freebsd-arm64": "4.53.2", - "@rollup/rollup-freebsd-x64": "4.53.2", - "@rollup/rollup-linux-arm-gnueabihf": "4.53.2", - "@rollup/rollup-linux-arm-musleabihf": "4.53.2", - "@rollup/rollup-linux-arm64-gnu": "4.53.2", - "@rollup/rollup-linux-arm64-musl": "4.53.2", - "@rollup/rollup-linux-loong64-gnu": "4.53.2", - "@rollup/rollup-linux-ppc64-gnu": "4.53.2", - "@rollup/rollup-linux-riscv64-gnu": "4.53.2", - "@rollup/rollup-linux-riscv64-musl": "4.53.2", - "@rollup/rollup-linux-s390x-gnu": "4.53.2", - "@rollup/rollup-linux-x64-gnu": "4.53.2", - "@rollup/rollup-linux-x64-musl": "4.53.2", - "@rollup/rollup-openharmony-arm64": "4.53.2", - "@rollup/rollup-win32-arm64-msvc": "4.53.2", - "@rollup/rollup-win32-ia32-msvc": "4.53.2", - "@rollup/rollup-win32-x64-gnu": "4.53.2", - "@rollup/rollup-win32-x64-msvc": "4.53.2", - "fsevents": "~2.3.2" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/rollup-plugin-dts": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/rollup-plugin-dts/-/rollup-plugin-dts-6.2.3.tgz", - "integrity": "sha512-UgnEsfciXSPpASuOelix7m4DrmyQgiaWBnvI0TM4GxuDh5FkqW8E5hu57bCxXB90VvR1WNfLV80yEDN18UogSA==", + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", "dev": true, - "license": "LGPL-3.0-only", - "dependencies": { - "magic-string": "^0.30.17" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/Swatinem" - }, - "optionalDependencies": { - "@babel/code-frame": "^7.27.1" - }, - "peerDependencies": { - "rollup": "^3.29.4 || ^4", - "typescript": "^4.5 || ^5.0" - } + "license": "MIT" }, - "node_modules/rollup-plugin-postcss": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-postcss/-/rollup-plugin-postcss-4.0.2.tgz", - "integrity": "sha512-05EaY6zvZdmvPUDi3uCcAQoESDcYnv8ogJJQRp6V5kZ6J6P7uAVJlrTZcaaA20wTH527YTnKfkAoPxWI/jPp4w==", + "node_modules/regenerate-unicode-properties": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz", + "integrity": "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==", "dev": true, "license": "MIT", "dependencies": { - "chalk": "^4.1.0", - "concat-with-sourcemaps": "^1.1.0", - "cssnano": "^5.0.1", - "import-cwd": "^3.0.0", - "p-queue": "^6.6.2", - "pify": "^5.0.0", - "postcss-load-config": "^3.0.0", - "postcss-modules": "^4.0.0", - "promise.series": "^0.2.0", - "resolve": "^1.19.0", - "rollup-pluginutils": "^2.8.2", - "safe-identifier": "^0.4.2", - "style-inject": "^0.3.0" + "regenerate": "^1.4.2" }, "engines": { - "node": ">=10" - }, - "peerDependencies": { - "postcss": "8.x" + "node": ">=4" } }, - "node_modules/rollup-plugin-postcss/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true, + "node_modules/regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/regex/-/regex-6.1.0.tgz", + "integrity": "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==", "license": "MIT", - "engines": { - "node": ">= 10" + "dependencies": { + "regex-utilities": "^2.3.0" } }, - "node_modules/rollup-plugin-postcss/node_modules/css-declaration-sorter": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", - "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", + "node_modules/regex-parser": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.3.1.tgz", + "integrity": "sha512-yXLRqatcCuKtVHsWrNg0JL3l1zGfdXeEvDa0bdu4tCDQw0RpMDZsqbkyRTUnKMR0tXF627V2oEWjBEaEdqTwtQ==", "dev": true, - "license": "ISC", - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.0.9" - } + "license": "MIT" }, - "node_modules/rollup-plugin-postcss/node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dev": true, - "license": "BSD-2-Clause", + "node_modules/regex-recursion": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz", + "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==", + "license": "MIT", "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" + "regex-utilities": "^2.3.0" } }, - "node_modules/rollup-plugin-postcss/node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "node_modules/regex-utilities": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz", + "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==", + "license": "MIT" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", "dev": true, "license": "MIT", "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" }, "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/rollup-plugin-postcss/node_modules/css-what": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", - "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">= 6" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/fb55" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/rollup-plugin-postcss/node_modules/cssnano": { - "version": "5.1.15", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", - "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", + "node_modules/regexpu-core": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.4.0.tgz", + "integrity": "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==", "dev": true, "license": "MIT", "dependencies": { - "cssnano-preset-default": "^5.2.14", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.2.2", + "regjsgen": "^0.8.0", + "regjsparser": "^0.13.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.2.1" }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/cssnano" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=4" } }, - "node_modules/rollup-plugin-postcss/node_modules/cssnano-preset-default": { - "version": "5.2.14", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", - "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", + "node_modules/registry-auth-token": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.1.tgz", + "integrity": "sha512-P7B4+jq8DeD2nMsAcdfaqHbssgHtZ7Z5+++a5ask90fvmJ8p5je4mOa+wzu+DB4vQ5tdJV/xywY+UnVFeQLV5Q==", "dev": true, "license": "MIT", "dependencies": { - "css-declaration-sorter": "^6.3.1", - "cssnano-utils": "^3.1.0", - "postcss-calc": "^8.2.3", - "postcss-colormin": "^5.3.1", - "postcss-convert-values": "^5.1.3", - "postcss-discard-comments": "^5.1.2", - "postcss-discard-duplicates": "^5.1.0", - "postcss-discard-empty": "^5.1.1", - "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.7", - "postcss-merge-rules": "^5.1.4", - "postcss-minify-font-values": "^5.1.0", - "postcss-minify-gradients": "^5.1.1", - "postcss-minify-params": "^5.1.4", - "postcss-minify-selectors": "^5.2.1", - "postcss-normalize-charset": "^5.1.0", - "postcss-normalize-display-values": "^5.1.0", - "postcss-normalize-positions": "^5.1.1", - "postcss-normalize-repeat-style": "^5.1.1", - "postcss-normalize-string": "^5.1.0", - "postcss-normalize-timing-functions": "^5.1.0", - "postcss-normalize-unicode": "^5.1.1", - "postcss-normalize-url": "^5.1.0", - "postcss-normalize-whitespace": "^5.1.1", - "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.2", - "postcss-reduce-transforms": "^5.1.0", - "postcss-svgo": "^5.1.0", - "postcss-unique-selectors": "^5.1.1" + "@pnpm/npm-conf": "^3.0.2" }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=14" } }, - "node_modules/rollup-plugin-postcss/node_modules/cssnano-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", - "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "node_modules/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", "dev": true, - "license": "MIT", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } + "license": "MIT" }, - "node_modules/rollup-plugin-postcss/node_modules/csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "node_modules/regjsparser": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.0.tgz", + "integrity": "sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "css-tree": "^1.1.2" + "jsesc": "~3.1.0" }, - "engines": { - "node": ">=8.0.0" + "bin": { + "regjsparser": "bin/parser" } }, - "node_modules/rollup-plugin-postcss/node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "dev": true, + "node_modules/rehype": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/rehype/-/rehype-13.0.2.tgz", + "integrity": "sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A==", "license": "MIT", "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" + "@types/hast": "^3.0.0", + "rehype-parse": "^9.0.0", + "rehype-stringify": "^10.0.0", + "unified": "^11.0.0" }, "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/rollup-plugin-postcss/node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dev": true, - "license": "BSD-2-Clause", + "node_modules/rehype-parse": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-9.0.1.tgz", + "integrity": "sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==", + "license": "MIT", "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" + "@types/hast": "^3.0.0", + "hast-util-from-html": "^2.0.0", + "unified": "^11.0.0" }, "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/rollup-plugin-postcss/node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dev": true, - "license": "BSD-2-Clause", + "node_modules/rehype-raw": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz", + "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==", + "license": "MIT", "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" + "@types/hast": "^3.0.0", + "hast-util-raw": "^9.0.0", + "vfile": "^6.0.0" }, "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/rollup-plugin-postcss/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true, - "license": "BSD-2-Clause", + "node_modules/rehype-recma": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rehype-recma/-/rehype-recma-1.0.0.tgz", + "integrity": "sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "hast-util-to-estree": "^3.0.0" + }, "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/rollup-plugin-postcss/node_modules/lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", - "dev": true, + "node_modules/rehype-stringify": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-10.0.1.tgz", + "integrity": "sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==", "license": "MIT", - "engines": { - "node": ">=10" + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-to-html": "^9.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/rollup-plugin-postcss/node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/rollup-plugin-postcss/node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true, + "node_modules/remark-gfm": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz", + "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", "license": "MIT", - "engines": { - "node": ">=10" + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-gfm": "^3.0.0", + "micromark-extension-gfm": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "unified": "^11.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/rollup-plugin-postcss/node_modules/pify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", - "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", - "dev": true, + "node_modules/remark-mdx": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.1.1.tgz", + "integrity": "sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==", "license": "MIT", - "engines": { - "node": ">=10" + "dependencies": { + "mdast-util-mdx": "^3.0.0", + "micromark-extension-mdxjs": "^3.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/rollup-plugin-postcss/node_modules/postcss-calc": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", - "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", - "dev": true, + "node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", "license": "MIT", "dependencies": { - "postcss-selector-parser": "^6.0.9", - "postcss-value-parser": "^4.2.0" + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" }, - "peerDependencies": { - "postcss": "^8.2.2" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/rollup-plugin-postcss/node_modules/postcss-colormin": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", - "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", - "dev": true, + "node_modules/remark-rehype": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz", + "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==", "license": "MIT", "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "colord": "^2.9.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "mdast-util-to-hast": "^13.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/rollup-plugin-postcss/node_modules/postcss-convert-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", - "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", - "dev": true, + "node_modules/remark-smartypants": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/remark-smartypants/-/remark-smartypants-3.0.2.tgz", + "integrity": "sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA==", "license": "MIT", "dependencies": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" + "retext": "^9.0.0", + "retext-smartypants": "^6.0.0", + "unified": "^11.0.4", + "unist-util-visit": "^5.0.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=16.0.0" } }, - "node_modules/rollup-plugin-postcss/node_modules/postcss-discard-comments": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", - "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", - "dev": true, + "node_modules/remark-stringify": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", + "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", "license": "MIT", - "engines": { - "node": "^10 || ^12 || >=14.0" + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-to-markdown": "^2.0.0", + "unified": "^11.0.0" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/rollup-plugin-postcss/node_modules/postcss-discard-duplicates": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", - "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "node_modules/request-light": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/request-light/-/request-light-0.7.0.tgz", + "integrity": "sha512-lMbBMrDoxgsyO+yB3sDcrDuX85yYt7sS8BfQd11jtbW/z5ZWgLZRcEGLsLoYw7I0WSUGQBs8CC8ScIxkTX1+6Q==", "dev": true, - "license": "MIT", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } + "license": "MIT" }, - "node_modules/rollup-plugin-postcss/node_modules/postcss-discard-empty": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", - "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, "license": "MIT", "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=0.10.0" } }, - "node_modules/rollup-plugin-postcss/node_modules/postcss-discard-overridden": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", - "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, "license": "MIT", "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=0.10.0" } }, - "node_modules/rollup-plugin-postcss/node_modules/postcss-merge-longhand": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", - "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", "dev": true, "license": "MIT", "dependencies": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.1" + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">= 0.4" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/rollup-plugin-postcss/node_modules/postcss-merge-rules": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", - "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.1.0", - "postcss-selector-parser": "^6.0.5" + "resolve-from": "^5.0.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=8" } }, - "node_modules/rollup-plugin-postcss/node_modules/postcss-minify-font-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", - "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "node_modules/resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", "dev": true, "license": "MIT", "dependencies": { - "postcss-value-parser": "^4.2.0" + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=0.10.0" } }, - "node_modules/rollup-plugin-postcss/node_modules/postcss-minify-gradients": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", - "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, "license": "MIT", - "dependencies": { - "colord": "^2.9.1", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=8" } }, - "node_modules/rollup-plugin-postcss/node_modules/postcss-minify-params": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", - "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", + "node_modules/resolve-url-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", + "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.21.4", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.14", + "source-map": "0.6.1" }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=12" } }, - "node_modules/rollup-plugin-postcss/node_modules/postcss-minify-selectors": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", - "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", + "node_modules/resolve-url-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", "dev": true, "license": "MIT", "dependencies": { - "postcss-selector-parser": "^6.0.5" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=8.9.0" } }, - "node_modules/rollup-plugin-postcss/node_modules/postcss-normalize-charset": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", - "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "node_modules/resolve-url-loader/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=0.10.0" } }, - "node_modules/rollup-plugin-postcss/node_modules/postcss-normalize-display-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", - "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "node_modules/resolve.exports": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", + "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", "dev": true, "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=10" } }, - "node_modules/rollup-plugin-postcss/node_modules/postcss-normalize-positions": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", - "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", + "node_modules/responselike": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", + "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", "dev": true, "license": "MIT", "dependencies": { - "postcss-value-parser": "^4.2.0" + "lowercase-keys": "^3.0.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=14.16" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/rollup-plugin-postcss/node_modules/postcss-normalize-repeat-style": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", - "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", + "node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", "dev": true, "license": "MIT", "dependencies": { - "postcss-value-parser": "^4.2.0" + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=18" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/rollup-plugin-postcss/node_modules/postcss-normalize-string": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", - "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "node_modules/restore-cursor/node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", "dev": true, "license": "MIT", "dependencies": { - "postcss-value-parser": "^4.2.0" + "mimic-function": "^5.0.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=18" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/rollup-plugin-postcss/node_modules/postcss-normalize-timing-functions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", - "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", - "dev": true, + "node_modules/retext": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/retext/-/retext-9.0.0.tgz", + "integrity": "sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==", "license": "MIT", "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" + "@types/nlcst": "^2.0.0", + "retext-latin": "^4.0.0", + "retext-stringify": "^4.0.0", + "unified": "^11.0.0" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/rollup-plugin-postcss/node_modules/postcss-normalize-unicode": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", - "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", - "dev": true, + "node_modules/retext-latin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/retext-latin/-/retext-latin-4.0.0.tgz", + "integrity": "sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==", "license": "MIT", "dependencies": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" + "@types/nlcst": "^2.0.0", + "parse-latin": "^7.0.0", + "unified": "^11.0.0" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/rollup-plugin-postcss/node_modules/postcss-normalize-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", - "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", - "dev": true, + "node_modules/retext-smartypants": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/retext-smartypants/-/retext-smartypants-6.2.0.tgz", + "integrity": "sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==", "license": "MIT", "dependencies": { - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" + "@types/nlcst": "^2.0.0", + "nlcst-to-string": "^4.0.0", + "unist-util-visit": "^5.0.0" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/rollup-plugin-postcss/node_modules/postcss-normalize-whitespace": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", - "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", - "dev": true, + "node_modules/retext-stringify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/retext-stringify/-/retext-stringify-4.0.0.tgz", + "integrity": "sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==", "license": "MIT", "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" + "@types/nlcst": "^2.0.0", + "nlcst-to-string": "^4.0.0", + "unified": "^11.0.0" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/rollup-plugin-postcss/node_modules/postcss-ordered-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", - "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", "dev": true, "license": "MIT", - "dependencies": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">= 4" } }, - "node_modules/rollup-plugin-postcss/node_modules/postcss-reduce-initial": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", - "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "dev": true, "license": "MIT", - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0" - }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "iojs": ">=1.0.0", + "node": ">=0.10.0" } }, - "node_modules/rollup-plugin-postcss/node_modules/postcss-reduce-transforms": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", - "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", "dev": true, - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } + "license": "MIT" }, - "node_modules/rollup-plugin-postcss/node_modules/postcss-svgo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", - "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "postcss-value-parser": "^4.2.0", - "svgo": "^2.7.0" + "glob": "^7.1.3" }, - "engines": { - "node": "^10 || ^12 || >=14.0" + "bin": { + "rimraf": "bin.js" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/rollup-plugin-postcss/node_modules/postcss-unique-selectors": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", - "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "node_modules/rolldown": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-rc.4.tgz", + "integrity": "sha512-V2tPDUrY3WSevrvU2E41ijZlpF+5PbZu4giH+VpNraaadsJGHa4fR6IFwsocVwEXDoAdIv5qgPPxgrvKAOIPtA==", "dev": true, "license": "MIT", "dependencies": { - "postcss-selector-parser": "^6.0.5" + "@oxc-project/types": "=0.113.0", + "@rolldown/pluginutils": "1.0.0-rc.4" + }, + "bin": { + "rolldown": "bin/cli.mjs" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^20.19.0 || >=22.12.0" }, - "peerDependencies": { - "postcss": "^8.2.15" + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.0.0-rc.4", + "@rolldown/binding-darwin-arm64": "1.0.0-rc.4", + "@rolldown/binding-darwin-x64": "1.0.0-rc.4", + "@rolldown/binding-freebsd-x64": "1.0.0-rc.4", + "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.4", + "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.4", + "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.4", + "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.4", + "@rolldown/binding-linux-x64-musl": "1.0.0-rc.4", + "@rolldown/binding-openharmony-arm64": "1.0.0-rc.4", + "@rolldown/binding-wasm32-wasi": "1.0.0-rc.4", + "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.4", + "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.4" } }, - "node_modules/rollup-plugin-postcss/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/rolldown/node_modules/@rolldown/pluginutils": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.4.tgz", + "integrity": "sha512-1BrrmTu0TWfOP1riA8uakjFc9bpIUGzVKETsOtzY39pPga8zELGDl8eu1Dx7/gjM5CAz14UknsUMpBO8L+YntQ==", "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } + "license": "MIT" }, - "node_modules/rollup-plugin-postcss/node_modules/stylehacks": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", - "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", - "dev": true, + "node_modules/rollup": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.59.0.tgz", + "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==", "license": "MIT", "dependencies": { - "browserslist": "^4.21.4", - "postcss-selector-parser": "^6.0.4" + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=18.0.0", + "npm": ">=8.0.0" }, - "peerDependencies": { - "postcss": "^8.2.15" + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.59.0", + "@rollup/rollup-android-arm64": "4.59.0", + "@rollup/rollup-darwin-arm64": "4.59.0", + "@rollup/rollup-darwin-x64": "4.59.0", + "@rollup/rollup-freebsd-arm64": "4.59.0", + "@rollup/rollup-freebsd-x64": "4.59.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.59.0", + "@rollup/rollup-linux-arm-musleabihf": "4.59.0", + "@rollup/rollup-linux-arm64-gnu": "4.59.0", + "@rollup/rollup-linux-arm64-musl": "4.59.0", + "@rollup/rollup-linux-loong64-gnu": "4.59.0", + "@rollup/rollup-linux-loong64-musl": "4.59.0", + "@rollup/rollup-linux-ppc64-gnu": "4.59.0", + "@rollup/rollup-linux-ppc64-musl": "4.59.0", + "@rollup/rollup-linux-riscv64-gnu": "4.59.0", + "@rollup/rollup-linux-riscv64-musl": "4.59.0", + "@rollup/rollup-linux-s390x-gnu": "4.59.0", + "@rollup/rollup-linux-x64-gnu": "4.59.0", + "@rollup/rollup-linux-x64-musl": "4.59.0", + "@rollup/rollup-openbsd-x64": "4.59.0", + "@rollup/rollup-openharmony-arm64": "4.59.0", + "@rollup/rollup-win32-arm64-msvc": "4.59.0", + "@rollup/rollup-win32-ia32-msvc": "4.59.0", + "@rollup/rollup-win32-x64-gnu": "4.59.0", + "@rollup/rollup-win32-x64-msvc": "4.59.0", + "fsevents": "~2.3.2" } }, - "node_modules/rollup-plugin-postcss/node_modules/svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "node_modules/rollup-plugin-dts": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-dts/-/rollup-plugin-dts-6.3.0.tgz", + "integrity": "sha512-d0UrqxYd8KyZ6i3M2Nx7WOMy708qsV/7fTHMHxCMCBOAe3V/U7OMPu5GkX8hC+cmkHhzGnfeYongl1IgiooddA==", "dev": true, - "license": "MIT", + "license": "LGPL-3.0-only", "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - }, - "bin": { - "svgo": "bin/svgo" + "magic-string": "^0.30.21" }, "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/rollup-plugin-postcss/node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 6" + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/Swatinem" + }, + "optionalDependencies": { + "@babel/code-frame": "^7.27.1" + }, + "peerDependencies": { + "rollup": "^3.29.4 || ^4", + "typescript": "^4.5 || ^5.0" } }, "node_modules/rollup-plugin-typescript2": { @@ -43141,6 +42640,13 @@ "node": ">= 8.0.0" } }, + "node_modules/rollup-plugin-typescript2/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true, + "license": "MIT" + }, "node_modules/rollup-plugin-typescript2/node_modules/fs-extra": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", @@ -43169,23 +42675,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/rollup-pluginutils": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", - "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "estree-walker": "^0.6.1" - } - }, - "node_modules/rollup-pluginutils/node_modules/estree-walker": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", - "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", - "dev": true, - "license": "MIT" - }, "node_modules/router": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", @@ -43227,6 +42716,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, "funding": [ { "type": "github", @@ -43315,13 +42805,6 @@ ], "license": "MIT" }, - "node_modules/safe-identifier": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/safe-identifier/-/safe-identifier-0.4.2.tgz", - "integrity": "sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==", - "dev": true, - "license": "ISC" - }, "node_modules/safe-push-apply": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", @@ -43398,9 +42881,9 @@ } }, "node_modules/sass": { - "version": "1.90.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.90.0.tgz", - "integrity": "sha512-9GUyuksjw70uNpb1MTYWsH9MQHOHY6kwfnkafC24+7aOMZn9+rVMBxRbLvw756mrBFbIsFg6Xw9IkR2Fnn3k+Q==", + "version": "1.97.3", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.97.3.tgz", + "integrity": "sha512-fDz1zJpd5GycprAbu4Q2PV/RprsRtKC/0z82z0JLgdytmcq0+ujJbJ/09bPGDxCLkKY3Np5cRAOcWiVkLXJURg==", "dev": true, "license": "MIT", "dependencies": { @@ -43419,14 +42902,13 @@ } }, "node_modules/sass-embedded": { - "version": "1.97.2", - "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.97.2.tgz", - "integrity": "sha512-lKJcskySwAtJ4QRirKrikrWMFa2niAuaGenY2ElHjd55IwHUiur5IdKu6R1hEmGYMs4Qm+6rlRW0RvuAkmcryg==", + "version": "1.97.3", + "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.97.3.tgz", + "integrity": "sha512-eKzFy13Nk+IRHhlAwP3sfuv+PzOrvzUkwJK2hdoCKYcWGSdmwFpeGpWmyewdw8EgBnsKaSBtgf/0b2K635ecSA==", "dev": true, "license": "MIT", "dependencies": { "@bufbuild/protobuf": "^2.5.0", - "buffer-builder": "^0.2.0", "colorjs.io": "^0.5.0", "immutable": "^5.0.2", "rxjs": "^7.4.0", @@ -43441,30 +42923,30 @@ "node": ">=16.0.0" }, "optionalDependencies": { - "sass-embedded-all-unknown": "1.97.2", - "sass-embedded-android-arm": "1.97.2", - "sass-embedded-android-arm64": "1.97.2", - "sass-embedded-android-riscv64": "1.97.2", - "sass-embedded-android-x64": "1.97.2", - "sass-embedded-darwin-arm64": "1.97.2", - "sass-embedded-darwin-x64": "1.97.2", - "sass-embedded-linux-arm": "1.97.2", - "sass-embedded-linux-arm64": "1.97.2", - "sass-embedded-linux-musl-arm": "1.97.2", - "sass-embedded-linux-musl-arm64": "1.97.2", - "sass-embedded-linux-musl-riscv64": "1.97.2", - "sass-embedded-linux-musl-x64": "1.97.2", - "sass-embedded-linux-riscv64": "1.97.2", - "sass-embedded-linux-x64": "1.97.2", - "sass-embedded-unknown-all": "1.97.2", - "sass-embedded-win32-arm64": "1.97.2", - "sass-embedded-win32-x64": "1.97.2" + "sass-embedded-all-unknown": "1.97.3", + "sass-embedded-android-arm": "1.97.3", + "sass-embedded-android-arm64": "1.97.3", + "sass-embedded-android-riscv64": "1.97.3", + "sass-embedded-android-x64": "1.97.3", + "sass-embedded-darwin-arm64": "1.97.3", + "sass-embedded-darwin-x64": "1.97.3", + "sass-embedded-linux-arm": "1.97.3", + "sass-embedded-linux-arm64": "1.97.3", + "sass-embedded-linux-musl-arm": "1.97.3", + "sass-embedded-linux-musl-arm64": "1.97.3", + "sass-embedded-linux-musl-riscv64": "1.97.3", + "sass-embedded-linux-musl-x64": "1.97.3", + "sass-embedded-linux-riscv64": "1.97.3", + "sass-embedded-linux-x64": "1.97.3", + "sass-embedded-unknown-all": "1.97.3", + "sass-embedded-win32-arm64": "1.97.3", + "sass-embedded-win32-x64": "1.97.3" } }, "node_modules/sass-embedded-all-unknown": { - "version": "1.97.2", - "resolved": "https://registry.npmjs.org/sass-embedded-all-unknown/-/sass-embedded-all-unknown-1.97.2.tgz", - "integrity": "sha512-Fj75+vOIDv1T/dGDwEpQ5hgjXxa2SmMeShPa8yrh2sUz1U44bbmY4YSWPCdg8wb7LnwiY21B2KRFM+HF42yO4g==", + "version": "1.97.3", + "resolved": "https://registry.npmjs.org/sass-embedded-all-unknown/-/sass-embedded-all-unknown-1.97.3.tgz", + "integrity": "sha512-t6N46NlPuXiY3rlmG6/+1nwebOBOaLFOOVqNQOC2cJhghOD4hh2kHNQQTorCsbY9S1Kir2la1/XLBwOJfui0xg==", "cpu": [ "!arm", "!arm64", @@ -43475,35 +42957,13 @@ "license": "MIT", "optional": true, "dependencies": { - "sass": "1.97.2" - } - }, - "node_modules/sass-embedded-all-unknown/node_modules/sass": { - "version": "1.97.2", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.97.2.tgz", - "integrity": "sha512-y5LWb0IlbO4e97Zr7c3mlpabcbBtS+ieiZ9iwDooShpFKWXf62zz5pEPdwrLYm+Bxn1fnbwFGzHuCLSA9tBmrw==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "chokidar": "^4.0.0", - "immutable": "^5.0.2", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=14.0.0" - }, - "optionalDependencies": { - "@parcel/watcher": "^2.4.1" + "sass": "1.97.3" } }, "node_modules/sass-embedded-android-arm": { - "version": "1.97.2", - "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.97.2.tgz", - "integrity": "sha512-BPT9m19ttY0QVHYYXRa6bmqmS3Fa2EHByNUEtSVcbm5PkIk1ntmYkG9fn5SJpIMbNmFDGwHx+pfcZMmkldhnRg==", + "version": "1.97.3", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.97.3.tgz", + "integrity": "sha512-cRTtf/KV/q0nzGZoUzVkeIVVFv3L/tS1w4WnlHapphsjTXF/duTxI8JOU1c/9GhRPiMdfeXH7vYNcMmtjwX7jg==", "cpu": [ "arm" ], @@ -43518,9 +42978,9 @@ } }, "node_modules/sass-embedded-android-arm64": { - "version": "1.97.2", - "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.97.2.tgz", - "integrity": "sha512-pF6I+R5uThrscd3lo9B3DyNTPyGFsopycdx0tDAESN6s+dBbiRgNgE4Zlpv50GsLocj/lDLCZaabeTpL3ubhYA==", + "version": "1.97.3", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.97.3.tgz", + "integrity": "sha512-aiZ6iqiHsUsaDx0EFbbmmA0QgxicSxVVN3lnJJ0f1RStY0DthUkquGT5RJ4TPdaZ6ebeJWkboV4bra+CP766eA==", "cpu": [ "arm64" ], @@ -43535,9 +42995,9 @@ } }, "node_modules/sass-embedded-android-riscv64": { - "version": "1.97.2", - "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.97.2.tgz", - "integrity": "sha512-fprI8ZTJdz+STgARhg8zReI2QhhGIT9G8nS7H21kc3IkqPRzhfaemSxEtCqZyvDbXPcgYiDLV7AGIReHCuATog==", + "version": "1.97.3", + "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.97.3.tgz", + "integrity": "sha512-zVEDgl9JJodofGHobaM/q6pNETG69uuBIGQHRo789jloESxxZe82lI3AWJQuPmYCOG5ElfRthqgv89h3gTeLYA==", "cpu": [ "riscv64" ], @@ -43552,9 +43012,9 @@ } }, "node_modules/sass-embedded-android-x64": { - "version": "1.97.2", - "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.97.2.tgz", - "integrity": "sha512-RswwSjURZxupsukEmNt2t6RGvuvIw3IAD5sDq1Pc65JFvWFY3eHqCmH0lG0oXqMg6KJcF0eOxHOp2RfmIm2+4w==", + "version": "1.97.3", + "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.97.3.tgz", + "integrity": "sha512-3ke0le7ZKepyXn/dKKspYkpBC0zUk/BMciyP5ajQUDy4qJwobd8zXdAq6kOkdiMB+d9UFJOmEkvgFJHl3lqwcw==", "cpu": [ "x64" ], @@ -43569,9 +43029,9 @@ } }, "node_modules/sass-embedded-darwin-arm64": { - "version": "1.97.2", - "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.97.2.tgz", - "integrity": "sha512-xcsZNnU1XZh21RE/71OOwNqPVcGBU0qT9A4k4QirdA34+ts9cDIaR6W6lgHOBR/Bnnu6w6hXJR4Xth7oFrefPA==", + "version": "1.97.3", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.97.3.tgz", + "integrity": "sha512-fuqMTqO4gbOmA/kC5b9y9xxNYw6zDEyfOtMgabS7Mz93wimSk2M1quQaTJnL98Mkcsl2j+7shNHxIS/qpcIDDA==", "cpu": [ "arm64" ], @@ -43586,9 +43046,9 @@ } }, "node_modules/sass-embedded-darwin-x64": { - "version": "1.97.2", - "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.97.2.tgz", - "integrity": "sha512-T/9DTMpychm6+H4slHCAsYJRJ6eM+9H9idKlBPliPrP4T8JdC2Cs+ZOsYqrObj6eOtAD0fGf+KgyNhnW3xVafA==", + "version": "1.97.3", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.97.3.tgz", + "integrity": "sha512-b/2RBs/2bZpP8lMkyZ0Px0vkVkT8uBd0YXpOwK7iOwYkAT8SsO4+WdVwErsqC65vI5e1e5p1bb20tuwsoQBMVA==", "cpu": [ "x64" ], @@ -43603,9 +43063,9 @@ } }, "node_modules/sass-embedded-linux-arm": { - "version": "1.97.2", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.97.2.tgz", - "integrity": "sha512-yDRe1yifGHl6kibkDlRIJ2ZzAU03KJ1AIvsAh4dsIDgK5jx83bxZLV1ZDUv7a8KK/iV/80LZnxnu/92zp99cXQ==", + "version": "1.97.3", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.97.3.tgz", + "integrity": "sha512-2lPQ7HQQg4CKsH18FTsj2hbw5GJa6sBQgDsls+cV7buXlHjqF8iTKhAQViT6nrpLK/e8nFCoaRgSqEC8xMnXuA==", "cpu": [ "arm" ], @@ -43620,9 +43080,9 @@ } }, "node_modules/sass-embedded-linux-arm64": { - "version": "1.97.2", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.97.2.tgz", - "integrity": "sha512-Wh+nQaFer9tyE5xBPv5murSUZE/+kIcg8MyL5uqww6be9Iq+UmZpcJM7LUk+q8klQ9LfTmoDSNFA74uBqxD6IA==", + "version": "1.97.3", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.97.3.tgz", + "integrity": "sha512-IP1+2otCT3DuV46ooxPaOKV1oL5rLjteRzf8ldZtfIEcwhSgSsHgA71CbjYgLEwMY9h4jeal8Jfv3QnedPvSjg==", "cpu": [ "arm64" ], @@ -43637,9 +43097,9 @@ } }, "node_modules/sass-embedded-linux-musl-arm": { - "version": "1.97.2", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.97.2.tgz", - "integrity": "sha512-GIO6xfAtahJAWItvsXZ3MD1HM6s8cKtV1/HL088aUpKJaw/2XjTCveiOO2AdgMpLNztmq9DZ1lx5X5JjqhS45g==", + "version": "1.97.3", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.97.3.tgz", + "integrity": "sha512-cBTMU68X2opBpoYsSZnI321gnoaiMBEtc+60CKCclN6PCL3W3uXm8g4TLoil1hDD6mqU9YYNlVG6sJ+ZNef6Lg==", "cpu": [ "arm" ], @@ -43654,9 +43114,9 @@ } }, "node_modules/sass-embedded-linux-musl-arm64": { - "version": "1.97.2", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.97.2.tgz", - "integrity": "sha512-NfUqZSjHwnHvpSa7nyNxbWfL5obDjNBqhHUYmqbHUcmqBpFfHIQsUPgXME9DKn1yBlBc3mWnzMxRoucdYTzd2Q==", + "version": "1.97.3", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.97.3.tgz", + "integrity": "sha512-Lij0SdZCsr+mNRSyDZ7XtJpXEITrYsaGbOTz5e6uFLJ9bmzUbV7M8BXz2/cA7bhfpRPT7/lwRKPdV4+aR9Ozcw==", "cpu": [ "arm64" ], @@ -43671,9 +43131,9 @@ } }, "node_modules/sass-embedded-linux-musl-riscv64": { - "version": "1.97.2", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.97.2.tgz", - "integrity": "sha512-qtM4dJ5gLfvyTZ3QencfNbsTEShIWImSEpkThz+Y2nsCMbcMP7/jYOA03UWgPfEOKSehQQ7EIau7ncbFNoDNPQ==", + "version": "1.97.3", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.97.3.tgz", + "integrity": "sha512-sBeLFIzMGshR4WmHAD4oIM7WJVkSoCIEwutzptFtGlSlwfNiijULp+J5hA2KteGvI6Gji35apR5aWj66wEn/iA==", "cpu": [ "riscv64" ], @@ -43688,9 +43148,9 @@ } }, "node_modules/sass-embedded-linux-musl-x64": { - "version": "1.97.2", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.97.2.tgz", - "integrity": "sha512-ZAxYOdmexcnxGnzdsDjYmNe3jGj+XW3/pF/n7e7r8y+5c6D2CQRrCUdapLgaqPt1edOPQIlQEZF8q5j6ng21yw==", + "version": "1.97.3", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.97.3.tgz", + "integrity": "sha512-/oWJ+OVrDg7ADDQxRLC/4g1+Nsz1g4mkYS2t6XmyMJKFTFK50FVI2t5sOdFH+zmMp+nXHKM036W94y9m4jjEcw==", "cpu": [ "x64" ], @@ -43705,9 +43165,9 @@ } }, "node_modules/sass-embedded-linux-riscv64": { - "version": "1.97.2", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.97.2.tgz", - "integrity": "sha512-reVwa9ZFEAOChXpDyNB3nNHHyAkPMD+FTctQKECqKiVJnIzv2EaFF6/t0wzyvPgBKeatA8jszAIeOkkOzbYVkQ==", + "version": "1.97.3", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.97.3.tgz", + "integrity": "sha512-l3IfySApLVYdNx0Kjm7Zehte1CDPZVcldma3dZt+TfzvlAEerM6YDgsk5XEj3L8eHBCgHgF4A0MJspHEo2WNfA==", "cpu": [ "riscv64" ], @@ -43722,9 +43182,9 @@ } }, "node_modules/sass-embedded-linux-x64": { - "version": "1.97.2", - "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.97.2.tgz", - "integrity": "sha512-bvAdZQsX3jDBv6m4emaU2OMTpN0KndzTAMgJZZrKUgiC0qxBmBqbJG06Oj/lOCoXGCxAvUOheVYpezRTF+Feog==", + "version": "1.97.3", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.97.3.tgz", + "integrity": "sha512-Kwqwc/jSSlcpRjULAOVbndqEy2GBzo6OBmmuBVINWUaJLJ8Kczz3vIsDUWLfWz/kTEw9FHBSiL0WCtYLVAXSLg==", "cpu": [ "x64" ], @@ -43739,9 +43199,9 @@ } }, "node_modules/sass-embedded-unknown-all": { - "version": "1.97.2", - "resolved": "https://registry.npmjs.org/sass-embedded-unknown-all/-/sass-embedded-unknown-all-1.97.2.tgz", - "integrity": "sha512-86tcYwohjPgSZtgeU9K4LikrKBJNf8ZW/vfsFbdzsRlvc73IykiqanufwQi5qIul0YHuu9lZtDWyWxM2dH/Rsg==", + "version": "1.97.3", + "resolved": "https://registry.npmjs.org/sass-embedded-unknown-all/-/sass-embedded-unknown-all-1.97.3.tgz", + "integrity": "sha512-/GHajyYJmvb0IABUQHbVHf1nuHPtIDo/ClMZ81IDr59wT5CNcMe7/dMNujXwWugtQVGI5UGmqXWZQCeoGnct8Q==", "dev": true, "license": "MIT", "optional": true, @@ -43752,35 +43212,13 @@ "!win32" ], "dependencies": { - "sass": "1.97.2" - } - }, - "node_modules/sass-embedded-unknown-all/node_modules/sass": { - "version": "1.97.2", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.97.2.tgz", - "integrity": "sha512-y5LWb0IlbO4e97Zr7c3mlpabcbBtS+ieiZ9iwDooShpFKWXf62zz5pEPdwrLYm+Bxn1fnbwFGzHuCLSA9tBmrw==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "chokidar": "^4.0.0", - "immutable": "^5.0.2", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=14.0.0" - }, - "optionalDependencies": { - "@parcel/watcher": "^2.4.1" + "sass": "1.97.3" } }, "node_modules/sass-embedded-win32-arm64": { - "version": "1.97.2", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.97.2.tgz", - "integrity": "sha512-Cv28q8qNjAjZfqfzTrQvKf4JjsZ6EOQ5FxyHUQQeNzm73R86nd/8ozDa1Vmn79Hq0kwM15OCM9epanDuTG1ksA==", + "version": "1.97.3", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.97.3.tgz", + "integrity": "sha512-RDGtRS1GVvQfMGAmVXNxYiUOvPzn9oO1zYB/XUM9fudDRnieYTcUytpNTQZLs6Y1KfJxgt5Y+giRceC92fT8Uw==", "cpu": [ "arm64" ], @@ -43795,9 +43233,9 @@ } }, "node_modules/sass-embedded-win32-x64": { - "version": "1.97.2", - "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.97.2.tgz", - "integrity": "sha512-DVxLxkeDCGIYeyHLAvWW3yy9sy5Ruk5p472QWiyfyyG1G1ASAR8fgfIY5pT0vE6Rv+VAKVLwF3WTspUYu7S1/Q==", + "version": "1.97.3", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.97.3.tgz", + "integrity": "sha512-SFRa2lED9UEwV6vIGeBXeBOLKF+rowF3WmNfb/BzhxmdAsKofCXrJ8ePW7OcDVrvNEbTOGwhsReIsF5sH8fVaw==", "cpu": [ "x64" ], @@ -43828,9 +43266,9 @@ } }, "node_modules/sass-loader": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.5.tgz", - "integrity": "sha512-oL+CMBXrj6BZ/zOq4os+UECPL+bWqt6OAC6DWS8Ln8GZRcMDjlJ4JC3FBDuHJdYaFWIdKNIBYmtZtK2MaMkNIw==", + "version": "16.0.7", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.7.tgz", + "integrity": "sha512-w6q+fRHourZ+e+xA1kcsF27iGM6jdB8teexYCfdUw0sYgcDNeZESnDNT9sUmmPm3ooziwUJXGwZJSTF3kOdBfA==", "dev": true, "license": "MIT", "dependencies": { @@ -43844,7 +43282,7 @@ "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "@rspack/core": "0.x || 1.x", + "@rspack/core": "0.x || ^1.0.0 || ^2.0.0-0", "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", "sass": "^1.3.0", "sass-embedded": "*", @@ -43868,11 +43306,44 @@ } } }, + "node_modules/sass/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/sass/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/sax": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.3.tgz", - "integrity": "sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ==", - "license": "BlueOak-1.0.0" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.5.0.tgz", + "integrity": "sha512-21IYA3Q5cQf089Z6tgaUTr7lDAyzoTPx5HRtbhsME8Udispad8dC/+sziTNugOEx54ilvatQ9YCzl4KQLPcRHA==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } }, "node_modules/saxes": { "version": "6.0.0", @@ -43984,9 +43455,9 @@ } }, "node_modules/semantic-release": { - "version": "25.0.2", - "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-25.0.2.tgz", - "integrity": "sha512-6qGjWccl5yoyugHt3jTgztJ9Y0JVzyH8/Voc/D8PlLat9pwxQYXz7W1Dpnq5h0/G5GCYGUaDSlYcyk3AMh5A6g==", + "version": "25.0.3", + "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-25.0.3.tgz", + "integrity": "sha512-WRgl5GcypwramYX4HV+eQGzUbD7UUbljVmS+5G1uMwX/wLgYuJAxGeerXJDMO2xshng4+FXqCgyB5QfClV6WjA==", "dev": true, "license": "MIT", "dependencies": { @@ -44016,7 +43487,6 @@ "read-package-up": "^12.0.0", "resolve-from": "^5.0.0", "semver": "^7.3.2", - "semver-diff": "^5.0.0", "signale": "^1.2.1", "yargs": "^18.0.0" }, @@ -44107,9 +43577,9 @@ } }, "node_modules/semantic-release/node_modules/conventional-changelog-angular": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-8.1.0.tgz", - "integrity": "sha512-GGf2Nipn1RUCAktxuVauVr1e3r8QrLP/B0lEUsFktmGqc3ddbQkhoJZHJctVU829U1c6mTSWftrVOCHaL85Q3w==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-8.3.0.tgz", + "integrity": "sha512-DOuBwYSqWzfwuRByY9O4oOIvDlkUCTDzfbOgcSbkY+imXXj+4tmrEFao3K+FxemClYfYnZzsvudbwrhje9VHDA==", "dev": true, "license": "ISC", "dependencies": { @@ -44120,12 +43590,13 @@ } }, "node_modules/semantic-release/node_modules/conventional-changelog-writer": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-8.2.0.tgz", - "integrity": "sha512-Y2aW4596l9AEvFJRwFGJGiQjt2sBYTjPD18DdvxX9Vpz0Z7HQ+g1Z+6iYDAm1vR3QOJrDBkRHixHK/+FhkR6Pw==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-8.4.0.tgz", + "integrity": "sha512-HHBFkk1EECxxmCi4CTu091iuDpQv5/OavuCUAuZmrkWpmYfyD816nom1CvtfXJ/uYfAAjavgHvXHX291tSLK8g==", "dev": true, "license": "MIT", "dependencies": { + "@simple-libs/stream-utils": "^1.2.0", "conventional-commits-filter": "^5.0.0", "handlebars": "^4.7.7", "meow": "^13.0.0", @@ -44149,12 +43620,13 @@ } }, "node_modules/semantic-release/node_modules/conventional-commits-parser": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-6.2.1.tgz", - "integrity": "sha512-20pyHgnO40rvfI0NGF/xiEoFMkXDtkF8FwHvk5BokoFoCuTQRI8vrNCNFWUOfuolKJMm1tPCHc8GgYEtr1XRNA==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-6.3.0.tgz", + "integrity": "sha512-RfOq/Cqy9xV9bOA8N+ZH6DlrDR+5S3Mi0B5kACEjESpE+AviIpAptx9a9cFpWCCvgRtWT+0BbUw+e1BZfts9jg==", "dev": true, "license": "MIT", "dependencies": { + "@simple-libs/stream-utils": "^1.2.0", "meow": "^13.0.0" }, "bin": { @@ -44165,9 +43637,9 @@ } }, "node_modules/semantic-release/node_modules/cosmiconfig": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", - "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.1.tgz", + "integrity": "sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ==", "dev": true, "license": "MIT", "dependencies": { @@ -44192,9 +43664,9 @@ } }, "node_modules/semantic-release/node_modules/execa": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-9.6.0.tgz", - "integrity": "sha512-jpWzZ1ZhwUmeWRhS7Qv3mhpOhLfwI+uAX4e5fOcXqwMR7EcJ0pj2kV1CVzHVMX/LphnKWD3LObjZCoJ71lKpHw==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-9.6.1.tgz", + "integrity": "sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA==", "dev": true, "license": "MIT", "dependencies": { @@ -44318,19 +43790,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/semantic-release/node_modules/js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/semantic-release/node_modules/meow": { "version": "13.2.0", "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", @@ -44387,19 +43846,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/semantic-release/node_modules/type-fest": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", - "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/semantic-release/node_modules/unicorn-magic": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", @@ -44414,9 +43860,9 @@ } }, "node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -44425,23 +43871,6 @@ "node": ">=10" } }, - "node_modules/semver-diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-5.0.0.tgz", - "integrity": "sha512-0HbGtOm+S7T6NGQ/pxJSJipJvc4DK3FcRVMRkhsIwJDJ4Jcz5DQC1cPPzB5GhzyHjwttW878HaWQq46CkL3cqg==", - "deprecated": "Deprecated as the semver package now supports this built-in.", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/semver-regex": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-4.0.5.tgz", @@ -44498,27 +43927,6 @@ "url": "https://opencollective.com/express" } }, - "node_modules/send/node_modules/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "depd": "~2.0.0", - "inherits": "~2.0.4", - "setprototypeof": "~1.2.0", - "statuses": "~2.0.2", - "toidentifier": "~1.0.1" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, "node_modules/serialize-javascript": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", @@ -44530,22 +43938,26 @@ } }, "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.2.tgz", + "integrity": "sha512-KDj11HScOaLmrPxl70KYNW1PksP4Nb/CLL2yvC+Qd2kHMPEEpfc4Re2e4FOay+bC/+XQl/7zAcWON3JVo5v3KQ==", "dev": true, "license": "MIT", "dependencies": { - "accepts": "~1.3.4", + "accepts": "~1.3.8", "batch": "0.6.1", "debug": "2.6.9", "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" + "http-errors": "~1.8.0", + "mime-types": "~2.1.35", + "parseurl": "~1.3.3" }, "engines": { "node": ">= 0.8.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/serve-index/node_modules/accepts": { @@ -44583,28 +43995,22 @@ } }, "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", "dev": true, "license": "MIT", "dependencies": { "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" }, "engines": { "node": ">= 0.6" } }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true, - "license": "ISC" - }, "node_modules/serve-index/node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -44645,13 +44051,6 @@ "node": ">= 0.6" } }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true, - "license": "ISC" - }, "node_modules/serve-index/node_modules/statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", @@ -44795,19 +44194,6 @@ "@img/sharp-win32-x64": "0.34.5" } }, - "node_modules/sharp/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "license": "ISC", - "optional": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -44843,17 +44229,17 @@ } }, "node_modules/shiki": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.21.0.tgz", - "integrity": "sha512-N65B/3bqL/TI2crrXr+4UivctrAGEjmsib5rPMMPpFp1xAx/w03v8WZ9RDDFYteXoEgY7qZ4HGgl5KBIu1153w==", + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.23.0.tgz", + "integrity": "sha512-55Dj73uq9ZXL5zyeRPzHQsK7Nbyt6Y10k5s7OjuFZGMhpp4r/rsLBH0o/0fstIzX1Lep9VxefWljK/SKCzygIA==", "license": "MIT", "dependencies": { - "@shikijs/core": "3.21.0", - "@shikijs/engine-javascript": "3.21.0", - "@shikijs/engine-oniguruma": "3.21.0", - "@shikijs/langs": "3.21.0", - "@shikijs/themes": "3.21.0", - "@shikijs/types": "3.21.0", + "@shikijs/core": "3.23.0", + "@shikijs/engine-javascript": "3.23.0", + "@shikijs/engine-oniguruma": "3.23.0", + "@shikijs/langs": "3.23.0", + "@shikijs/themes": "3.23.0", + "@shikijs/types": "3.23.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } @@ -45111,23 +44497,24 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/slice-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", - "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-8.0.0.tgz", + "integrity": "sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" + "ansi-styles": "^6.2.3", + "is-fullwidth-code-point": "^5.1.0" }, "engines": { - "node": ">=12" + "node": ">=20" }, "funding": { "url": "https://github.com/chalk/slice-ansi?sponsor=1" @@ -45272,12 +44659,12 @@ "license": "MIT" }, "node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", "license": "BSD-3-Clause", "engines": { - "node": ">= 8" + "node": ">= 12" } }, "node_modules/source-map-js": { @@ -45372,6 +44759,17 @@ "spdx-license-ids": "^3.0.0" } }, + "node_modules/spdx-correct/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, "node_modules/spdx-exceptions": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", @@ -45380,9 +44778,9 @@ "license": "CC-BY-3.0" }, "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz", + "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==", "dev": true, "license": "MIT", "dependencies": { @@ -45391,9 +44789,9 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.22", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz", - "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==", + "version": "3.0.23", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.23.tgz", + "integrity": "sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==", "dev": true, "license": "CC0-1.0" }, @@ -45458,12 +44856,13 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, "license": "BSD-3-Clause" }, "node_modules/ssri": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-13.0.0.tgz", - "integrity": "sha512-yizwGBpbCn4YomB2lzhZqrHLJoqFGXihNbib3ozhqF/cIp5ue+xSmOQrjNasEE62hFxsCcg/V/z23t4n8jMEng==", + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-13.0.1.tgz", + "integrity": "sha512-QUiRf1+u9wPTL/76GTYlKttDEBWV1ga9ZXW8BG6kfdeyyM8LGPix9gROyg9V2+P0xNyF3X2Go526xKFdMZrHSQ==", "dev": true, "license": "ISC", "dependencies": { @@ -45473,18 +44872,11 @@ "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "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", - "dev": true, - "license": "MIT" - }, "node_modules/stack-utils": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, "license": "MIT", "dependencies": { "escape-string-regexp": "^2.0.0" @@ -45497,6 +44889,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -45527,16 +44920,16 @@ } }, "node_modules/std-env": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", - "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.0.0.tgz", + "integrity": "sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ==", "dev": true, "license": "MIT" }, "node_modules/stdin-discarder": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz", - "integrity": "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.3.1.tgz", + "integrity": "sha512-reExS1kSGoElkextOcPkel4NE99S0BWxjUHQeDFnR8S993JxpPX7KU4MNmO19NXhlJp+8dmdCbKQVNgLJh2teA==", "dev": true, "license": "MIT", "engines": { @@ -45646,6 +45039,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" @@ -45655,6 +45049,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, "license": "MIT" }, "node_modules/string-argv": { @@ -45678,6 +45073,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, "license": "MIT", "dependencies": { "char-regex": "^1.0.2", @@ -45688,52 +45084,22 @@ } }, "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "license": "MIT", "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/string-width/node_modules/ansi-regex": { "version": "6.2.2", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", @@ -45746,13 +45112,19 @@ "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, + "node_modules/string-width/node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "license": "MIT" + }, "node_modules/string-width/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "ansi-regex": "^6.2.2" }, "engines": { "node": ">=12" @@ -45804,6 +45176,17 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, "node_modules/string.prototype.trim": { "version": "1.2.10", "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", @@ -45889,23 +45272,11 @@ "node": ">=8" } }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/strip-bom": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -45949,6 +45320,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -45957,23 +45329,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/strong-log-transformer": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz", - "integrity": "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==", - "license": "Apache-2.0", - "dependencies": { - "duplexer": "^0.1.1", - "minimist": "^1.2.0", - "through": "^2.3.4" - }, - "bin": { - "sl-log-transformer": "bin/sl-log-transformer.js" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/strtok3": { "version": "10.3.4", "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-10.3.4.tgz", @@ -45992,17 +45347,18 @@ } }, "node_modules/style-dictionary": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/style-dictionary/-/style-dictionary-5.1.1.tgz", - "integrity": "sha512-scRFwr2VrerXy6BzO2Ym8AI0dRGkAIoS2YhooagytxCFkoXPYCLhvIxg3VO/yD2i4VeU4aGmHG80+ZLdPDb0uw==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/style-dictionary/-/style-dictionary-5.3.3.tgz", + "integrity": "sha512-NSeYkVYttoko/TPiH82F6EewyL3eDEVQPLnh8ofRgA0EG5kYEkcMhu5/Wqkfpfpyq1tlPP1t1yePnBZm11sA/Q==", "license": "Apache-2.0", "dependencies": { "@bundled-es-modules/deepmerge": "^4.3.1", - "@bundled-es-modules/glob": "^11.0.3", - "@bundled-es-modules/memfs": "^4.9.4", + "@bundled-es-modules/glob": "^13.0.6", + "@bundled-es-modules/memfs": "^4.17.0", "@zip.js/zip.js": "^2.7.44", "chalk": "^5.3.0", "change-case": "^5.3.0", + "colorjs.io": "^0.5.2", "commander": "^12.1.0", "is-plain-obj": "^4.1.0", "json5": "^2.2.2", @@ -46050,13 +45406,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/style-inject": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/style-inject/-/style-inject-0.3.0.tgz", - "integrity": "sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw==", - "dev": true, - "license": "MIT" - }, "node_modules/style-loader": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.4.tgz", @@ -46131,6 +45480,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -46160,6 +45510,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -46361,16 +45712,6 @@ "integrity": "sha512-/NTxqTwLc7Dq306hARJrH2HLXOBtKd7hu8nxgoFDlK0AC4SOKnzisiX/9m8Uksei1QAWtlAEdF91YphNM8iDMg==", "license": "MIT" }, - "node_modules/svelte/node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0" - } - }, "node_modules/svelte/node_modules/is-reference": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz", @@ -46389,19 +45730,19 @@ "license": "MIT" }, "node_modules/svgo": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz", - "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.3.tgz", + "integrity": "sha512-+wn7I4p7YgJhHs38k2TNjy1vCfPIfLIJWR5MnCStsN8WuuTcBnRKcMHQLMM2ijxGZmDoZwNv8ipl5aTTen62ng==", "dev": true, "license": "MIT", "dependencies": { - "@trysound/sax": "0.2.0", "commander": "^7.2.0", "css-select": "^5.1.0", "css-tree": "^2.3.1", "css-what": "^6.1.0", "csso": "^5.0.5", - "picocolors": "^1.0.0" + "picocolors": "^1.0.0", + "sax": "^1.5.0" }, "bin": { "svgo": "bin/svgo" @@ -46455,34 +45796,19 @@ } }, "node_modules/swc-loader": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/swc-loader/-/swc-loader-0.1.15.tgz", - "integrity": "sha512-cn1WPIeQJvXM4bbo3OwdEIapsQ4uUGOfyFj0h2+2+brT0k76DCGnZXDE2KmcqTd2JSQ+b61z2NPMib7eEwMYYw==", + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/swc-loader/-/swc-loader-0.2.7.tgz", + "integrity": "sha512-nwYWw3Fh9ame3Rtm7StS9SBLpHRRnYcK7bnpF3UKZmesAK0gw2/ADvlURFAINmPvKtDLzp+GBiP9yLoEjg6S9w==", "dev": true, "license": "MIT", "dependencies": { - "loader-utils": "^2.0.0" + "@swc/counter": "^0.1.3" }, "peerDependencies": { - "@swc/core": "^1.2.52", + "@swc/core": "^1.2.147", "webpack": ">=2" } }, - "node_modules/swc-loader/node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, "node_modules/symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", @@ -46504,9 +45830,9 @@ } }, "node_modules/sync-message-port": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sync-message-port/-/sync-message-port-1.1.3.tgz", - "integrity": "sha512-GTt8rSKje5FilG+wEdfCkOcLL7LWqpMlr2c3LRuKt/YXxcJ52aGSbGBAdI4L3aaqfrBt6y711El53ItyH1NWzg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/sync-message-port/-/sync-message-port-1.2.0.tgz", + "integrity": "sha512-gAQ9qrUN/UCypHtGFbbe7Rc/f9bzO88IwrG8TDo/aMKAApKyD6E3W4Cm0EfhfBb6Z6SKt59tTCTfD+n1xmAvMg==", "dev": true, "license": "MIT", "engines": { @@ -46514,9 +45840,9 @@ } }, "node_modules/synckit": { - "version": "0.11.11", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.11.tgz", - "integrity": "sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==", + "version": "0.11.12", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.12.tgz", + "integrity": "sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==", "dev": true, "license": "MIT", "dependencies": { @@ -46557,9 +45883,9 @@ } }, "node_modules/tar": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.9.tgz", - "integrity": "sha512-BTLcK0xsDh2+PUe9F6c2TlRp4zOOBMTkoQHQIWSIzI0R7KG46uEwq4OPk2W7bZcprBMsuaeFsqwYr7pjh6CuHg==", + "version": "7.5.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.11.tgz", + "integrity": "sha512-ChjMH33/KetonMTAtpYdgUFr0tbz69Fp2v7zWxQfYZX4g5ZN2nOBXm1R2xyA+lMIKrLKIoKAwFj93jE/avX9cQ==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -46574,13 +45900,14 @@ } }, "node_modules/tar-stream": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", - "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.8.tgz", + "integrity": "sha512-U6QpVRyCGHva435KoNWy9PRoi2IFYCgtEhq9nmrPPpbRacPs9IH4aJ3gbrFC8dPcXvdSZ4XXfXT5Fshbp2MtlQ==", "dev": true, "license": "MIT", "dependencies": { "b4a": "^1.6.4", + "bare-fs": "^4.5.5", "fast-fifo": "^1.2.0", "streamx": "^2.15.0" } @@ -46595,6 +45922,16 @@ "node": ">=18" } }, + "node_modules/teex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/teex/-/teex-1.0.1.tgz", + "integrity": "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "streamx": "^2.12.5" + } + }, "node_modules/temp-dir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz", @@ -46606,9 +45943,9 @@ } }, "node_modules/tempy": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-3.1.0.tgz", - "integrity": "sha512-7jDLIdD2Zp0bDe5r3D2qtkd1QOCacylBuL7oa4udvN6v2pqr4+LcCr67C8DR1zkpaZ8XosF5m1yQSabKAW6f2g==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-3.2.0.tgz", + "integrity": "sha512-d79HhZya5Djd7am0q+W4RTsSU+D/aJzM+4Y4AGJGuGlgM2L6sx5ZvOYTmZjqPhrDrV6xJTtRSm1JCLj6V6LHLQ==", "dev": true, "license": "MIT", "dependencies": { @@ -46651,14 +45988,14 @@ } }, "node_modules/terser": { - "version": "5.43.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.43.1.tgz", - "integrity": "sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==", + "version": "5.46.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.46.0.tgz", + "integrity": "sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.14.0", + "acorn": "^8.15.0", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, @@ -46670,16 +46007,15 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.3.16", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.16.tgz", - "integrity": "sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q==", + "version": "5.3.17", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.17.tgz", + "integrity": "sha512-YR7PtUp6GMU91BgSJmlaX/rS2lGDbAF7D+Wtq7hRO+MiljNmodYvqslzCFiYVAgW+Qoaaia/QUIP4lGXufjdZw==", "dev": true, "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", "schema-utils": "^4.3.0", - "serialize-javascript": "^6.0.2", "terser": "^5.31.1" }, "engines": { @@ -46746,6 +46082,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, "license": "ISC", "dependencies": { "@istanbuljs/schema": "^0.1.2", @@ -46756,10 +46093,18 @@ "node": ">=8" } }, + "node_modules/test-exclude/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, "node_modules/test-exclude/node_modules/brace-expansion": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -46767,9 +46112,10 @@ } }, "node_modules/test-exclude/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -46779,9 +46125,9 @@ } }, "node_modules/text-decoder": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz", - "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.7.tgz", + "integrity": "sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -46851,6 +46197,7 @@ "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true, "license": "MIT" }, "node_modules/through2": { @@ -46916,13 +46263,13 @@ } }, "node_modules/tinyglobby": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", - "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", "license": "MIT", "dependencies": { - "fdir": "^6.4.4", - "picomatch": "^4.0.2" + "fdir": "^6.5.0", + "picomatch": "^4.0.3" }, "engines": { "node": ">=12.0.0" @@ -46965,6 +46312,7 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", + "dev": true, "license": "MIT", "engines": { "node": ">=14.14" @@ -46974,12 +46322,14 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true, "license": "BSD-3-Clause" }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, "license": "MIT", "dependencies": { "is-number": "^7.0.0" @@ -46999,13 +46349,13 @@ } }, "node_modules/token-types": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/token-types/-/token-types-6.1.1.tgz", - "integrity": "sha512-kh9LVIWH5CnL63Ipf0jhlBIy0UsrMj/NJDfpsy1SqOXlLKEVyXXYrnFxFT1yOOYVGBSApeVnjPw/sBz5BfEjAQ==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/token-types/-/token-types-6.1.2.tgz", + "integrity": "sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww==", "dev": true, "license": "MIT", "dependencies": { - "@borewit/text-codec": "^0.1.0", + "@borewit/text-codec": "^0.2.1", "@tokenizer/token": "^0.3.0", "ieee754": "^1.2.1" }, @@ -47136,22 +46486,19 @@ } }, "node_modules/ts-checker-rspack-plugin": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/ts-checker-rspack-plugin/-/ts-checker-rspack-plugin-1.2.3.tgz", - "integrity": "sha512-Fq2+/sSILEJKWrqoj/H+ytnBbYrudPfRLxaULA/MuL+/3jswXuiR4MOfL30R9XzVUD2km0pSx6bj8yk95IEOaA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-checker-rspack-plugin/-/ts-checker-rspack-plugin-1.3.0.tgz", + "integrity": "sha512-89oK/BtApjdid1j9CGjPGiYry+EZBhsnTAM481/8ipgr/y2IOgCbW1HPnan+fs5FnzlpUgf9dWGNZ4Ayw3Bd8A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.27.1", "@rspack/lite-tapable": "^1.1.0", "chokidar": "^3.6.0", - "is-glob": "^4.0.3", - "memfs": "^4.51.1", - "minimatch": "^9.0.5", + "memfs": "^4.56.10", "picocolors": "^1.1.1" }, "peerDependencies": { - "@rspack/core": "^1.0.0", + "@rspack/core": "^1.0.0 || ^2.0.0-0", "typescript": ">=3.8.0" }, "peerDependenciesMeta": { @@ -47199,12 +46546,20 @@ } }, "node_modules/ts-checker-rspack-plugin/node_modules/memfs": { - "version": "4.51.1", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.51.1.tgz", - "integrity": "sha512-Eyt3XrufitN2ZL9c/uIRMyDwXanLI88h/L3MoWqNY747ha3dMR9dWqp8cRT5ntjZ0U1TNuq4U91ZXK0sMBjYOQ==", + "version": "4.56.11", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.56.11.tgz", + "integrity": "sha512-/GodtwVeKVIHZKLUSr2ZdOxKBC5hHki4JNCU22DoCGPEHr5o2PD5U721zvESKyWwCfTfavFl9WZYgA13OAYK0g==", "dev": true, "license": "Apache-2.0", "dependencies": { + "@jsonjoy.com/fs-core": "4.56.11", + "@jsonjoy.com/fs-fsa": "4.56.11", + "@jsonjoy.com/fs-node": "4.56.11", + "@jsonjoy.com/fs-node-builtins": "4.56.11", + "@jsonjoy.com/fs-node-to-fsa": "4.56.11", + "@jsonjoy.com/fs-node-utils": "4.56.11", + "@jsonjoy.com/fs-print": "4.56.11", + "@jsonjoy.com/fs-snapshot": "4.56.11", "@jsonjoy.com/json-pack": "^1.11.0", "@jsonjoy.com/util": "^1.9.0", "glob-to-regex.js": "^1.0.1", @@ -47215,22 +46570,9 @@ "funding": { "type": "github", "url": "https://github.com/sponsors/streamich" - } - }, - "node_modules/ts-checker-rspack-plugin/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependencies": { + "tslib": "2" } }, "node_modules/ts-checker-rspack-plugin/node_modules/picomatch": { @@ -47312,32 +46654,6 @@ } } }, - "node_modules/ts-jest/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ts-jest/node_modules/type-fest": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", - "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/ts-loader": { "version": "9.5.4", "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.4.tgz", @@ -47360,9 +46676,10 @@ } }, "node_modules/ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, "license": "MIT", "dependencies": { "@cspotcode/source-map-support": "^0.8.0", @@ -47402,6 +46719,16 @@ } } }, + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz", + "integrity": "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/tsconfck": { "version": "3.1.6", "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.6.tgz", @@ -47426,6 +46753,7 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", + "dev": true, "license": "MIT", "dependencies": { "json5": "^2.2.2", @@ -47456,6 +46784,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -47477,6 +46806,26 @@ "node": ">=0.6.x" } }, + "node_modules/tsyringe": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/tsyringe/-/tsyringe-4.10.0.tgz", + "integrity": "sha512-axr3IdNuVIxnaK5XGEUFTu3YmAQ6lllgrvqfEoR16g/HGnYY/6We4oWENtAnzK6/LpJ2ur9PAb80RBt7/U4ugw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^1.9.3" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/tsyringe/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" + }, "node_modules/tuf-js": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-4.1.0.tgz", @@ -47519,18 +46868,19 @@ "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=10" + "node": ">=16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -47644,9 +46994,9 @@ "license": "MIT" }, "node_modules/typescript": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", - "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", "bin": { @@ -47768,9 +47118,9 @@ "license": "MIT" }, "node_modules/undici": { - "version": "7.19.2", - "resolved": "https://registry.npmjs.org/undici/-/undici-7.19.2.tgz", - "integrity": "sha512-4VQSpGEGsWzk0VYxyB/wVX/Q7qf9t5znLRgs0dzszr9w9Fej/8RVNQ+S20vdXSAyra/bJ7ZQfGv6ZMj7UEbzSg==", + "version": "7.22.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.22.0.tgz", + "integrity": "sha512-RqslV2Us5BrllB+JeiZnK4peryVTndy9Dnqq62S3yYRRTj0tFQCwEniUy2167skdGOy3vqRzEvl1Dm4sV2ReDg==", "dev": true, "license": "MIT", "engines": { @@ -47781,12 +47131,14 @@ "version": "6.21.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, "license": "MIT" }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", + "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -47806,6 +47158,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, "license": "MIT", "dependencies": { "unicode-canonical-property-names-ecmascript": "^2.0.0", @@ -47819,6 +47172,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz", "integrity": "sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==", + "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -47828,6 +47182,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz", "integrity": "sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -47878,9 +47233,9 @@ } }, "node_modules/unifont": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/unifont/-/unifont-0.7.3.tgz", - "integrity": "sha512-b0GtQzKCyuSHGsfj5vyN8st7muZ6VCI4XD4vFlr7Uy1rlWVYxC3npnfk8MyreHxJYrz1ooLDqDzFe9XqQTlAhA==", + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/unifont/-/unifont-0.7.4.tgz", + "integrity": "sha512-oHeis4/xl42HUIeHuNZRGEvxj5AaIKR+bHPNegRq5LV1gdc3jundpONbjglKpihmJf+dswygdMJn3eftGIMemg==", "license": "MIT", "dependencies": { "css-tree": "^3.1.0", @@ -48056,9 +47411,9 @@ } }, "node_modules/unist-util-visit": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", - "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz", + "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==", "license": "MIT", "dependencies": { "@types/unist": "^3.0.0", @@ -48108,6 +47463,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, "license": "MIT", "engines": { "node": ">= 10.0.0" @@ -48254,43 +47610,15 @@ } } }, - "node_modules/unstorage/node_modules/chokidar": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", - "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", - "license": "MIT", - "dependencies": { - "readdirp": "^5.0.0" - }, - "engines": { - "node": ">= 20.19.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, "node_modules/unstorage/node_modules/lru-cache": { - "version": "11.2.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.5.tgz", - "integrity": "sha512-vFrFJkWtJvJnD5hg+hJvVE8Lh/TcMzKnTgCWmtBipwI5yLX/iX+5UB2tfuyODF5E7k9xEzMdYgGqaSb1c0c5Yw==", + "version": "11.2.6", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.6.tgz", + "integrity": "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==", "license": "BlueOak-1.0.0", "engines": { "node": "20 || >=22" } }, - "node_modules/unstorage/node_modules/readdirp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz", - "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==", - "license": "MIT", - "engines": { - "node": ">= 20.19.0" - }, - "funding": { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - }, "node_modules/upath": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", @@ -48372,17 +47700,6 @@ "dev": true, "license": "MIT" }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, "node_modules/util": { "version": "0.12.5", "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", @@ -48400,6 +47717,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, "license": "MIT" }, "node_modules/utils-merge": { @@ -48426,12 +47744,14 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true, "license": "MIT" }, "node_modules/v8-to-istanbul": { "version": "9.3.0", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", + "dev": true, "license": "ISC", "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", @@ -48446,6 +47766,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, "license": "MIT" }, "node_modules/validate-npm-package-license": { @@ -48459,6 +47780,17 @@ "spdx-expression-parse": "^3.0.0" } }, + "node_modules/validate-npm-package-license/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, "node_modules/validate-npm-package-name": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-7.0.2.tgz", @@ -48631,31 +47963,31 @@ } }, "node_modules/vitest": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.0.18.tgz", - "integrity": "sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.0.tgz", + "integrity": "sha512-YbDrMF9jM2Lqc++2530UourxZHmkKLxrs4+mYhEwqWS97WJ7wOYEkcr+QfRgJ3PW9wz3odRijLZjHEaRLTNbqw==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/expect": "4.0.18", - "@vitest/mocker": "4.0.18", - "@vitest/pretty-format": "4.0.18", - "@vitest/runner": "4.0.18", - "@vitest/snapshot": "4.0.18", - "@vitest/spy": "4.0.18", - "@vitest/utils": "4.0.18", - "es-module-lexer": "^1.7.0", - "expect-type": "^1.2.2", + "@vitest/expect": "4.1.0", + "@vitest/mocker": "4.1.0", + "@vitest/pretty-format": "4.1.0", + "@vitest/runner": "4.1.0", + "@vitest/snapshot": "4.1.0", + "@vitest/spy": "4.1.0", + "@vitest/utils": "4.1.0", + "es-module-lexer": "^2.0.0", + "expect-type": "^1.3.0", "magic-string": "^0.30.21", "obug": "^2.1.1", "pathe": "^2.0.3", "picomatch": "^4.0.3", - "std-env": "^3.10.0", + "std-env": "^4.0.0-rc.1", "tinybench": "^2.9.0", "tinyexec": "^1.0.2", "tinyglobby": "^0.2.15", "tinyrainbow": "^3.0.3", - "vite": "^6.0.0 || ^7.0.0", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0-0", "why-is-node-running": "^2.3.0" }, "bin": { @@ -48671,12 +48003,13 @@ "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", - "@vitest/browser-playwright": "4.0.18", - "@vitest/browser-preview": "4.0.18", - "@vitest/browser-webdriverio": "4.0.18", - "@vitest/ui": "4.0.18", + "@vitest/browser-playwright": "4.1.0", + "@vitest/browser-preview": "4.1.0", + "@vitest/browser-webdriverio": "4.1.0", + "@vitest/ui": "4.1.0", "happy-dom": "*", - "jsdom": "*" + "jsdom": "*", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0-0" }, "peerDependenciesMeta": { "@edge-runtime/vm": { @@ -48705,6 +48038,9 @@ }, "jsdom": { "optional": true + }, + "vite": { + "optional": false } } }, @@ -48818,115 +48154,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/vitest/node_modules/@vitest/mocker": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.0.18.tgz", - "integrity": "sha512-HhVd0MDnzzsgevnOWCBj5Otnzobjy5wLBe4EdeeFGv8luMsGcYqDuFRMcttKWZA5vVO8RFjexVovXvAM4JoJDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/spy": "4.0.18", - "estree-walker": "^3.0.3", - "magic-string": "^0.30.21" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "msw": "^2.4.9", - "vite": "^6.0.0 || ^7.0.0-0" - }, - "peerDependenciesMeta": { - "msw": { - "optional": true - }, - "vite": { - "optional": true - } - } - }, - "node_modules/vitest/node_modules/@vitest/pretty-format": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.0.18.tgz", - "integrity": "sha512-P24GK3GulZWC5tz87ux0m8OADrQIUVDPIjjj65vBXYG17ZeU3qD7r+MNZ1RNv4l8CGU2vtTRqixrOi9fYk/yKw==", - "dev": true, - "license": "MIT", - "dependencies": { - "tinyrainbow": "^3.0.3" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/vitest/node_modules/@vitest/spy": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.0.18.tgz", - "integrity": "sha512-cbQt3PTSD7P2OARdVW3qWER5EGq7PHlvE+QfzSC0lbwO+xnt7+XH06ZzFjFRgzUX//JmpxrCu92VdwvEPlWSNw==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/vitest/node_modules/@vitest/utils": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.0.18.tgz", - "integrity": "sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/pretty-format": "4.0.18", - "tinyrainbow": "^3.0.3" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/vitest/node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0" - } - }, - "node_modules/vitest/node_modules/magic-string": { - "version": "0.30.21", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", - "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.5" - } - }, - "node_modules/vitest/node_modules/tinyglobby": { - "version": "0.2.15", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "node_modules/vitest/node_modules/es-module-lexer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", + "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", "dev": true, - "license": "MIT", - "dependencies": { - "fdir": "^6.5.0", - "picomatch": "^4.0.3" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" - } + "license": "MIT" }, "node_modules/vitest/node_modules/vite": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.2.2.tgz", - "integrity": "sha512-BxAKBWmIbrDgrokdGZH1IgkIk/5mMHDreLDmCJ0qpyJaAteP8NvMhkwr/ZCQNqNH97bw/dANTE9PDzqwJghfMQ==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz", + "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", "dev": true, "license": "MIT", "dependencies": { - "esbuild": "^0.25.0", + "esbuild": "^0.27.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", @@ -48995,9 +48237,9 @@ } }, "node_modules/volar-service-css": { - "version": "0.0.68", - "resolved": "https://registry.npmjs.org/volar-service-css/-/volar-service-css-0.0.68.tgz", - "integrity": "sha512-lJSMh6f3QzZ1tdLOZOzovLX0xzAadPhx8EKwraDLPxBndLCYfoTvnNuiFFV8FARrpAlW5C0WkH+TstPaCxr00Q==", + "version": "0.0.70", + "resolved": "https://registry.npmjs.org/volar-service-css/-/volar-service-css-0.0.70.tgz", + "integrity": "sha512-K1qyOvBpE3rzdAv3e4/6Rv5yizrYPy5R/ne3IWCAzLBuMO4qBMV3kSqWzj6KUVe6S0AnN6wxF7cRkiaKfYMYJw==", "dev": true, "license": "MIT", "dependencies": { @@ -49015,9 +48257,9 @@ } }, "node_modules/volar-service-emmet": { - "version": "0.0.68", - "resolved": "https://registry.npmjs.org/volar-service-emmet/-/volar-service-emmet-0.0.68.tgz", - "integrity": "sha512-nHvixrRQ83EzkQ4G/jFxu9Y4eSsXS/X2cltEPDM+K9qZmIv+Ey1w0tg1+6caSe8TU5Hgw4oSTwNMf/6cQb3LzQ==", + "version": "0.0.70", + "resolved": "https://registry.npmjs.org/volar-service-emmet/-/volar-service-emmet-0.0.70.tgz", + "integrity": "sha512-xi5bC4m/VyE3zy/n2CXspKeDZs3qA41tHLTw275/7dNWM/RqE2z3BnDICQybHIVp/6G1iOQj5c1qXMgQC08TNg==", "dev": true, "license": "MIT", "dependencies": { @@ -49036,9 +48278,9 @@ } }, "node_modules/volar-service-html": { - "version": "0.0.68", - "resolved": "https://registry.npmjs.org/volar-service-html/-/volar-service-html-0.0.68.tgz", - "integrity": "sha512-fru9gsLJxy33xAltXOh4TEdi312HP80hpuKhpYQD4O5hDnkNPEBdcQkpB+gcX0oK0VxRv1UOzcGQEUzWCVHLfA==", + "version": "0.0.70", + "resolved": "https://registry.npmjs.org/volar-service-html/-/volar-service-html-0.0.70.tgz", + "integrity": "sha512-eR6vCgMdmYAo4n+gcT7DSyBQbwB8S3HZZvSagTf0sxNaD4WppMCFfpqWnkrlGStPKMZvMiejRRVmqsX9dYcTvQ==", "dev": true, "license": "MIT", "dependencies": { @@ -49056,9 +48298,9 @@ } }, "node_modules/volar-service-prettier": { - "version": "0.0.68", - "resolved": "https://registry.npmjs.org/volar-service-prettier/-/volar-service-prettier-0.0.68.tgz", - "integrity": "sha512-grUmWHkHlebMOd6V8vXs2eNQUw/bJGJMjekh/EPf/p2ZNTK0Uyz7hoBRngcvGfJHMsSXZH8w/dZTForIW/4ihw==", + "version": "0.0.70", + "resolved": "https://registry.npmjs.org/volar-service-prettier/-/volar-service-prettier-0.0.70.tgz", + "integrity": "sha512-Z6BCFSpGVCd8BPAsZ785Kce1BGlWd5ODqmqZGVuB14MJvrR4+CYz6cDy4F+igmE1gMifqfvMhdgT8Aud4M5ngg==", "dev": true, "license": "MIT", "dependencies": { @@ -49078,9 +48320,9 @@ } }, "node_modules/volar-service-typescript": { - "version": "0.0.68", - "resolved": "https://registry.npmjs.org/volar-service-typescript/-/volar-service-typescript-0.0.68.tgz", - "integrity": "sha512-z7B/7CnJ0+TWWFp/gh2r5/QwMObHNDiQiv4C9pTBNI2Wxuwymd4bjEORzrJ/hJ5Yd5+OzeYK+nFCKevoGEEeKw==", + "version": "0.0.70", + "resolved": "https://registry.npmjs.org/volar-service-typescript/-/volar-service-typescript-0.0.70.tgz", + "integrity": "sha512-l46Bx4cokkUedTd74ojO5H/zqHZJ8SUuyZ0IB8JN4jfRqUM3bQFBHoOwlZCyZmOeO0A3RQNkMnFclxO4c++gsg==", "dev": true, "license": "MIT", "dependencies": { @@ -49101,9 +48343,9 @@ } }, "node_modules/volar-service-typescript-twoslash-queries": { - "version": "0.0.68", - "resolved": "https://registry.npmjs.org/volar-service-typescript-twoslash-queries/-/volar-service-typescript-twoslash-queries-0.0.68.tgz", - "integrity": "sha512-NugzXcM0iwuZFLCJg47vI93su5YhTIweQuLmZxvz5ZPTaman16JCvmDZexx2rd5T/75SNuvvZmrTOTNYUsfe5w==", + "version": "0.0.70", + "resolved": "https://registry.npmjs.org/volar-service-typescript-twoslash-queries/-/volar-service-typescript-twoslash-queries-0.0.70.tgz", + "integrity": "sha512-IdD13Z9N2Bu8EM6CM0fDV1E69olEYGHDU25X51YXmq8Y0CmJ2LNj6gOiBJgpS5JGUqFzECVhMNBW7R0sPdRTMQ==", "dev": true, "license": "MIT", "dependencies": { @@ -49119,14 +48361,14 @@ } }, "node_modules/volar-service-yaml": { - "version": "0.0.68", - "resolved": "https://registry.npmjs.org/volar-service-yaml/-/volar-service-yaml-0.0.68.tgz", - "integrity": "sha512-84XgE02LV0OvTcwfqhcSwVg4of3MLNUWPMArO6Aj8YXqyEVnPu8xTEMY2btKSq37mVAPuaEVASI4e3ptObmqcA==", + "version": "0.0.70", + "resolved": "https://registry.npmjs.org/volar-service-yaml/-/volar-service-yaml-0.0.70.tgz", + "integrity": "sha512-0c8bXDBeoATF9F6iPIlOuYTuZAC4c+yi0siQo920u7eiBJk8oQmUmg9cDUbR4+Gl++bvGP4plj3fErbJuPqdcQ==", "dev": true, "license": "MIT", "dependencies": { "vscode-uri": "^3.0.8", - "yaml-language-server": "~1.19.2" + "yaml-language-server": "~1.20.0" }, "peerDependencies": { "@volar/language-service": "~2.4.0" @@ -49138,9 +48380,9 @@ } }, "node_modules/vscode-css-languageservice": { - "version": "6.3.9", - "resolved": "https://registry.npmjs.org/vscode-css-languageservice/-/vscode-css-languageservice-6.3.9.tgz", - "integrity": "sha512-1tLWfp+TDM5ZuVWht3jmaY5y7O6aZmpeXLoHl5bv1QtRsRKt4xYGRMmdJa5Pqx/FTkgRbsna9R+Gn2xE+evVuA==", + "version": "6.3.10", + "resolved": "https://registry.npmjs.org/vscode-css-languageservice/-/vscode-css-languageservice-6.3.10.tgz", + "integrity": "sha512-eq5N9Er3fC4vA9zd9EFhyBG90wtCCuXgRSpAndaOgXMh1Wgep5lBgRIeDgjZBW9pa+332yC9+49cZMW8jcL3MA==", "dev": true, "license": "MIT", "dependencies": { @@ -49151,9 +48393,9 @@ } }, "node_modules/vscode-html-languageservice": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/vscode-html-languageservice/-/vscode-html-languageservice-5.6.1.tgz", - "integrity": "sha512-5Mrqy5CLfFZUgkyhNZLA1Ye5g12Cb/v6VM7SxUzZUaRKWMDz4md+y26PrfRTSU0/eQAl3XpO9m2og+GGtDMuaA==", + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/vscode-html-languageservice/-/vscode-html-languageservice-5.6.2.tgz", + "integrity": "sha512-ulCrSnFnfQ16YzvwnYUgEbUEl/ZG7u2eV27YhvLObSHKkb8fw1Z9cgsnUwjTEeDIdJDoTDTDpxuhQwoenoLNMg==", "dev": true, "license": "MIT", "dependencies": { @@ -49259,15 +48501,16 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, "license": "Apache-2.0", "dependencies": { "makeerror": "1.0.12" } }, "node_modules/watchpack": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz", - "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.1.tgz", + "integrity": "sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==", "dev": true, "license": "MIT", "dependencies": { @@ -49292,6 +48535,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, "license": "MIT", "dependencies": { "defaults": "^1.0.3" @@ -49301,6 +48545,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, "license": "MIT", "dependencies": { "clone": "^1.0.2" @@ -49328,9 +48573,9 @@ } }, "node_modules/web-worker": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.2.0.tgz", - "integrity": "sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.5.0.tgz", + "integrity": "sha512-RiMReJrTAiA+mBjGONMnjVDP2u3p9R1vkcGz6gDIrOMT3oGuYwX2WRMYI9ipkphSuE5XKEhydbhNEJh4NY9mlw==", "dev": true, "license": "Apache-2.0" }, @@ -49345,9 +48590,9 @@ } }, "node_modules/webpack": { - "version": "5.105.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.105.0.tgz", - "integrity": "sha512-gX/dMkRQc7QOMzgTe6KsYFM7DxeIONQSui1s0n/0xht36HvrgbxtM1xBlgx596NbpHuQU8P7QpKwrZYwUX48nw==", + "version": "5.105.4", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.105.4.tgz", + "integrity": "sha512-jTywjboN9aHxFlToqb0K0Zs9SbBoW4zRUlGzI2tYNxVYcEi/IPpn+Xi4ye5jTLvX2YeLuic/IvxNot+Q1jMoOw==", "dev": true, "license": "MIT", "dependencies": { @@ -49357,11 +48602,11 @@ "@webassemblyjs/ast": "^1.14.1", "@webassemblyjs/wasm-edit": "^1.14.1", "@webassemblyjs/wasm-parser": "^1.14.1", - "acorn": "^8.15.0", + "acorn": "^8.16.0", "acorn-import-phases": "^1.0.3", "browserslist": "^4.28.1", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.19.0", + "enhanced-resolve": "^5.20.0", "es-module-lexer": "^2.0.0", "eslint-scope": "5.1.1", "events": "^3.2.0", @@ -49373,9 +48618,9 @@ "neo-async": "^2.6.2", "schema-utils": "^4.3.3", "tapable": "^2.3.0", - "terser-webpack-plugin": "^5.3.16", + "terser-webpack-plugin": "^5.3.17", "watchpack": "^2.5.1", - "webpack-sources": "^3.3.3" + "webpack-sources": "^3.3.4" }, "bin": { "webpack": "bin/webpack.js" @@ -49394,15 +48639,15 @@ } }, "node_modules/webpack-dev-middleware": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.4.2.tgz", - "integrity": "sha512-xOO8n6eggxnwYpy1NlzUKpvrjfJTvae5/D6WOK0S2LSo7vjmo5gCM1DbLUmFqrMTJP+W/0YZNctm7jasWvLuBA==", + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.4.5.tgz", + "integrity": "sha512-uxQ6YqGdE4hgDKNf7hUiPXOdtkXvBJXrfEGYSx7P7LC8hnUYGK70X6xQXUvXeNyBDDcsiQXpG2m3G9vxowaEuA==", "dev": true, "license": "MIT", "dependencies": { "colorette": "^2.0.10", - "memfs": "^4.6.0", - "mime-types": "^2.1.31", + "memfs": "^4.43.1", + "mime-types": "^3.0.1", "on-finished": "^2.4.1", "range-parser": "^1.2.1", "schema-utils": "^4.0.0" @@ -49424,12 +48669,20 @@ } }, "node_modules/webpack-dev-middleware/node_modules/memfs": { - "version": "4.51.0", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.51.0.tgz", - "integrity": "sha512-4zngfkVM/GpIhC8YazOsM6E8hoB33NP0BCESPOA6z7qaL6umPJNqkO8CNYaLV2FB2MV6H1O3x2luHHOSqppv+A==", + "version": "4.56.11", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.56.11.tgz", + "integrity": "sha512-/GodtwVeKVIHZKLUSr2ZdOxKBC5hHki4JNCU22DoCGPEHr5o2PD5U721zvESKyWwCfTfavFl9WZYgA13OAYK0g==", "dev": true, "license": "Apache-2.0", "dependencies": { + "@jsonjoy.com/fs-core": "4.56.11", + "@jsonjoy.com/fs-fsa": "4.56.11", + "@jsonjoy.com/fs-node": "4.56.11", + "@jsonjoy.com/fs-node-builtins": "4.56.11", + "@jsonjoy.com/fs-node-to-fsa": "4.56.11", + "@jsonjoy.com/fs-node-utils": "4.56.11", + "@jsonjoy.com/fs-print": "4.56.11", + "@jsonjoy.com/fs-snapshot": "4.56.11", "@jsonjoy.com/json-pack": "^1.11.0", "@jsonjoy.com/util": "^1.9.0", "glob-to-regex.js": "^1.0.1", @@ -49440,41 +48693,21 @@ "funding": { "type": "github", "url": "https://github.com/sponsors/streamich" - } - }, - "node_modules/webpack-dev-middleware/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack-dev-middleware/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" }, - "engines": { - "node": ">= 0.6" + "peerDependencies": { + "tslib": "2" } }, "node_modules/webpack-dev-server": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.2.tgz", - "integrity": "sha512-QcQ72gh8a+7JO63TAx/6XZf/CWhgMzu5m0QirvPfGvptOusAxG12w2+aua1Jkjr7hzaWDnJ2n6JFeexMHI+Zjg==", + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.3.tgz", + "integrity": "sha512-9Gyu2F7+bg4Vv+pjbovuYDhHX+mqdqITykfzdM9UyKqKHlsE5aAjRhR+oOEfXW5vBeu8tarzlJFIZva4ZjAdrQ==", "dev": true, "license": "MIT", "dependencies": { "@types/bonjour": "^3.5.13", "@types/connect-history-api-fallback": "^1.5.4", - "@types/express": "^4.17.21", + "@types/express": "^4.17.25", "@types/express-serve-static-core": "^4.17.21", "@types/serve-index": "^1.9.4", "@types/serve-static": "^1.15.5", @@ -49484,9 +48717,9 @@ "bonjour-service": "^1.2.1", "chokidar": "^3.6.0", "colorette": "^2.0.10", - "compression": "^1.7.4", + "compression": "^1.8.1", "connect-history-api-fallback": "^2.0.0", - "express": "^4.21.2", + "express": "^4.22.1", "graceful-fs": "^4.2.6", "http-proxy-middleware": "^2.0.9", "ipaddr.js": "^2.1.0", @@ -49494,7 +48727,7 @@ "open": "^10.0.3", "p-retry": "^6.2.0", "schema-utils": "^4.2.0", - "selfsigned": "^2.4.1", + "selfsigned": "^5.5.0", "serve-index": "^1.9.1", "sockjs": "^0.3.24", "spdy": "^4.0.2", @@ -49562,37 +48795,6 @@ "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/webpack-dev-server/node_modules/body-parser/node_modules/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "depd": "~2.0.0", - "inherits": "~2.0.4", - "setprototypeof": "~1.2.0", - "statuses": "~2.0.2", - "toidentifier": "~1.0.1" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/webpack-dev-server/node_modules/body-parser/node_modules/statuses": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", - "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/webpack-dev-server/node_modules/chokidar": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", @@ -49618,10 +48820,20 @@ "fsevents": "~2.3.2" } }, + "node_modules/webpack-dev-server/node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/webpack-dev-server/node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", + "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", "dev": true, "license": "MIT" }, @@ -49690,18 +48902,18 @@ } }, "node_modules/webpack-dev-server/node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", + "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", "dev": true, "license": "MIT", "dependencies": { "debug": "2.6.9", "encodeurl": "~2.0.0", "escape-html": "~1.0.3", - "on-finished": "2.4.1", + "on-finished": "~2.4.1", "parseurl": "~1.3.3", - "statuses": "2.0.1", + "statuses": "~2.0.2", "unpipe": "~1.0.0" }, "engines": { @@ -49769,16 +48981,6 @@ "node": ">=0.10.0" } }, - "node_modules/webpack-dev-server/node_modules/ipaddr.js": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", - "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, "node_modules/webpack-dev-server/node_modules/is-plain-obj": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", @@ -49845,6 +49047,25 @@ "node": ">= 0.6" } }, + "node_modules/webpack-dev-server/node_modules/open": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "wsl-utils": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/webpack-dev-server/node_modules/path-to-regexp": { "version": "0.1.12", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", @@ -49865,6 +49086,22 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/webpack-dev-server/node_modules/qs": { + "version": "6.14.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz", + "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/webpack-dev-server/node_modules/raw-body": { "version": "2.5.3", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", @@ -49881,111 +49118,74 @@ "node": ">= 0.8" } }, - "node_modules/webpack-dev-server/node_modules/raw-body/node_modules/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "node_modules/webpack-dev-server/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "license": "MIT", "dependencies": { - "depd": "~2.0.0", - "inherits": "~2.0.4", - "setprototypeof": "~1.2.0", - "statuses": "~2.0.2", - "toidentifier": "~1.0.1" - }, - "engines": { - "node": ">= 0.8" + "picomatch": "^2.2.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/webpack-dev-server/node_modules/raw-body/node_modules/statuses": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", - "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", - "dev": true, - "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">=8.10.0" } }, - "node_modules/webpack-dev-server/node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "node_modules/webpack-dev-server/node_modules/selfsigned": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-5.5.0.tgz", + "integrity": "sha512-ftnu3TW4+3eBfLRFnDEkzGxSF/10BJBkaLJuBHZX0kiPS7bRdlpZGu6YGt4KngMkdTwJE6MbjavFpqHvqVt+Ew==", "dev": true, "license": "MIT", "dependencies": { - "picomatch": "^2.2.1" + "@peculiar/x509": "^1.14.2", + "pkijs": "^3.3.3" }, "engines": { - "node": ">=8.10.0" + "node": ">=18" } }, "node_modules/webpack-dev-server/node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", + "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", "dev": true, "license": "MIT", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", + "fresh": "~0.5.2", + "http-errors": "~2.0.1", "mime": "1.6.0", "ms": "2.1.3", - "on-finished": "2.4.1", + "on-finished": "~2.4.1", "range-parser": "~1.2.1", - "statuses": "2.0.1" + "statuses": "~2.0.2" }, "engines": { "node": ">= 0.8.0" } }, - "node_modules/webpack-dev-server/node_modules/send/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/webpack-dev-server/node_modules/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", + "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", "dev": true, "license": "MIT", "dependencies": { "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.19.0" + "send": "~0.19.1" }, "engines": { "node": ">= 0.8.0" } }, - "node_modules/webpack-dev-server/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/webpack-dev-server/node_modules/type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -50000,6 +49200,22 @@ "node": ">= 0.6" } }, + "node_modules/webpack-dev-server/node_modules/wsl-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", + "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/webpack-merge": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz", @@ -50026,9 +49242,9 @@ } }, "node_modules/webpack-sources": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz", - "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.4.tgz", + "integrity": "sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q==", "dev": true, "license": "MIT", "engines": { @@ -50118,20 +49334,6 @@ "node": ">= 0.6" } }, - "node_modules/webpack/node_modules/watchpack": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.1.tgz", - "integrity": "sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==", - "dev": true, - "license": "MIT", - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/websocket-driver": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", @@ -50161,6 +49363,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "deprecated": "Use @exodus/bytes instead for a more spec-conformant and faster implementation", "dev": true, "license": "MIT", "dependencies": { @@ -50306,9 +49509,9 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.19", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", - "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "version": "1.1.20", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.20.tgz", + "integrity": "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==", "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", @@ -50358,56 +49561,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/widest-line/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/widest-line/node_modules/emoji-regex": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", - "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", - "license": "MIT" - }, - "node_modules/widest-line/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/widest-line/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, "node_modules/wildcard": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", @@ -50447,53 +49600,6 @@ "node": ">=8" } }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/wrap-ansi-cjs/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/wrap-ansi/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -50530,27 +49636,23 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, "license": "ISC" }, "node_modules/write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", + "dev": true, "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" + "signal-exit": "^4.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/write-file-atomic/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "license": "ISC" - }, "node_modules/ws": { "version": "8.18.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", @@ -50574,16 +49676,17 @@ } }, "node_modules/wsl-utils": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", - "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.3.1.tgz", + "integrity": "sha512-g/eziiSUNBSsdDJtCLB8bdYEUMj4jR7AGeUo96p/3dTafgjHhpF4RiCFPiRILwjQoDXx5MqkBr4fwWtR3Ky4Wg==", "dev": true, "license": "MIT", "dependencies": { - "is-wsl": "^3.1.0" + "is-wsl": "^3.1.0", + "powershell-utils": "^0.1.0" }, "engines": { - "node": ">=18" + "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -50636,6 +49739,7 @@ "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, "license": "ISC", "engines": { "node": ">=10" @@ -50664,16 +49768,15 @@ } }, "node_modules/yaml-language-server": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/yaml-language-server/-/yaml-language-server-1.19.2.tgz", - "integrity": "sha512-9F3myNmJzUN/679jycdMxqtydPSDRAarSj3wPiF7pchEPnO9Dg07Oc+gIYLqXR4L+g+FSEVXXv2+mr54StLFOg==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/yaml-language-server/-/yaml-language-server-1.20.0.tgz", + "integrity": "sha512-qhjK/bzSRZ6HtTvgeFvjNPJGWdZ0+x5NREV/9XZWFjIGezew2b4r5JPy66IfOhd5OA7KeFwk1JfmEbnTvev0cA==", "dev": true, "license": "MIT", "dependencies": { "@vscode/l10n": "^0.0.18", "ajv": "^8.17.1", "ajv-draft-04": "^1.0.0", - "lodash": "4.17.21", "prettier": "^3.5.0", "request-light": "^0.5.7", "vscode-json-languageservice": "4.1.8", @@ -50687,13 +49790,6 @@ "yaml-language-server": "bin/yaml-language-server" } }, - "node_modules/yaml-language-server/node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true, - "license": "MIT" - }, "node_modules/yaml-language-server/node_modules/request-light": { "version": "0.5.8", "resolved": "https://registry.npmjs.org/request-light/-/request-light-0.5.8.tgz", @@ -50782,39 +49878,14 @@ "node": ">=20" } }, - "node_modules/yargs/node_modules/emoji-regex": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", - "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", - "dev": true, - "license": "MIT" - }, - "node_modules/yargs/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/yargs/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "ansi-regex": "^6.2.2" }, "engines": { "node": ">=12" @@ -50852,9 +49923,9 @@ } }, "node_modules/yauzl": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-3.2.0.tgz", - "integrity": "sha512-Ow9nuGZE+qp1u4JIPvg+uCiUr7xGQWdff7JQSk5VGYTAZMDe2q8lxJ10ygv10qmSj031Ty/6FNJpLO4o1Sgc+w==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-3.2.1.tgz", + "integrity": "sha512-k1isifdbpNSFEHFJ1ZY4YDewv0IH9FR61lDetaRMD3j2ae3bIXGV+7c+LHCqtQGofSd8PIyV4X6+dHMAnSr60A==", "dev": true, "license": "MIT", "dependencies": { @@ -50879,18 +49950,19 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz", + "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==", "license": "MIT", "engines": { - "node": ">=10" + "node": ">=12.20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -50937,9 +50009,9 @@ } }, "node_modules/zod": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.5.tgz", - "integrity": "sha512-k7Nwx6vuWx1IJ9Bjuf4Zt1PEllcwe7cls3VNzm4CQ1/hgtFUK2bRNG3rvnpPUhFjmqJKAKtjV576KnUkHocg/g==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", + "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", "dev": true, "license": "MIT", "funding": { @@ -50965,9 +50037,9 @@ } }, "node_modules/zone.js": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.15.1.tgz", - "integrity": "sha512-XE96n56IQpJM7NAoXswY3XRLcWFW83xe0BiAOeMD7K5k5xecOeul3Qcpx6GqEeeHNkW5DWL5zOyTbEfB4eti8w==", + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.16.1.tgz", + "integrity": "sha512-dpvY17vxYIW3+bNrP0ClUlaiY0CiIRK3tnoLaGoQsQcY9/I/NpzIWQ7tQNhbV7LacQMpCII6wVzuL3tuWOyfuA==", "license": "MIT" }, "node_modules/zwitch": { diff --git a/package.json b/package.json index 1a51242f22..bbff49cf2b 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "build": "nx affected --base=dev -t build --exclude=apps/dev/**/*", "build:prod": "nx run-many -t build --all --prod --exclude=apps/dev/**/*", "build:vscode-doc": "node libs/web-components/custom-element-manifest-analyze.js", + "deps:update": "ncu -u --target minor --cooldown 5", "dev:setup": "bash ./scripts/dev-setup", "dev:watch": "vite build --watch libs/web-components", "docs:build": "npm run --prefix docs build", @@ -34,123 +35,123 @@ "validate": "npm run build && npm run lint && vitest --run" }, "devDependencies": { - "@abgov/design-tokens-v2": "npm:@abgov/design-tokens@^2.0.0", - "@abgov/design-tokens": "^1.10.0", - "@abgov/nx-release": "^10.0.0", - "@angular-devkit/build-angular": "^20.3.16", - "@angular-devkit/core": "20.1.5", - "@angular-devkit/schematics": "20.1.5", - "@angular-eslint/eslint-plugin": "18.0.1", - "@angular-eslint/eslint-plugin-template": "18.0.1", - "@angular-eslint/template-parser": "18.0.1", - "@angular/cli": "^21.1.3", - "@angular/compiler-cli": "20.1.6", - "@angular/language-service": "20.1.6", - "@astrojs/check": "^0.9.6", - "@babel/core": "^7.14.5", - "@babel/preset-react": "^7.14.5", - "@faker-js/faker": "^8.3.1", - "@nx/angular": "22.3.3", - "@nx/eslint": "22.3.3", - "@nx/eslint-plugin": "22.3.3", - "@nx/jest": "22.3.3", - "@nx/js": "22.3.3", - "@nx/react": "22.3.3", - "@nx/vite": "22.3.3", - "@nx/vitest": "22.3.3", - "@nx/web": "22.3.3", - "@nx/workspace": "22.3.3", - "@schematics/angular": "20.1.5", - "@sveltejs/vite-plugin-svelte": "^3.0.1", - "@swc-node/register": "1.9.2", - "@swc/cli": "0.6.0", - "@swc/core": "1.9.3", - "@testing-library/dom": "^10.1.0", - "@testing-library/jest-dom": "^6.6.3", - "@testing-library/react": "^16.1.0", - "@testing-library/svelte": "^4.0.5", - "@testing-library/user-event": "^14.5.2", + "@abgov/design-tokens": "1.10.0", + "@abgov/design-tokens-v2": "npm:@abgov/design-tokens@2.2.0", + "@abgov/nx-release": "12.0.0", + "@angular-devkit/build-angular": "21.2.2", + "@angular-devkit/core": "21.2.2", + "@angular-devkit/schematics": "21.2.2", + "@angular-eslint/eslint-plugin": "18.4.3", + "@angular-eslint/eslint-plugin-template": "18.4.3", + "@angular-eslint/template-parser": "18.4.3", + "@angular/cli": "21.2.2", + "@angular/compiler-cli": "21.2.4", + "@angular/language-service": "21.2.4", + "@astrojs/check": "0.9.7", + "@babel/core": "7.29.0", + "@babel/preset-react": "7.28.5", + "@faker-js/faker": "8.4.1", + "@nx/angular": "22.5.4", + "@nx/eslint": "22.5.4", + "@nx/eslint-plugin": "22.5.4", + "@nx/jest": "22.5.4", + "@nx/js": "22.5.4", + "@nx/react": "22.5.4", + "@nx/vite": "22.5.4", + "@nx/vitest": "22.5.4", + "@nx/web": "22.5.4", + "@nx/workspace": "22.5.4", + "@schematics/angular": "21.2.2", + "@sveltejs/vite-plugin-svelte": "3.1.2", + "@swc-node/register": "1.11.1", + "@swc/cli": "0.8.0", + "@swc/core": "1.15.18", + "@testing-library/dom": "10.4.1", + "@testing-library/jest-dom": "6.9.1", + "@testing-library/react": "16.3.2", + "@testing-library/svelte": "4.2.3", + "@testing-library/user-event": "14.6.1", "@types/jest": "29.5.14", - "@types/node": "^20.0.0", - "@types/react": "^19.2.7", - "@types/react-dom": "^19.2.3", - "@typescript-eslint/eslint-plugin": "^7.18.0", - "@typescript-eslint/parser": "^7.18.0", - "@typescript-eslint/utils": "^7.18.0", - "@vitejs/plugin-react": "^4.2.1", - "@vitejs/plugin-react-swc": "^3.5.0", - "@vitest/browser": "^4.0.13", - "@vitest/browser-playwright": "^4.0.13", - "@vitest/coverage-v8": "^4.0.13", - "@vitest/ui": "^4.0.13", - "autoprefixer": "^10.4.16", + "@types/node": "20.19.37", + "@types/react": "19.2.14", + "@types/react-dom": "19.2.3", + "@typescript-eslint/eslint-plugin": "7.18.0", + "@typescript-eslint/parser": "7.18.0", + "@typescript-eslint/utils": "7.18.0", + "@vitejs/plugin-react": "4.7.0", + "@vitejs/plugin-react-swc": "3.11.0", + "@vitest/browser": "4.1.0", + "@vitest/browser-playwright": "4.1.0", + "@vitest/coverage-v8": "4.1.0", + "@vitest/ui": "4.1.0", + "autoprefixer": "10.4.27", "eslint": "8.57.1", - "eslint-config-prettier": "10.1.5", - "eslint-plugin-import": "2.31.0", - "eslint-plugin-jsx-a11y": "6.10.1", - "eslint-plugin-react": "7.32.2", - "eslint-plugin-react-hooks": "5.0.0", - "glob": "^12.0.0", - "jest": "^29.7.0", - "jest-environment-jsdom": "^29.7.0", - "jest-preset-angular": "^14.2.4", - "jiti": "2.4.2", - "jsdom": "^26.1.0", - "jsonc-eslint-parser": "^2.1.0", - "ng-packagr": "20.1.0", - "nx": "22.3.3", - "playwright": "^1.50.1", - "postcss": "^8.4.5", - "postcss-import": "~14.1.0", - "postcss-preset-env": "~7.5.0", - "postcss-replace": "^2.0.1", - "postcss-url": "~10.1.3", - "prettier": "^3.2.0", - "prettier-plugin-svelte": "^3.1.2", - "rollup": "^4.9.6", - "semantic-release": "^25.0.2", - "svelte": "^4.2.19", - "svelte-check": "^3.6.2", - "swc-loader": "0.1.15", + "eslint-config-prettier": "10.1.8", + "eslint-plugin-import": "2.32.0", + "eslint-plugin-jsx-a11y": "6.10.2", + "eslint-plugin-react": "7.37.5", + "eslint-plugin-react-hooks": "5.2.0", + "glob": "12.0.0", + "jest": "29.7.0", + "jest-environment-jsdom": "30.3.0", + "jest-preset-angular": "16.1.1", + "jiti": "2.6.1", + "jsdom": "26.1.0", + "jsonc-eslint-parser": "2.4.2", + "ng-packagr": "21.2.0", + "npm-check-updates": "19.6.3", + "nx": "22.5.4", + "playwright": "1.58.2", + "postcss": "8.5.8", + "postcss-import": "14.1.0", + "postcss-preset-env": "7.8.3", + "postcss-replace": "2.0.1", + "postcss-url": "10.1.3", + "prettier": "3.8.1", + "prettier-plugin-svelte": "3.5.1", + "rollup": "4.59.0", + "semantic-release": "25.0.3", + "svelte": "4.2.20", + "svelte-check": "3.8.6", + "swc-loader": "0.2.7", "ts-jest": "29.4.6", - "ts-node": "10.9.1", - "typescript": "5.8.3", - "vite": "~5.4.20", + "ts-node": "10.9.2", + "typescript": "5.9.3", + "vite": "5.4.21", "vite-plugin-dts": "4.5.4", - "vitest": "^4.0.13", - "vitest-browser-react": "^1.0.0", - "vitest-dom": "^0.1.1" + "vitest": "4.1.0", + "vitest-browser-react": "1.0.1", + "vitest-dom": "0.1.1" }, "dependencies": { - "@angular/animations": "20.1.6", - "@angular/common": "20.3.14", - "@angular/compiler": "^20.3.16", - "@angular/core": "^20.3.16", - "@angular/forms": "20.1.6", - "@angular/platform-browser": "20.1.6", - "@angular/platform-browser-dynamic": "20.1.6", - "@angular/router": "20.1.6", - "@swc/helpers": "0.5.11", - "@astrojs/mdx": "^4.3.13", - "@astrojs/react": "^4.4.2", - "astro": "^5.16.6", - "date-fns": "^3.0.6", - "dompurify": "^3.3.1", - "flexsearch": "^0.8.212", - "highlight.js": "^11.11.1", - "@nrwl/jest": "19.5.4", - "react": "^19.2.3", - "react-dom": "^19.2.3", - "react-router-dom": "^6.30.3", - "rxjs": "~7.8.0", - "style-dictionary": "^5.1.1", - "svelte-routing": "^2.13.0", - "tslib": "^2.3.0", - "zone.js": "0.15.1" + "@angular/animations": "21.2.4", + "@angular/common": "21.2.4", + "@angular/compiler": "21.2.4", + "@angular/core": "21.2.4", + "@angular/forms": "21.2.4", + "@angular/platform-browser": "21.2.4", + "@angular/platform-browser-dynamic": "21.2.4", + "@angular/router": "21.2.4", + "@astrojs/mdx": "4.3.14", + "@astrojs/react": "4.4.2", + "@swc/helpers": "0.5.19", + "astro": "5.18.1", + "date-fns": "3.6.0", + "dompurify": "3.3.3", + "flexsearch": "0.8.212", + "highlight.js": "11.11.1", + "react": "19.2.4", + "react-dom": "19.2.4", + "react-router-dom": "6.30.3", + "rxjs": "7.8.2", + "style-dictionary": "5.3.3", + "svelte-routing": "2.13.0", + "tslib": "2.8.1", + "zone.js": "0.16.1" }, "overrides": { - "glob": "^12.0.0", - "esbuild": "^0.25.0" + "glob": "12.0.0", + "esbuild": "0.25.0" }, "nx": { "includedScripts": [] diff --git a/scripts/indexdocs.ts b/scripts/indexdocs.ts index d6e4f8d638..fc920a6ee2 100644 --- a/scripts/indexdocs.ts +++ b/scripts/indexdocs.ts @@ -5,12 +5,23 @@ import { glob } from "glob"; interface DocIndex { id: string; title: string; + name?: string; // For components - useSearch expects this description: string; content: string; component: string; filePath: string; urlPath: string; tags: string[]; + /** Entry type - must match what useSearch.ts expects */ + type: "component" | "example" | "token" | "page"; + /** URL slug for building links */ + slug: string; + /** Status for sorting (stable, beta, etc.) */ + status?: string; + /** Category for components */ + category?: string; + /** Categories array for examples */ + categories?: string[]; } interface FrontMatter { @@ -20,37 +31,350 @@ interface FrontMatter { [key: string]: any; } +/** + * Token category metadata for search entries + */ +interface TokenCategoryMeta { + title: string; + description: string; + tags: string[]; +} + +/** + * Metadata for each token category + */ +const TOKEN_CATEGORY_META: Record = { + color: { + title: "Color Tokens", + description: "Color design tokens for text, backgrounds, borders, interactive elements, and status indicators", + tags: ["token", "color", "design token", "palette", "theme"], + }, + opacity: { + title: "Opacity Tokens", + description: "Opacity values for overlays, disabled states, and transparency effects", + tags: ["token", "opacity", "transparency", "design token"], + }, + borderRadius: { + title: "Border Radius Tokens", + description: "Border radius values for rounded corners on cards, buttons, and containers", + tags: ["token", "border", "radius", "corners", "design token"], + }, + borderWidth: { + title: "Border Width Tokens", + description: "Border width values for outlines, dividers, and component borders", + tags: ["token", "border", "width", "stroke", "design token"], + }, + space: { + title: "Spacing Tokens", + description: "Spacing values for margins, padding, and gaps between elements", + tags: ["token", "space", "spacing", "margin", "padding", "gap", "design token"], + }, + iconSize: { + title: "Icon Size Tokens", + description: "Standard icon sizes for consistent iconography across the design system", + tags: ["token", "icon", "size", "design token"], + }, + shadow: { + title: "Shadow Tokens", + description: "Box shadow values for elevation and depth effects on cards and modals", + tags: ["token", "shadow", "elevation", "depth", "design token"], + }, + typography: { + title: "Typography Tokens", + description: "Typography presets combining font family, size, weight, and line height", + tags: ["token", "typography", "font", "text", "heading", "body", "design token"], + }, + fontFamily: { + title: "Font Family Tokens", + description: "Font family values for the design system typefaces", + tags: ["token", "font", "family", "typeface", "design token"], + }, + fontSize: { + title: "Font Size Tokens", + description: "Font size values for text hierarchy and responsive typography", + tags: ["token", "font", "size", "typography", "design token"], + }, + fontWeight: { + title: "Font Weight Tokens", + description: "Font weight values for text emphasis and hierarchy", + tags: ["token", "font", "weight", "bold", "design token"], + }, + lineHeight: { + title: "Line Height Tokens", + description: "Line height values for readable text and proper vertical rhythm", + tags: ["token", "line", "height", "leading", "typography", "design token"], + }, + letterSpacing: { + title: "Letter Spacing Tokens", + description: "Letter spacing values for text tracking adjustments", + tags: ["token", "letter", "spacing", "tracking", "typography", "design token"], + }, +}; + +/** + * Categories to exclude from search (internal implementation details) + */ +const EXCLUDED_TOKEN_CATEGORIES = [ + "input", + "border-none", + "fontVariationSettings", + "translate", + "motionCurve", + "motionDuration", + "transition", +]; + +/** + * Static page entries for docs pages (Get Started, Foundations, etc.) + * These are manually defined since Astro pages don't have easily parseable metadata. + */ +interface PageMeta { + id: string; + title: string; + description: string; + urlPath: string; + tags: string[]; + category: string; +} + +const PAGE_ENTRIES: PageMeta[] = [ + // Get Started pages + { + id: "get-started", + title: "Get started", + description: "Introduction to the GoA Design System early adopters program", + urlPath: "get-started", + tags: ["get started", "introduction", "onboarding"], + category: "get started", + }, + { + id: "get-started-developers", + title: "Get started as a developer", + description: "Developer onboarding: package setup, template repo, branches, and compatibility", + urlPath: "get-started/developers", + tags: ["get started", "developer", "setup", "installation", "packages", "npm"], + category: "get started", + }, + { + id: "get-started-designers", + title: "Get started as a designer", + description: "Designer onboarding: Figma libraries, BETA components, and illustration requests", + urlPath: "get-started/designers", + tags: ["get started", "designer", "figma", "libraries", "illustrations"], + category: "get started", + }, +]; + +/** + * Generate search index entries for static pages + */ +function generatePageEntries(): DocIndex[] { + console.log("\nIndexing static pages..."); + + const entries: DocIndex[] = PAGE_ENTRIES.map(page => ({ + id: page.id, + title: page.title, + name: page.title, + description: page.description, + content: "", + component: "", + filePath: `docs/src/pages/${page.urlPath}`, + urlPath: page.urlPath, + tags: page.tags, + type: "page" as const, + slug: page.urlPath, + status: "stable", + category: page.category, + })); + + entries.forEach(e => console.log(` ✓ Indexed: ${e.title}`)); + return entries; +} + +/** + * Convert a token path to CSS variable format + */ +function pathToCssVar(pathParts: string[]): string { + return `--goa-${pathParts.join("-")}`; +} + +/** + * Check if an object is a token value (has a 'value' property) + */ +function isTokenValue(obj: unknown): obj is { value: unknown } { + return typeof obj === "object" && obj !== null && "value" in obj; +} + +/** + * Recursively extract all token names from a category + */ +function extractTokenNames( + obj: Record, + pathParts: string[] = [], +): string[] { + const names: string[] = []; + + for (const [key, value] of Object.entries(obj)) { + const currentPath = [...pathParts, key]; + + if (isTokenValue(value)) { + names.push(pathToCssVar(currentPath)); + } else if (typeof value === "object" && value !== null) { + names.push(...extractTokenNames(value as Record, currentPath)); + } + } + + return names; +} + +/** + * Generate a human-readable description for a token based on its name + */ +function generateTokenDescription(tokenName: string, category: string): string { + // Remove --goa- prefix and category for cleaner description + const shortName = tokenName.replace(/^--goa-/, "").replace(new RegExp(`^${category}-?`), ""); + const categoryMeta = TOKEN_CATEGORY_META[category]; + const categoryLabel = categoryMeta?.title.replace(" Tokens", "").toLowerCase() || category; + + if (!shortName) { + return `${categoryMeta?.title || category} design token`; + } + + // Convert kebab-case to readable format + const readable = shortName.replace(/-/g, " "); + return `${categoryLabel} token: ${readable}`; +} + +/** + * Generate search index entries for design tokens + * Creates both category entries (for browsing) and individual token entries (for direct search) + */ +function generateTokenEntries(): DocIndex[] { + const tokenPath = path.join( + process.cwd(), + "node_modules", + "@abgov", + "design-tokens-v2", + "data", + "goa-global-design-tokens.json", + ); + + if (!fs.existsSync(tokenPath)) { + console.warn(" ⚠ Design tokens not found, skipping token indexing"); + return []; + } + + const tokens = JSON.parse(fs.readFileSync(tokenPath, "utf-8")); + const entries: DocIndex[] = []; + + console.log("\nIndexing design tokens..."); + + let totalIndividualTokens = 0; + + for (const [category, categoryTokens] of Object.entries(tokens)) { + // Skip excluded categories + if (EXCLUDED_TOKEN_CATEGORIES.includes(category)) { + continue; + } + + const meta = TOKEN_CATEGORY_META[category]; + if (!meta) { + // Skip categories without metadata (likely internal) + continue; + } + + // Extract all token names in this category + const tokenNames = extractTokenNames( + { [category]: categoryTokens }, + [], + ); + + // Add category entry (for browsing by category) + const categoryEntry: DocIndex = { + id: `tokens-${category}`, + title: meta.title, + description: meta.description, + content: tokenNames.join(" "), + component: "", + filePath: "design-tokens", + urlPath: "tokens", + tags: meta.tags, + type: "token", + slug: category, // e.g., "color", "space" - used for building URL + status: "stable", + category: category, + }; + entries.push(categoryEntry); + + // Add individual token entries (for direct search) + for (const tokenName of tokenNames) { + // Convert --goa-color-greyscale-100 to color-greyscale-100 for URL slug + const tokenSlug = tokenName.replace(/^--goa-/, ""); + + const tokenEntry: DocIndex = { + id: `token-${tokenSlug}`, + title: tokenName, // Full CSS variable name: --goa-color-greyscale-100 + name: tokenName, + description: generateTokenDescription(tokenName, category), + content: "", // Individual tokens don't need searchable content + component: "", + filePath: "design-tokens", + urlPath: "tokens", + tags: ["token", "design token", category], + type: "token", + slug: tokenSlug, // Used for URL: /tokens?search=color-greyscale-100 + status: "stable", + category: category, + }; + entries.push(tokenEntry); + totalIndividualTokens++; + } + + console.log(` ✓ Indexed: ${meta.title} (${tokenNames.length} tokens)`); + } + + console.log(` → Total individual tokens indexed: ${totalIndividualTokens}`); + + return entries; +} + async function generateSearchIndex() { - const docsPattern = "docs/src/pages/components/**/*.mdx"; - const docFiles = await glob(docsPattern, { + // Index component documentation from content folder + const componentsPattern = "docs/src/content/components/*.mdx"; + const componentFiles = await glob(componentsPattern, { cwd: process.cwd(), nodir: true, }); - console.log(`Found ${docFiles.length} documentation files`); + console.log(`Found ${componentFiles.length} component documentation files`); const index: DocIndex[] = []; - for (const filePath of docFiles) { + for (const filePath of componentFiles) { try { const fullPath = path.join(process.cwd(), filePath); const content = fs.readFileSync(fullPath, "utf-8"); const componentName = extractComponentName(filePath); const { frontMatter, bodyContent } = parseFrontMatter(content); - const title = frontMatter.title || extractTitle(bodyContent); + const title = frontMatter.name || frontMatter.title || extractTitle(bodyContent); const tags = frontMatter.tags || []; const description = frontMatter.description || extractDescription(bodyContent); const docEntry: DocIndex = { id: componentName, title: title || componentName, + name: title || componentName, // useSearch expects 'name' for components description, - content: bodyContent, // TODO: should we extract out everything after the title/description? + content: bodyContent, component: componentName, filePath: filePath, urlPath: `components/${componentName}`, tags: tags, + type: "component", + slug: componentName, + status: frontMatter.status || "stable", + category: frontMatter.category || "general", }; index.push(docEntry); @@ -60,6 +384,64 @@ async function generateSearchIndex() { } } + // Index examples from content folder + const examplesPattern = "docs/src/content/examples/*/index.mdx"; + const exampleFiles = await glob(examplesPattern, { + cwd: process.cwd(), + nodir: true, + }); + + console.log(`\nFound ${exampleFiles.length} example documentation files`); + + for (const filePath of exampleFiles) { + try { + const fullPath = path.join(process.cwd(), filePath); + const content = fs.readFileSync(fullPath, "utf-8"); + + // Extract slug from path (e.g., "add-a-filter-chip" from "docs/src/content/examples/add-a-filter-chip/index.mdx") + const pathParts = filePath.split(path.sep); + const exampleSlug = pathParts[pathParts.length - 2]; + + const { frontMatter, bodyContent } = parseFrontMatter(content); + const title = frontMatter.title || exampleSlug; + const tags = frontMatter.tags || []; + const description = frontMatter.description || extractDescription(bodyContent); + + // Handle components field - could be array or undefined + const components = Array.isArray(frontMatter.components) + ? frontMatter.components.join(", ") + : ""; + + const docEntry: DocIndex = { + id: `example-${exampleSlug}`, + title: title, + description, + content: bodyContent, + component: components, + filePath: filePath, + urlPath: `examples/${exampleSlug}`, + tags: [...tags, "example", "pattern"], + type: "example", + slug: exampleSlug, + status: frontMatter.status || "published", + categories: Array.isArray(frontMatter.categories) ? frontMatter.categories : [], + }; + + index.push(docEntry); + console.log(` ✓ Indexed: ${title}`); + } catch (error) { + console.error(` ✗ Error processing ${filePath}:`, error); + } + } + + // Add design token entries + const tokenEntries = generateTokenEntries(); + index.push(...tokenEntries); + + // Add static page entries (Get Started, etc.) + const pageEntries = generatePageEntries(); + index.push(...pageEntries); + const outputPath = path.join(process.cwd(), "docs", "search-index.json"); const publicOutputPath = path.join( process.cwd(), diff --git a/vitest.config.mjs b/vitest.config.mjs index ea1be387ab..19a83323d6 100644 --- a/vitest.config.mjs +++ b/vitest.config.mjs @@ -7,13 +7,12 @@ import { playwright } from "@vitest/browser-playwright"; // https://vitejs.dev/config/ export default defineConfig({ - test: { retries: 3, exclude: [ "**/node_modules", "apps", - "libs/angular-components", // run angular via nx + "libs/angular-components", // run angular via nx ], projects: [ { @@ -26,95 +25,97 @@ export default defineConfig({ }, }), ], + resolve: { + alias: { + "@abgov/ui-components-common": resolve( + __dirname, + "./libs/common/src/index.ts", + ), + }, + }, test: { name: "web-component-unit", globals: true, environment: "jsdom", alias: [{ find: /^svelte$/, replacement: "svelte/internal" }], - include: [ - "libs/web-components/src/**/*.{test,spec}.ts", - ], + include: ["libs/web-components/src/**/*.{test,spec}.ts"], setupFiles: ["vitest.web-component.setup.ts"], }, }, { - plugins: [ - react(), - ], + plugins: [react()], + resolve: { + alias: { + "@abgov/ui-components-common": resolve( + __dirname, + "./libs/common/src/index.ts", + ), + }, + }, test: { name: "react-unit", globals: true, environment: "jsdom", - include: [ - "libs/react-components/src/**/*.{test,spec}.tsx", - ], + include: ["libs/react-components/src/**/*.{test,spec}.tsx"], }, }, { - plugins: [ - react(), - ], + plugins: [react()], resolve: { alias: { - '@abgov/ui-components-common': resolve(__dirname, './dist/libs/common/index.js'), + "@abgov/ui-components-common": resolve( + __dirname, + "./libs/common/src/index.ts", + ), }, }, test: { name: "react-browser", globals: true, environment: "jsdom", - include: [ - "libs/react-components/**/*.browser.{test,spec}.tsx", - ], + include: ["libs/react-components/**/*.browser.{test,spec}.tsx"], setupFiles: ["vitest.browser.setup.ts"], browser: { enabled: true, provider: playwright(), - instances: [ - { browser: "chromium" }, - { browser: "firefox" }, - ] + instances: [{ browser: "chromium" }, { browser: "firefox" }], }, server: { deps: { - inline: [/@abgov\/ui-components-common/] - } - } + inline: [/@abgov\/ui-components-common/], + }, + }, }, }, { - plugins: [ - react(), - ], + plugins: [react()], resolve: { alias: { - '@abgov/ui-components-common': resolve(__dirname, './dist/libs/common/index.js'), + "@abgov/ui-components-common": resolve( + __dirname, + "./libs/common/src/index.ts", + ), }, }, test: { name: "react-headless", globals: true, environment: "jsdom", - include: [ - "libs/react-components/**/*.browser.{test,spec}.tsx", - ], + include: ["libs/react-components/**/*.browser.{test,spec}.tsx"], setupFiles: ["vitest.browser.setup.ts"], browser: { enabled: true, headless: true, provider: playwright(), - instances: [ - { browser: "chromium" }, - { browser: "firefox" }, - ] + instances: [{ browser: "chromium" }, { browser: "firefox" }], }, server: { deps: { - inline: [/@abgov\/ui-components-common/] - } - } + inline: [/@abgov\/ui-components-common/], + }, + }, }, }, - ] + ], }, }); diff --git a/vitest.web-component.setup.ts b/vitest.web-component.setup.ts index 66e9f8a5e1..804e775ae7 100644 --- a/vitest.web-component.setup.ts +++ b/vitest.web-component.setup.ts @@ -14,3 +14,30 @@ console.error = (...params) => { originalConsoleError(...params); } }; + +// jsdom does not implement the HTML Popover API yet. +if (!HTMLElement.prototype.showPopover) { + Object.defineProperty(HTMLElement.prototype, "showPopover", { + configurable: true, + writable: true, + value() { + this.setAttribute("data-popover-open", "true"); + this.dispatchEvent( + Object.assign(new Event("toggle"), { newState: "open", oldState: "closed" }), + ); + }, + }); +} + +if (!HTMLElement.prototype.hidePopover) { + Object.defineProperty(HTMLElement.prototype, "hidePopover", { + configurable: true, + writable: true, + value() { + this.removeAttribute("data-popover-open"); + this.dispatchEvent( + Object.assign(new Event("toggle"), { newState: "closed", oldState: "open" }), + ); + }, + }); +}