From e0c607d18bd189c64f41ebb09414cf1e4bb6938f Mon Sep 17 00:00:00 2001 From: willxue Date: Tue, 18 Aug 2026 07:04:12 +0800 Subject: [PATCH 1/4] feat: prepare WeBaseUI 1.0 RC --- .changeset/README.md | 14 +- .changeset/bright-tokens-rise.md | 14 + .changeset/calm-forms-act.md | 6 + .changeset/clear-directions-hold.md | 10 + .changeset/focused-collections-roam.md | 7 + .changeset/locale-numbers-flow.md | 7 + .changeset/localized-copy-fits.md | 7 + .changeset/quick-options-cycle.md | 7 + .changeset/quiet-floating-edges-align.md | 8 + .changeset/steady-overlays-lock.md | 7 + .changeset/tactile-targets-rest.md | 8 + .github/CODEOWNERS | 7 + .github/ISSUE_TEMPLATE/accessibility.md | 27 + .github/ISSUE_TEMPLATE/bug_report.md | 27 + .github/ISSUE_TEMPLATE/config.yml | 5 + .github/ISSUE_TEMPLATE/feature_request.md | 30 + .github/ISSUE_TEMPLATE/release_review.md | 43 + .github/PULL_REQUEST_TEMPLATE.md | 17 + .github/workflows/check.yml | 51 + .github/workflows/compatibility.yml | 62 + .github/workflows/release.yml | 122 ++ .gitignore | 3 + CONTRIBUTING.md | 24 + DEVELOPMENT_PLAN.md | 545 ++++++ README.md | 19 +- SECURITY.md | 29 + apps/docs/DESIGN_STANDARD.md | 77 + apps/docs/index.html | 11 +- apps/docs/package.json | 4 +- apps/docs/src/App.svelte | 641 +++++-- apps/docs/src/app.css | 1491 ++++++++++++++++- apps/docs/src/lib/ComponentPreview.svelte | 212 +++ apps/docs/src/lib/reference-utils.ts | 36 + apps/docs/src/lib/reference.ts | 134 ++ apps/docs/tsconfig.json | 12 +- apps/docs/vite.config.ts | 4 +- docs/ADOPTION_MATRIX.md | 167 ++ docs/PERFORMANCE.md | 54 + docs/RC_READINESS.md | 33 + docs/RELEASE_RUNBOOK.md | 77 + docs/SCREEN_READER_AUDIT.md | 54 + docs/SUPPORT_MATRIX.md | 48 + docs/adr/0001-token-layers.md | 68 + docs/adr/0002-overlay-focus-infrastructure.md | 72 + docs/component-style-literal-baseline.json | 39 + docs/package-size-baseline.json | 150 ++ docs/support-policy.json | 24 + .../webaseui-svelte-consumer/package.json | 15 +- .../webaseui-svelte-consumer/src/App.svelte | 3 +- .../webaseui-svelte-consumer/tsconfig.json | 13 +- package-lock.json | 769 ++++++++- package.json | 41 +- packages/webaseui-core/CHANGELOG.md | 8 + packages/webaseui-core/LICENSE | 21 + packages/webaseui-core/README.md | 74 +- packages/webaseui-core/package.json | 5 +- packages/webaseui-core/src/brand-theme.css | 27 + packages/webaseui-core/src/tokens.css | 392 ++++- packages/webaseui-svelte/API_CONTRACT.md | 352 ++++ packages/webaseui-svelte/LICENSE | 21 + packages/webaseui-svelte/README.md | 48 +- packages/webaseui-svelte/VERSIONING.md | 19 +- packages/webaseui-svelte/package.json | 9 +- .../src/lib/components/WeBaseAccordion.svelte | 37 +- .../src/lib/components/WeBaseAlert.svelte | 29 +- .../src/lib/components/WeBaseBadge.svelte | 16 +- .../lib/components/WeBaseBreadcrumbs.svelte | 19 +- .../src/lib/components/WeBaseButton.svelte | 31 +- .../src/lib/components/WeBaseCard.svelte | 28 +- .../src/lib/components/WeBaseCheck.svelte | 25 +- .../src/lib/components/WeBaseDialog.svelte | 93 +- .../src/lib/components/WeBaseDivider.svelte | 6 +- .../lib/components/WeBaseEmptyState.svelte | 28 +- .../src/lib/components/WeBaseField.svelte | 32 +- .../src/lib/components/WeBaseIcon.svelte | 85 +- .../lib/components/WeBaseIconButton.svelte | 12 +- .../src/lib/components/WeBaseLink.svelte | 17 +- .../src/lib/components/WeBaseLoader.svelte | 12 +- .../lib/components/WeBasePagination.svelte | 50 +- .../src/lib/components/WeBaseProgress.svelte | 15 +- .../src/lib/components/WeBaseRadio.svelte | 22 +- .../lib/components/WeBaseSectionHeader.svelte | 22 +- .../src/lib/components/WeBaseSelect.svelte | 265 ++- .../src/lib/components/WeBaseSkeleton.svelte | 10 +- .../src/lib/components/WeBaseSlider.svelte | 49 +- .../src/lib/components/WeBaseSwitch.svelte | 25 +- .../src/lib/components/WeBaseTabs.svelte | 31 +- .../src/lib/components/WeBaseTag.svelte | 35 +- .../src/lib/components/WeBaseTextarea.svelte | 28 +- .../src/lib/components/WeBaseToast.svelte | 34 +- .../src/lib/components/WeBaseTooltip.svelte | 116 +- packages/webaseui-svelte/src/lib/index.ts | 9 + .../src/lib/internal/dialog-lifecycle.ts | 76 + .../src/lib/internal/floating-position.ts | 226 +++ .../src/lib/internal/overlay.ts | 68 + .../src/lib/internal/popover.ts | 52 + .../src/lib/internal/roving-focus.ts | 51 + .../src/lib/internal/select-state.ts | 9 + .../src/lib/internal/timing.ts | 35 + .../src/lib/internal/typeahead.ts | 81 + packages/webaseui-svelte/src/lib/types.ts | 30 + .../src/lib/utils/collection.ts | 32 + playwright.config.ts | 47 + scripts/check-api-contract.mjs | 41 + scripts/check-changeset.mjs | 61 + scripts/check-docs-design.mjs | 63 + scripts/check-package-size.mjs | 170 ++ scripts/check-support-policy.mjs | 83 + scripts/check-token-contrast.mjs | 101 ++ scripts/check-tokens.mjs | 142 ++ scripts/check-visual-baselines.mjs | 66 + scripts/check-webaseui-packages.mjs | 20 +- scripts/deploy-docs.mjs | 46 + scripts/lib/npm-pack.mjs | 23 + scripts/registry-smoke.mjs | 73 + scripts/release-channel.mjs | 32 + scripts/test-webaseui-consumer.mjs | 103 +- static/apple-touch-icon.png | Bin 0 -> 8160 bytes static/favicon-16x16.png | Bin 0 -> 1080 bytes static/favicon-32x32.png | Bin 0 -> 2118 bytes static/favicon-48x48.png | Bin 0 -> 2960 bytes static/favicon.ico | Bin 0 -> 7406 bytes static/icon-192.png | Bin 0 -> 51909 bytes static/icon-512.png | Bin 0 -> 153072 bytes static/icon-maskable-512.png | Bin 0 -> 20685 bytes static/logo.svg | 443 +++++ static/robots.txt | 2 + static/site.webmanifest | 29 + tests/browser/fixture/index.html | 12 + tests/browser/fixture/src/App.svelte | 322 ++++ tests/browser/fixture/src/VisualStates.svelte | 112 ++ tests/browser/fixture/src/main.ts | 4 + tests/browser/specs/components.spec.ts | 460 +++++ tests/browser/specs/docs.spec.ts | 165 ++ tests/browser/specs/ssr.spec.ts | 24 + tests/browser/specs/visual-cases.ts | 32 + tests/browser/specs/visual.spec.ts | 228 +++ ...accordion-hover-visual-chromium-darwin.png | Bin 0 -> 18513 bytes ...accordion-light-visual-chromium-darwin.png | Bin 0 -> 18411 bytes ...on-state-matrix-visual-chromium-darwin.png | Bin 0 -> 14794 bytes .../alert-light-visual-chromium-darwin.png | Bin 0 -> 13647 bytes .../badge-light-visual-chromium-darwin.png | Bin 0 -> 8768 bytes .../brand-theme-visual-chromium-darwin.png | Bin 0 -> 16671 bytes ...eadcrumbs-light-visual-chromium-darwin.png | Bin 0 -> 7577 bytes .../button-dark-visual-chromium-darwin.png | Bin 0 -> 10694 bytes .../button-focus-visual-chromium-darwin.png | Bin 0 -> 11235 bytes .../button-light-visual-chromium-darwin.png | Bin 0 -> 10679 bytes .../card-light-visual-chromium-darwin.png | Bin 0 -> 19763 bytes .../check-light-visual-chromium-darwin.png | Bin 0 -> 13801 bytes .../dialog-light-visual-chromium-darwin.png | Bin 0 -> 6237 bytes .../dialog-open-visual-chromium-darwin.png | Bin 0 -> 165652 bytes .../divider-light-visual-chromium-darwin.png | Bin 0 -> 7868 bytes ...mptystate-light-visual-chromium-darwin.png | Bin 0 -> 20422 bytes ...ne-state-matrix-visual-chromium-darwin.png | Bin 0 -> 25631 bytes .../field-light-visual-chromium-darwin.png | Bin 0 -> 10073 bytes ...elect-collision-visual-chromium-darwin.png | Bin 0 -> 23797 bytes ...oltip-collision-visual-chromium-darwin.png | Bin 0 -> 21122 bytes ...-colors-fixture-visual-chromium-darwin.png | Bin 0 -> 13920 bytes ...ed-state-matrix-visual-chromium-darwin.png | Bin 0 -> 20917 bytes ...or-state-matrix-visual-chromium-darwin.png | Bin 0 -> 22011 bytes .../icon-light-visual-chromium-darwin.png | Bin 0 -> 10358 bytes ...conbutton-light-visual-chromium-darwin.png | Bin 0 -> 7937 bytes .../link-light-visual-chromium-darwin.png | Bin 0 -> 8369 bytes .../loader-light-visual-chromium-darwin.png | Bin 0 -> 6181 bytes ...lized-copy-zoom-visual-chromium-darwin.png | Bin 0 -> 89149 bytes ...on-state-matrix-visual-chromium-darwin.png | Bin 0 -> 16135 bytes ...agination-light-visual-chromium-darwin.png | Bin 0 -> 6691 bytes .../progress-light-visual-chromium-darwin.png | Bin 0 -> 9033 bytes .../radio-light-visual-chromium-darwin.png | Bin 0 -> 13625 bytes .../rtl-floating-visual-chromium-darwin.png | Bin 0 -> 17150 bytes ...ionheader-light-visual-chromium-darwin.png | Bin 0 -> 23353 bytes .../select-light-visual-chromium-darwin.png | Bin 0 -> 10472 bytes .../select-mobile-visual-chromium-darwin.png | Bin 0 -> 8863 bytes .../select-open-visual-chromium-darwin.png | Bin 0 -> 14983 bytes ...ed-state-matrix-visual-chromium-darwin.png | Bin 0 -> 16062 bytes .../skeleton-light-visual-chromium-darwin.png | Bin 0 -> 4830 bytes .../slider-light-visual-chromium-darwin.png | Bin 0 -> 8143 bytes .../switch-light-visual-chromium-darwin.png | Bin 0 -> 11021 bytes .../tabs-hover-visual-chromium-darwin.png | Bin 0 -> 11384 bytes .../tabs-light-visual-chromium-darwin.png | Bin 0 -> 11378 bytes .../tag-light-visual-chromium-darwin.png | Bin 0 -> 9780 bytes .../textarea-light-visual-chromium-darwin.png | Bin 0 -> 15495 bytes .../toast-light-visual-chromium-darwin.png | Bin 0 -> 6349 bytes .../toast-open-visual-chromium-darwin.png | Bin 0 -> 12594 bytes .../tooltip-focus-visual-chromium-darwin.png | Bin 0 -> 11851 bytes .../tooltip-light-visual-chromium-darwin.png | Bin 0 -> 8690 bytes tests/browser/svelte.config.js | 5 + tests/browser/tsconfig.json | 23 + tests/browser/vite.config.ts | 8 + tests/ssr/index.html | 13 + tests/ssr/server.mjs | 52 + tests/ssr/src/App.svelte | 124 ++ tests/ssr/src/entry-client.ts | 4 + tests/ssr/src/entry-server.ts | 6 + tests/ssr/svelte.config.js | 5 + tests/ssr/tsconfig.json | 22 + tests/ssr/vite.config.ts | 9 + tests/unit/collection.test.ts | 70 + tests/unit/dialog-lifecycle.test.ts | 258 +++ tests/unit/floating-position.test.ts | 239 +++ tests/unit/npm-pack.test.ts | 24 + tests/unit/overlay.test.ts | 52 + tests/unit/popover.test.ts | 51 + tests/unit/reference-utils.test.ts | 45 + tests/unit/roving-focus.test.ts | 57 + tests/unit/select-state.test.ts | 33 + tests/unit/timing.test.ts | 93 + tests/unit/typeahead.test.ts | 107 ++ vitest.config.ts | 25 + 209 files changed, 11677 insertions(+), 724 deletions(-) create mode 100644 .changeset/bright-tokens-rise.md create mode 100644 .changeset/calm-forms-act.md create mode 100644 .changeset/clear-directions-hold.md create mode 100644 .changeset/focused-collections-roam.md create mode 100644 .changeset/locale-numbers-flow.md create mode 100644 .changeset/localized-copy-fits.md create mode 100644 .changeset/quick-options-cycle.md create mode 100644 .changeset/quiet-floating-edges-align.md create mode 100644 .changeset/steady-overlays-lock.md create mode 100644 .changeset/tactile-targets-rest.md create mode 100644 .github/CODEOWNERS create mode 100644 .github/ISSUE_TEMPLATE/accessibility.md create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/config.yml create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md create mode 100644 .github/ISSUE_TEMPLATE/release_review.md create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 .github/workflows/compatibility.yml create mode 100644 .github/workflows/release.yml create mode 100644 DEVELOPMENT_PLAN.md create mode 100644 SECURITY.md create mode 100644 apps/docs/DESIGN_STANDARD.md create mode 100644 apps/docs/src/lib/ComponentPreview.svelte create mode 100644 apps/docs/src/lib/reference-utils.ts create mode 100644 apps/docs/src/lib/reference.ts create mode 100644 docs/ADOPTION_MATRIX.md create mode 100644 docs/PERFORMANCE.md create mode 100644 docs/RC_READINESS.md create mode 100644 docs/RELEASE_RUNBOOK.md create mode 100644 docs/SCREEN_READER_AUDIT.md create mode 100644 docs/SUPPORT_MATRIX.md create mode 100644 docs/adr/0001-token-layers.md create mode 100644 docs/adr/0002-overlay-focus-infrastructure.md create mode 100644 docs/component-style-literal-baseline.json create mode 100644 docs/package-size-baseline.json create mode 100644 docs/support-policy.json create mode 100644 packages/webaseui-core/CHANGELOG.md create mode 100644 packages/webaseui-core/LICENSE create mode 100644 packages/webaseui-core/src/brand-theme.css create mode 100644 packages/webaseui-svelte/API_CONTRACT.md create mode 100644 packages/webaseui-svelte/LICENSE create mode 100644 packages/webaseui-svelte/src/lib/internal/dialog-lifecycle.ts create mode 100644 packages/webaseui-svelte/src/lib/internal/floating-position.ts create mode 100644 packages/webaseui-svelte/src/lib/internal/overlay.ts create mode 100644 packages/webaseui-svelte/src/lib/internal/popover.ts create mode 100644 packages/webaseui-svelte/src/lib/internal/roving-focus.ts create mode 100644 packages/webaseui-svelte/src/lib/internal/select-state.ts create mode 100644 packages/webaseui-svelte/src/lib/internal/timing.ts create mode 100644 packages/webaseui-svelte/src/lib/internal/typeahead.ts create mode 100644 packages/webaseui-svelte/src/lib/types.ts create mode 100644 packages/webaseui-svelte/src/lib/utils/collection.ts create mode 100644 playwright.config.ts create mode 100644 scripts/check-api-contract.mjs create mode 100644 scripts/check-changeset.mjs create mode 100644 scripts/check-docs-design.mjs create mode 100644 scripts/check-package-size.mjs create mode 100644 scripts/check-support-policy.mjs create mode 100644 scripts/check-token-contrast.mjs create mode 100644 scripts/check-tokens.mjs create mode 100644 scripts/check-visual-baselines.mjs create mode 100644 scripts/deploy-docs.mjs create mode 100644 scripts/lib/npm-pack.mjs create mode 100644 scripts/registry-smoke.mjs create mode 100644 scripts/release-channel.mjs create mode 100644 static/apple-touch-icon.png create mode 100644 static/favicon-16x16.png create mode 100644 static/favicon-32x32.png create mode 100644 static/favicon-48x48.png create mode 100644 static/favicon.ico create mode 100644 static/icon-192.png create mode 100644 static/icon-512.png create mode 100644 static/icon-maskable-512.png create mode 100644 static/logo.svg create mode 100644 static/robots.txt create mode 100644 static/site.webmanifest create mode 100644 tests/browser/fixture/index.html create mode 100644 tests/browser/fixture/src/App.svelte create mode 100644 tests/browser/fixture/src/VisualStates.svelte create mode 100644 tests/browser/fixture/src/main.ts create mode 100644 tests/browser/specs/components.spec.ts create mode 100644 tests/browser/specs/docs.spec.ts create mode 100644 tests/browser/specs/ssr.spec.ts create mode 100644 tests/browser/specs/visual-cases.ts create mode 100644 tests/browser/specs/visual.spec.ts create mode 100644 tests/browser/specs/visual.spec.ts-snapshots/accordion-hover-visual-chromium-darwin.png create mode 100644 tests/browser/specs/visual.spec.ts-snapshots/accordion-light-visual-chromium-darwin.png create mode 100644 tests/browser/specs/visual.spec.ts-snapshots/action-state-matrix-visual-chromium-darwin.png create mode 100644 tests/browser/specs/visual.spec.ts-snapshots/alert-light-visual-chromium-darwin.png create mode 100644 tests/browser/specs/visual.spec.ts-snapshots/badge-light-visual-chromium-darwin.png create mode 100644 tests/browser/specs/visual.spec.ts-snapshots/brand-theme-visual-chromium-darwin.png create mode 100644 tests/browser/specs/visual.spec.ts-snapshots/breadcrumbs-light-visual-chromium-darwin.png create mode 100644 tests/browser/specs/visual.spec.ts-snapshots/button-dark-visual-chromium-darwin.png create mode 100644 tests/browser/specs/visual.spec.ts-snapshots/button-focus-visual-chromium-darwin.png create mode 100644 tests/browser/specs/visual.spec.ts-snapshots/button-light-visual-chromium-darwin.png create mode 100644 tests/browser/specs/visual.spec.ts-snapshots/card-light-visual-chromium-darwin.png create mode 100644 tests/browser/specs/visual.spec.ts-snapshots/check-light-visual-chromium-darwin.png create mode 100644 tests/browser/specs/visual.spec.ts-snapshots/dialog-light-visual-chromium-darwin.png create mode 100644 tests/browser/specs/visual.spec.ts-snapshots/dialog-open-visual-chromium-darwin.png create mode 100644 tests/browser/specs/visual.spec.ts-snapshots/divider-light-visual-chromium-darwin.png create mode 100644 tests/browser/specs/visual.spec.ts-snapshots/emptystate-light-visual-chromium-darwin.png create mode 100644 tests/browser/specs/visual.spec.ts-snapshots/feedback-tone-state-matrix-visual-chromium-darwin.png create mode 100644 tests/browser/specs/visual.spec.ts-snapshots/field-light-visual-chromium-darwin.png create mode 100644 tests/browser/specs/visual.spec.ts-snapshots/floating-select-collision-visual-chromium-darwin.png create mode 100644 tests/browser/specs/visual.spec.ts-snapshots/floating-tooltip-collision-visual-chromium-darwin.png create mode 100644 tests/browser/specs/visual.spec.ts-snapshots/forced-colors-fixture-visual-chromium-darwin.png create mode 100644 tests/browser/specs/visual.spec.ts-snapshots/form-disabled-state-matrix-visual-chromium-darwin.png create mode 100644 tests/browser/specs/visual.spec.ts-snapshots/form-error-state-matrix-visual-chromium-darwin.png create mode 100644 tests/browser/specs/visual.spec.ts-snapshots/icon-light-visual-chromium-darwin.png create mode 100644 tests/browser/specs/visual.spec.ts-snapshots/iconbutton-light-visual-chromium-darwin.png create mode 100644 tests/browser/specs/visual.spec.ts-snapshots/link-light-visual-chromium-darwin.png create mode 100644 tests/browser/specs/visual.spec.ts-snapshots/loader-light-visual-chromium-darwin.png create mode 100644 tests/browser/specs/visual.spec.ts-snapshots/localized-copy-zoom-visual-chromium-darwin.png create mode 100644 tests/browser/specs/visual.spec.ts-snapshots/navigation-state-matrix-visual-chromium-darwin.png create mode 100644 tests/browser/specs/visual.spec.ts-snapshots/pagination-light-visual-chromium-darwin.png create mode 100644 tests/browser/specs/visual.spec.ts-snapshots/progress-light-visual-chromium-darwin.png create mode 100644 tests/browser/specs/visual.spec.ts-snapshots/radio-light-visual-chromium-darwin.png create mode 100644 tests/browser/specs/visual.spec.ts-snapshots/rtl-floating-visual-chromium-darwin.png create mode 100644 tests/browser/specs/visual.spec.ts-snapshots/sectionheader-light-visual-chromium-darwin.png create mode 100644 tests/browser/specs/visual.spec.ts-snapshots/select-light-visual-chromium-darwin.png create mode 100644 tests/browser/specs/visual.spec.ts-snapshots/select-mobile-visual-chromium-darwin.png create mode 100644 tests/browser/specs/visual.spec.ts-snapshots/select-open-visual-chromium-darwin.png create mode 100644 tests/browser/specs/visual.spec.ts-snapshots/selection-disabled-state-matrix-visual-chromium-darwin.png create mode 100644 tests/browser/specs/visual.spec.ts-snapshots/skeleton-light-visual-chromium-darwin.png create mode 100644 tests/browser/specs/visual.spec.ts-snapshots/slider-light-visual-chromium-darwin.png create mode 100644 tests/browser/specs/visual.spec.ts-snapshots/switch-light-visual-chromium-darwin.png create mode 100644 tests/browser/specs/visual.spec.ts-snapshots/tabs-hover-visual-chromium-darwin.png create mode 100644 tests/browser/specs/visual.spec.ts-snapshots/tabs-light-visual-chromium-darwin.png create mode 100644 tests/browser/specs/visual.spec.ts-snapshots/tag-light-visual-chromium-darwin.png create mode 100644 tests/browser/specs/visual.spec.ts-snapshots/textarea-light-visual-chromium-darwin.png create mode 100644 tests/browser/specs/visual.spec.ts-snapshots/toast-light-visual-chromium-darwin.png create mode 100644 tests/browser/specs/visual.spec.ts-snapshots/toast-open-visual-chromium-darwin.png create mode 100644 tests/browser/specs/visual.spec.ts-snapshots/tooltip-focus-visual-chromium-darwin.png create mode 100644 tests/browser/specs/visual.spec.ts-snapshots/tooltip-light-visual-chromium-darwin.png create mode 100644 tests/browser/svelte.config.js create mode 100644 tests/browser/tsconfig.json create mode 100644 tests/browser/vite.config.ts create mode 100644 tests/ssr/index.html create mode 100644 tests/ssr/server.mjs create mode 100644 tests/ssr/src/App.svelte create mode 100644 tests/ssr/src/entry-client.ts create mode 100644 tests/ssr/src/entry-server.ts create mode 100644 tests/ssr/svelte.config.js create mode 100644 tests/ssr/tsconfig.json create mode 100644 tests/ssr/vite.config.ts create mode 100644 tests/unit/collection.test.ts create mode 100644 tests/unit/dialog-lifecycle.test.ts create mode 100644 tests/unit/floating-position.test.ts create mode 100644 tests/unit/npm-pack.test.ts create mode 100644 tests/unit/overlay.test.ts create mode 100644 tests/unit/popover.test.ts create mode 100644 tests/unit/reference-utils.test.ts create mode 100644 tests/unit/roving-focus.test.ts create mode 100644 tests/unit/select-state.test.ts create mode 100644 tests/unit/timing.test.ts create mode 100644 tests/unit/typeahead.test.ts create mode 100644 vitest.config.ts diff --git a/.changeset/README.md b/.changeset/README.md index 5149d32..2e0343c 100644 --- a/.changeset/README.md +++ b/.changeset/README.md @@ -7,5 +7,15 @@ npm run changeset ``` Select only packages whose published contract changes. Documentation-only site -changes do not need a changeset. Package publishing remains disabled until the -standalone WeBaseUI repository and registry credentials are configured. +changes do not need a changeset. Pull requests that change publishable package +files are checked automatically, and releases publish the resulting versions to npm. + +The `Release` workflow creates or updates the release PR on `main`. After that PR +is merged, the same workflow versions packages and synchronizes `package-lock.json`, +then publishes both packages with npm trusted publishing, +OIDC, and provenance enabled, then installs the published versions in the registry +smoke fixture. The stable action uses `commitMode: github-api`, so it does not +depend on persisted checkout credentials. `workflow_dispatch` supports `next` +and `canary` pre-release tags; pre-release publication never runs from a local +shell. The exact npm trusted-publisher setup and provenance verification steps +live in [`docs/RELEASE_RUNBOOK.md`](../docs/RELEASE_RUNBOOK.md). diff --git a/.changeset/bright-tokens-rise.md b/.changeset/bright-tokens-rise.md new file mode 100644 index 0000000..8e974ae --- /dev/null +++ b/.changeset/bright-tokens-rise.md @@ -0,0 +1,14 @@ +--- +"@webaseui/core": minor +"@webaseui/svelte": patch +--- + +Add a documented three-layer token contract for palette, semantic, and +component values, then migrate form, choice, overlay, feedback, navigation, +selection, and action styles to shared geometry and motion tokens without +changing their rendered defaults. Accordion, Card, Divider, EmptyState, +SectionHeader, and Skeleton presentation values use the same contract. Add an +exact per-component declaration budget and separately audited media-query list +so future hardcoded-value growth requires explicit review. Tighten the example +brand theme's muted ink and hover brand colors so normal text combinations meet +WCAG 2.2 contrast requirements. diff --git a/.changeset/calm-forms-act.md b/.changeset/calm-forms-act.md new file mode 100644 index 0000000..6fb7942 --- /dev/null +++ b/.changeset/calm-forms-act.md @@ -0,0 +1,6 @@ +--- +"@webaseui/core": patch +"@webaseui/svelte": minor +--- + +Include package license files, add native form-control props and Select form participation, and make Dialog, Card, and EmptyState actions explicitly actionable. diff --git a/.changeset/clear-directions-hold.md b/.changeset/clear-directions-hold.md new file mode 100644 index 0000000..868f438 --- /dev/null +++ b/.changeset/clear-directions-hold.md @@ -0,0 +1,10 @@ +--- +"@webaseui/core": patch +"@webaseui/svelte": patch +--- + +Map semantic tokens to system colors in forced-colors mode so component +surfaces, borders, focus rings, and state colors remain distinguishable. Make +direction-sensitive component layout use logical properties, align Select and +Tooltip floating content from the anchor's inherited direction, and reverse +Tabs horizontal arrow semantics in RTL. diff --git a/.changeset/focused-collections-roam.md b/.changeset/focused-collections-roam.md new file mode 100644 index 0000000..666d942 --- /dev/null +++ b/.changeset/focused-collections-roam.md @@ -0,0 +1,7 @@ +--- +"@webaseui/svelte": patch +--- + +Unify Tabs and Accordion keyboard navigation through a tested internal roving +focus helper, preserving wrapping and Home/End behavior while normalizing +state against the latest dynamic collection. diff --git a/.changeset/locale-numbers-flow.md b/.changeset/locale-numbers-flow.md new file mode 100644 index 0000000..a6f9839 --- /dev/null +++ b/.changeset/locale-numbers-flow.md @@ -0,0 +1,7 @@ +--- +"@webaseui/svelte": minor +--- + +Add consumer-controlled numeric formatting callbacks to Accordion, Pagination, +Progress, Slider, and Textarea. Existing visual defaults remain unchanged while +localized consumers can use Intl.NumberFormat or domain-specific notation. diff --git a/.changeset/localized-copy-fits.md b/.changeset/localized-copy-fits.md new file mode 100644 index 0000000..440b294 --- /dev/null +++ b/.changeset/localized-copy-fits.md @@ -0,0 +1,7 @@ +--- +"@webaseui/svelte": patch +--- + +Expose the EmptyState kicker as a localization prop and make long labels wrap +inside alerts, empty states, tabs, form labels, links, and card actions. Mirror +directional action icons and slider progress in RTL. diff --git a/.changeset/quick-options-cycle.md b/.changeset/quick-options-cycle.md new file mode 100644 index 0000000..de716bb --- /dev/null +++ b/.changeset/quick-options-cycle.md @@ -0,0 +1,7 @@ +--- +"@webaseui/svelte": patch +--- + +Make Select typeahead refine multi-character queries, cycle repeated-character +matches, skip disabled options, and clean up its reset timer through a reusable +internal controller. diff --git a/.changeset/quiet-floating-edges-align.md b/.changeset/quiet-floating-edges-align.md new file mode 100644 index 0000000..1f010d0 --- /dev/null +++ b/.changeset/quiet-floating-edges-align.md @@ -0,0 +1,8 @@ +--- +"@webaseui/svelte": patch +--- + +Share manual-popover synchronization and collision-aware floating positioning +between Select and Tooltip. Overlays now flip and shift within the visual +viewport, follow nested scrolling and resize changes, keep Select trigger width, +and retain a fixed-position fallback when the Popover API is unavailable. diff --git a/.changeset/steady-overlays-lock.md b/.changeset/steady-overlays-lock.md new file mode 100644 index 0000000..0e38304 --- /dev/null +++ b/.changeset/steady-overlays-lock.md @@ -0,0 +1,7 @@ +--- +"@webaseui/svelte": patch +--- + +Make Dialog body scroll locking safe for nested overlays, restore opener focus +consistently across Chromium, Firefox, and WebKit, and reuse a shared, +cleaned-up pointer-outside listener for Select dismissal. diff --git a/.changeset/tactile-targets-rest.md b/.changeset/tactile-targets-rest.md new file mode 100644 index 0000000..6750c21 --- /dev/null +++ b/.changeset/tactile-targets-rest.md @@ -0,0 +1,8 @@ +--- +"@webaseui/core": minor +"@webaseui/svelte": patch +--- + +Add a public minimum interactive target token, reduced-motion coverage for +Field and Pagination, touch-safe hover behavior, and 24px hit areas for +choice controls, sliders, navigation links, breadcrumbs, and card actions. diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 0000000..4e26fd7 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1,7 @@ +# Default review responsibility for the design-system repository. +* @willxue + +# Package and release changes need the repository maintainer's review. +/packages/ @willxue +/.github/ @willxue +/DEVELOPMENT_PLAN.md @willxue diff --git a/.github/ISSUE_TEMPLATE/accessibility.md b/.github/ISSUE_TEMPLATE/accessibility.md new file mode 100644 index 0000000..acf744e --- /dev/null +++ b/.github/ISSUE_TEMPLATE/accessibility.md @@ -0,0 +1,27 @@ +--- +name: Accessibility issue +about: Report an accessibility barrier or propose an accessibility improvement +title: "[a11y] " +labels: "accessibility" +assignees: "" +--- + +## Barrier + +Describe what prevents access or makes the interaction unclear. + +## Affected surface + +- Component or documentation route: +- Package and version: +- Assistive technology, browser, and operating system: +- Input mode (keyboard, touch, pointer, voice, or screen reader): + +## Reproduction and expected behavior + +Provide steps, the current announcement or focus result, and the expected +result based on the relevant WAI-ARIA pattern or WCAG criterion. + +## Evidence + + diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..eed6639 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,27 @@ +--- +name: Bug report +about: Report a reproducible problem in a published component or the documentation +title: "" +labels: "bug" +assignees: "" +--- + +## What happened? + +Describe the observed behavior and the expected behavior. + +## Reproduction + +- Package and version: +- Svelte, Node, browser, and operating system: +- Minimal reproduction or repository: +- Steps to reproduce: + +## Accessibility and compatibility + +- Does this affect keyboard, focus, screen-reader, reduced-motion, RTL, forced-colors, touch, or zoom behavior? +- Which browser engines reproduce it? + +## Evidence + + diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..3b81cc7 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,5 @@ +blank_issues_enabled: false +contact_links: + - name: Report a security vulnerability + url: https://github.com/WeOpen/WeBaseUI/security/advisories/new + about: Use GitHub private vulnerability reporting. Do not disclose security issues publicly. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000..4b2af35 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,30 @@ +--- +name: Component or API proposal +about: Propose a user-facing capability with a concrete consumer need +title: "" +labels: "enhancement" +assignees: "" +--- + +## Consumer problem + +Which application workflow is blocked, and who is affected? + +## Proposed API + +Describe the component, props, events, snippets, native attributes, and token +surface. Include a small usage example when possible. + +## Alternatives and scope + +What existing component or composition was considered? What is explicitly out +of scope for the first version? + +## Quality and maintenance + +- Keyboard and ARIA pattern: +- Reduced-motion and equivalent-input behavior: +- RTL, forced-colors, and localization considerations: +- SSR/hydration considerations: +- Expected package-size or dependency impact: +- Is a Changeset and migration note required? diff --git a/.github/ISSUE_TEMPLATE/release_review.md b/.github/ISSUE_TEMPLATE/release_review.md new file mode 100644 index 0000000..a5a0202 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/release_review.md @@ -0,0 +1,43 @@ +--- +name: Minor release review +about: Record adoption, defects, accessibility, compatibility, and package-size evidence after a minor release +title: "[release review] " +labels: "release" +assignees: "" +--- + +## Release identity + +- Package versions: +- Release commit and workflow run: +- npm provenance attestations: +- Registry smoke result: + +## Quality evidence + +- Blocking CI, browser, visual, SSR/hydration, consumer, audit, and size runs: +- Manual VoiceOver/Safari audit record: +- Manual NVDA/Firefox or Chrome audit record: +- Open P0 defects: +- Open P1 defects: + +## Adoption review + +- External consumers checked or upgraded: +- API escape hatches or component bypasses: +- Theme overrides that required copied component CSS: +- SSR, hydration, routing, or form-integration issues: +- Missing capability backed by a real workflow: + +## Performance and compatibility + +- Package and consumer bundle changes from the previous baseline: +- Changes above the 5% review threshold and rationale: +- Weekly Node, Svelte, TypeScript, Vite, and browser warnings: +- Dependency additions, removals, or license changes: + +## Follow-up + +List each accepted action with an owner and target milestone. Link rejected or +deferred requests to the API, accessibility, maintenance-cost, or consumer +evidence that supports the decision. diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..2286e91 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,17 @@ +## Change summary + + + +## Quality gate + +- [ ] Public API, native attribute forwarding, and controlled/bindable state are unchanged or documented. +- [ ] Keyboard, focus, screen-reader, reduced-motion, and equivalent-input behavior were checked for affected components. +- [ ] Tests cover the changed behavior at the appropriate unit, browser, SSR, or visual layer. +- [ ] Documentation and migration notes are updated when the public contract changes. +- [ ] A Changeset is included for published package changes, or the omission is intentional and explained. +- [ ] Package-size and visual-baseline changes are reviewed and explained. +- [ ] `npm run check`, `npm run check:consumer`, and relevant browser/visual checks pass. + +## Verification notes + + diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 366acf5..28282ca 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -22,11 +22,62 @@ jobs: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false + fetch-depth: 0 - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: node-version: 22.13 cache: npm - run: npm ci + - run: npm run check:changeset - run: npm audit --audit-level=high - run: npm run check - run: npm run check:consumer + + browser: + runs-on: ubuntu-latest + timeout-minutes: 15 + strategy: + fail-fast: false + matrix: + browser: + - chromium + - firefox + - webkit + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 + with: + node-version: 22.13 + cache: npm + - run: npm ci + - run: npx playwright install --with-deps ${{ matrix.browser }} + - run: npm run test:browser:project -- --project=${{ matrix.browser }} + - if: failure() + uses: actions/upload-artifact@v4 + with: + name: playwright-${{ matrix.browser }} + path: test-results + retention-days: 7 + + visual: + runs-on: macos-14 + timeout-minutes: 15 + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 + with: + node-version: 22.13 + cache: npm + - run: npm ci + - run: npx playwright install chromium + - run: npm run test:visual + - if: failure() + uses: actions/upload-artifact@v4 + with: + name: playwright-visual + path: test-results + retention-days: 7 diff --git a/.github/workflows/compatibility.yml b/.github/workflows/compatibility.yml new file mode 100644 index 0000000..f461c19 --- /dev/null +++ b/.github/workflows/compatibility.yml @@ -0,0 +1,62 @@ +name: Compatibility warning + +on: + schedule: + - cron: '17 3 * * 1' + workflow_dispatch: + +permissions: + contents: read + +concurrency: + group: compatibility-${{ github.ref }} + cancel-in-progress: true + +jobs: + node-current-lts: + runs-on: ubuntu-latest + timeout-minutes: 20 + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 + with: + node-version: 24 + cache: npm + - run: npm ci + - run: npm run check + - run: npm run check:consumer + + ecosystem-latest: + continue-on-error: true + runs-on: ubuntu-latest + timeout-minutes: 15 + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 + with: + node-version: 24 + cache: npm + - run: npm ci + - run: npm run build + - run: node scripts/test-webaseui-consumer.mjs --include-latest + + browser-latest: + continue-on-error: true + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 + with: + node-version: 24 + cache: npm + - run: npm ci + - run: npm install --no-save @playwright/test@latest + - run: npx playwright install --with-deps chromium firefox webkit + - run: npm run test:browser diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..59e4a0d --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,122 @@ +name: Release + +on: + push: + branches: + - main + workflow_dispatch: + inputs: + channel: + description: Release channel + required: true + default: stable + type: choice + options: + - stable + - next + - canary + +permissions: + contents: read + +concurrency: + group: release-${{ github.ref }} + cancel-in-progress: false + +jobs: + quality: + if: github.event_name == 'push' || inputs.channel != '' + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 + with: + node-version: 22.13 + cache: npm + - run: npm ci + - run: npx playwright install --with-deps chromium firefox webkit + - run: npm run check:changeset + - run: npm audit --audit-level=high + - run: npm run check + - run: npm run check:consumer + - run: npm run test:browser + + visual: + if: github.event_name == 'push' || inputs.channel != '' + needs: quality + runs-on: macos-14 + timeout-minutes: 20 + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 + with: + node-version: 22.13 + cache: npm + - run: npm ci + - run: npx playwright install chromium + - run: npm run test:visual + + stable: + if: github.event_name == 'push' || inputs.channel == 'stable' + needs: [quality, visual] + runs-on: ubuntu-latest + timeout-minutes: 15 + permissions: + contents: write + pull-requests: write + id-token: write + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + fetch-depth: 0 + - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 + with: + node-version: 22.13 + cache: npm + - run: npm ci + - run: npm install --global npm@11.5.1 + - id: release + uses: changesets/action@52025003bf4794281597cb5b5e566485d9473389 # v1.5.0 + with: + version: npm run version-packages + publish: npm run release:ci + title: 'chore: release packages' + commit: 'chore: release packages' + commitMode: github-api + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + NPM_CONFIG_PROVENANCE: true + NPM_CONFIG_ACCESS: public + - if: steps.release.outputs.published == 'true' + run: npm run check:registry -- --tag=latest --require-provenance + + prerelease: + if: github.event_name == 'workflow_dispatch' && inputs.channel != 'stable' + needs: [quality, visual] + runs-on: ubuntu-latest + timeout-minutes: 20 + permissions: + contents: read + id-token: write + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 + with: + node-version: 22.13 + cache: npm + - run: npm ci + - run: npm install --global npm@11.5.1 + - run: node scripts/release-channel.mjs "${{ inputs.channel }}" --publish + env: + CI: true + NPM_CONFIG_PROVENANCE: true + NPM_CONFIG_ACCESS: public + - run: npm run check:registry -- --tag=${{ inputs.channel }} --require-provenance diff --git a/.gitignore b/.gitignore index 5659d18..228fbbe 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,9 @@ node_modules/ dist/ .svelte-kit/ +playwright-report/ +test-results/ +coverage/ .DS_Store *.log *.tgz diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 07e8a8b..cd319e8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -7,7 +7,31 @@ Before opening a pull request: ```sh npm run check npm run check:consumer +npm run test:unit +npm run test:browser +npm run test:visual +npm run check:size +npm run check:support +npm run check:changeset npm audit --audit-level=high ``` +The unit command includes the repository's 90% V8 coverage gate for core state utilities. Coverage drops fail locally and in CI through `npm run check`. + +Visual baselines live beside the Playwright visual spec. Review intentional design changes before running `npm run test:visual:update`, then include the updated PNG files in the same pull request as the component change. + Add a Changeset for changes that affect a published package. Documentation-only and repository-maintenance changes do not require one. + +Stable releases are prepared and published by `.github/workflows/release.yml`. +Do not run `npm publish` locally. Use the workflow's manual `next` or `canary` +channel only when a pre-release is needed; it uses OIDC trusted publishing and +finishes with a registry install/build smoke test that requires SLSA provenance. + +The default review owner is recorded in `.github/CODEOWNERS`. Public API, +token, accessibility, release, and support-policy changes require that review +or an explicitly documented maintainer handoff. + +Every release candidate also requires the two manual assistive-technology passes +in `docs/SCREEN_READER_AUDIT.md`. After each minor release, open a release review +from the repository issue template and record adoption, P0/P1 defects, package +size, compatibility warnings, and follow-up ownership. diff --git a/DEVELOPMENT_PLAN.md b/DEVELOPMENT_PLAN.md new file mode 100644 index 0000000..6004274 --- /dev/null +++ b/DEVELOPMENT_PLAN.md @@ -0,0 +1,545 @@ +# WeBaseUI 成熟化开发计划 + +> 状态:In progress +> +> 基线日期:2026-08-06 +> 适用范围:`@webaseui/core`、`@webaseui/svelte`、文档站、测试与发布工具链 + +## 执行进度 + +截至 2026-08-17,0.4 的公共 API 契约、跨浏览器行为、SSR/水合、自动无障碍和组件参考基线已完成。0.5 的三层 Token、全部 28 个公开组件迁移、契约校验、ADR、品牌主题、主题示例和视觉回归已完成;组件声明中的直接 `px/em/rem/ms/s/deg` 字面量精确预算从本轮开始时的 281 降至 0,三个无法使用 CSS 变量的响应式断点单独受 CI 清单约束。视觉回归共 49 张基线,覆盖 28 个 light specimen、dark/brand/mobile 代表场景、focus/open/hover/disabled/error/loading、Select/Tooltip viewport collision、RTL/forced-colors,以及 CJK/阿拉伯语/伪本地化 200% 重排。包体积基线已接入 5% 增长门槛;Vitest 对每个核心状态工具执行 90% V8 覆盖率门槛。0.6 的 overlay/focus 前置切片已完成,Dialog、Select 和 Tooltip 复用内部基础设施。0.7.1/0.7.2 已覆盖 RTL、forced-colors、长文本/数字本地化、reduced-motion、coarse pointer 和 24px 最小目标尺寸,并由三浏览器、axe 和视觉基线验证。0.7.3 已建立 Changesets release PR、trusted publishing/OIDC、stable/next/canary channel 和 registry smoke;真实 npm trust policy 与首次 OIDC 发布仍需在外部仓库/npm 设置中完成。0.7.4 已完成 xue 的 `0.2.0 → 0.3.2` 升级演练、Fig 正式 registry 内容站试用和外部 CRUD 候选 tarball 表单 action 试用,覆盖内容/导航与表单/CRUD 两种画像。1.0 RC 的 Node/Svelte/TypeScript/浏览器支持窗口、security、PR/issue/CODEOWNERS、发布复盘模板和人工屏幕阅读器审计矩阵已经落地;实际 VoiceOver/NVDA 审计仍待执行。 + +## 1. 目标 + +WeBaseUI 已经具备一个可发布组件库的基本形态,但距离可以长期维护、稳定升级并被多个真实项目采用的成熟组件库,还需要补齐公共契约、无障碍、测试矩阵、主题扩展、文档、发布自动化和治理体系。 + +本计划的目标不是单纯增加组件数量,而是让每一个公开组件都满足以下标准: + +- API 一致、可组合、可升级,并有明确的兼容性边界; +- 满足 WCAG 2.2 AA 和对应 WAI-ARIA APG 交互模式; +- 在服务端渲染、客户端水合、键盘、触摸和主流浏览器中行为一致; +- 有完整的组件参考、示例、主题说明和迁移指引; +- 发布过程可重复、可审计,包体积和依赖变化可被发现; +- 新组件不会绕过统一的设计、测试和发布门槛。 + +规划里程碑以 `@webaseui/svelte` 版本为主要标记。`@webaseui/core` 继续独立版本化,不要求两个包同步升级。 + +## 2. 当前基线 + +截至基线日期,仓库已经具备: + +- `@webaseui/core`:框架无关的 CSS token 和浅色、深色主题; +- `@webaseui/svelte`:28 个 Svelte 5 组件以及包根级 Props 类型导出; +- Svelte 5.20 最低版本和当前版本两套消费者打包验证; +- Changesets、语义化版本和弃用策略; +- 类型检查、文档构建、包内容检查、tree-shaking 检查和 npm audit; +- 基于 Playwright 的 Chromium、Firefox、WebKit 行为测试、SSR/水合 fixture 和 46 组视觉基准; +- `docs/package-size-baseline.json` 记录 core/svelte tarball、组件源文件和真实消费者 bundle 的 gzip 基线; +- 独立文档应用和 Cloudflare Pages 部署保护; +- 表单原生属性透传、Dialog、Select 等关键交互的浏览器级验证。 + +现阶段的主要缺口如下: + +| 领域 | 当前状态 | 主要风险 | 优先级 | +| --- | --- | --- | --- | +| 公共 API | 已有 Props 类型和版本策略,但缺少统一 API 规范与逐组件契约清单 | 组件之间命名、事件、受控状态和组合方式逐渐分叉 | P0 | +| 无障碍 | 源码已有 ARIA、键盘和 reduced-motion 处理,但没有自动化审计和人工测试矩阵 | 回归无法在合并前稳定发现 | P0 | +| 测试 | 已有 Vitest 纯函数层、三浏览器、SSR/水合、axe,以及覆盖关键交互类别的 46 组视觉基准 | 计时器和更多复杂组件状态边界仍主要依赖浏览器测试发现 | P0 | +| 文档 | 文档站是单页目录和部分示例,没有逐组件 API 参考 | 使用者需要读源码才能确认 props、默认值和交互 | P0 | +| Token 与主题 | 已有颜色、字体、阴影和动效变量,组件内仍存在大量硬编码尺寸 | 自定义主题、密度和品牌扩展成本高 | P1 | +| 组件架构 | Select 等复杂组件独立承担行为逻辑,缺少共享 overlay、focus、dismiss 基础设施 | 新增 Menu、Popover、Combobox 时重复实现高风险逻辑 | P1 | +| 发布 | 有本地发布命令和 Changeset 检查,没有自动化 npm 发布和发布后验证 | 人工操作容易遗漏 provenance、tag 或烟雾测试 | P1 | +| 兼容性 | 已验证 Svelte 最低/当前版本,没有正式浏览器、Node、SSR 和 TypeScript 支持策略 | 用户无法判断升级和运行环境边界 | P1 | +| 治理 | 有贡献说明,缺少组件准入标准、RFC/ADR、维护责任和安全策略 | 组件数量增长后质量和决策难以保持一致 | P2 | + +## 3. 成熟度原则 + +后续工作遵循以下顺序: + +```text +公共契约与质量门槛 + ↓ +文档、主题与共享行为基础设施 + ↓ +关键组件能力补齐 + ↓ +真实消费者验证与生态扩展 + ↓ +1.0 稳定承诺 +``` + +### 3.1 先稳定契约,再扩展框架 + +React 适配器不是 Svelte 1.0 的前置条件。应先稳定框架无关 token、组件行为规范、无障碍规则和测试用例,再评估 `@webaseui/react`。否则会复制尚未稳定的 API,并使修复成本翻倍。 + +### 3.2 复杂组件先建设共享能力 + +Popover、Menu、Combobox、Drawer 等组件依赖相同的浮层、焦点、关闭、滚动锁定和层级管理。共享基础设施未完成前,不批量新增复杂浮层组件。 + +### 3.3 文档是公共契约的一部分 + +公开 props、默认值、事件、绑定、键盘行为、ARIA 关系、token 和迁移方式都必须在文档中可查。未文档化的行为不得作为稳定 API 承诺。 + +## 4. 路线图总览 + +| 里程碑 | 主题 | 建议周期 | 结果 | +| --- | --- | --- | --- | +| 0.4 | 契约与可信质量基线 | 2–3 周 | API 规则、自动无障碍、跨浏览器、SSR/水合和发布门槛成型 | +| 0.5 | 文档与主题系统 | 3–4 周 | 每个组件有完整参考,token 可扩展,视觉回归进入 CI | +| 0.6 | 关键能力补齐 | 4–6 周 | 表单组合、overlay 基础设施和高频组件达到成熟定义 | +| 0.7 | 兼容性与采用验证 | 2–3 周 | 国际化、RTL、高对比度、真实消费者和发布自动化完成 | +| 1.0 RC | 稳定性审计 | 2 周 | 冻结公共契约,完成迁移、性能、安全和支持审计 | + +周期按 1 名主要维护者加 1 名评审者估算。若资源更少,应保持里程碑顺序,不通过降低验收标准来压缩周期。 + +## 5. 0.4:契约与可信质量基线 + +### 5.1 建立组件 API 规范 + +工作项: + +- 为所有公开组件建立 API 清单:props、默认值、绑定、事件、snippet、根元素和原生属性透传; +- 统一命名规范,包括 `open`、`value`、`selected`、`checked`、`disabled`、`loading`、`on*` 回调和原生事件; +- 定义受控、非受控和 `$bindable` 状态的行为,特别是外部传入非法值、表单 reset 和程序化更新; +- 定义字符串便利属性与 snippet 组合点的共存规则; +- 明确 root props 与 `inputProps`、`selectProps`、`textareaProps` 等内部原生元素 props 的优先级; +- 将可访问名称和界面文案全部设计为可覆盖 API,移除只能使用英文默认文案的公共限制; +- 为 Tabs、Accordion、Pagination 等集合组件定义空数组、越界索引、动态增删和重复值行为; +- 为公共 Props 添加 JSDoc,作为后续 API 文档生成来源。 + +验收标准: + +- 28 个公开组件全部进入 API 清单; +- 同类状态和事件不再出现无说明的命名差异; +- 每个可绑定 prop 至少有一条程序化更新测试; +- 每个表单控件验证提交、reset、required、disabled、name、form 关联和原生 change/input 行为; +- 不兼容调整均有 Changeset、迁移示例和至少一个版本的弃用窗口。 + +### 5.2 建立测试金字塔 + +实施进度(2026-08-16):已接入 `vitest run` 与 V8 coverage,并覆盖集合导航边界(含动态增删后的索引重算)、overlay 清理与嵌套滚动锁、文档契约解析、Toast 自动关闭的启动/暂停/恢复/取消计时边界、Select 受控值回退和 typeahead 匹配状态,以及 Dialog 受控状态与原生生命周期同步。计时、选择、Dialog 生命周期、roving focus 与 typeahead 已下沉为不公开的内部纯工具;核心状态工具的 statements、branches、functions、lines 均设 90% CI 门槛。Tabs 与 Accordion 复用同一套 Home/End、方向键、循环和动态集合边界;Select 复用独立的短时查询控制器,覆盖多字符细化、重复字符循环、disabled 跳过、动态集合与卸载清理。Playwright 同步验证真实 DOM 中的复合组件焦点移动、Tabs 自动激活、集合收缩和 Select 三浏览器键盘匹配;Toast 与 Dialog 的计时和跨浏览器焦点恢复继续由浏览器层验证。 + +工作项: + +- 引入 Vitest,覆盖纯函数、状态边界、计时器和复杂组件内部状态机; +- 保留 Playwright 作为真实浏览器交互验证,按组件而不是按历史 bug 组织测试; +- 为 Chromium、Firefox、WebKit 建立 CI 矩阵; +- 增加 SSR 渲染和客户端水合 fixture,阻止模块加载阶段访问 `window`、`document`; +- 增加最低 Svelte、当前 Svelte 和下一版本预警任务; +- 将失败 trace、截图和测试报告作为 CI artifact 保存。 + +测试优先级: + +1. Select、Dialog、Tabs、Accordion、Tooltip、Toast; +2. Field、Textarea、Check、Radio、Switch、Slider、Button; +3. Pagination、Breadcrumbs、Link、Tag; +4. Alert、Progress、Loader、Skeleton 和纯展示组件。 + +验收标准: + +- 所有交互组件至少覆盖鼠标、键盘和程序化状态更新; +- Chromium、Firefox、WebKit 在 CI 中全部通过; +- SSR 和水合过程无异常、无 ID 不一致、无 hydration warning; +- 最低支持版本的消费者 fixture 持续构建通过; +- 不以单纯代码覆盖率替代行为覆盖,但核心状态工具的分支覆盖率达到 90%。 + +### 5.3 建立自动无障碍门槛 + +工作项: + +- 在组件标准状态、disabled、error、loading、open 等状态接入 axe 自动扫描; +- 为复合组件建立 WAI-ARIA APG 键盘行为表; +- 验证焦点进入、循环、恢复和 Escape 关闭行为; +- 检查 200%/400% 缩放、触摸目标、可见焦点和横向溢出; +- 建立 VoiceOver + Safari、NVDA + Firefox/Chrome 的人工抽查表; +- 将无障碍行为纳入版本化公共契约。 + +验收标准: + +- 标准组件页面无 axe serious/critical 问题; +- 所有交互组件都有文档化键盘行为; +- Dialog 关闭后焦点可恢复,Tooltip 可用 Escape 消失,Toast 计时可暂停; +- 每个候选发布版本完成至少一轮屏幕阅读器抽查。 + +### 5.4 记录关键架构决策 + +实施进度(2026-08-08):已完成 token 分层 ADR 和 platform-first overlay/focus ADR。后者确定原生 `` top layer、引用计数滚动锁、共享 pointer-outside、内部 primitive 不公开,以及 Portal/floating position 按现有组件需求逐步引入的边界。 + +创建 ADR,至少覆盖: + +- 自研交互基础设施还是引入现有 Svelte headless primitives; +- 文档 API 元数据从源码、类型声明还是独立 schema 生成; +- token 分层和未来多主题的兼容策略; +- overlay portal、焦点管理和 z-index 的统一方案; +- React 适配器的启动条件,而不是启动日期。 + +## 6. 0.5:文档与主题系统 + +### 6.1 将文档站升级为组件参考 + +#### 文档站设计硬规则 + +文档站重构必须遵守以下规则,并将规则纳入设计评审与自动化检查: + +1. **图标系统**:界面图标统一使用 Lucide。优先通过 `WeBaseIcon` 和其他基于 Lucide 的 WeBaseUI 组件输出,禁止手写 SVG、混用其他图标库或使用 Unicode 符号代替图标。品牌 Logo 不属于界面图标,可继续使用 `logo.svg`。 +2. **零表情符号**:页面文案、按钮、导航、状态、代码示例和装饰元素中禁止使用表情符号。需要表达状态或动作时使用 Lucide 图标和明确文字。 +3. **设计品质**:视觉完成度对标 Awwwards、FWA、CSS Design Awards 的每日最佳网站。排版、构图、转场、交互反馈、响应式细节和内容节奏均按精品发布标准验收。 +4. **创意自由度**:将浏览器作为交互式艺术画布,允许使用非对称网格、实验性排版、滚动叙事、动态遮罩和物理反馈,但不得影响文档信息架构、搜索、复制代码和键盘操作。 +5. **沉浸式整体体验**:视觉、内容、组件演示和动效必须服务同一叙事,不拼贴孤立效果。高级渲染按需加载,并保持 SSR、性能和无障碍降级路径。 +6. **动效约束**:每个动画必须承担层级、叙事、反馈或状态转换职责;只动画 `transform` 和 `opacity`,完整支持 `prefers-reduced-motion`,禁止以持续滚动监听驱动框架状态。 +7. **质量优先**:先锋视觉不能覆盖组件本身。真实组件 specimen、API、可访问性和复制体验始终是页面主角。 + +建议设计参数:`DESIGN_VARIANCE: 9`、`MOTION_INTENSITY: 8`、`VISUAL_DENSITY: 4`。页面采用统一主题语言和单一主强调色,浅色与深色模式保持相同的信息层级。 + +每个组件页面至少包含: + +- 用途与不适用场景; +- 安装和最小示例; +- props、默认值、类型、绑定和事件; +- snippet、原生属性和表单集成方式; +- 所有视觉状态与主题状态; +- 键盘交互、ARIA 结构和屏幕阅读器注意事项; +- 常见错误、迁移说明和相关组件; +- 可复制且由 CI 编译的示例。 + +同时补充: + +- Getting Started; +- 主题定制指南; +- 表单集成指南; +- SSR/水合指南; +- 无障碍原则; +- 版本、弃用和升级指南; +- 组件选择指南,例如 Link 与 Button、Alert 与 Toast、Check 与 Switch 的区别; +- 全局搜索、侧边导航和移动端文档体验。 + +验收标准: + +- 28 个公开组件的 API 覆盖率为 100%; +- 所有示例从包根导入,并参与类型检查或浏览器测试; +- README 可在两次点击内到达任意组件参考; +- 文档展示的包版本从 package manifest 派生,不手工维护; +- 文档链接检查和示例编译进入 CI。 + +### 6.2 重构 token 层级 + +实施进度(2026-08-09):三层 token、兼容别名、light/dark palette 切换和 `@webaseui/core/brand-theme.css` 已完成;浏览器 fixture 现在验证品牌语义色切换和组件几何不变,并有独立视觉基准。全部 28 个公开组件已迁移到共享或组件级 geometry/type/motion token;`docs/component-style-literal-baseline.json` 对声明实施零字面量预算,并单独锁定 EmptyState、Pagination、SectionHeader 的三个响应式断点。硬编码清理工作项完成,后续新增公共 token 仍必须证明复用价值或具体主题需求。 + +建议形成三层 token: + +```text +基础值:颜色阶、字体、尺寸、时间 + ↓ +语义值:canvas、surface、ink、border、brand、danger + ↓ +组件值:button-height、dialog-width、control-radius、overlay-z-index +``` + +工作项: + +- 补齐 spacing、size、radius、typography、line-height、z-index、motion 和 control height token; +- 统计并逐步替换组件内重复硬编码值; +- 分清 `tokens.css` 与 `theme.css` 职责,避免两个入口语义模糊; +- 定义品牌主题覆盖入口和主题最小必需 token; +- 保留现有 `--webase-*` 公共变量的兼容迁移层; +- 增加 token 完整性、循环引用、未定义引用和主题对比度测试; +- 评估 CSS cascade layer,但只有在不破坏消费者覆盖顺序时启用。 + +验收标准: + +- 组件源码不再重复定义同一类交互尺寸和层级值; +- 浅色、深色和一个示例品牌主题使用同一语义 token 契约; +- 主题切换无闪烁、无布局偏移; +- 公共 token 有说明、默认值、用途和弃用策略; +- 新主题无需复制组件 CSS。 + +### 6.3 建立视觉回归 + +实施进度(2026-08-09):已建立独立 `visual-chromium` 项目、28 个公开组件的 light specimen 基准、代表性 dark/brand/mobile 基准,以及 13 个交互状态基准;新增专用 fixture 覆盖 Button/IconButton hover、disabled、loading、pressed,Field/Textarea/Select error 与 disabled,Check/Radio/Switch/Slider disabled,Alert/Toast error、Alert warning、Pagination hover/disabled、Tabs/Accordion hover 和 Toast open。共 44 组截图由 macOS 固定环境在 CI 中阻止未批准差异,focus、hover、open、disabled、error、loading 验收类别已覆盖。后续按真实变更补充完整主题/viewport 组合,不预先制造无差异截图。 + +工作项: + +- 为每个组件建立稳定 specimen; +- 覆盖 light/dark、desktop/mobile 和关键交互状态; +- 固定字体、动画、时区和测试数据,降低截图波动; +- 对设计变更使用显式基准图更新流程; +- 设置变更面积阈值和人工批准要求。 + +验收标准: + +- 28 个组件均有至少一组视觉基准; +- 关键交互组件覆盖 focus、hover、open、disabled、error 和 loading 状态; +- 未批准的视觉变化无法合并。 + +## 7. 0.6:关键能力补齐 + +### 7.1 先建设内部行为基础设施 + +实施进度(2026-08-16):新增内部 overlay、Dialog lifecycle、roving-focus、typeahead、manual popover 与 floating-position 工具,Dialog 使用按 document 引用计数的 body scroll lock,并将受控 open 状态与原生 `showModal()`/`close()` 同步集中到可单测边界;Select 使用共享 pointer-outside 注册、短时查询控制器与浮层定位,Tooltip 复用同一套 Popover/碰撞/auto-update 生命周期;Tabs 与 Accordion 复用同一套水平/垂直方向键、Home/End、循环和动态集合焦点解析。浮层优先使用 `popover="manual"` top layer,在不支持的浏览器回退到 fixed 定位,支持 preferred side 翻转、视觉 viewport 偏移、水平避让、Select 宽度匹配、available-height 约束,以及 scroll/resize/visualViewport/ResizeObserver 更新。Vitest 覆盖嵌套释放、幂等清理、外部目标判断、Dialog 生命周期、roving focus、typeahead 与 floating/popover 的边界;Playwright 在 Chromium、Firefox、WebKit 覆盖真实外部点击关闭、Dialog 滚动锁恢复、原生焦点恢复、复合组件动态收缩、Select typeahead、嵌套滚动容器和 viewport edge collision。按 ADR 0002,Portal、Focus Scope 和 Presence 只在现有组件出现无法由原生 dialog/popover 解决的需求时引入;当前没有相应消费者需求,不是 1.0 阻塞项。 + +建议建立非公开或低层级 primitives: + +- Portal; +- Dismissable Layer; +- Focus Scope / focus restore; +- Scroll Lock; +- Presence / transition lifecycle; +- Roving Focus; +- Typeahead; +- Floating position 和 collision detection; +- Stable collection 与 item registration。 + +这些能力必须先服务现有 Dialog、Select、Tabs、Accordion 和 Tooltip,再用于新组件,以证明抽象不是为未来假设设计。 + +验收标准: + +- 现有复杂组件复用共享基础设施后行为不回退; +- 基础设施具备独立单元测试和浏览器测试; +- 嵌套 overlay、滚动容器、移动端 viewport 和 SSR 场景均有验证; +- 内部 primitives 默认不作为 1.0 公共 API 暴露。 + +### 7.2 补齐高频组合能力 + +第一批建议组件: + +- `WeBaseInput`:把输入控件与当前带 label 的 Field 模式解耦; +- `WeBaseFormField`:统一 label、description、error、required 和 control 关联; +- `WeBaseRadioGroup` 与 `WeBaseCheckboxGroup`:提供组级 label、error、方向和键盘语义; +- `WeBasePopover`; +- `WeBaseMenu` / `WeBaseDropdownMenu`; +- `WeBaseCombobox`; +- `WeBaseDrawer`。 + +第二批候选组件仅在有真实消费者需求时进入计划: + +- Avatar、Table、Stepper、Command Palette; +- Date Picker、Data Grid、Tree View、Rich Text Editor。 + +Date Picker 和 Data Grid 不应作为早期“组件数量”目标,它们需要更高的国际化、键盘、虚拟化和维护投入。 + +### 7.3 新组件准入标准 + +每个新组件必须同时具备: + +- 明确的用户场景和至少一个真实消费者; +- API 与交互规格; +- light/dark/disabled/error/loading 等适用状态; +- 单元、浏览器、无障碍和视觉回归测试; +- 逐组件文档和最小使用示例; +- tree-shaking、SSR 和最低版本消费者验证; +- Changeset 和变更日志; +- 维护者与后续升级责任。 + +不满足以上条件的组件保留在实验区,不进入包根稳定导出。 + +## 8. 0.7:兼容性、发布与采用验证 + +### 8.1 国际化与布局方向 + +实施进度(2026-08-16):已完成 RTL 基础方向切片、第一组长文本重排验证和现有数字界面的 locale hook。Tabs 从根节点 computed direction 推导水平 roving-focus 方向;Select 与共享 floating-position 将 `start/end` 按锚点 computed direction 解释,触发器、选项、选择标记和多个方向敏感组件改用 CSS 逻辑属性。EmptyState kicker 进入可覆盖 API;Alert、EmptyState、Tabs、Field、Textarea、Link、Card、Select、Pagination 等长文案在窄视口使用逻辑尺寸、换行或窄屏收缩策略。Accordion、Pagination、Progress、Slider、Textarea 分别通过 `formatIndex`、`formatPage`、`formatValue` 和 `formatCount` 将可见数字格式交给消费者 locale,原生数值与 ARIA range 保持语言无关。Chromium、Firefox、WebKit 浏览器测试验证 RTL、CJK、阿拉伯语、伪本地化、`Intl.NumberFormat('ar-EG')` 和 200% 重排,视觉基线锁定对应层级。仓库尚无日期类组件;真实文档 specimen 和后续新增组件的 locale 审计仍需持续执行。 + +工作项: + +- 所有内置文案允许覆盖; +- 对外暴露格式化和 label 生成钩子,而不是在组件内部拼接英文; +- 支持 `dir="rtl"`,检查方向图标、键盘方向、浮层定位和布局; +- 验证长文本、CJK、阿拉伯语和伪本地化; +- 对日期、数字等复杂格式使用消费者 locale,不内置固定格式。 + +验收标准: + +- RTL 文档 specimen 和视觉回归通过; +- 组件不依赖英文字符串完成可访问名称; +- 200% 文本缩放和长标签不造成信息丢失或水平滚动。 + +### 8.2 高对比度、动效和输入方式 + +实施进度(2026-08-17):`@webaseui/core` 已增加 `forced-colors: active` 语义 token fallback,使用 `Canvas`、`CanvasText`、`LinkText`、`Highlight` 等系统颜色保留表面、边界、状态和焦点含义;Chromium、Firefox、WebKit fixture 验证 token 与可见焦点,axe 在 forced-colors 下无 serious/critical 问题,独立视觉基线锁定高对比度层级。0.7.2 已完成 reduced-motion、触控/coarse pointer、目标尺寸和语义色彩组合审计:所有含 animation/transition 的公开组件由 token 检查强制声明 reduced-motion fallback;纯 hover 样式限制在 fine-pointer 设备,selected/open/pressed 状态保持独立;Check、Radio、Slider、Breadcrumb、导航链接和 Card action 使用 `--webase-interactive-target-min`,默认 24px,Slider 增加 `touch-action: pan-y` 并保留原生键盘步进作为拖动等价操作;三浏览器测试覆盖 reduced-motion、目标尺寸和 coarse pointer;`check:contrast` 对 light/dark/brand 的正文与非文本语义色组合分别执行 4.5:1/3:1 门槛。当前 RC 剩余项是人工屏幕阅读器抽查;未来新增复杂拖动组件仍必须重新审阅等价操作。 + +工作项: + +- 全面覆盖 `prefers-reduced-motion`; +- 增加 `forced-colors` 模式; +- 检查键盘、鼠标、触控和 coarse pointer; +- 为拖动、hover 或颜色表达提供等价替代; +- 建立可访问色彩组合自动校验。 + +验收标准: + +- 所有动画组件均能在 reduced-motion 下移除非必要运动; +- Windows High Contrast 下焦点、边界和状态仍可识别; +- 交互目标满足 WCAG 2.2 目标尺寸要求或具备等价间距。 + +### 8.3 自动化发布 + +实施进度(2026-08-16):已新增 `.github/workflows/release.yml`。稳定发布先在 Ubuntu/macOS 运行完整 package、consumer、三浏览器和视觉门槛,再由 Changesets action 创建或更新 release PR;stable checkout 关闭 persisted credentials,并显式使用 `commitMode: github-api` 通过 `GITHUB_TOKEN` API 写入 release PR/commit/tag,避免默认 Git CLI push 失败。合并后通过 `id-token: write`、npm 11.5.1、`NPM_CONFIG_PROVENANCE=true` 和 `NPM_CONFIG_ACCESS=public` 使用 trusted publishing/OIDC 发布,不保存长寿命 npm token。稳定发布成功后执行 `scripts/registry-smoke.mjs`,从 `latest` registry dist-tag 安装两个包并构建真实 consumer;手动 workflow dispatch 支持 `next`/`canary`,由 `scripts/release-channel.mjs` 进入 pre-release 模式并按独立 dist-tag 发布。真实 npm trust policy 与首次发布仍需在仓库设置中完成一次性配置。 + +工作项: + +- 使用 Changesets 自动维护 release PR; +- 使用 npm trusted publishing/OIDC 和 provenance 发布; +- 发布前运行完整质量门槛并检查 tarball 内容; +- 发布后从 npm registry 安装并运行烟雾测试; +- 支持 `next` 或 `canary` 预发布 channel; +- 为 `@webaseui/core` 和 `@webaseui/svelte` 都维护 changelog; +- 自动同步文档站版本和对应版本文档。 + +验收标准: + +- 正式发布不依赖维护者本地执行 `npm publish`; +- 每个发布包可追溯到 commit、workflow 和 provenance; +- 发布后 registry 消费者构建失败时阻止继续推广 dist-tag; +- 预发布版本与 stable 版本不会互相覆盖。 + +### 8.4 真实消费者验证 + +实施进度(2026-08-17):已建立 [`docs/ADOPTION_MATRIX.md`](./docs/ADOPTION_MATRIX.md)。xue 固定使用 `@webaseui/core@0.1.0` 和 `@webaseui/svelte@0.3.2`,只读检查通过;基于历史 commit `2cf5bdd` 的 `@webaseui/svelte@0.2.0` → `0.3.2` 升级演练完成,升级前 check/build 和升级后 check/build、59 项 E2E 全部通过。FruitsAI/Fig 的 disposable checkout 使用正式 registry 包替换真实分类与搜索控件,check/lint/SSR build、Chromium、axe、移动端和 tree-shaking 通过,总客户端 JS/CSS gzip 增加 3,497 B(4.4%)。外部 SvelteKit CRUD 应用使用当前 workspace 候选 tarball 替换创建表单,`inputProps`/`textareaProps` 进入原生 FormData,enhanced action 返回 200,Svelte check、SSR build、axe 子树、移动端和 tree-shaking 通过;其极小基线首次引入完整主题和 3 个组件后总客户端 gzip 增加 12,068 B(32.5%),已作为采用成本记录而未改写仓库基线。原始外部工作树均未修改。仓库内 consumer 仍只计维护者 fixture;WeMail 与 Fangcun 是 React 应用,不计入 Svelte 采用。两个真实应用和内容/导航、表单/CRUD 两种画像的技术门槛现已满足。 + +至少选择两个不同复杂度的真实应用进行试用: + +- 一个以表单和 CRUD 为主的应用; +- 一个以内容展示和导航为主的应用。 + +收集并处理: + +- 被迫绕过组件的场景; +- 主题覆盖困难点; +- 包体积和加载性能; +- SSR、水合和路由集成; +- API 易错点和缺失组件; +- 升级体验和弃用提示。 + +1.0 之前至少完成一次从旧 minor 到新 minor 的真实升级演练。 + +## 9. 1.0 RC:稳定性审计 + +1.0 不以组件数量为发布条件,以公共契约可长期维护为条件。 + +### 9.1 1.0 发布门槛 + +实施进度(2026-08-17):自动化公共契约、三浏览器、SSR/水合、视觉、包体积、支持策略和外部采用证据已具备;fresh `npm ci` 后的完整 check、消费者、浏览器、视觉、changeset、audit、registry smoke 和 workflow lint 均已通过。发布 workflow 现在显式包含 changeset、high-level audit,并在发布后以 `--require-provenance` 验证 SLSA attestations;该强制模式已用当前历史包验证会正确拒绝缺失 provenance。本地 P0/P1 与安全清零审计已完成,发布前仍需重跑。尚未闭合的发布门槛是两套人工屏幕阅读器结果、真实 npm trusted publishing/OIDC 首次运行与 provenance,以及真实发布后的 registry smoke。 + +- 公开组件 API、token、键盘行为和支持矩阵全部文档化; +- 所有公开组件通过 Chromium、Firefox、WebKit; +- 所有交互组件通过自动无障碍检查和人工屏幕阅读器抽查; +- SSR、水合、tree-shaking、最低/current Svelte 消费者测试通过; +- light/dark/RTL/forced-colors/reduced-motion 基准覆盖完成; +- 包体积基线已记录,单次增长超过 5% 必须解释和批准; +- 没有未解决的 P0/P1 缺陷; +- 没有计划在 1.1 立即移除的已知不合理 API; +- 迁移指南、版本策略、安全策略和贡献流程完整; +- 至少两个真实消费者完成采用或升级验证; +- npm 自动发布、provenance 和发布后烟雾测试稳定运行。 + +### 9.2 支持策略 + +实施进度(2026-08-17):[`docs/support-policy.json`](./docs/support-policy.json) 已冻结 Node `^22.13.0 || ^24.0.0`、Svelte `>=5.20.0 <6`、TypeScript `>=5.5.4 <7` 和主流浏览器最近两个稳定 major 的 1.0 窗口;`check:support` 约束 manifest、consumer fixture、文档和 workflow 不漂移,weekly compatibility workflow 对 Node 24、最新 Svelte/Vite/TypeScript 和最新 Playwright 浏览器提供非阻塞预警。 + +1.0 前发布并冻结以下策略: + +- Svelte、Node.js、TypeScript 和 Vite 支持范围; +- 浏览器支持范围,建议为主流 evergreen 浏览器最近两个稳定版本; +- 安全修复和严重 bug 的响应等级; +- 弃用周期和 major 发布节奏; +- 对旧版本分支的维护期限。 + +## 10. 持续质量门槛 + +建议将 CI 分为快速检查和完整检查: + +| 检查 | Pull Request | main | 发布前 | +| --- | --- | --- | --- | +| 格式、类型、构建 | 必须 | 必须 | 必须 | +| 单元测试 | 必须 | 必须 | 必须 | +| Chromium 行为测试 | 必须 | 必须 | 必须 | +| Firefox/WebKit | 必须 | 必须 | 必须 | +| axe 自动审计 | 必须 | 必须 | 必须 | +| 视觉回归 | 变更组件必跑 | 全量 | 全量 | +| SSR/水合 | 必须 | 必须 | 必须 | +| 最低/current 消费者 | 必须 | 必须 | 必须 | +| 下一版本依赖预警 | 可选、不阻塞 | 定时 | 不阻塞 | +| 包体积与 tree-shaking | 必须 | 必须 | 必须 | +| npm audit | high 阻塞 | high 阻塞 | high 阻塞 | +| registry 安装烟雾测试 | 不适用 | 不适用 | 发布后必须 | + +## 11. 工程治理 + +实施进度(2026-08-17):已新增 [`docs/SUPPORT_MATRIX.md`](./docs/SUPPORT_MATRIX.md)、`docs/support-policy.json`、[`docs/SCREEN_READER_AUDIT.md`](./docs/SCREEN_READER_AUDIT.md)、`SECURITY.md`、PR 模板、bug/组件提案/无障碍/release review issue 模板和 `.github/CODEOWNERS`。Svelte、Node、TypeScript、Vite、SSR、浏览器、自动无障碍、弃用、安全响应和旧 major 维护窗口已经冻结并受 `check:support` 约束;每个 minor 的 adoption、缺陷、包体积和兼容性复盘已有模板。外部升级和两类应用试用已完成,实际 VoiceOver/NVDA 抽查仍未完成。 + +需要新增或完善: + +- `SECURITY.md`:漏洞报告渠道和支持版本; +- PR 模板:API、无障碍、测试、文档和 Changeset 检查项; +- issue 模板:bug、组件提案、无障碍问题; +- ADR 目录:记录不可逆或跨包决策; +- 组件提案模板:场景、替代方案、API、a11y、维护成本; +- CODEOWNERS 或明确评审责任; +- 定期依赖更新和兼容性预警; +- 每个 minor 发布后的 adoption、缺陷和包体积复盘。 + +## 12. 性能与包体积 + +实施进度(2026-08-16):已建立 `docs/package-size-baseline.json` 与 `npm run check:size`。门槛覆盖两个发布包的 packed/unpacked 大小、Svelte dist 与每个公开组件的 gzip 源文件大小,以及真实消费者 fixture 的 JS/CSS/HTML 输出;任一已记录指标增长超过 5% 时检查失败,基线更新必须显式执行并在评审中说明原因。本轮先将 Dialog lifecycle 发布产物由约 4.1 KB 收紧到约 2.95 KB,再为跨浏览器焦点恢复、floating-position、typeahead 和本地化重排能力等有意新增的内部能力更新基线。RTL/forced-colors 切片使 core CSS 原始大小从 17,707 增至 18,669 bytes(5.4%),Switch 源文件从 2,738 增至 2,885 bytes(5.4%);本地化重排使 EmptyState 从 3,266 增至 3,577 bytes(9.5%),Slider 从 3,788 增至 3,979 bytes(5.0%);locale formatter 又使 Progress 从 1,758 增至 1,909 bytes(8.6%)、Slider 从 3,979 增至 4,183 bytes(5.1%)、Textarea 从 3,255 增至 3,423 bytes(5.2%);0.7.2 目标尺寸和 fine-pointer 媒体分支又使 Breadcrumbs 1,815 → 1,911 bytes、IconButton 2,017 → 2,186 bytes、Pagination 3,169 → 3,375 bytes,均已显式更新基线。为 core 增加公开 changelog 后,当前 core/svelte tarball 分别为 6,556/40,732 bytes,仍在旧基线 6,412/40,289 的 5% 门槛内;真实消费者 JS/CSS gzip 为 21,156/4,754 bytes。 + +首先记录基线,再设置门槛,避免使用脱离实际的绝对数字。 + +建议追踪: + +- 每个组件独立引入后的 minified + gzip 体积; +- 从包根导入单个组件时的 tree-shaking 结果; +- icon 依赖是否仅包含使用到的图标; +- CSS 重复规则和未使用 token; +- 文档站 LCP、CLS、INP; +- Dialog、Select 等首次交互的脚本执行时间。 + +规则: + +- 单个组件或公共入口体积较基线增长超过 5%,PR 必须说明原因; +- 新依赖必须说明体积、许可证、维护状态和替代方案; +- 不允许为了文档示例把未使用组件打入消费者 bundle; +- 性能优化不得牺牲键盘、屏幕阅读器或 API 可理解性。 + +## 13. 暂不执行的事项 + +- 不立即启动 React 适配器; +- 不把组件数量作为成熟度 KPI; +- 不在缺少真实需求时实现 Date Picker、Data Grid 或 Rich Text Editor; +- 不公开尚未稳定的内部 overlay 和 focus primitives; +- 不支持 Svelte 4; +- 不引入全局 CSS reset 或默认修改消费者页面元素; +- 不为了追求覆盖率数字编写没有行为价值的测试。 + +## 14. 执行方式 + +每个里程碑开始时: + +1. 从本计划拆出 issue 和依赖关系; +2. 明确本阶段不做事项; +3. 为公共 API 变化先写规格和测试; +4. 对高风险交互先完成最小 vertical slice; +5. 在真实消费者中验证后再扩大组件范围。 + +每个里程碑结束时: + +1. 运行完整质量门槛; +2. 更新组件成熟度矩阵; +3. 记录新增技术债和未解决风险; +4. 更新版本、迁移和发布说明; +5. 根据真实采用反馈调整下一阶段优先级。 + +## 15. 下一步行动清单 + +建议立即创建以下首批工作项: + +1. 建立 28 个组件的公共 API 与测试覆盖矩阵; +2. 编写组件 API、事件、绑定和原生属性规范; +3. 接入 axe,并先覆盖 Select、Dialog、Tabs、Accordion、Tooltip、Toast; +4. 将 Playwright 扩展到 Firefox 和 WebKit; +5. 增加 SSR/水合消费者 fixture; +6. 为每个组件创建文档页面模板和元数据来源; +7. 建立 token 硬编码值清单并设计三层 token ADR; +8. 记录 Select/overlay 共享基础设施 ADR; +9. 建立包体积基线; +10. 配置 Changesets 自动 release PR 和 npm trusted publishing 方案。 + +其中前五项应作为 0.4 的阻塞任务。完成它们之前,除修复 P0/P1 缺陷外,不建议继续扩充公开组件数量。 diff --git a/README.md b/README.md index 3b04ed3..553fcf0 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ WeBaseUI is an editorial design system built around calm typography, paper-like ## Packages - `@webaseui/core` — CSS design tokens and theme primitives. -- `@webaseui/svelte` — 26 typed Svelte 5 components. +- `@webaseui/svelte` — 28 typed Svelte 5 components. ## Install @@ -32,15 +32,18 @@ All public component and Props exports use the `WeBase*` prefix. Public design t ## Development -Requires Node.js 22.13 or newer. +Requires Node.js 22.13+ on Node 22, or Node 24. ```sh npm install +npm run test:unit npm run check npm run check:consumer +npm run test:browser +npm run test:visual ``` -`npm run check` validates the generated package artifacts and public exports. `npm run check:consumer` packs both workspaces and builds an isolated Svelte app from the tarballs, catching errors that workspace links can hide. +`npm run test:unit` covers collection, overlay, Select, Toast, documentation, and package-script boundaries with Vitest, and enforces 90% statements, branches, functions, and lines across the core state tools. `npm run check` runs those unit tests, Svelte type checks, builds the packages and documentation app, and validates package artifacts, public exports, token contracts, documentation policy, size budgets, and visual-baseline coverage. `npm run check:consumer` packs both workspaces and builds isolated apps against the minimum and current supported Svelte versions. `npm run test:browser` exercises component behavior, SSR/hydration, and the documentation UI in Chromium, Firefox, and WebKit. `npm run test:visual` compares the 28 public component specimens and key states against the reviewed Chromium baselines. ## Documentation app @@ -62,6 +65,16 @@ npm run changeset The framework-neutral layer lives in `@webaseui/core`. Framework bindings consume that shared layer and own only component behavior and rendering. The planned React package will therefore be added as `@webaseui/react` alongside `@webaseui/svelte`, rather than translating Svelte components directly. +See the [maturity development plan](./DEVELOPMENT_PLAN.md) for the roadmap from the current package baseline to a stable 1.0 release. + +Release-candidate governance is tracked in the +[support matrix](./docs/SUPPORT_MATRIX.md), +[adoption and upgrade matrix](./docs/ADOPTION_MATRIX.md), +[screen-reader audit](./docs/SCREEN_READER_AUDIT.md), +[release runbook](./docs/RELEASE_RUNBOOK.md), +[RC readiness](./docs/RC_READINESS.md), and +[security policy](./SECURITY.md). + ## License [MIT](./LICENSE) diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..b8f3988 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,29 @@ +# Security Policy + +## Supported versions + +Only the latest published minor line receives routine security fixes while the +project is in `0.x`. Once `1.0` is released, the latest `1.x` minor is the +primary supported line; older lines are maintained only when a release note +explicitly says so. + +WeBaseUI is a client-side component library. Reports about an application that +uses WeBaseUI should include the application repository and the smallest +reproduction, but must not include secrets or personal data. + +## Reporting a vulnerability + +Please use GitHub's private vulnerability reporting channel: + + + +Do not open a public issue for an undisclosed vulnerability. Include the +affected package and version, impact, reproduction or proof of concept, and any +known workaround. If private reporting is unavailable, contact the repository +maintainers through the GitHub organization and request a private channel. + +Maintainers will acknowledge a report within five business days, assess +severity and affected versions, and coordinate a fix or mitigation. Timelines +can change when the report requires upstream browser, Svelte, or dependency +coordination. Credit is offered in the release note unless the reporter asks to +remain anonymous. diff --git a/apps/docs/DESIGN_STANDARD.md b/apps/docs/DESIGN_STANDARD.md new file mode 100644 index 0000000..4d70488 --- /dev/null +++ b/apps/docs/DESIGN_STANDARD.md @@ -0,0 +1,77 @@ +# WeBaseUI Documentation Design Standard + +This document is the design gate for the public documentation site. It applies to every route, component specimen, transition, illustration, and content change in `apps/docs`. + +## Design read + +The site is an interactive editorial exhibition for designers and frontend engineers. It combines a precise component reference with kinetic typography, asymmetric composition, restrained material depth, and physically motivated motion. + +- `DESIGN_VARIANCE: 9` +- `MOTION_INTENSITY: 8` +- `VISUAL_DENSITY: 4` +- Stack: Svelte 5, native CSS, WeBaseUI components, Lucide icons + +## Hard rules + +### Icons + +- Use Lucide for every interface icon. +- Prefer `WeBaseIcon` and WeBaseUI components that render Lucide internally. +- Do not hand-write SVG paths or mix icon families. +- Do not replace an icon with a Unicode arrow, dingbat, or pictographic symbol. +- `logo.svg` is a brand asset and is the only SVG exception in the page chrome. + +### No emoji + +- Do not use emoji in visible copy, navigation, labels, examples, status messages, empty states, metadata, or decoration. +- Express meaning with a Lucide icon plus clear text when an icon is useful. + +### Award-level finish + +- Hold the visual system to the finish expected from Awwwards, FWA, and CSS Design Awards daily winners. +- Treat typography, spacing, responsive composition, transitions, loading behavior, focus states, and copy as one designed system. +- Do not ship default framework layouts, generic three-card rows, decorative glass panels, or effects without a content purpose. + +### Creative freedom + +- Treat the browser as an interactive art canvas. +- Use asymmetric grids, kinetic type, scroll storytelling, spatial transitions, and experimental composition when they clarify hierarchy or narrative. +- Preserve stable navigation, searchable reference content, selectable text, copyable code, and predictable keyboard behavior. + +### Immersive coherence + +- The page must feel authored as one continuous experience, not assembled from unrelated showcase blocks. +- Component specimens must be real, interactive package imports rather than fake screenshots. +- Advanced rendering must be lazy, optional, and disposable without losing content or functionality. + +## Motion contract + +- Every animation must communicate hierarchy, storytelling, feedback, or state change. +- Animate only `transform` and `opacity` during continuous motion. +- Do not update Svelte state on every scroll frame. +- Prefer CSS scroll-driven animation or IntersectionObserver for lightweight reveals. +- Use a dedicated animation library only when native CSS cannot express the interaction reliably. +- All motion must collapse to a static or instant equivalent under `prefers-reduced-motion: reduce`. +- Avoid perpetual motion unless it communicates an active system state. + +## Accessibility and performance guardrails + +- Meet WCAG 2.2 AA for content and controls. +- Maintain visible focus and full keyboard access through every experimental layout. +- Preserve readable order when CSS layout is removed. +- Keep LCP below 2.5 seconds, INP below 200 milliseconds, and CLS below 0.1 at the 75th percentile target. +- Reserve media dimensions and avoid loading heavy rendering logic above the fold unless it is the hero's primary content. +- Support Chromium, Firefox, WebKit, narrow mobile viewports, zoom, dark mode, forced colors, and reduced motion. + +## Review checklist + +- [ ] All interface icons come from Lucide. +- [ ] No emoji, pictographic symbols, inline SVG icons, or Unicode arrow icons appear in source or visible copy. +- [ ] The page uses real WeBaseUI component specimens. +- [ ] The primary message and first action fit in the initial viewport. +- [ ] The information architecture remains understandable without animation. +- [ ] Each major section uses a deliberate composition rather than repeating one layout pattern. +- [ ] Motion has a documented purpose and reduced-motion fallback. +- [ ] Light and dark themes maintain the same hierarchy and contrast. +- [ ] Mobile layout is explicitly composed, not only stacked by accident. +- [ ] Keyboard, screen reader, zoom, contrast, and Core Web Vitals checks pass. diff --git a/apps/docs/index.html b/apps/docs/index.html index d59fc63..d518ccc 100644 --- a/apps/docs/index.html +++ b/apps/docs/index.html @@ -4,7 +4,16 @@ - WeBaseUI — Svelte component library + + + + + + + + + + WeBaseUI - Svelte component library
diff --git a/apps/docs/package.json b/apps/docs/package.json index 7e73870..db8b16c 100644 --- a/apps/docs/package.json +++ b/apps/docs/package.json @@ -5,7 +5,9 @@ "type": "module", "scripts": { "build": "vite build", - "dev": "vite" + "dev": "vite", + "preview": "vite preview", + "typecheck": "svelte-check --tsconfig ./tsconfig.json" }, "dependencies": { "@webaseui/core": "0.1.0", diff --git a/apps/docs/src/App.svelte b/apps/docs/src/App.svelte index 42ca62d..d8ec2d8 100644 --- a/apps/docs/src/App.svelte +++ b/apps/docs/src/App.svelte @@ -1,184 +1,565 @@ - +
-
-

Public proof / 0.3

-

Interfaces with
a registered mark.

-

A compact foundation of namespaced tokens and accessible Svelte 5 components, designed to travel between products without losing its character.

-
- document.querySelector('#components')?.scrollIntoView({ behavior: 'smooth' })} /> - View source ↗ +
+
+

Build witha visible contract.

+

Accessible Svelte 5 components, named tokens, and a public contract designed to move between products.

+
+ document.querySelector('#components')?.scrollIntoView({ behavior: scrollBehavior() })} /> + +
-
+ +
+

Interactive component specimen

+
+ +
+ + +
+ {#snippet footer()} + Three browser engines + + {/snippet} +
+
+ +
+ +
+ +
+ (heroSaved = !heroSaved)} /> + + +
+
+
+ +
+
Components
28
-
Framework
Svelte 5
-
Tokens
--webase-*
+
Runtime
Svelte 5
+
Engines
3
License
MIT
-
- -
- {#each tokens as [label, token]} -
- - {label} - {token} -
- {/each} +
+
+ +

Tokens carry the identity.

+

Semantic variables keep color, type, focus, and motion coherent across every framework surface.

+
+ +
+ + +
+ {#each tokens as token} +
+ +
+ {token.label} + {token.token} +
+
+ {/each} +
-
- - -
-
-
Actions
-
- - - - - - - -
-
+
+
+

Reference Desk

+

Search, inspect, and exercise every public component against the versioned API contract.

+ +
-
-
Content surface
-
- -

Children and footer are Svelte 5 snippets supplied by the consumer.

- {#snippet footer()}Updated 04 Aug{/snippet} -
-
-
+
+ + +
-
-
Feedback
- -
+
+
+ + + {#key selectedComponent.name} +
+
+
+

{selectedComponent.group}

+

{selectedComponent.name}

+

+ {#each inlineParts(selectedComponent.summary) as part} + {#if part.code}{part.text}{:else}{part.text}{/if} + {/each} +

+
+ v{packageVersion} +
+ +
+
+

Live specimen

+ Package root import +
+
+ +
+
+ +
+
+
+

Public contract

+ {selectedComponent.fields.length} fields +
+
+ {#each selectedComponent.fields as field} +
+
{field.label}
+
+ {#each inlineParts(field.value) as part} + {#if part.code}{part.text}{:else}{part.text}{/if} + {/each} +
+
+ {/each} +
+
- -
- {#each components as [name, group], index} -
- {String(index + 1).padStart(2, '0')} - WeBase{name} - {group} +
+
+

Usage

+ +
+ +
{`import { ${selectedComponent.name} } from '@webaseui/svelte';\n\n${selectedComponent.example}`}
+
+
- {/each} + {/key}
-
- -
-
npm install @webaseui/core @webaseui/svelte
-
{`import '@webaseui/core/theme.css';
-import { WeBaseButton } from '@webaseui/svelte';`}
+
+
+

Install the boundary.

+

Tokens and Svelte components are versioned independently, then verified together in a clean consumer.

+
+ +
+
+
+ Packages + +
+ +
{installCommand}
+

@webaseui/svelte v{packageVersion}

+
+ +
+
+ Import + +
+ +
{importCode}
+
+ +
-

React support remains intentionally deferred until a real consumer defines its runtime and accessibility requirements.

+ + (searchOpen = false)} + onkeydown={(event) => { + if (event.key !== 'Escape') return; + event.preventDefault(); + closeSearch(); + }} + onclick={(event) => { if (event.target === searchDialog) closeSearch(); }} +> +
+
+
+

Global search

+

Search the public contract

+
+ +
+ + + +
+

{searchQuery ? `${searchResults.length} matches` : 'Browse components'}

+ {#if searchResults.length > 0} +
    + {#each searchResults as component} +
  • + +
  • + {/each} +
+ {:else} +
+ + No contract found + Try a component name, prop, binding, or behavior. +
+ {/if} +
+
+
diff --git a/apps/docs/src/app.css b/apps/docs/src/app.css index 77b4e23..3d41dcd 100644 --- a/apps/docs/src/app.css +++ b/apps/docs/src/app.css @@ -1,76 +1,1427 @@ @import '@webaseui/core/theme.css'; +:root { + --page-gutter: clamp(20px, 4vw, 64px); + --page-max: 1520px; + --content-max: 1360px; + --header-height: 70px; +} + * { box-sizing: border-box; } -html { scroll-behavior: smooth; background: var(--paper); } -body { margin: 0; color: var(--ink); background: var(--paper); font-family: var(--font); } + +html { + scroll-behavior: smooth; + scroll-padding-top: calc(var(--header-height) + 24px); + background: var(--paper); +} + +body { + min-width: 320px; + margin: 0; + overflow-x: clip; + color: var(--ink); + background: + linear-gradient(90deg, transparent 0 49.95%, color-mix(in srgb, var(--hairline) 45%, transparent) 50%, transparent 50.05%) top center / min(100%, var(--content-max)) 100% no-repeat, + var(--paper); + font-family: var(--font); + text-rendering: optimizeLegibility; +} + +body::before { + position: fixed; + z-index: 50; + inset: 0; + opacity: .055; + background-image: + radial-gradient(circle at 20% 30%, color-mix(in srgb, var(--ink) 38%, transparent) 0 .45px, transparent .7px), + radial-gradient(circle at 72% 64%, color-mix(in srgb, var(--ink) 24%, transparent) 0 .4px, transparent .7px); + background-size: 5px 5px, 7px 7px; + content: ''; + pointer-events: none; +} + a { color: inherit; } -button, input, textarea { font: inherit; } - -.site-header { position: sticky; top: 0; z-index: 20; display: flex; max-width: 1440px; min-height: 74px; align-items: center; justify-content: space-between; gap: 24px; margin: 0 auto; padding: 12px clamp(20px, 5vw, 72px); border-bottom: 1px solid var(--hairline); background: color-mix(in srgb, var(--paper) 94%, transparent); backdrop-filter: blur(16px); } -.brand { display: inline-flex; align-items: center; gap: 11px; text-decoration: none; } -.brand > span:last-child { display: grid; gap: 2px; } -.brand strong { font-family: var(--sans); font-size: 12px; letter-spacing: .1em; text-transform: uppercase; } -.brand small { color: var(--ink-muted); font-family: var(--mono); font-size: 8px; letter-spacing: .08em; text-transform: uppercase; } -.seal { display: grid; width: 38px; height: 38px; place-items: center; border: 1px solid var(--brand); border-radius: 50%; color: var(--brand); box-shadow: inset 0 0 0 3px var(--paper), inset 0 0 0 4px color-mix(in srgb, var(--brand) 32%, transparent); transform: rotate(-7deg); } -.site-header nav { display: flex; align-items: center; gap: clamp(12px, 2vw, 26px); font-family: var(--sans); font-size: 10px; letter-spacing: .08em; text-transform: uppercase; } -.site-header nav > a { text-decoration: none; } -.site-header nav > a:hover { color: var(--brand); } -.theme-control { display: flex; align-items: center; gap: 8px; color: var(--ink-muted); } +button, input, select, textarea { font: inherit; } +button, a, input, select, textarea { -webkit-tap-highlight-color: transparent; } + +button:focus-visible, +a:focus-visible, +input:focus-visible, +select:focus-visible, +textarea:focus-visible, +dialog:focus-visible, +pre:focus-visible { + outline: var(--focus-ring); + outline-offset: var(--focus-ring-offset); +} + +::selection { + color: var(--paper); + background: var(--brand); +} + +.visually-hidden { + position: absolute; + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + overflow: hidden; + clip: rect(0 0 0 0); + white-space: nowrap; + border: 0; +} + +.site-header { + position: sticky; + z-index: 30; + top: 0; + width: 100%; + border-bottom: 1px solid color-mix(in srgb, var(--hairline-strong) 78%, transparent); + background: color-mix(in srgb, var(--paper) 97%, var(--surface)); + backdrop-filter: blur(18px) saturate(1.25); + -webkit-backdrop-filter: blur(18px) saturate(1.25); +} + +.header-inner { + display: grid; + width: min(100%, var(--page-max)); + min-height: var(--header-height); + grid-template-columns: auto minmax(190px, 330px) 1fr auto; + align-items: center; + gap: clamp(16px, 2.4vw, 36px); + margin: 0 auto; + padding: 8px var(--page-gutter); +} + +.brand { + display: inline-flex; + align-items: center; + text-decoration: none; +} + +.brand-logo { + display: block; + width: 38px; + height: 41px; + flex: 0 0 auto; + object-fit: contain; +} + +.search-trigger { + display: grid; + min-width: 0; + min-height: 42px; + grid-template-columns: auto minmax(0, 1fr) auto; + align-items: center; + gap: 10px; + padding: 0 10px 0 13px; + border: 1px solid var(--hairline-strong); + color: var(--ink-muted); + background: color-mix(in srgb, var(--surface) 72%, transparent); + cursor: pointer; + text-align: left; + transition: border-color var(--duration-ui) var(--ease-out), color var(--duration-ui) var(--ease-out), transform var(--duration-fast) var(--ease-out); +} + +.search-trigger:hover { + border-color: var(--brand); + color: var(--ink); + transform: translateY(-1px); +} + +.search-trigger:active { transform: translateY(0); } + +.search-trigger span { + overflow: hidden; + font-family: var(--sans); + font-size: 10px; + letter-spacing: .07em; + text-overflow: ellipsis; + text-transform: uppercase; + white-space: nowrap; +} + +kbd { + padding: 4px 6px; + border: 1px solid var(--hairline); + color: var(--ink-soft); + background: var(--surface-muted); + font-family: var(--mono); + font-size: 8px; + font-weight: 400; + letter-spacing: .04em; +} + +.primary-nav { + display: flex; + min-width: 0; + align-items: center; + justify-content: flex-end; + gap: clamp(16px, 2vw, 30px); + font-family: var(--sans); + font-size: 10px; + letter-spacing: .09em; + text-transform: uppercase; + white-space: nowrap; +} + +.primary-nav a { + position: relative; + padding: 10px 0; + text-decoration: none; +} + +.primary-nav a::after { + position: absolute; + right: 0; + bottom: 4px; + left: 0; + height: 1px; + background: var(--brand); + content: ''; + transform: scaleX(0); + transform-origin: right; + transition: transform var(--duration-ui) var(--ease-out); +} + +.primary-nav a:hover::after, +.primary-nav a:focus-visible::after { + transform: scaleX(1); + transform-origin: left; +} + +.header-actions, +.theme-control { + display: flex; + align-items: center; +} + +.header-actions { gap: 12px; } + +.theme-control { + gap: 8px; + color: var(--ink-muted); + font-family: var(--mono); + font-size: 8px; + letter-spacing: .08em; + text-transform: uppercase; +} + .theme-control .ds-switch-copy { display: none; } -main { max-width: 1180px; margin: 0 auto; padding: 0 clamp(20px, 5vw, 72px); } -.hero { padding: clamp(90px, 14vw, 180px) 0 90px; } -.kicker { margin: 0 0 22px; color: var(--brand); font-family: var(--mono); font-size: 10px; letter-spacing: .16em; text-transform: uppercase; } -h1 { max-width: 900px; margin: 0; font-size: clamp(56px, 9vw, 112px); font-weight: 500; letter-spacing: -.075em; line-height: .82; } -h1 em { color: var(--brand); font-weight: 400; } -.hero-copy { max-width: 610px; margin: 34px 0 0; color: var(--ink-soft); font-size: clamp(17px, 2vw, 21px); line-height: 1.55; } -.hero-actions { display: flex; align-items: center; gap: 22px; margin-top: 34px; } -.hero-actions > a { color: var(--brand); font-family: var(--sans); font-size: 10px; letter-spacing: .09em; text-transform: uppercase; text-underline-offset: 5px; } -.ledger { display: grid; grid-template-columns: repeat(4, 1fr); margin: 76px 0 0; border-block: 1px solid var(--hairline-strong); } -.ledger div { padding: 18px; border-right: 1px solid var(--hairline); } -.ledger div:last-child { border: 0; } -.ledger dt { color: var(--ink-muted); font-family: var(--mono); font-size: 8px; letter-spacing: .12em; text-transform: uppercase; } -.ledger dd { margin: 8px 0 0; color: var(--brand); font-size: 22px; } -.section { scroll-margin-top: 82px; padding: 90px 0; border-top: 1px solid var(--hairline-strong); } - -.token-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; } -.token-grid article { display: grid; grid-template-columns: 54px 1fr; gap: 3px 14px; align-items: center; padding: 14px; border: 1px solid var(--hairline); background: var(--surface); } -.swatch { grid-row: 1 / 3; width: 54px; height: 54px; border: 1px solid var(--hairline-strong); background: var(--swatch); } -.token-grid strong { font-family: var(--sans); font-size: 10px; letter-spacing: .08em; text-transform: uppercase; } -code { color: var(--brand); font-family: var(--mono); font-size: 10px; } - -.specimen-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; } -.specimen { min-width: 0; border: 1px solid var(--hairline-strong); background: var(--surface); box-shadow: 7px 7px 0 color-mix(in srgb, var(--brand) 9%, transparent); } -.specimen-wide { grid-column: 1 / -1; } -.specimen > header { display: flex; min-height: 54px; align-items: center; justify-content: space-between; gap: 16px; padding: 10px 14px; border-bottom: 1px solid var(--hairline); color: var(--brand); font-family: var(--mono); font-size: 9px; letter-spacing: .1em; text-transform: uppercase; } -.canvas { padding: 24px; } -.action-row { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; } -.feedback-stack, .choice-stack { display: grid; gap: 16px; } -.form-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; align-items: start; } -.form-grid .choice-stack { grid-column: 1 / -1; grid-template-columns: repeat(3, 1fr); } -.component-index { display: grid; grid-template-columns: repeat(2, 1fr); border-top: 1px solid var(--hairline-strong); } -.component-index article { display: grid; grid-template-columns: 34px 1fr auto; align-items: center; gap: 12px; min-height: 52px; padding: 0 14px; border-right: 1px solid var(--hairline); border-bottom: 1px solid var(--hairline); } -.component-index article:nth-child(2n) { border-right: 0; } -.component-index span, .component-index small { color: var(--ink-muted); font-family: var(--mono); font-size: 8px; letter-spacing: .08em; text-transform: uppercase; } -.component-index strong { font-family: var(--sans); font-size: 11px; font-weight: 500; letter-spacing: .04em; } - -.install-grid { display: grid; grid-template-columns: .8fr 1.2fr; gap: 16px; } -pre { min-width: 0; margin: 0; padding: 22px; overflow: auto; border: 1px solid var(--hairline-strong); background: var(--surface); box-shadow: 6px 6px 0 color-mix(in srgb, var(--brand) 9%, transparent); } -pre code { color: var(--ink); line-height: 1.7; } -.install > p { max-width: 68ch; margin: 30px 0 0; color: var(--ink-muted); line-height: 1.6; } -footer { display: flex; max-width: 1180px; justify-content: space-between; gap: 24px; margin: 0 auto; padding: 30px clamp(20px, 5vw, 72px) 60px; border-top: 1px solid var(--hairline); color: var(--ink-muted); font-family: var(--mono); font-size: 9px; letter-spacing: .09em; text-transform: uppercase; } - -@media (max-width: 760px) { - .site-header nav > a, .theme-control > span { display: none; } - .hero { padding-top: 90px; } - .ledger { grid-template-columns: 1fr 1fr; } - .ledger div:nth-child(2) { border-right: 0; } - .ledger div:nth-child(-n + 2) { border-bottom: 1px solid var(--hairline); } - .token-grid, .specimen-grid, .form-grid, .install-grid { grid-template-columns: 1fr; } - .specimen-wide { grid-column: auto; } - .form-grid .choice-stack { grid-column: auto; grid-template-columns: 1fr; } - .component-index { grid-template-columns: 1fr; } - .component-index article, .component-index article:nth-child(2n) { border-right: 0; } -} - -@media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } } +.mobile-menu-button { + display: none; + min-height: 40px; + padding: 0; + border: 0; + color: var(--ink); + background: transparent; + cursor: pointer; + font-family: var(--sans); + font-size: 10px; + letter-spacing: .08em; + text-transform: uppercase; +} + +.mobile-navigation { + position: absolute; + top: 100%; + right: 0; + left: 0; + display: grid; + padding: 18px var(--page-gutter) 24px; + border-bottom: 1px solid var(--hairline-strong); + background: var(--paper); + box-shadow: var(--whisper-shadow); +} + +.mobile-navigation a, +.mobile-navigation button { + min-height: 48px; + padding: 0; + border: 0; + border-bottom: 1px solid var(--hairline); + color: var(--ink); + background: transparent; + cursor: pointer; + font-family: var(--sans); + font-size: 12px; + letter-spacing: .08em; + line-height: 48px; + text-align: left; + text-decoration: none; + text-transform: uppercase; +} + +main { overflow: clip; } + +.hero { + display: grid; + width: min(100%, var(--page-max)); + min-height: calc(100dvh - var(--header-height)); + grid-template-columns: minmax(0, 1.08fr) minmax(430px, .92fr); + align-items: center; + gap: clamp(36px, 4.5vw, 80px); + margin: 0 auto; + padding: clamp(52px, 7vw, 94px) var(--page-gutter); +} + +.hero-copy-block { position: relative; z-index: 2; } + +.hero h1 { + max-width: 760px; + margin: 0; + font-family: var(--display); + font-size: clamp(58px, 5.9vw, 92px); + font-weight: 500; + letter-spacing: -.07em; + line-height: .82; +} + +.hero h1 span, +.hero h1 em { display: block; } + +.hero h1 em { + padding-bottom: .07em; + color: var(--brand); + font-weight: 400; + white-space: nowrap; +} + +.hero-copy { + max-width: 560px; + margin: 30px 0 0; + color: var(--ink-soft); + font-size: clamp(17px, 1.55vw, 21px); + line-height: 1.55; +} + +.hero-actions { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 12px; + margin-top: 30px; +} + +.hero-stage { + position: relative; + min-width: 0; + min-height: min(520px, calc(100dvh - 150px)); + isolation: isolate; +} + +.hero-stage::before { + position: absolute; + z-index: -2; + inset: 4% 3% 9% 9%; + border: 1px solid color-mix(in srgb, var(--brand) 18%, var(--hairline)); + background: + linear-gradient(135deg, color-mix(in srgb, var(--brand-tint) 74%, transparent), transparent 54%), + repeating-linear-gradient(90deg, transparent 0 54px, color-mix(in srgb, var(--hairline) 55%, transparent) 55px), + var(--surface); + box-shadow: 18px 18px 0 color-mix(in srgb, var(--brand) 8%, transparent); + content: ''; + transform: rotate(-1.5deg); +} + +.hero-stage::after { + position: absolute; + z-index: -1; + top: 0; + right: 0; + width: 38%; + aspect-ratio: 1; + border: 1px solid color-mix(in srgb, var(--brand) 34%, transparent); + background: radial-gradient(circle at 32% 30%, color-mix(in srgb, var(--brand) 34%, transparent), transparent 62%); + content: ''; + transform: translate(7%, -6%); +} + +.stage-card { + position: absolute; + z-index: 2; + top: 11%; + right: 7%; + width: min(78%, 540px); + transform: rotate(1deg); +} + +.hero-card-content { display: grid; gap: 24px; } + +.stage-alert { + position: absolute; + z-index: 3; + top: 6%; + left: 0; + width: min(70%, 430px); + transform: rotate(-2deg); +} + +.stage-actions { + position: absolute; + z-index: 4; + right: 0; + bottom: 3%; + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: flex-end; + gap: 10px; + width: min(84%, 560px); + padding: 14px; + border: 1px solid var(--hairline-strong); + background: color-mix(in srgb, var(--paper) 88%, transparent); + box-shadow: 10px 10px 0 color-mix(in srgb, var(--brand) 9%, transparent); + backdrop-filter: blur(14px); + -webkit-backdrop-filter: blur(14px); +} + +.proof-rail { + width: min(100%, var(--content-max)); + margin: 0 auto; + padding: 0 var(--page-gutter); +} + +.proof-rail dl { + display: grid; + grid-template-columns: repeat(4, minmax(0, 1fr)); + margin: 0; + border-block: 1px solid var(--hairline-strong); +} + +.proof-rail dl > div { + display: flex; + min-height: 92px; + align-items: center; + justify-content: space-between; + gap: 20px; + padding: 0 clamp(14px, 2vw, 26px); + border-right: 1px solid var(--hairline); +} + +.proof-rail dl > div:last-child { border-right: 0; } + +.proof-rail dt { + color: var(--ink-muted); + font-family: var(--mono); + font-size: 9px; + letter-spacing: .1em; + text-transform: uppercase; +} + +.proof-rail dd { + margin: 0; + color: var(--brand); + font-family: var(--display); + font-size: clamp(26px, 3vw, 38px); +} + +.page-section { + width: min(100%, var(--content-max)); + margin: 0 auto; + padding: clamp(96px, 10vw, 156px) var(--page-gutter); + scroll-margin-top: calc(var(--header-height) + 20px); +} + +.section-heading { + display: grid; + max-width: 780px; + gap: 18px; + margin-bottom: clamp(44px, 6vw, 82px); +} + +.section-label { + margin: 0; + color: var(--brand); + font-family: var(--mono); + font-size: 9px; + letter-spacing: .16em; + text-transform: uppercase; +} + +.section-heading h2 { + max-width: 760px; + margin: 0; + font-family: var(--display); + font-size: clamp(52px, 6.5vw, 94px); + font-weight: 500; + letter-spacing: -.055em; + line-height: .9; +} + +.section-heading > p:not(.section-label) { + max-width: 620px; + margin: 0; + color: var(--ink-soft); + font-size: clamp(16px, 1.4vw, 19px); + line-height: 1.6; +} + +.tokens-section { border-top: 1px solid var(--hairline-strong); } + +.token-composition { + display: grid; + grid-template-columns: minmax(320px, .82fr) minmax(0, 1.18fr); + align-items: stretch; + gap: clamp(20px, 3vw, 44px); +} + +.token-poster { + position: relative; + min-height: 560px; + overflow: hidden; + border: 1px solid var(--hairline-strong); + background: var(--webase-color-canvas); + box-shadow: 14px 14px 0 color-mix(in srgb, var(--brand) 8%, transparent); +} + +.token-poster span { position: absolute; display: block; } + +.poster-canvas { + inset: 8% 10% 16% 8%; + border: 1px solid var(--webase-color-border-strong); + background: var(--webase-color-surface); + transform: rotate(-3deg); +} + +.poster-brand { + top: 17%; + right: 4%; + width: 48%; + height: 36%; + background: var(--webase-color-brand); + transform: rotate(6deg); +} + +.poster-ink { + bottom: 9%; + left: 16%; + width: 58%; + height: 26%; + background: var(--webase-color-ink); + transform: rotate(-7deg); +} + +.poster-signal { + right: 13%; + bottom: 15%; + width: 20%; + aspect-ratio: 1; + border: 12px solid var(--webase-color-success); + background: var(--webase-color-warning-field); + transform: rotate(10deg); +} + +.token-poster strong { + position: absolute; + z-index: 2; + bottom: 4%; + left: 4%; + color: var(--webase-color-brand); + font-family: var(--mono); + font-size: clamp(18px, 2.4vw, 30px); + font-weight: 400; + letter-spacing: -.03em; +} + +.token-index { + display: grid; + min-width: 0; + grid-template-columns: repeat(6, minmax(0, 1fr)); + grid-auto-rows: minmax(102px, auto); + gap: 10px; +} + +.token-chip { + display: grid; + min-width: 0; + grid-template-columns: 12px minmax(0, 1fr); + align-items: end; + gap: 14px; + padding: 16px; + border: 1px solid color-mix(in srgb, var(--token-swatch) 30%, var(--hairline)); + background: color-mix(in srgb, var(--token-swatch) 10%, var(--surface)); +} + +.token-canvas { grid-column: span 4; } +.token-surface { grid-column: span 2; } +.token-ink { grid-column: span 3; } +.token-muted { grid-column: span 3; } +.token-brand { grid-column: span 2; grid-row: span 2; } +.token-tint { grid-column: span 4; } +.token-success, +.token-warning, +.token-error { grid-column: span 2; } + +.token-swatch { + width: 12px; + height: 100%; + min-height: 58px; + background: var(--token-swatch); +} + +.token-chip div { min-width: 0; } + +.token-chip strong { + display: block; + margin-bottom: 8px; + font-family: var(--sans); + font-size: 10px; + font-weight: 500; + letter-spacing: .08em; + text-transform: uppercase; +} + +code { + color: var(--brand); + font-family: var(--mono); + font-size: 12px; +} + +.token-chip code { + display: block; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.components-section { + width: min(100%, var(--page-max)); + border-top: 1px solid var(--hairline-strong); +} + +.components-heading { margin-bottom: clamp(38px, 5vw, 64px); } + +.section-search-button { + display: inline-flex; + width: max-content; + min-height: 44px; + align-items: center; + gap: 10px; + padding: 0 14px; + border: 1px solid var(--hairline-strong); + color: var(--brand); + background: var(--surface); + cursor: pointer; + font-family: var(--sans); + font-size: 10px; + letter-spacing: .08em; + text-transform: uppercase; + transition: border-color var(--duration-ui) var(--ease-out), background-color var(--duration-ui) var(--ease-out), transform var(--duration-fast) var(--ease-out); +} + +.section-search-button:hover { + border-color: var(--brand); + background: var(--brand-tint); + transform: translateY(-1px); +} + +.section-search-button:active { transform: translateY(0); } + +.mobile-component-select { display: none; } + +.reference-shell { + display: grid; + min-width: 0; + grid-template-columns: 236px minmax(0, 1fr); + align-items: start; + gap: clamp(28px, 3vw, 50px); +} + +.reference-sidebar { + position: sticky; + top: calc(var(--header-height) + 24px); + max-height: calc(100dvh - var(--header-height) - 48px); + min-width: 0; + padding-right: 22px; + overflow: auto; + border-right: 1px solid var(--hairline-strong); + scrollbar-width: thin; +} + +.sidebar-search { + display: grid; + grid-template-columns: auto minmax(0, 1fr); + align-items: center; + gap: 9px; + min-height: 42px; + padding: 0 10px; + border: 1px solid var(--hairline-strong); + color: var(--ink-muted); + background: var(--surface); +} + +.sidebar-search:focus-within { + border-color: var(--brand); + outline: var(--focus-ring); + outline-offset: 2px; +} + +.sidebar-search input { + min-width: 0; + border: 0; + outline: 0; + color: var(--ink); + background: transparent; + font-family: var(--sans); + font-size: 11px; +} + +.sidebar-search input::placeholder { color: var(--ink-muted); opacity: 1; } + +.sidebar-count { + margin: 10px 0 26px; + color: var(--ink-muted); + font-family: var(--mono); + font-size: 9px; +} + +.sidebar-groups { display: grid; gap: 24px; } + +.sidebar-group h3 { + margin: 0 0 8px; + color: var(--ink-muted); + font-family: var(--mono); + font-size: 8px; + font-weight: 400; + letter-spacing: .12em; + text-transform: uppercase; +} + +.sidebar-group > div { display: grid; gap: 2px; } + +.sidebar-group button { + min-height: 34px; + padding: 0 10px; + border: 0; + border-left: 2px solid transparent; + color: var(--ink-soft); + background: transparent; + cursor: pointer; + font-family: var(--sans); + font-size: 11px; + text-align: left; + transition: border-color var(--duration-fast) var(--ease-out), color var(--duration-fast) var(--ease-out), background-color var(--duration-ui) var(--ease-out), transform var(--duration-fast) var(--ease-out); +} + +.sidebar-group button:hover { + color: var(--ink); + background: color-mix(in srgb, var(--brand-tint) 55%, transparent); + transform: translateX(2px); +} + +.sidebar-group button.selected { + border-left-color: var(--brand); + color: var(--brand); + background: var(--brand-tint); +} + +.sidebar-empty { + margin: 0; + color: var(--ink-muted); + font-size: 14px; + line-height: 1.5; +} + +.reference-detail { + min-width: 0; + scroll-margin-top: calc(var(--header-height) + 24px); +} + +.reference-detail:focus { outline: none; } + +.reference-detail:focus .reference-header::before { + position: absolute; + top: 0; + bottom: 0; + left: -14px; + width: 2px; + background: var(--brand); + content: ''; +} + +.reference-header { + position: relative; + display: grid; + grid-template-columns: minmax(0, 1fr) auto; + align-items: start; + gap: 30px; + margin-bottom: 28px; +} + +.reference-header > div > p:first-child { + margin: 0 0 10px; + color: var(--brand); + font-family: var(--mono); + font-size: 9px; + letter-spacing: .12em; + text-transform: uppercase; +} + +.reference-header h3 { + margin: 0; + font-family: var(--display); + font-size: clamp(44px, 5.4vw, 78px); + font-weight: 500; + letter-spacing: -.05em; + line-height: .92; +} + +.reference-header > div > p:last-child { + max-width: 760px; + margin: 18px 0 0; + color: var(--ink-soft); + font-size: 16px; + line-height: 1.6; +} + +.reference-header > div > p:last-child code { + padding: 1px 4px; + background: color-mix(in srgb, var(--brand-tint) 60%, transparent); + font-size: .82em; +} + +.reference-version { + padding: 7px 8px; + border: 1px solid var(--hairline); + color: var(--ink-muted); + font-family: var(--mono); + font-size: 8px; +} + +.preview-panel, +.contract-panel, +.example-panel { + min-width: 0; + border: 1px solid var(--hairline-strong); + background: var(--surface); +} + +.preview-panel > header, +.contract-panel > header, +.example-panel > header, +.install-primary > header, +.install-import > header { + display: flex; + min-height: 48px; + align-items: center; + justify-content: space-between; + gap: 18px; + padding: 0 14px; + border-bottom: 1px solid var(--hairline); +} + +.preview-panel h4, +.contract-panel h4, +.example-panel h4 { + margin: 0; + font-family: var(--sans); + font-size: 10px; + font-weight: 500; + letter-spacing: .09em; + text-transform: uppercase; +} + +.preview-panel > header span, +.contract-panel > header span { + color: var(--ink-muted); + font-family: var(--mono); + font-size: 8px; + letter-spacing: .06em; + text-transform: uppercase; +} + +.preview-canvas { + display: grid; + min-height: 320px; + align-items: center; + padding: clamp(22px, 4vw, 54px); + background: + linear-gradient(90deg, transparent 49.8%, color-mix(in srgb, var(--hairline) 55%, transparent) 50%, transparent 50.2%), + linear-gradient(0deg, transparent 49.8%, color-mix(in srgb, var(--hairline) 55%, transparent) 50%, transparent 50.2%), + color-mix(in srgb, var(--brand-tint) 20%, var(--paper)); + background-size: 72px 72px; +} + +.reference-lower { + display: grid; + grid-template-columns: minmax(0, 1.15fr) minmax(300px, .85fr); + align-items: start; + gap: 16px; + margin-top: 16px; +} + +.contract-grid { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 10px; + margin: 0; + padding: 14px; +} + +.contract-grid > div { + min-width: 0; + padding: 16px; + background: color-mix(in srgb, var(--brand-tint) 28%, var(--paper)); +} + +.contract-grid > div.contract-wide { grid-column: 1 / -1; } + +.contract-grid dt { + margin-bottom: 9px; + color: var(--brand); + font-family: var(--mono); + font-size: 8px; + letter-spacing: .1em; + text-transform: uppercase; +} + +.contract-grid dd { + margin: 0; + color: var(--ink-soft); + font-size: 14px; + line-height: 1.55; +} + +.contract-grid dd code { + padding: 1px 3px; + background: color-mix(in srgb, var(--brand-tint) 62%, transparent); + white-space: break-spaces; +} + +.example-panel { position: sticky; top: calc(var(--header-height) + 24px); } + +.example-panel header button, +.install-primary header button, +.install-import header button { + display: inline-flex; + min-height: 30px; + align-items: center; + gap: 6px; + padding: 0 8px; + border: 1px solid var(--hairline); + color: var(--brand); + background: transparent; + cursor: pointer; + font-family: var(--sans); + font-size: 9px; + letter-spacing: .07em; + text-transform: uppercase; +} + +pre { + min-width: 0; + margin: 0; + overflow: auto; +} + +.example-panel pre, +.install-primary pre, +.install-import pre { + padding: clamp(18px, 2.5vw, 28px); +} + +pre code { + color: var(--ink); + font-size: 12px; + line-height: 1.75; + white-space: pre; +} + +.install-section { border-top: 1px solid var(--hairline-strong); } + +.install-composition { + display: grid; + grid-template-columns: repeat(12, minmax(0, 1fr)); + gap: 16px; +} + +.install-primary, +.install-import { + min-width: 0; + border: 1px solid var(--hairline-strong); + background: var(--surface); + box-shadow: 9px 9px 0 color-mix(in srgb, var(--brand) 8%, transparent); +} + +.install-primary { grid-column: span 7; } +.install-import { grid-column: span 5; transform: translateY(42px); } + +.install-primary header span, +.install-import header span { + color: var(--brand); + font-family: var(--sans); + font-size: 10px; + letter-spacing: .09em; + text-transform: uppercase; +} + +.install-primary > p { + margin: 0; + padding: 0 28px 24px; + color: var(--ink-muted); + font-family: var(--mono); + font-size: 9px; +} + +.install-notes { + display: grid; + grid-column: 1 / -1; + grid-template-columns: 1.2fr .9fr 1.15fr 1fr; + margin-top: 58px; + border-block: 1px solid var(--hairline-strong); +} + +.install-notes > div { + display: grid; + min-height: 96px; + align-content: center; + gap: 8px; + padding: 16px 20px; + border-right: 1px solid var(--hairline); +} + +.install-notes > div:last-child { border-right: 0; } + +.install-notes strong { + color: var(--brand); + font-family: var(--mono); + font-size: 9px; + font-weight: 400; + letter-spacing: .08em; + text-transform: uppercase; +} + +.install-notes span { + color: var(--ink-soft); + font-size: 14px; +} + +footer { + display: flex; + width: min(100%, var(--content-max)); + min-height: 124px; + align-items: center; + justify-content: space-between; + gap: 28px; + margin: 0 auto; + padding: 28px var(--page-gutter) 44px; + border-top: 1px solid var(--hairline-strong); +} + +.footer-brand { + display: inline-flex; + align-items: center; + gap: 10px; + font-family: var(--sans); + font-size: 11px; + letter-spacing: .08em; + text-decoration: none; + text-transform: uppercase; +} + +.footer-brand img { display: block; object-fit: contain; } + +footer nav { + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: flex-end; + gap: 20px; + color: var(--ink-muted); + font-family: var(--mono); + font-size: 9px; +} + +footer nav a { text-underline-offset: 4px; } + +.search-dialog { + width: min(940px, calc(100vw - 36px)); + max-height: min(760px, calc(100dvh - 36px)); + margin: auto; + padding: 0; + overflow: visible; + border: 0; + color: var(--ink); + background: transparent; +} + +.search-dialog::backdrop { + background: color-mix(in srgb, var(--ink) 58%, transparent); + backdrop-filter: blur(9px); + -webkit-backdrop-filter: blur(9px); +} + +.search-panel { + max-height: min(760px, calc(100dvh - 36px)); + overflow: auto; + border: 1px solid var(--hairline-strong); + background: var(--paper); + box-shadow: 20px 20px 0 color-mix(in srgb, var(--brand) 15%, transparent); +} + +.search-panel > header { + display: flex; + align-items: flex-start; + justify-content: space-between; + gap: 20px; + padding: clamp(20px, 3vw, 34px); +} + +.search-panel > header p { + margin: 0 0 8px; + color: var(--brand); + font-family: var(--mono); + font-size: 8px; + letter-spacing: .12em; + text-transform: uppercase; +} + +.search-panel > header h2 { + margin: 0; + font-family: var(--display); + font-size: clamp(34px, 5vw, 56px); + font-weight: 500; + letter-spacing: -.045em; + line-height: .95; +} + +.search-input { + display: grid; + grid-template-columns: auto minmax(0, 1fr) auto; + align-items: center; + gap: 12px; + min-height: 62px; + margin: 0 clamp(20px, 3vw, 34px); + padding: 0 16px; + border: 1px solid var(--hairline-strong); + color: var(--brand); + background: var(--surface); +} + +.search-input:focus-within { + border-color: var(--brand); + outline: var(--focus-ring); + outline-offset: 3px; +} + +.search-input input { + min-width: 0; + border: 0; + outline: 0; + color: var(--ink); + background: transparent; + font-size: clamp(16px, 2vw, 20px); +} + +.search-input input::placeholder { color: var(--ink-muted); opacity: 1; } + +.search-results { padding: 24px clamp(20px, 3vw, 34px) 34px; } + +.search-results > p { + margin: 0 0 12px; + color: var(--ink-muted); + font-family: var(--mono); + font-size: 9px; + letter-spacing: .08em; + text-transform: uppercase; +} + +.search-results ul { + display: grid; + margin: 0; + padding: 0; + list-style: none; +} + +.search-results li { border-top: 1px solid var(--hairline); } +.search-results li:last-child { border-bottom: 1px solid var(--hairline); } + +.search-results li button { + display: grid; + width: 100%; + min-height: 74px; + grid-template-columns: minmax(180px, .65fr) minmax(0, 1.35fr) auto; + align-items: center; + gap: 22px; + padding: 12px 10px; + border: 0; + color: var(--ink); + background: transparent; + cursor: pointer; + text-align: left; + transition: color var(--duration-ui) var(--ease-out), background-color var(--duration-ui) var(--ease-out), transform var(--duration-fast) var(--ease-out); +} + +.search-results li button:hover, +.search-results li button:focus-visible { + color: var(--brand); + background: var(--brand-tint); + transform: translateX(3px); +} + +.search-results li button > span:first-child { display: grid; gap: 4px; } + +.search-results strong { + font-family: var(--sans); + font-size: 11px; + font-weight: 500; +} + +.search-results small { + color: var(--ink-muted); + font-family: var(--mono); + font-size: 8px; + letter-spacing: .08em; + text-transform: uppercase; +} + +.search-results li button > span:nth-child(2) { + display: -webkit-box; + overflow: hidden; + color: var(--ink-soft); + font-size: 13px; + line-height: 1.45; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; +} + +.search-empty { + display: grid; + min-height: 220px; + place-items: center; + align-content: center; + gap: 10px; + border: 1px dashed var(--hairline-strong); + color: var(--ink-muted); + text-align: center; +} + +.search-empty strong { color: var(--ink); font-size: 16px; } +.search-empty span { font-size: 14px; } + +@media (prefers-reduced-motion: no-preference) { + .hero-copy-block > * { + opacity: 0; + animation: hero-copy-in 780ms var(--ease-out) both; + } + + .hero-copy-block > :nth-child(2) { animation-delay: 110ms; } + .hero-copy-block > :nth-child(3) { animation-delay: 190ms; } + + .hero-stage { + opacity: 0; + animation: stage-in 980ms var(--ease-out) 120ms both; + } + + .stage-alert { animation: layer-in 720ms var(--ease-out) 460ms both; } + .stage-actions { animation: layer-in 720ms var(--ease-out) 580ms both; } + + [data-reveal] { + opacity: 0; + transform: translateY(34px); + transition: opacity 760ms var(--ease-out), transform 760ms var(--ease-out); + } + + [data-reveal].is-visible { + opacity: 1; + transform: translateY(0); + } + + .reference-detail { animation: reference-in 520ms var(--ease-out) both; } + .search-dialog[open] .search-panel { animation: search-in 420ms var(--ease-out) both; } + .mobile-navigation { animation: mobile-menu-in 320ms var(--ease-drawer) both; } +} + +@keyframes hero-copy-in { + from { opacity: 0; transform: translateY(28px); } + to { opacity: 1; transform: translateY(0); } +} + +@keyframes stage-in { + from { opacity: 0; transform: translate3d(36px, 18px, 0) rotate(1deg); } + to { opacity: 1; transform: translate3d(0, 0, 0) rotate(0); } +} + +@keyframes layer-in { + from { opacity: 0; transform: translateY(20px) rotate(0); } + to { opacity: 1; } +} + +@keyframes reference-in { + from { opacity: 0; transform: translateY(18px); } + to { opacity: 1; transform: translateY(0); } +} + +@keyframes search-in { + from { opacity: 0; transform: translateY(24px) scale(.985); } + to { opacity: 1; transform: translateY(0) scale(1); } +} + +@keyframes mobile-menu-in { + from { opacity: 0; transform: translateY(-12px); } + to { opacity: 1; transform: translateY(0); } +} + +@media (max-width: 1180px) { + .header-inner { grid-template-columns: auto minmax(160px, 240px) 1fr auto; } + .hero { grid-template-columns: minmax(0, 1fr) minmax(400px, .9fr); gap: 42px; } + .hero h1 { font-size: clamp(56px, 6.2vw, 78px); } + .reference-shell { grid-template-columns: 210px minmax(0, 1fr); } + .reference-lower { grid-template-columns: 1fr; } + .example-panel { position: static; } +} + +@media (max-width: 960px) { + .header-inner { grid-template-columns: auto minmax(150px, 220px) 1fr auto; gap: 16px; } + .primary-nav { gap: 16px; } + .hero { + min-height: auto; + grid-template-columns: 1fr; + padding-top: 78px; + padding-bottom: 90px; + } + .hero h1 em { white-space: normal; } + .hero-copy-block { max-width: 760px; } + .hero-stage { width: min(720px, 100%); min-height: 560px; margin-left: auto; } + .token-composition { grid-template-columns: 1fr; } + .token-poster { min-height: 440px; } + .reference-shell { grid-template-columns: 190px minmax(0, 1fr); gap: 28px; } +} + +@media (max-width: 820px) { + :root { --header-height: 66px; } + .site-header { background: var(--paper); } + .header-inner { grid-template-columns: auto minmax(0, 1fr) auto; } + .primary-nav { display: none; } + .mobile-menu-button { display: inline-flex; align-items: center; } + .theme-control > span { display: none; } + .proof-rail dl { grid-template-columns: repeat(2, minmax(0, 1fr)); } + .proof-rail dl > div:nth-child(2) { border-right: 0; } + .proof-rail dl > div:nth-child(-n + 2) { border-bottom: 1px solid var(--hairline); } + .reference-sidebar { display: none; } + .reference-shell { display: block; } + .mobile-component-select { + display: grid; + gap: 8px; + margin-bottom: 28px; + } + .mobile-component-select label { + font-family: var(--sans); + font-size: 10px; + letter-spacing: .08em; + text-transform: uppercase; + } + .mobile-component-select select { + width: 100%; + min-height: 48px; + padding: 0 42px 0 12px; + border: 1px solid var(--hairline-strong); + border-radius: 0; + color: var(--ink); + background: var(--surface); + } + .reference-header h3 { font-size: clamp(42px, 10vw, 68px); } + .install-primary, + .install-import { grid-column: 1 / -1; } + .install-import { transform: none; } + .install-notes { grid-template-columns: repeat(2, minmax(0, 1fr)); margin-top: 16px; } + .install-notes > div:nth-child(2) { border-right: 0; } + .install-notes > div:nth-child(-n + 2) { border-bottom: 1px solid var(--hairline); } +} + +@media (max-width: 620px) { + :root { --header-height: 64px; } + body { background: var(--paper); } + body::before { opacity: .035; } + .header-inner { gap: 10px; } + .brand-logo { width: 34px; height: 37px; } + .search-trigger { width: 42px; min-width: 42px; grid-template-columns: 1fr; place-items: center; padding: 0; } + .search-trigger span, + .search-trigger kbd { display: none; } + .theme-control { gap: 0; } + .mobile-menu-button { min-width: 46px; justify-content: flex-end; } + .hero { gap: 34px; padding-top: 56px; padding-bottom: 72px; } + .hero h1 { font-size: clamp(52px, 16vw, 72px); line-height: .86; } + .hero-copy { margin-top: 24px; font-size: 17px; } + .hero-actions { align-items: stretch; } + .hero-stage { min-height: 490px; } + .hero-stage::before { inset: 5% 1% 12% 4%; } + .hero-stage::after { width: 44%; } + .stage-card { top: 13%; right: 1%; width: 91%; } + .stage-alert { top: 1%; width: 88%; } + .stage-actions { right: 2%; bottom: 0; width: 94%; justify-content: flex-start; } + .stage-actions .ds-tooltip { display: none; } + .proof-rail dl > div { min-height: 78px; } + .proof-rail dd { font-size: 28px; } + .page-section { padding-top: 78px; padding-bottom: 84px; } + .section-heading { gap: 14px; margin-bottom: 38px; } + .section-heading h2 { font-size: clamp(46px, 14vw, 66px); } + .token-poster { min-height: 360px; } + .token-index { grid-template-columns: repeat(2, minmax(0, 1fr)); } + .token-chip, + .token-canvas, + .token-surface, + .token-ink, + .token-muted, + .token-brand, + .token-tint, + .token-success, + .token-warning, + .token-error { grid-column: auto; grid-row: auto; } + .token-brand { grid-column: 1 / -1; } + .reference-header { grid-template-columns: 1fr; gap: 14px; } + .reference-version { width: max-content; } + .preview-canvas { min-height: 280px; padding: 20px; background-size: 52px 52px; } + .contract-grid { grid-template-columns: 1fr; } + .contract-grid > div.contract-wide { grid-column: auto; } + .install-notes { grid-template-columns: 1fr; } + .install-notes > div, + .install-notes > div:nth-child(2) { border-right: 0; border-bottom: 1px solid var(--hairline); } + .install-notes > div:last-child { border-bottom: 0; } + footer { align-items: flex-start; flex-direction: column; } + footer nav { justify-content: flex-start; } + .search-dialog { width: calc(100vw - 20px); max-height: calc(100dvh - 20px); } + .search-panel { max-height: calc(100dvh - 20px); box-shadow: 8px 8px 0 color-mix(in srgb, var(--brand) 15%, transparent); } + .search-panel > header { padding: 20px; } + .search-input { min-height: 56px; margin: 0 20px; } + .search-input kbd { display: none; } + .search-results { padding: 20px; } + .search-results li button { min-height: 86px; grid-template-columns: minmax(0, 1fr) auto; gap: 14px; } + .search-results li button > span:nth-child(2) { display: none; } +} + +@media (prefers-reduced-motion: reduce) { + html { scroll-behavior: auto; } + *, *::before, *::after { + animation: none !important; + scroll-behavior: auto !important; + transition: none !important; + } + [data-reveal] { opacity: 1; transform: none; } +} + +@media (prefers-reduced-transparency: reduce) { + .site-header, + .stage-actions, + .search-dialog::backdrop { + backdrop-filter: none; + -webkit-backdrop-filter: none; + } + .site-header, + .stage-actions { background: var(--paper); } +} + +@media (forced-colors: active) { + body::before, + .hero-stage::before, + .hero-stage::after { display: none; } + .token-chip, + .preview-panel, + .contract-panel, + .example-panel, + .install-primary, + .install-import { border: 1px solid CanvasText; } +} diff --git a/apps/docs/src/lib/ComponentPreview.svelte b/apps/docs/src/lib/ComponentPreview.svelte new file mode 100644 index 0000000..d064d9d --- /dev/null +++ b/apps/docs/src/lib/ComponentPreview.svelte @@ -0,0 +1,212 @@ + + +
+ {#if name === 'WeBaseAccordion'} + + {:else if name === 'WeBaseAlert'} + {#if alertOpen} + + {:else} + (alertOpen = true)} /> + {/if} + {:else if name === 'WeBaseBadge'} +
+ + + +
+ {:else if name === 'WeBaseBreadcrumbs'} + + {:else if name === 'WeBaseButton'} +
+ + + + +
+ {:else if name === 'WeBaseCard'} +
+ (cardActions += 1)}> +

Children and footer remain owned by the consumer. Action count: {cardActions}.

+ {#snippet footer()}Package root import{/snippet} +
+
+ {:else if name === 'WeBaseCheck'} +
+ + + (indeterminate = !indeterminate)} /> +
+ {:else if name === 'WeBaseDialog'} + (dialogOpen = true)} /> + + {:else if name === 'WeBaseDivider'} +
+ +
CoreSvelte
+
+ {:else if name === 'WeBaseEmptyState'} + (emptyActions += 1)} /> + {#if emptyActions > 0}

Action received.

{/if} + {:else if name === 'WeBaseField'} +
+ +
+ {:else if name === 'WeBaseIcon'} +
+ archive + bookmark + search + settings-2 + sparkles +
+ {:else if name === 'WeBaseIconButton'} +
+ + + +
+ {:else if name === 'WeBaseLink'} +
+ + + +
+ {:else if name === 'WeBaseLoader'} + + {:else if name === 'WeBasePagination'} + + {:else if name === 'WeBaseProgress'} +
+ + +
+ {:else if name === 'WeBaseRadio'} +
+ + +
+ {:else if name === 'WeBaseSectionHeader'} + + {:else if name === 'WeBaseSelect'} +
+ +
+ {:else if name === 'WeBaseSkeleton'} +
+ {:else if name === 'WeBaseSlider'} +
+ {:else if name === 'WeBaseSwitch'} + + {:else if name === 'WeBaseTag'} +
+ + + +
+ {:else if name === 'WeBaseTabs'} + + {:else if name === 'WeBaseTextarea'} +
+ {:else if name === 'WeBaseToast'} +
+ (toastOpen = true)} /> + +
+ {:else if name === 'WeBaseTooltip'} +
+ + +
+ {/if} +
+ + diff --git a/apps/docs/src/lib/reference-utils.ts b/apps/docs/src/lib/reference-utils.ts new file mode 100644 index 0000000..c1ef4b6 --- /dev/null +++ b/apps/docs/src/lib/reference-utils.ts @@ -0,0 +1,36 @@ +export interface ParsedContractField { + label: string; + value: string; +} + +export function parseFields(body: string): ParsedContractField[] { + const bullets: string[] = []; + let current = ''; + + for (const line of body.split(/\r?\n/)) { + if (line.startsWith('- ')) { + if (current) bullets.push(current); + current = line.slice(2).trim(); + } else if (current && /^\s{2,}\S/.test(line)) { + current += ` ${line.trim()}`; + } + } + + if (current) bullets.push(current); + + return bullets.map((bullet) => { + const separator = bullet.indexOf(': '); + if (separator < 0) return { label: 'Contract', value: bullet }; + return { + label: bullet.slice(0, separator), + value: bullet.slice(separator + 2) + }; + }); +} + +export function inlineParts(value: string) { + return value + .split('`') + .map((text, index) => ({ text, code: index % 2 === 1 })) + .filter(({ text }) => text.length > 0); +} diff --git a/apps/docs/src/lib/reference.ts b/apps/docs/src/lib/reference.ts new file mode 100644 index 0000000..5be3c79 --- /dev/null +++ b/apps/docs/src/lib/reference.ts @@ -0,0 +1,134 @@ +import contractSource from '../../../../packages/webaseui-svelte/API_CONTRACT.md?raw'; +import packageSource from '../../../../packages/webaseui-svelte/package.json?raw'; +import { inlineParts, parseFields, type ParsedContractField } from './reference-utils.js'; + +export { inlineParts, parseFields } from './reference-utils.js'; + +export const componentGroups = { + WeBaseAccordion: 'Disclosure', + WeBaseAlert: 'Feedback', + WeBaseBadge: 'Status', + WeBaseBreadcrumbs: 'Navigation', + WeBaseButton: 'Action', + WeBaseCard: 'Surface', + WeBaseCheck: 'Selection', + WeBaseDialog: 'Overlay', + WeBaseDivider: 'Structure', + WeBaseEmptyState: 'Content', + WeBaseField: 'Form', + WeBaseIcon: 'Foundation', + WeBaseIconButton: 'Action', + WeBaseLink: 'Navigation', + WeBaseLoader: 'Feedback', + WeBasePagination: 'Navigation', + WeBaseProgress: 'Feedback', + WeBaseRadio: 'Selection', + WeBaseSectionHeader: 'Structure', + WeBaseSelect: 'Form', + WeBaseSkeleton: 'Feedback', + WeBaseSlider: 'Form', + WeBaseSwitch: 'Selection', + WeBaseTag: 'Navigation', + WeBaseTabs: 'Navigation', + WeBaseTextarea: 'Form', + WeBaseToast: 'Feedback', + WeBaseTooltip: 'Overlay' +} as const; + +export type ComponentName = keyof typeof componentGroups; + +export const groupOrder = [ + 'Action', + 'Content', + 'Disclosure', + 'Feedback', + 'Form', + 'Foundation', + 'Navigation', + 'Overlay', + 'Selection', + 'Status', + 'Structure', + 'Surface' +] as const; + +export type ContractField = ParsedContractField; + +export interface ComponentReference { + name: ComponentName; + shortName: string; + slug: string; + group: (typeof componentGroups)[ComponentName]; + summary: string; + fields: ContractField[]; + example: string; + searchText: string; +} + +const usageExamples: Record = { + WeBaseAccordion: ``, + WeBaseAlert: ``, + WeBaseBadge: ``, + WeBaseBreadcrumbs: ``, + WeBaseButton: ``, + WeBaseCard: ``, + WeBaseCheck: ``, + WeBaseDialog: ``, + WeBaseDivider: ``, + WeBaseEmptyState: ``, + WeBaseField: ``, + WeBaseIcon: ``, + WeBaseIconButton: ``, + WeBaseLink: ``, + WeBaseLoader: ``, + WeBasePagination: ``, + WeBaseProgress: ``, + WeBaseRadio: ``, + WeBaseSectionHeader: ``, + WeBaseSelect: ``, + WeBaseSkeleton: ``, + WeBaseSlider: ``, + WeBaseSwitch: ``, + WeBaseTag: ``, + WeBaseTabs: ``, + WeBaseTextarea: ``, + WeBaseToast: ``, + WeBaseTooltip: `` +}; + +function isComponentName(value: string): value is ComponentName { + return value in componentGroups; +} + +const sectionPattern = /^### (WeBase[A-Za-z]+)\s*$([\s\S]*?)(?=^### |^## Change policy)/gm; + +export const components: ComponentReference[] = Array.from(contractSource.matchAll(sectionPattern)).flatMap((match) => { + const name = match[1]; + if (!name || !isComponentName(name)) return []; + + const fields = parseFields(match[2] ?? ''); + const boundary = fields.find((field) => field.label === 'Boundary')?.value; + const rawSummary = boundary ?? fields.at(-1)?.value ?? 'Public component contract.'; + const summary = `${rawSummary.charAt(0).toLocaleUpperCase()}${rawSummary.slice(1)}`; + const shortName = name.replace(/^WeBase/, ''); + const slug = shortName.toLocaleLowerCase(); + const group = componentGroups[name]; + const example = usageExamples[name]; + + return [{ + name, + shortName, + slug, + group, + summary, + fields, + example, + searchText: `${name} ${shortName} ${group} ${fields.map(({ label, value }) => `${label} ${value}`).join(' ')}`.toLocaleLowerCase() + }]; +}); + +if (components.length !== 28) { + throw new Error(`Expected 28 component contracts, found ${components.length}.`); +} + +export const packageVersion = (JSON.parse(packageSource) as { version: string }).version; diff --git a/apps/docs/tsconfig.json b/apps/docs/tsconfig.json index 072b88b..1c93d76 100644 --- a/apps/docs/tsconfig.json +++ b/apps/docs/tsconfig.json @@ -2,8 +2,18 @@ "compilerOptions": { "module": "ESNext", "moduleResolution": "bundler", + "lib": [ + "ES2023", + "DOM", + "DOM.Iterable", + "ESNext.Disposable" + ], "strict": true, - "target": "ES2022" + "target": "ES2022", + "types": [ + "node", + "vite/client" + ] }, "include": [ "src/**/*.ts", diff --git a/apps/docs/vite.config.ts b/apps/docs/vite.config.ts index 3332039..083fbb2 100644 --- a/apps/docs/vite.config.ts +++ b/apps/docs/vite.config.ts @@ -1,6 +1,8 @@ import { defineConfig } from 'vite'; import { svelte } from '@sveltejs/vite-plugin-svelte'; +import { fileURLToPath } from 'node:url'; export default defineConfig({ - plugins: [svelte()] + plugins: [svelte()], + publicDir: fileURLToPath(new URL('../../static', import.meta.url)) }); diff --git a/docs/ADOPTION_MATRIX.md b/docs/ADOPTION_MATRIX.md new file mode 100644 index 0000000..053db0b --- /dev/null +++ b/docs/ADOPTION_MATRIX.md @@ -0,0 +1,167 @@ +# Adoption and Upgrade Matrix + +This document records which applications currently consume WeBaseUI, what was +actually verified, and which adoption claims are still pending. It is an +evidence log, not a list of intended integrations. + +## Status at 2026-08-17 + +| Consumer | Runtime | WeBaseUI packages | Role | Evidence | Status | +| --- | --- | --- | --- | --- | --- | +| xue (external checkout) | SvelteKit / Svelte 5 | `@webaseui/core@0.1.0`, `@webaseui/svelte@0.3.2` | External production-oriented SvelteKit consumer | `npm run check` passed with 0 Svelte diagnostics; package imports and design-system routes are present | Verified | +| FruitsAI/Fig at `3f37914` (disposable checkout) | SvelteKit / Svelte 5.56.6 / Cloudflare adapter | Registry `@webaseui/core@0.1.0`, `@webaseui/svelte@0.3.2` | External content, navigation, and search consumer trial | Button and Field replaced real category/search controls; check, lint, SSR build, Chromium interaction, axe, mobile reflow, and tree-shaking checks passed | Verified external trial | +| Sebastian1com/evaluacion-sveltekit-crud at `673cd63` (disposable checkout) | SvelteKit / Svelte 5.43.14 / form actions | Workspace candidate tarballs with version fields `0.1.0` / `0.3.2` | External create/read/update/delete workflow trial | Field, Textarea, and Button preserved native names, FormData, enhanced action submission, SSR build, axe subtree, mobile reflow, and tree shaking | Verified candidate trial | +| `examples/webaseui-svelte-consumer` | Vite / Svelte 5 | Registry-resolved package versions | Maintainer fixture for packed-artifact and registry smoke checks | `npm run check:registry -- --tag=latest` installed both packages from npm and built the fixture without workspace links | Verified fixture | +| WeMail | React | Does not consume `@webaseui/svelte` | Separate React application | Repository architecture is React; no Svelte package boundary exists | Not applicable | +| Fangcun | Next.js / React | Does not consume `@webaseui/svelte` | Separate React application | Repository architecture is React; no Svelte package boundary exists | Not applicable | + +The two React applications remain useful product contexts, but they do not +count toward the Svelte consumer requirement. A future React adapter must first +meet the framework-neutral token and behavior contracts; this matrix must not be +used to imply that adapter work has started. + +## Reproducible checks + +Run these from the WeBaseUI repository: + +```sh +npm run check:consumer +npm run check:registry -- --tag=latest +``` + +The registry smoke test resolves the current `latest` dist-tag for both public +packages, installs those versions into a temporary copy of the maintainer +fixture, builds it, and fails if either package resolves to this workspace. + +Run the external consumer check without changing its working tree: + +```sh +cd /Users/willxue/will/github/xue +npm ls @webaseui/core @webaseui/svelte --depth=0 +npm run check +``` + +At the status date above, this produced: + +```text +@webaseui/core@0.1.0 +@webaseui/svelte@0.3.2 +svelte-check found 0 errors and 0 warnings +``` + +The xue checkout already contains unrelated user changes. Adoption checks are +read-only and must not reset, clean, or otherwise overwrite that worktree. + +## Upgrade rehearsal + +The historical xue upgrade below satisfies the pre-1.0 minor-to-minor rehearsal. +Repeat the same process for every future minor in a disposable branch or +worktree: + +```sh +npm install @webaseui/core@ @webaseui/svelte@ +npm run check +npm run test:e2e +npm run build +``` + +Record the previous and new versions, any deprecation output, changed token or +component behavior, bundle-size result, and the exact rollback command. Do not +use a workspace link for this rehearsal; the purpose is to exercise the public +registry artifacts and the consumer's package boundary. + +### 2026-08-17 xue minor upgrade rehearsal + +The historical xue commit `2cf5bdd` was archived into a disposable checkout. It +was pinned to `@webaseui/svelte@0.2.0` and passed the baseline `npm run check` +and `npm run build`. The same checkout then upgraded to exact registry versions +`@webaseui/core@0.1.0` and `@webaseui/svelte@0.3.2`: + +| Check | Result | +| --- | --- | +| `npm ls @webaseui/core @webaseui/svelte --depth=0` | Exact `0.1.0` / `0.3.2` | +| `npm run check` | Passed; 0 Svelte diagnostics | +| `npm run build` | Passed; static production build generated | +| `npm run test:e2e` | 59/59 passed, including Chromium, Firefox smoke, and WebKit smoke | + +The original xue checkout was never modified. To roll back a real branch after +this rehearsal, restore its manifest and lockfile, then reinstall: + +```sh +git restore package.json package-lock.json +npm ci +``` + +## 2026-08-17 Fig registry adoption trial + +FruitsAI/Fig commit `3f37914a76a0ae2a0c04f9f29c84529285816990` +was cloned into a disposable directory. Exact public registry packages were +installed, core tokens and theme CSS were layered before the application's own +theme, and the article category buttons and search field were replaced with +`WeBaseButton` and `WeBaseField`. The source checkout at +`/Users/willxue/will/FruitsAI/Fig` was not modified. + +| Check | Result | +| --- | --- | +| `npm run check` | Passed; 0 errors and 0 warnings | +| `npm run lint` | Passed; Prettier and ESLint clean | +| `npm run build` | Passed; SvelteKit SSR and Cloudflare adapter output generated | +| Chromium interaction | Five category controls, search filtering, existing lightbox open/close, and pressed state passed | +| Accessibility and mobile | 0 serious/critical axe violations with reduced motion; no horizontal overflow at 390 x 844 | +| Tree shaking | Field and Button output present; Select, Dialog, and Tooltip signatures absent | +| Total client JS/CSS gzip | 79,717 B baseline to 83,214 B integrated, +3,497 B (+4.4%) | + +The published confirmation-oriented Dialog does not replace Fig's media +lightbox, which needs arbitrary image, caption, and future zoom behavior. That +remains an application composition rather than a forced component bypass. A +generic media-dialog proposal needs another concrete consumer and its own API +and accessibility specification. + +## 2026-08-17 CRUD candidate adoption trial + +Public repository `Sebastian1com/evaluacion-sveltekit-crud` commit +`673cd6347b57c4ad51bfe7d334056c4e15a28046` was cloned into a disposable +directory. Unlike the Fig trial, it installed tarballs packed from this +workspace so the unreleased native form-prop contract could be exercised. The +tarball version fields remain `0.1.0` / `0.3.2`; this evidence must not be +misread as a registry release. + +The create form used `WeBaseField`, `WeBaseTextarea`, and `WeBaseButton` while +the host application's existing edit/delete flows remained intact: + +| Check | Result | +| --- | --- | +| Candidate artifact boundary | Installed local tarballs; no workspace symlink or deep component import | +| Svelte check | Svelte Check 4.3.4 with TypeScript 5.9.3 passed; 0 errors and 0 warnings | +| SSR production build | Passed with Svelte 5.43.14 and Vite 7.2.4 | +| Native form contract | `inputProps.name=title` and `textareaProps.name=body` appeared in `FormData`; max length and submit type were preserved | +| Enhanced action | A real SvelteKit `?/crear` form action returned HTTP 200 | +| Accessibility and mobile | Candidate form subtree had 0 serious/critical axe violations; no horizontal overflow at 390 x 844; no browser console errors | +| Tree shaking | Field, Textarea, and Button output present; Select, Dialog, and Tooltip signatures absent | +| Total client JS/CSS gzip | 37,097 B baseline to 49,165 B integrated, +12,068 B (+32.5%) | + +The percentage increase is large because the host is a very small unstyled +demo and this is its first complete theme plus component dependency. The +absolute delta and absence of unused overlay code are the useful signals; the +result is recorded for review rather than normalized into the repository's +existing consumer baseline. A full-page axe scan also found the host's +pre-existing missing document title, so the component result is scoped to the +integrated form subtree and does not claim the host application is globally +accessible. + +The two-application and content/navigation plus form/CRUD adoption profiles are +now covered by external application trials. This closes the technical 1.0 +adoption gate; it does not replace registry publication, provenance, release +smoke, or the manual assistive-technology sign-off. + +## Adoption feedback ledger + +Update this table after each minor release or upgrade rehearsal. + +| Area | Current observation | Follow-up | +| --- | --- | --- | +| API escape hatches | All three external trials used package-root imports; the CRUD form validated native prop bags without wrapper DOM workarounds | Record any new root or native-prop escape hatch before adding a component | +| Theme overrides | xue and Fig layer application composition CSS over shared tokens; neither copied component CSS | Record token overrides that require component CSS copies; prefer a new semantic token | +| SSR and routing | xue E2E/build, Fig Cloudflare SSR build, and the CRUD form-action build passed | Repeat the relevant consumer build during each minor upgrade | +| Bundle impact | Fig added 4.4% total client gzip; the tiny CRUD demo added 32.5% on first theme adoption while unused overlays remained tree-shaken | Keep repository size gates authoritative and review absolute external deltas after each minor | +| Missing capability | Fig's media lightbox remains application-specific; no second consumer currently justifies a generic media dialog or a React adapter | Require a concrete second workflow plus API/a11y proposal before expanding the public surface | diff --git a/docs/PERFORMANCE.md b/docs/PERFORMANCE.md new file mode 100644 index 0000000..917f4be --- /dev/null +++ b/docs/PERFORMANCE.md @@ -0,0 +1,54 @@ +# Performance and package-size baseline + +The repository keeps a measured baseline in +[`package-size-baseline.json`](./package-size-baseline.json). It records the +packed sizes of `@webaseui/core` and `@webaseui/svelte`, the shipped Svelte +source footprint, each public component's source footprint, and the gzip sizes +of the consumer fixture's JavaScript and CSS output. + +Run the gate with: + +```sh +npm run check:size +``` + +An intentional change that increases a tracked metric by more than 5% must +include a short explanation in the pull request. After review, refresh the +numbers explicitly: + +```sh +npm run size:update +``` + +The baseline is a change detector, not a universal performance score. The +consumer bundle is the most useful signal for application impact; packed and +source sizes explain what changed inside the published artifacts. + +## Reviewed baseline changes + +### 2026-08-16: publish the core changelog + +`@webaseui/core` now ships an initial `CHANGELOG.md` and includes it in its +package `files` allowlist. The current dry-run tarballs are 6,556 B for core +and 40,732 B for Svelte, compared with the tracked 6,412 B and 40,289 B +baselines. Both remain below the 5% growth gate; the baseline is intentionally +not reset so the next package change is measured against the pre-changelog +artifact. + +### 2026-08-09: complete component token migration + +The component token contract moved geometry, typography, focus, and motion +values out of all 28 component declaration blocks. The public custom-property +names increase CSS text size while leaving JavaScript unchanged: + +| Metric | Previous | Current | Change | +| --- | ---: | ---: | ---: | +| Core CSS gzip | 2,854 B | 3,716 B | +862 B | +| Consumer CSS gzip | 3,572 B | 4,450 B | +878 B | +| Consumer JS gzip | 21,156 B | 21,156 B | 0 B | +| Svelte tarball | 31,026 B | 31,456 B | +430 B | + +This is an intentional theme-extensibility cost: consumers can now override +shared interaction and component geometry without copying component CSS. The +5% growth gate continues from the updated baseline; further token additions +should demonstrate reuse or a concrete theming requirement. diff --git a/docs/RC_READINESS.md b/docs/RC_READINESS.md new file mode 100644 index 0000000..75507cb --- /dev/null +++ b/docs/RC_READINESS.md @@ -0,0 +1,33 @@ +# 1.0 RC readiness + +This is the release-candidate audit for the current repository state. It is +deliberately evidence-based: a documented process is not marked passed until a +command, artifact, or human record exists. + +| Gate | Evidence | Status on 2026-08-17 | +| --- | --- | --- | +| Public API, token, and keyboard contract | `npm run check:api-contract`, `npm run check:tokens`, 28 component references, `API_CONTRACT.md`; fresh-install `npm run check` passed on 2026-08-17 | Passed in local CI-equivalent rerun | +| Chromium, Firefox, WebKit behavior | `npm run test:browser` with pinned Playwright engines (84/84 passed); `actionlint` validates workflow matrix | Passed in local CI-equivalent rerun | +| Automated accessibility | axe browser fixtures, `npm run check:contrast`, forced-colors/reduced-motion/coarse-pointer suites; included in 84/84 browser pass | Passed in local CI-equivalent rerun | +| Manual screen-reader audit | [`SCREEN_READER_AUDIT.md`](./SCREEN_READER_AUDIT.md) has VoiceOver/Safari and NVDA/Firefox-or-Chrome procedures | Pending human records | +| SSR, hydration, and tree shaking | `tests/ssr`, browser SSR spec, minimum/current consumer fixture, external Fig and CRUD trials; fresh-install consumer check passed | Passed in local CI-equivalent rerun | +| Support window | [`support-policy.json`](./support-policy.json), `npm run check:support`, Node 22/24 compatibility jobs | Ready | +| Visual and package-size gates | 47 Playwright visual tests passed; `npm run check:visual-baselines`, `docs/package-size-baseline.json`, 5% gate | Passed in local CI-equivalent rerun | +| P0/P1 and security | GitHub open issues: none; Dependabot alerts: none; security advisories: none; fresh-install `npm audit --audit-level=high`: 0 | Ready at local audit time; recheck immediately before release | +| Migration, versioning, security, and contribution policy | `VERSIONING.md`, `ADOPTION_MATRIX.md`, `SECURITY.md`, `CONTRIBUTING.md`, PR and issue templates | Ready | +| External consumers | xue minor upgrade, Fig registry trial, CRUD candidate tarball trial; content/navigation and form/CRUD profiles covered | Ready | +| npm publication, provenance, post-publish smoke | [`RELEASE_RUNBOOK.md`](./RELEASE_RUNBOOK.md), local `.github/workflows/release.yml`, OIDC configuration, and `scripts/registry-smoke.mjs --require-provenance`; the enforced mode correctly rejects current `@webaseui/core@0.1.0` for missing SLSA provenance. GitHub API returns 404 for `release.yml` on `origin/main`, local `npm whoami` is unauthenticated, and latest packages expose npm signatures but no release provenance attestation | Pending publishing the workflow, repository/npm trust setup, and one live release | + +## Required final sign-off + +The repository is not a 1.0 RC until the two pending rows have direct evidence: + +1. Attach completed VoiceOver/Safari and NVDA/Firefox or Chrome records. The + audit cannot be inferred from axe or browser snapshots. +2. Configure npm trusted publishing for both packages and the exact release + workflow, run one candidate or stable publication from GitHub Actions, verify + provenance, and let the post-publish registry smoke pass. + +The current public registry smoke is still useful: it proves the existing +`latest` packages install without workspace links. It is not provenance proof +for the next release and does not close the live publication row. diff --git a/docs/RELEASE_RUNBOOK.md b/docs/RELEASE_RUNBOOK.md new file mode 100644 index 0000000..2e2cca0 --- /dev/null +++ b/docs/RELEASE_RUNBOOK.md @@ -0,0 +1,77 @@ +# Release Runbook + +This repository publishes `@webaseui/core` and `@webaseui/svelte` through +GitHub Actions. Do not run `npm publish` from a developer workstation. + +## Before The First Release + +1. Merge the release workflow at `.github/workflows/release.yml` onto the + default branch. The npm trusted publisher matches the exact repository and + workflow path, so an unpushed local workflow is not sufficient. +2. In npm package settings, add a GitHub Actions trusted publisher for both + packages with these values: + - Owner: `WeOpen` + - Repository: `WeBaseUI` + - Workflow filename: `release.yml` + - Environment: blank, unless the workflow is later changed to use one +3. Keep the stable job permissions at `contents: write`, + `pull-requests: write`, and `id-token: write`. The pre-release job needs + `id-token: write`. +4. Confirm the package access is public and that the npm account can manage + both package settings. No long-lived npm token belongs in GitHub secrets. + +## Stable Flow + +1. Add a changeset and merge it to `main`. +2. The release workflow runs the full quality, consumer, browser, and visual + gates, then creates or updates the Changesets release PR. +3. Merge the release PR. The stable job versions packages, synchronizes the + lockfile, publishes with OIDC and provenance, and runs the provenance-aware + registry smoke test. +4. Record the package versions, release commit, workflow run URL, npm + attestation metadata, and smoke result in the release review issue. + +The local version command is deliberately lockfile-aware: + +```sh +npm run version-packages +``` + +It runs `changeset version` followed by a package-lock-only install. The +workflow must be the source of the actual publish. + +## Verification + +For a published version, verify both packages expose the SLSA provenance +predicate before accepting the release: + +```sh +npm view @webaseui/core@VERSION dist.attestations --json +npm view @webaseui/svelte@VERSION dist.attestations --json +npm run check:registry -- --tag=latest --require-provenance +``` + +The metadata must include: + +```json +{ + "provenance": { + "predicateType": "https://slsa.dev/provenance/v1" + } +} +``` + +The default `npm run check:registry -- --tag=latest` remains useful for +historical packages that predate provenance, but it is not a release sign-off. + +## Release Candidate Accessibility Sign-Off + +Complete [`SCREEN_READER_AUDIT.md`](./SCREEN_READER_AUDIT.md) in both required +environments before calling the candidate an RC: + +- macOS VoiceOver with Safari; +- Windows NVDA with Firefox or Chrome. + +Record the assistive-technology and browser versions, tester, date, every +scenario result, and linked issues. Axe, keyboard, and browser snapshots are +supporting evidence only and cannot replace these records. diff --git a/docs/SCREEN_READER_AUDIT.md b/docs/SCREEN_READER_AUDIT.md new file mode 100644 index 0000000..8b7acd4 --- /dev/null +++ b/docs/SCREEN_READER_AUDIT.md @@ -0,0 +1,54 @@ +# Screen-reader release audit + +Complete this audit for every release candidate. Automated axe and keyboard +checks remain mandatory, but they do not replace listening to the accessibility +tree through supported assistive technology. + +## Required environments + +| Environment | Browser | Input | Required result | +| --- | --- | --- | --- | +| macOS VoiceOver | Safari from a supported stable major | VoiceOver keys and keyboard | All scenarios below pass | +| Windows NVDA | Firefox or Chrome from a supported stable major | NVDA browse/focus modes and keyboard | All scenarios below pass | + +Record the operating system, assistive-technology version, browser version, +package version, tester, date, and issue link for every failure. A recording may +supplement the notes, but the written result must identify the announced name, +role, value or state, and focus destination. + +## Scenario matrix + +| Surface | Procedure | Expected announcement and behavior | +| --- | --- | --- | +| Button and IconButton | Focus, activate, then test disabled, loading, and pressed examples | Name and button role are announced once; disabled, busy, and pressed states are exposed when present | +| Field and Textarea | Read label, help, required, error, count, and disabled states; edit and reset a containing form | Label and description relationships are clear; invalid and required states are announced; editing is not duplicated | +| Check, Radio, Switch, and Slider | Move through each control, change its value, and test disabled or indeterminate states | Role, accessible name, current state or value, group context, and changes are announced | +| Select | Open with keyboard, move through enabled and disabled options, use typeahead, choose an option, and close with Escape | Combobox state, active option, position, disabled state, selection, and collapse are announced; focus returns to the trigger | +| Tabs and Accordion | Traverse with arrow keys, Home, and End; activate or collapse content | Tab/disclosure role, selected or expanded state, position, and associated panel are understandable | +| Dialog | Open from a known button, inspect title and description, cancel with Escape, confirm, and close with the close control | Modal context and title are announced; background content is unavailable; every close path returns focus to the opener | +| Tooltip | Focus and hover the trigger, dismiss with Escape, then move focus away | Trigger description is available without trapping focus; dismissed content is no longer announced | +| Alert and Toast | Trigger info, warning, error, and timed examples; pause a toast by focus or hover | Status or alert copy is announced once without moving focus; time-sensitive content remains available while paused | +| Breadcrumbs, Link, Pagination, and Tag | Navigate landmarks and current/selected states | Navigation labels, destinations, current page, and disabled controls are distinguishable | +| Loader, Progress, Skeleton, and EmptyState | Inspect loading, progress, completed, and empty examples | Decorative output stays silent; meaningful status/value text is announced without repetition | + +## Release record + +Copy this table for each candidate. `Blocked` requires a linked P0/P1 decision; +an RC cannot pass with a blocked required environment. + +| Candidate | Environment | Versions | Tester and date | Result | Issues | +| --- | --- | --- | --- | --- | --- | +| Unscheduled | VoiceOver / Safari | Not recorded | Not run | Pending | None | +| Unscheduled | NVDA / Firefox or Chrome | Not recorded | Not run | Pending | None | + +## Sign-off rules + +- Every scenario must pass in both required environments, or have a documented + browser/assistive-technology defect with an equivalent usable path and an RC + risk decision. +- Any focus loss, inaccessible name failure, state mismatch, or unavailable + operation is P0 or P1 until triaged. +- Fixes restart the affected environment and component scenario; changes to + shared overlay, focus, collection, or form behavior restart both environments. +- Attach the completed table to the minor release review and update the support + matrix only after both records are complete. diff --git a/docs/SUPPORT_MATRIX.md b/docs/SUPPORT_MATRIX.md new file mode 100644 index 0000000..a43382c --- /dev/null +++ b/docs/SUPPORT_MATRIX.md @@ -0,0 +1,48 @@ +# Support Matrix + +This is the frozen 1.0 support contract. Machine-readable values live in +[`support-policy.json`](./support-policy.json) and are checked by +`npm run check:support`. A supported version is part of a continuously tested +range, not a claim that every application toolchain combination is defect-free. + +| Surface | 1.0 support position | Current evidence | Status | +| --- | --- | --- | --- | +| Svelte | Peer range `>=5.20.0 <6`; Svelte 4 is out of scope | Packed consumers typecheck and build with Svelte 5.20.0 and the repository-current 5.56.8 | Frozen and validated | +| Node.js | Repository, consumer, and release tooling run on `^22.13.0 || ^24.0.0` | Blocking CI uses 22.13; the weekly compatibility workflow runs the same package gates on Node 24 | Frozen and validated | +| TypeScript | `>=5.5.4 <7` | Packed consumers typecheck with the minimum 5.5.4 and repository-current 6.0.3 compilers | Frozen and validated | +| Vite / Svelte plugin | Vite 6 with plugin 5.1.1 through Vite 8 with plugin 7.2.0 while they remain compatible with supported Svelte 5 | Minimum and current packed-consumer fixtures typecheck and build | Frozen and validated | +| Rendering | SSR-safe module loading and warning-free client hydration | Dedicated server-render and hydration fixtures run in Chromium, Firefox, and WebKit | Frozen and validated | +| Browsers | Chromium-family, Firefox, and Safari/WebKit current and previous stable major releases | Playwright 1.62.1 currently validates Chromium 151.0.7922.34, Firefox 153.0, and WebKit 26.5; the weekly non-blocking job exercises the latest Playwright engines | Frozen policy; pinned engines validated | +| Accessibility modes | WCAG 2.2 AA behavior for keyboard, focus, RTL, forced colors, reduced motion, coarse pointer, 200% reflow, and documented equivalent input | axe, keyboard, layout, and visual suites cover the automated surface | Frozen automated contract; manual screen-reader sign-off required per RC | + +## Browser version policy + +"Current and previous stable major releases" is evaluated when an RC or minor +release is cut, not when a user first reports an issue. Updating Playwright must +refresh the validated engine versions above and pass all three behavior suites. +Chromium coverage represents Chrome and Edge engine behavior; browser-specific +integration defects are still triaged separately. + +## Lifecycle policy + +- The latest `0.x` minor is the supported development line until 1.0. +- After 1.0, the latest minor of the current major receives routine fixes. The + immediately previous major receives critical security fixes for six months + after the next major is released. +- Security reports are acknowledged within five business days. Confirmed P0 + issues receive an immediate mitigation or release plan; P1 issues receive a + target release within ten business days unless an upstream dependency blocks it. +- A major release is the normal removal window for deprecated public API. + Deprecations remain documented and functional for at least one minor release + before 1.0 and for at least six months after 1.0. +- Node, TypeScript, Svelte, and browser windows are reviewed during every minor + release review. Dropping a supported version requires a Changeset and migration + note. + +## RC sign-off + +The automated support contract is frozen. Before declaring an RC ready, attach +the completed VoiceOver/Safari and NVDA/Firefox or Chrome records from +[`SCREEN_READER_AUDIT.md`](./SCREEN_READER_AUDIT.md), the two external consumer +records from [`ADOPTION_MATRIX.md`](./ADOPTION_MATRIX.md), and a release review +created from the repository issue template. diff --git a/docs/adr/0001-token-layers.md b/docs/adr/0001-token-layers.md new file mode 100644 index 0000000..c6b1924 --- /dev/null +++ b/docs/adr/0001-token-layers.md @@ -0,0 +1,68 @@ +# ADR 0001: Three-layer public token contract + +- Status: Accepted +- Date: 2026-08-06 +- Scope: `@webaseui/core` and all framework bindings + +## Context + +The core package already exposed color, typography, shadow, and motion custom +properties. They were useful, but their roles were mixed together. A consumer +could not tell whether a value was a raw palette choice, a semantic surface, +or a component geometry contract. Component styles also repeated control +heights, radii, and overlay layers in several files. + +## Decision + +`tokens.css` exposes three layers in one stable `--webase-*` namespace: + +1. Primitive tokens contain palette slots, spacing, sizes, type scales, z-index + levels, and motion values. +2. Semantic tokens map those values to roles such as canvas, surface, ink, + border, brand, and status. +3. Component tokens define reusable geometry and layering for controls, + buttons, choices, switches, selects, dialogs, tooltips, feedback, and + navigation components. + +Consumers should override semantic or component tokens. Primitive values are +available for advanced themes, but are not the preferred customization point. +The existing short aliases such as `--brand`, `--surface`, and `--focus-ring` +remain mapped to semantic tokens during the 1.x compatibility window. + +Dark mode changes the primitive palette slots under +`:root[data-theme='dark']`; semantic and component relationships stay intact. +This keeps theme changes from requiring a second copy of component CSS. + +The token contract is enforced with an exact component-style literal budget. +The checker counts signed `px`, `em`, `rem`, `ms`, `s`, and `deg` values in +public component declarations and compares them with +`docs/component-style-literal-baseline.json`. The current declaration count is +zero. Media-query conditions are extracted and checked separately; their three +pixel breakpoints remain explicit because custom properties cannot be used in +media-query conditions. Any change must update the baseline deliberately. + +Not every one-off presentation value becomes a public token. Values are +promoted when they represent shared interaction geometry, themeable component +geometry, layering, typography, or motion. Unique editorial layout values can +remain local until another component or consumer demonstrates a shared need. +Responsive breakpoints remain a small, separately audited exception. + +## Consequences + +- New components can consume a named geometry token instead of inventing a + one-off size or layer value. +- Brand themes can override semantic colors without copying component styles. +- The token checker validates required layers, references, and dark palette + overrides, plus the exact component literal budget, as part of + `npm run check`. +- Removing a compatibility alias is a breaking change and requires a + Changeset plus a migration note. + +## Alternatives considered + +- **Separate files per layer**: rejected for now because a single import is a + smaller consumer contract and preserves the current `theme.css` entrypoint. +- **Only semantic tokens**: rejected because spacing, type, and geometry need + shared primitives to prevent drift. +- **Component-local variables only**: rejected because they cannot support + cross-framework themes or a documented public override surface. diff --git a/docs/adr/0002-overlay-focus-infrastructure.md b/docs/adr/0002-overlay-focus-infrastructure.md new file mode 100644 index 0000000..7b3eead --- /dev/null +++ b/docs/adr/0002-overlay-focus-infrastructure.md @@ -0,0 +1,72 @@ +# ADR 0002: Platform-first internal overlay and focus infrastructure + +- Status: Accepted +- Date: 2026-08-08 +- Scope: `@webaseui/svelte` overlay components and future framework bindings + +## Context + +Dialog, Select, and Tooltip already implement related behavior: dismissal, +focus handling, body scroll locking, and layer ordering. Keeping these concerns +inside each component would make Menu, Popover, Combobox, and Drawer repeat the +same edge cases. Publishing a headless primitive API now would also freeze an +abstraction before existing components have proved it. + +## Decision + +WeBaseUI will build a small internal overlay layer and adopt it incrementally: + +1. Modal dialogs continue to use the native `` top layer for focus + trapping, Escape handling, background inertness, and focus restoration. +2. Body scroll locking is reference counted per document. Nested overlays do + not restore scrolling until the final lock releases, and the consumer's + previous inline overflow value is preserved. +3. Pointer-outside listening is shared. Components still decide whether an + outside action is cancellable and which callback it represents. +4. Non-modal overlays remain anchored in their component DOM and use + `popover="manual"` as a platform-first top-layer mechanism when supported. + A shared fixed-position collision primitive supplies the fallback and keeps + the DOM ancestry intact; components must not create one-off document-body + portals. +5. Layer ordering stays in `@webaseui/core` component tokens. Native dialog top + layer behavior is not emulated with an arbitrarily larger z-index. +6. Floating placement prefers the requested side, flips when the opposite side + has more room, shifts inside the visual viewport, matches Select trigger + width, constrains available height, and auto-updates on scroll, resize, + visual viewport changes, and anchor/floating `ResizeObserver` events. +7. Inline `start` and `end` placement resolve from the anchor's computed + direction. RTL support is inherited from the DOM rather than duplicated as + component props, and logical alignment remains collision constrained. +8. Internal helpers are not exported from the package root. Public exposure is + deferred until Dialog, Select, Tooltip, and at least one new overlay all use + the same contracts without component-specific escape hatches. + +Focus Scope, explicit focus restoration, Portal, and Presence remain planned +internal primitives. They should be added only when an existing component needs +them and can supply browser tests for the behavior. + +## Consequences + +- Dialog scroll locking now behaves correctly when overlays are nested. +- Select uses the same pointer-outside registration and short-lived typeahead + contracts future overlays and composite widgets can reuse. +- Select and Tooltip now share manual-popover synchronization and floating + collision behavior, including visual viewport offsets and nested scroll + containers. Their inline alignment follows the anchor's inherited direction. + Browsers without the Popover API use the same DOM with a fixed fallback rather + than losing theme inheritance. +- SSR remains safe because the helpers access documents only when called after + component mounting or dialog creation. +- Future overlay work has a defined migration order without committing 1.0 to + an unproven low-level public API. + +## Alternatives considered + +- **Adopt a third-party headless library immediately**: deferred because the + current native dialog behavior is strong, and dependency/API cost should be + justified by collision positioning or composite widgets we cannot maintain. +- **Portal every overlay to `document.body`**: rejected because it complicates + theming, SSR, containment, and nested ownership before positioning needs are + proven. +- **Keep utilities component-local**: rejected because nested scroll locks and + pointer-outside cleanup are cross-component invariants, not visual details. diff --git a/docs/component-style-literal-baseline.json b/docs/component-style-literal-baseline.json new file mode 100644 index 0000000..3438285 --- /dev/null +++ b/docs/component-style-literal-baseline.json @@ -0,0 +1,39 @@ +{ + "description": "Exact count of signed px, em, rem, ms, s, and deg literals in public component declarations. Media-query conditions are tracked separately because CSS custom properties cannot be used there. Any change requires an explicit baseline update.", + "total": 0, + "mediaQueries": { + "WeBaseEmptyState.svelte": ["620px"], + "WeBasePagination.svelte": ["480px"], + "WeBaseSectionHeader.svelte": ["700px"] + }, + "components": { + "WeBaseAccordion.svelte": 0, + "WeBaseAlert.svelte": 0, + "WeBaseBadge.svelte": 0, + "WeBaseBreadcrumbs.svelte": 0, + "WeBaseButton.svelte": 0, + "WeBaseCard.svelte": 0, + "WeBaseCheck.svelte": 0, + "WeBaseDialog.svelte": 0, + "WeBaseDivider.svelte": 0, + "WeBaseEmptyState.svelte": 0, + "WeBaseField.svelte": 0, + "WeBaseIcon.svelte": 0, + "WeBaseIconButton.svelte": 0, + "WeBaseLink.svelte": 0, + "WeBaseLoader.svelte": 0, + "WeBasePagination.svelte": 0, + "WeBaseProgress.svelte": 0, + "WeBaseRadio.svelte": 0, + "WeBaseSectionHeader.svelte": 0, + "WeBaseSelect.svelte": 0, + "WeBaseSkeleton.svelte": 0, + "WeBaseSlider.svelte": 0, + "WeBaseSwitch.svelte": 0, + "WeBaseTabs.svelte": 0, + "WeBaseTag.svelte": 0, + "WeBaseTextarea.svelte": 0, + "WeBaseToast.svelte": 0, + "WeBaseTooltip.svelte": 0 + } +} diff --git a/docs/package-size-baseline.json b/docs/package-size-baseline.json new file mode 100644 index 0000000..eff7662 --- /dev/null +++ b/docs/package-size-baseline.json @@ -0,0 +1,150 @@ +{ + "schemaVersion": 1, + "platform": "darwin", + "packages": { + "core": { + "tarballBytes": 6412, + "unpackedBytes": 24054, + "css": { + "bytes": 18769, + "gzipBytes": 3914 + } + }, + "svelte": { + "tarballBytes": 40289, + "unpackedBytes": 174585, + "dist": { + "bytes": 150786, + "gzipBytes": 27176 + }, + "entry": { + "bytes": 7663, + "gzipBytes": 732 + }, + "components": { + "WeBaseAccordion": { + "bytes": 4217, + "gzipBytes": 1645 + }, + "WeBaseAlert": { + "bytes": 3874, + "gzipBytes": 1284 + }, + "WeBaseBadge": { + "bytes": 1846, + "gzipBytes": 836 + }, + "WeBaseBreadcrumbs": { + "bytes": 1911, + "gzipBytes": 874 + }, + "WeBaseButton": { + "bytes": 4013, + "gzipBytes": 1323 + }, + "WeBaseCard": { + "bytes": 5008, + "gzipBytes": 1619 + }, + "WeBaseCheck": { + "bytes": 2734, + "gzipBytes": 1043 + }, + "WeBaseDialog": { + "bytes": 5945, + "gzipBytes": 1917 + }, + "WeBaseDivider": { + "bytes": 1390, + "gzipBytes": 606 + }, + "WeBaseEmptyState": { + "bytes": 3623, + "gzipBytes": 1321 + }, + "WeBaseField": { + "bytes": 3703, + "gzipBytes": 1321 + }, + "WeBaseIcon": { + "bytes": 3473, + "gzipBytes": 1052 + }, + "WeBaseIconButton": { + "bytes": 2186, + "gzipBytes": 921 + }, + "WeBaseLink": { + "bytes": 3187, + "gzipBytes": 1156 + }, + "WeBaseLoader": { + "bytes": 1521, + "gzipBytes": 687 + }, + "WeBasePagination": { + "bytes": 3375, + "gzipBytes": 1299 + }, + "WeBaseProgress": { + "bytes": 1909, + "gzipBytes": 863 + }, + "WeBaseRadio": { + "bytes": 2479, + "gzipBytes": 958 + }, + "WeBaseSectionHeader": { + "bytes": 2311, + "gzipBytes": 963 + }, + "WeBaseSelect": { + "bytes": 15213, + "gzipBytes": 3842 + }, + "WeBaseSkeleton": { + "bytes": 2006, + "gzipBytes": 844 + }, + "WeBaseSlider": { + "bytes": 4217, + "gzipBytes": 1436 + }, + "WeBaseSwitch": { + "bytes": 2885, + "gzipBytes": 1004 + }, + "WeBaseTabs": { + "bytes": 3337, + "gzipBytes": 1366 + }, + "WeBaseTag": { + "bytes": 2865, + "gzipBytes": 1018 + }, + "WeBaseTextarea": { + "bytes": 3423, + "gzipBytes": 1305 + }, + "WeBaseToast": { + "bytes": 4164, + "gzipBytes": 1681 + }, + "WeBaseTooltip": { + "bytes": 5018, + "gzipBytes": 1664 + } + } + } + }, + "consumer": { + "jsBytes": 58027, + "jsGzipBytes": 21156, + "cssBytes": 24393, + "cssGzipBytes": 4754, + "htmlBytes": 409, + "htmlGzipBytes": 274, + "totalBytes": 82829, + "totalGzipBytes": 26184 + } +} diff --git a/docs/support-policy.json b/docs/support-policy.json new file mode 100644 index 0000000..91e4258 --- /dev/null +++ b/docs/support-policy.json @@ -0,0 +1,24 @@ +{ + "node": { + "engine": "^22.13.0 || ^24.0.0", + "release": "22.13", + "compatibility": "24" + }, + "svelte": { + "peer": ">=5.20.0 <6", + "minimum": "5.20.0" + }, + "typescript": { + "minimum": "5.5.4", + "maximumExclusive": "7.0.0" + }, + "browsers": { + "policy": "current and previous stable major releases", + "playwright": "1.62.1", + "validated": { + "chromium": "151.0.7922.34", + "firefox": "153.0", + "webkit": "26.5" + } + } +} diff --git a/examples/webaseui-svelte-consumer/package.json b/examples/webaseui-svelte-consumer/package.json index 6520174..ab0b777 100644 --- a/examples/webaseui-svelte-consumer/package.json +++ b/examples/webaseui-svelte-consumer/package.json @@ -4,16 +4,19 @@ "version": "0.0.0", "type": "module", "scripts": { - "build": "vite build" + "build": "vite build", + "typecheck": "svelte-check --tsconfig ./tsconfig.json" }, "dependencies": { "@webaseui/core": "0.1.0", - "@webaseui/svelte": "0.3.0", - "svelte": "^5.56.8" + "@webaseui/svelte": "0.3.2", + "svelte": "5.56.8" }, "devDependencies": { - "@sveltejs/vite-plugin-svelte": "^7.2.0", - "typescript": "^6.0.3", - "vite": "^8.1.5" + "@sveltejs/vite-plugin-svelte": "7.2.0", + "@types/node": "22.20.1", + "svelte-check": "4.7.4", + "typescript": "6.0.3", + "vite": "8.1.5" } } diff --git a/examples/webaseui-svelte-consumer/src/App.svelte b/examples/webaseui-svelte-consumer/src/App.svelte index ffabffd..47bc4e1 100644 --- a/examples/webaseui-svelte-consumer/src/App.svelte +++ b/examples/webaseui-svelte-consumer/src/App.svelte @@ -1,6 +1,7 @@ + +
+ `الصفحة ${number.format(value)}`} + formatPage={(value) => number.format(value)} + /> + `${number.format(value)} بالمئة`} + /> +
+``` diff --git a/packages/webaseui-svelte/VERSIONING.md b/packages/webaseui-svelte/VERSIONING.md index 27df3a4..1f6b8a7 100644 --- a/packages/webaseui-svelte/VERSIONING.md +++ b/packages/webaseui-svelte/VERSIONING.md @@ -24,7 +24,7 @@ The following are public API and require version review: - documented props, defaults, bindings, snippets, and root attribute behavior; - `--webase-*` CSS custom properties and theme selectors; - keyboard behavior, focus management, ARIA relationships, and live regions; -- supported Svelte peer dependency ranges. +- supported Svelte peer dependency ranges. The package currently requires Svelte 5.20 or newer because it uses the stable `$props.id()` rune. Internal component paths, `ds-*` implementation classes, private helpers, and undocumented markup structure are not public API. @@ -41,3 +41,20 @@ undocumented markup structure are not public API. Accessibility fixes may adjust undocumented DOM structure in a patch release, but must preserve the documented interaction contract and pass browser tests. + +## Automated publication + +The `Release` GitHub Actions workflow is the only supported publication path. +Its quality jobs run the complete package, consumer, browser, and visual gates +before the Changesets action creates a release PR or publishes a merged release. +The publish job grants `id-token: write`, upgrades npm to a trusted-publishing +compatible version, and sets `NPM_CONFIG_PROVENANCE=true`; npm must be configured +in advance to trust this repository and workflow for each package. No long-lived +`NPM_TOKEN` is stored in GitHub secrets. + +After a stable publish, the workflow resolves both packages from the `latest` +dist-tag and builds the registry consumer fixture. Manual `workflow_dispatch` +runs can select `next` or `canary`; those runs enter Changesets pre-release mode, +publish with the selected dist-tag, and run the same registry smoke test. Stable +and pre-release tags are independent and are never overwritten by a local +`npm publish` command. diff --git a/packages/webaseui-svelte/package.json b/packages/webaseui-svelte/package.json index 7644a14..fcb6b48 100644 --- a/packages/webaseui-svelte/package.json +++ b/packages/webaseui-svelte/package.json @@ -23,19 +23,22 @@ "files": [ "dist", "README.md", + "API_CONTRACT.md", "CHANGELOG.md", - "VERSIONING.md" + "VERSIONING.md", + "LICENSE" ], "scripts": { "build": "svelte-package", - "prepack": "npm run build" + "prepack": "npm run build", + "typecheck": "svelte-check --tsconfig ./tsconfig.json" }, "dependencies": { "@lucide/svelte": "^1.28.0", "@webaseui/core": "0.1.0" }, "peerDependencies": { - "svelte": "^5.0.0" + "svelte": ">=5.20.0 <6" }, "devDependencies": { "@sveltejs/package": "^2.5.8", diff --git a/packages/webaseui-svelte/src/lib/components/WeBaseAccordion.svelte b/packages/webaseui-svelte/src/lib/components/WeBaseAccordion.svelte index 606feca..338d217 100644 --- a/packages/webaseui-svelte/src/lib/components/WeBaseAccordion.svelte +++ b/packages/webaseui-svelte/src/lib/components/WeBaseAccordion.svelte @@ -1,23 +1,28 @@ @@ -35,7 +40,7 @@ onclick={() => toggle(index)} onkeydown={(event) => handleKeydown(event, index)} > - {String(index + 1).padStart(2, '0')}{item.title} + {formatIndex(index + 1)}{item.title} @@ -48,19 +53,19 @@ diff --git a/packages/webaseui-svelte/src/lib/components/WeBaseAlert.svelte b/packages/webaseui-svelte/src/lib/components/WeBaseAlert.svelte index 3028030..f4b44f0 100644 --- a/packages/webaseui-svelte/src/lib/components/WeBaseAlert.svelte +++ b/packages/webaseui-svelte/src/lib/components/WeBaseAlert.svelte @@ -5,21 +5,22 @@ type Tone = 'info' | 'success' | 'warning' | 'error'; - interface Props extends Omit, 'children' | 'title'> { + interface Props extends Omit, 'children' | 'title'> { title: string; message?: string; tone?: Tone; dismissible?: boolean; + dismissLabel?: string; open?: boolean; children?: Snippet; actions?: Snippet; } - let { title, message = '', tone = 'info', dismissible = false, open = $bindable(true), children, actions, class: className = '', ...rest }: Props = $props(); + let { title, message = '', tone = 'info', dismissible = false, dismissLabel = 'Dismiss alert', open = $bindable(true), children, actions, class: className = '', ...rest }: Props = $props(); {#if open} - + {/if} diff --git a/packages/webaseui-svelte/src/lib/components/WeBaseBadge.svelte b/packages/webaseui-svelte/src/lib/components/WeBaseBadge.svelte index e8e090f..1da6e08 100644 --- a/packages/webaseui-svelte/src/lib/components/WeBaseBadge.svelte +++ b/packages/webaseui-svelte/src/lib/components/WeBaseBadge.svelte @@ -23,19 +23,19 @@ .ds-badge { display: inline-flex; align-items: center; - gap: 6px; - min-height: 24px; - padding: 3px 8px; - border: 1px solid currentColor; - border-radius: 999px; + gap: var(--webase-component-badge-gap); + min-height: var(--webase-component-badge-min-height); + padding: var(--webase-component-badge-padding-block) var(--webase-component-badge-padding-inline); + border: var(--webase-border-thin) solid currentColor; + border-radius: var(--webase-radius-pill); font-family: var(--sans); - font-size: 10px; - letter-spacing: .1em; + font-size: var(--webase-font-size-overline); + letter-spacing: var(--webase-letter-spacing-meta); line-height: 1; text-transform: uppercase; } .ds-badge-canonical { color: var(--brand); background: var(--brand-tint); } .ds-badge-one-off { color: var(--ink-muted); background: var(--surface-muted); } .ds-badge-experiment { color: var(--status-warning); background: var(--status-warning-field); } - i { display: block; width: 5px; height: 5px; border-radius: 50%; background: currentColor; } + i { display: block; width: var(--webase-component-badge-dot-size); height: var(--webase-component-badge-dot-size); border-radius: var(--webase-radius-circle); background: currentColor; } diff --git a/packages/webaseui-svelte/src/lib/components/WeBaseBreadcrumbs.svelte b/packages/webaseui-svelte/src/lib/components/WeBaseBreadcrumbs.svelte index a59b627..c5c7d6a 100644 --- a/packages/webaseui-svelte/src/lib/components/WeBaseBreadcrumbs.svelte +++ b/packages/webaseui-svelte/src/lib/components/WeBaseBreadcrumbs.svelte @@ -1,14 +1,14 @@ -
diff --git a/packages/webaseui-svelte/src/lib/components/WeBaseDivider.svelte b/packages/webaseui-svelte/src/lib/components/WeBaseDivider.svelte index 198aa3e..8e46e89 100644 --- a/packages/webaseui-svelte/src/lib/components/WeBaseDivider.svelte +++ b/packages/webaseui-svelte/src/lib/components/WeBaseDivider.svelte @@ -14,7 +14,7 @@ {/if} diff --git a/packages/webaseui-svelte/src/lib/components/WeBaseEmptyState.svelte b/packages/webaseui-svelte/src/lib/components/WeBaseEmptyState.svelte index 818e287..d2d4af3 100644 --- a/packages/webaseui-svelte/src/lib/components/WeBaseEmptyState.svelte +++ b/packages/webaseui-svelte/src/lib/components/WeBaseEmptyState.svelte @@ -3,29 +3,31 @@ import type { HTMLAttributes } from 'svelte/elements'; import WeBaseIcon from './WeBaseIcon.svelte'; - interface Props extends Omit, 'children' | 'onclick' | 'title'> { title?: string; message?: string; actionLabel?: string; onclick?: (event: MouseEvent) => void; children?: Snippet; actions?: Snippet; } - let { title = 'No notes in this drawer', message = 'Start a new note or adjust the current filters.', actionLabel = 'Create note', onclick, children, actions, class: className = '', ...rest }: Props = $props(); + interface Props extends Omit, 'children' | 'onclick' | 'title'> { kicker?: string; title?: string; message?: string; actionLabel?: string; onclick?: (event: MouseEvent) => void; children?: Snippet; actions?: Snippet; } + let { kicker = 'Empty / archive', title = 'No notes in this drawer', message = 'Start a new note or adjust the current filters.', actionLabel = 'Create note', onclick, children, actions, class: className = '', ...rest }: Props = $props();
-

Empty / archive

{title}

{#if children}{@render children()}{:else}{message}{/if}
+

{kicker}

{title}

{#if children}{@render children()}{:else}{message}{/if}
{#if actions}
{@render actions()}
- {:else} + {:else if onclick} {/if}
diff --git a/packages/webaseui-svelte/src/lib/components/WeBaseField.svelte b/packages/webaseui-svelte/src/lib/components/WeBaseField.svelte index a2915bb..c5600f3 100644 --- a/packages/webaseui-svelte/src/lib/components/WeBaseField.svelte +++ b/packages/webaseui-svelte/src/lib/components/WeBaseField.svelte @@ -1,5 +1,7 @@ diff --git a/packages/webaseui-svelte/src/lib/components/WeBaseIcon.svelte b/packages/webaseui-svelte/src/lib/components/WeBaseIcon.svelte index 87c39c0..c251a8a 100644 --- a/packages/webaseui-svelte/src/lib/components/WeBaseIcon.svelte +++ b/packages/webaseui-svelte/src/lib/components/WeBaseIcon.svelte @@ -7,6 +7,7 @@ export type WeBaseIconName = | 'archive' | 'archive-x' + | 'arrow-down' | 'arrow-left' | 'arrow-right' | 'arrow-up-right' @@ -31,11 +32,34 @@ - + diff --git a/packages/webaseui-svelte/src/lib/components/WeBaseIconButton.svelte b/packages/webaseui-svelte/src/lib/components/WeBaseIconButton.svelte index ad2ed37..db2e952 100644 --- a/packages/webaseui-svelte/src/lib/components/WeBaseIconButton.svelte +++ b/packages/webaseui-svelte/src/lib/components/WeBaseIconButton.svelte @@ -10,18 +10,20 @@ onclick?: (event: MouseEvent) => void; } - let { label, icon = 'arrow-up-right', pressed = $bindable(false), disabled = false, onclick, class: className = '', ...rest }: Props = $props(); + let { label, icon = 'arrow-up-right', pressed = $bindable(), disabled = false, onclick, class: className = '', ...rest }: Props = $props(); + const isPressed = $derived(pressed === true); - diff --git a/packages/webaseui-svelte/src/lib/components/WeBaseLink.svelte b/packages/webaseui-svelte/src/lib/components/WeBaseLink.svelte index 6390383..bfdb54b 100644 --- a/packages/webaseui-svelte/src/lib/components/WeBaseLink.svelte +++ b/packages/webaseui-svelte/src/lib/components/WeBaseLink.svelte @@ -45,21 +45,22 @@ .ds-link { display: inline-flex; align-items: center; - gap: 7px; + gap: var(--webase-component-link-gap); color: inherit; - text-decoration-thickness: 1px; - text-underline-offset: 4px; + text-decoration-thickness: var(--webase-border-thin); + text-underline-offset: var(--webase-space-2); transition: color var(--duration-ui) var(--ease-out), border-color var(--duration-ui) var(--ease-out), background-color var(--duration-ui) var(--ease-out), transform var(--duration-fast) var(--ease-out); } - .ds-link:hover { color: var(--brand); } .ds-link:focus-visible { outline: var(--focus-ring); outline-offset: var(--focus-ring-offset); } .ds-link-inline { color: var(--brand); text-decoration-line: underline; text-decoration-color: var(--hairline-strong); } - .ds-link-inline:hover { text-decoration-color: var(--brand); } - .ds-link-back, .ds-link-nav, .ds-link-action { font-family: var(--sans); font-size: 10px; letter-spacing: var(--track-nav); text-transform: uppercase; } + .ds-link-back, .ds-link-nav, .ds-link-action { font-family: var(--sans); font-size: var(--webase-font-size-overline); letter-spacing: var(--track-nav); text-transform: uppercase; } + .ds-link-back, .ds-link-nav { min-height: var(--webase-interactive-target-min); } .ds-link-back { color: var(--ink-muted); text-decoration: none; } .ds-link-nav { color: var(--ink-muted); text-decoration: none; } - .ds-link-action { min-height: 36px; padding: 0 12px; border: 1px solid var(--hairline-strong); background: transparent; text-decoration: none; } - .ds-link-action:hover { border-color: var(--brand); background: var(--brand-tint); transform: translateY(-1px); } + .ds-link-action { min-height: var(--webase-size-control-sm); padding: 0 var(--webase-space-6); border: var(--webase-border-thin) solid var(--hairline-strong); background: transparent; text-decoration: none; } .ds-link-action:active { transform: translateY(0); } + .ds-link > span { min-width: 0; overflow-wrap: anywhere; } + :global([dir='rtl']) .ds-link-back :global(svg), :global([dir='rtl']) .ds-link-action :global(svg) { transform: scaleX(-1); } + @media (hover: hover) and (pointer: fine) { .ds-link:hover { color: var(--brand); } .ds-link-inline:hover { text-decoration-color: var(--brand); } .ds-link-action:hover { border-color: var(--brand); background: var(--brand-tint); transform: translateY(var(--webase-component-link-hover-offset)); } } @media (prefers-reduced-motion: reduce) { .ds-link { transition: none; } } diff --git a/packages/webaseui-svelte/src/lib/components/WeBaseLoader.svelte b/packages/webaseui-svelte/src/lib/components/WeBaseLoader.svelte index 7a3206a..16ef1d9 100644 --- a/packages/webaseui-svelte/src/lib/components/WeBaseLoader.svelte +++ b/packages/webaseui-svelte/src/lib/components/WeBaseLoader.svelte @@ -8,11 +8,11 @@
{label}
diff --git a/packages/webaseui-svelte/src/lib/components/WeBasePagination.svelte b/packages/webaseui-svelte/src/lib/components/WeBasePagination.svelte index 38c614f..5104a64 100644 --- a/packages/webaseui-svelte/src/lib/components/WeBasePagination.svelte +++ b/packages/webaseui-svelte/src/lib/components/WeBasePagination.svelte @@ -1,28 +1,56 @@ diff --git a/packages/webaseui-svelte/src/lib/components/WeBaseProgress.svelte b/packages/webaseui-svelte/src/lib/components/WeBaseProgress.svelte index 67de33f..ac62bf0 100644 --- a/packages/webaseui-svelte/src/lib/components/WeBaseProgress.svelte +++ b/packages/webaseui-svelte/src/lib/components/WeBaseProgress.svelte @@ -1,23 +1,24 @@
-
{label}{safeValue}%
+
{label}{formatValue(safeValue)}
diff --git a/packages/webaseui-svelte/src/lib/components/WeBaseRadio.svelte b/packages/webaseui-svelte/src/lib/components/WeBaseRadio.svelte index 4ac51f6..5187eed 100644 --- a/packages/webaseui-svelte/src/lib/components/WeBaseRadio.svelte +++ b/packages/webaseui-svelte/src/lib/components/WeBaseRadio.svelte @@ -1,25 +1,27 @@ diff --git a/packages/webaseui-svelte/src/lib/components/WeBaseSectionHeader.svelte b/packages/webaseui-svelte/src/lib/components/WeBaseSectionHeader.svelte index f89da2c..d731480 100644 --- a/packages/webaseui-svelte/src/lib/components/WeBaseSectionHeader.svelte +++ b/packages/webaseui-svelte/src/lib/components/WeBaseSectionHeader.svelte @@ -32,39 +32,39 @@ display: grid; grid-template-columns: 1fr minmax(0, 2fr); align-items: end; - column-gap: 32px; - margin-bottom: 34px; + column-gap: var(--webase-space-14); + margin-bottom: var(--webase-component-section-header-margin-bottom); } .ds-section-kicker { grid-column: 1 / -1; - margin: 0 0 12px; + margin: 0 0 var(--webase-space-6); color: var(--brand); font-family: var(--mono); - font-size: 10px; - letter-spacing: .14em; + font-size: var(--webase-font-size-overline); + letter-spacing: var(--webase-component-section-header-kicker-letter-spacing); text-transform: uppercase; } h2 { margin: 0; font-family: var(--font); - font-size: clamp(38px, 6vw, 72px); + font-size: clamp(var(--webase-component-section-header-title-min-size), var(--webase-component-section-header-title-fluid-size), var(--webase-component-section-header-title-max-size)); font-weight: 500; - letter-spacing: -.06em; + letter-spacing: var(--webase-component-section-header-title-letter-spacing); line-height: .9; } .ds-section-note { - max-width: 280px; + max-width: var(--webase-component-section-header-note-max-width); margin: 0; color: var(--ink-muted); - font-size: 14px; - line-height: 1.45; + font-size: var(--webase-font-size-body); + line-height: var(--webase-line-height-body); } @media (max-width: 700px) { .ds-section-head { display: block; } - h2 { margin-bottom: 14px; } + h2 { margin-bottom: var(--webase-space-7); } } diff --git a/packages/webaseui-svelte/src/lib/components/WeBaseSelect.svelte b/packages/webaseui-svelte/src/lib/components/WeBaseSelect.svelte index 095cec5..5d35e79 100644 --- a/packages/webaseui-svelte/src/lib/components/WeBaseSelect.svelte +++ b/packages/webaseui-svelte/src/lib/components/WeBaseSelect.svelte @@ -1,21 +1,34 @@
{label} + - diff --git a/packages/webaseui-svelte/src/lib/components/WeBaseTooltip.svelte b/packages/webaseui-svelte/src/lib/components/WeBaseTooltip.svelte index caa3a76..6c1e319 100644 --- a/packages/webaseui-svelte/src/lib/components/WeBaseTooltip.svelte +++ b/packages/webaseui-svelte/src/lib/components/WeBaseTooltip.svelte @@ -1,38 +1,120 @@ - + - {text} + diff --git a/packages/webaseui-svelte/src/lib/index.ts b/packages/webaseui-svelte/src/lib/index.ts index 43c9903..c8ea7ad 100644 --- a/packages/webaseui-svelte/src/lib/index.ts +++ b/packages/webaseui-svelte/src/lib/index.ts @@ -29,6 +29,15 @@ export { default as WeBaseTextarea } from './components/WeBaseTextarea.svelte'; export { default as WeBaseToast } from './components/WeBaseToast.svelte'; export { default as WeBaseTooltip } from './components/WeBaseTooltip.svelte'; export type { WeBaseIconName } from './components/WeBaseIcon.svelte'; +export type { + WeBaseAccordionItem, + WeBaseBreadcrumbItem, + WeBaseCountFormatter, + WeBaseNumberFormatter, + WeBasePageLabel, + WeBaseSelectOption, + WeBaseSliderValueFormatter +} from './types.js'; export type WeBaseAccordionProps = ComponentProps; export type WeBaseAlertProps = ComponentProps; diff --git a/packages/webaseui-svelte/src/lib/internal/dialog-lifecycle.ts b/packages/webaseui-svelte/src/lib/internal/dialog-lifecycle.ts new file mode 100644 index 0000000..70a4b8c --- /dev/null +++ b/packages/webaseui-svelte/src/lib/internal/dialog-lifecycle.ts @@ -0,0 +1,76 @@ +import { acquireBodyScrollLock } from './overlay.js'; + +interface FocusTarget extends Element { + focus(): void; +} + +type ScheduleFocusRestore = (callback: () => void) => void; + +function asFocusTarget(value: unknown): FocusTarget | undefined { + if (!value || typeof value !== 'object' || !('focus' in value)) return; + return typeof value.focus === 'function' ? value as FocusTarget : undefined; +} + +export function createDialogLifecycle( + scheduleFocusRestore: ScheduleFocusRestore = queueMicrotask +) { + let focusTarget: FocusTarget | undefined; + let focusDocument: Document | undefined; + let activeDialog: HTMLDialogElement | undefined; + let lastInteractionTarget: FocusTarget | undefined; + let lastInteractionAt = 0; + + function listenForInteractionTarget(targetDocument: Document): () => void { + const handleClick = (event: MouseEvent) => { + lastInteractionTarget = event.target === targetDocument.body ? undefined : asFocusTarget(event.target); + lastInteractionAt = lastInteractionTarget ? Date.now() : 0; + }; + + targetDocument.addEventListener('click', handleClick, true); + return () => targetDocument.removeEventListener('click', handleClick, true); + } + + function synchronize(dialog: HTMLDialogElement, requestedOpen: boolean): (() => void) | undefined { + if (!requestedOpen) { + if (dialog.open) dialog.close(); + return; + } + + if (!dialog.open) { + const activeElement = dialog.ownerDocument.activeElement; + const recentInteractionTarget = lastInteractionTarget && Date.now() - lastInteractionAt <= 1_000 + ? lastInteractionTarget + : undefined; + focusTarget = activeElement === dialog.ownerDocument.body + ? recentInteractionTarget + : asFocusTarget(activeElement) ?? recentInteractionTarget; + lastInteractionTarget = undefined; + lastInteractionAt = 0; + focusDocument = dialog.ownerDocument; + activeDialog = dialog; + dialog.showModal(); + } + + return acquireBodyScrollLock(dialog.ownerDocument); + } + + function restoreFocus() { + const target = focusTarget; + const targetDocument = focusDocument; + const dialog = activeDialog; + focusTarget = undefined; + focusDocument = undefined; + activeDialog = undefined; + + if (!target || !targetDocument || target.isConnected === false) return; + scheduleFocusRestore(() => { + if (target.isConnected === false) return; + const current = targetDocument.activeElement; + if ( + !current || current === targetDocument.body || current === dialog || current === target || dialog?.contains(current) + ) target.focus(); + }); + } + + return { listenForInteractionTarget, restoreFocus, synchronize }; +} diff --git a/packages/webaseui-svelte/src/lib/internal/floating-position.ts b/packages/webaseui-svelte/src/lib/internal/floating-position.ts new file mode 100644 index 0000000..64557de --- /dev/null +++ b/packages/webaseui-svelte/src/lib/internal/floating-position.ts @@ -0,0 +1,226 @@ +export type FloatingSide = 'bottom' | 'top'; +export type FloatingAlign = 'start' | 'center' | 'end'; +export type FloatingDirection = 'ltr' | 'rtl'; + +export interface FloatingRect { + top: number; + right: number; + bottom: number; + left: number; + width: number; + height: number; +} + +export interface FloatingViewport { + x: number; + y: number; + width: number; + height: number; +} + +export interface FloatingPositionOptions { + side?: FloatingSide; + align?: FloatingAlign; + direction?: FloatingDirection; + offset?: number; + viewportPadding?: number; + matchAnchorWidth?: boolean; + maxWidth?: number; + maxHeight?: number; +} + +export interface FloatingPosition { + x: number; + y: number; + width?: number; + maxWidth: number; + maxHeight: number; + side: FloatingSide; + align: FloatingAlign; +} + +function clamp(value: number, minimum: number, maximum: number): number { + return Math.min(Math.max(value, minimum), maximum); +} + +function bounded(value: number): number { + return Math.max(0, value); +} + +/** Calculate a fixed-position placement inside a visual viewport boundary. */ +export function computeFloatingPosition( + anchor: FloatingRect, + floating: Pick, + viewport: FloatingViewport, + options: FloatingPositionOptions = {} +): FloatingPosition { + const preferredSide = options.side ?? 'bottom'; + const align = options.align ?? 'start'; + const direction = options.direction ?? 'ltr'; + const offset = bounded(options.offset ?? 0); + const padding = bounded(options.viewportPadding ?? 0); + const viewportLeft = viewport.x + padding; + const viewportTop = viewport.y + padding; + const viewportRight = viewport.x + viewport.width - padding; + const viewportBottom = viewport.y + viewport.height - padding; + const availableWidth = bounded(viewportRight - viewportLeft); + const configuredMaxWidth = options.maxWidth ?? availableWidth; + const renderedWidth = Math.min( + options.matchAnchorWidth ? anchor.width : floating.width, + configuredMaxWidth, + availableWidth + ); + const maximumX = Math.max(viewportLeft, viewportRight - renderedWidth); + const alignedX = align === 'center' + ? anchor.left + (anchor.width - renderedWidth) / 2 + : align === 'start' + ? direction === 'rtl' ? anchor.right - renderedWidth : anchor.left + : direction === 'rtl' ? anchor.left : anchor.right - renderedWidth; + const x = clamp(alignedX, viewportLeft, maximumX); + + const space = { + bottom: bounded(viewportBottom - anchor.bottom - offset), + top: bounded(anchor.top - viewportTop - offset) + }; + const alternateSide: FloatingSide = preferredSide === 'bottom' ? 'top' : 'bottom'; + const desiredHeight = Math.min(floating.height, options.maxHeight ?? floating.height); + const side = desiredHeight > space[preferredSide] && space[alternateSide] > space[preferredSide] + ? alternateSide + : preferredSide; + const maxHeight = Math.min(options.maxHeight ?? space[side], space[side]); + const renderedHeight = Math.min(floating.height, maxHeight); + const y = side === 'bottom' + ? anchor.bottom + offset + : anchor.top - offset - renderedHeight; + + return { + x, + y, + width: options.matchAnchorWidth ? renderedWidth : undefined, + maxWidth: Math.min(configuredMaxWidth, availableWidth), + maxHeight, + side, + align + }; +} + +function px(value: number): string { + return `${Math.round(value * 1_000) / 1_000}px`; +} + +function viewportFor(element: HTMLElement): FloatingViewport { + const view = element.ownerDocument.defaultView; + const visualViewport = view?.visualViewport; + return { + x: visualViewport?.offsetLeft ?? 0, + y: visualViewport?.offsetTop ?? 0, + width: visualViewport?.width ?? view?.innerWidth ?? element.ownerDocument.documentElement.clientWidth, + height: visualViewport?.height ?? view?.innerHeight ?? element.ownerDocument.documentElement.clientHeight + }; +} + +/** Read a resolved length-valued custom property without leaking DOM access to SSR. */ +export function readCssPixel(element: HTMLElement, property: string, fallback = 0): number { + const value = element.ownerDocument.defaultView + ?.getComputedStyle(element) + .getPropertyValue(property); + const parsed = Number.parseFloat(value ?? ''); + return Number.isFinite(parsed) ? parsed : fallback; +} + +/** Measure and apply one floating placement, returning the applied geometry. */ +export function positionFloatingElement( + anchor: HTMLElement, + floating: HTMLElement, + options: FloatingPositionOptions = {} +): FloatingPosition { + const anchorRect = anchor.getBoundingClientRect(); + const viewport = viewportFor(anchor); + const view = anchor.ownerDocument.defaultView as (Window & { getComputedStyle?: (element: Element) => CSSStyleDeclaration }) | null; + const direction = view && typeof view.getComputedStyle === 'function' && view.getComputedStyle(anchor).direction === 'rtl' + ? 'rtl' + : options.direction; + const padding = bounded(options.viewportPadding ?? 0); + const availableWidth = bounded(viewport.width - padding * 2); + const maxWidth = Math.min(options.maxWidth ?? availableWidth, availableWidth); + + floating.style.width = options.matchAnchorWidth + ? px(Math.min(anchorRect.width, availableWidth)) + : ''; + floating.style.maxWidth = px(maxWidth); + floating.style.maxHeight = options.maxHeight === undefined ? '' : px(options.maxHeight); + + const floatingRect = floating.getBoundingClientRect(); + const borderHeight = bounded(floatingRect.height - floating.clientHeight); + const intrinsicHeight = Math.max(floatingRect.height, floating.scrollHeight + borderHeight); + const position = computeFloatingPosition( + anchorRect, + { width: floatingRect.width, height: intrinsicHeight }, + viewport, + { ...options, direction } + ); + + floating.style.left = px(position.x); + floating.style.top = px(position.y); + floating.style.width = position.width === undefined ? '' : px(position.width); + floating.style.maxWidth = px(position.maxWidth); + floating.style.maxHeight = px(position.maxHeight); + floating.dataset.side = position.side; + floating.dataset.align = position.align; + return position; +} + +type ResizeObserverWindow = Window & typeof globalThis & { + ResizeObserver?: typeof ResizeObserver; +}; + +/** + * Reposition on viewport, scroll-container, visual-viewport, and element-size + * changes. Scroll uses capture so non-bubbling nested scroll events are seen. + */ +export function autoUpdateFloatingPosition( + anchor: HTMLElement, + floating: HTMLElement, + update: () => void +): () => void { + const view = anchor.ownerDocument.defaultView as ResizeObserverWindow | null; + if (!view) { + update(); + return () => {}; + } + + let frame: number | undefined; + let stopped = false; + const schedule = () => { + if (stopped || frame !== undefined) return; + if (typeof view.requestAnimationFrame !== 'function') { + update(); + return; + } + frame = view.requestAnimationFrame(() => { + frame = undefined; + if (!stopped) update(); + }); + }; + + update(); + view.addEventListener('resize', schedule); + view.addEventListener('scroll', schedule, true); + view.visualViewport?.addEventListener('resize', schedule); + view.visualViewport?.addEventListener('scroll', schedule); + + const observer = view.ResizeObserver ? new view.ResizeObserver(schedule) : undefined; + observer?.observe(anchor); + observer?.observe(floating); + + return () => { + if (stopped) return; + stopped = true; + view.removeEventListener('resize', schedule); + view.removeEventListener('scroll', schedule, true); + view.visualViewport?.removeEventListener('resize', schedule); + view.visualViewport?.removeEventListener('scroll', schedule); + observer?.disconnect(); + if (frame !== undefined) view.cancelAnimationFrame(frame); + }; +} diff --git a/packages/webaseui-svelte/src/lib/internal/overlay.ts b/packages/webaseui-svelte/src/lib/internal/overlay.ts new file mode 100644 index 0000000..a0c4e0c --- /dev/null +++ b/packages/webaseui-svelte/src/lib/internal/overlay.ts @@ -0,0 +1,68 @@ +interface ScrollLockDocument { + body: { + style: { + overflow: string; + }; + }; +} + +interface ScrollLockState { + count: number; + previousOverflow: string; +} + +interface PointerOutsideDocument { + addEventListener(type: 'pointerdown', listener: (event: PointerEvent) => void): void; + removeEventListener(type: 'pointerdown', listener: (event: PointerEvent) => void): void; +} + +interface PointerOutsideRoot { + ownerDocument: PointerOutsideDocument; + contains(target: Node | null): boolean; +} + +const scrollLocks = new WeakMap(); + +/** + * Lock body scrolling with reference counting so nested overlays restore the + * consumer's original inline overflow value only after the final release. + */ +export function acquireBodyScrollLock(targetDocument: ScrollLockDocument): () => void { + const documentKey = targetDocument as object; + const existing = scrollLocks.get(documentKey); + + if (existing) { + existing.count += 1; + } else { + scrollLocks.set(documentKey, { + count: 1, + previousOverflow: targetDocument.body.style.overflow + }); + targetDocument.body.style.overflow = 'hidden'; + } + + let released = false; + return () => { + if (released) return; + released = true; + + const current = scrollLocks.get(documentKey); + if (!current) return; + current.count -= 1; + + if (current.count === 0) { + targetDocument.body.style.overflow = current.previousOverflow; + scrollLocks.delete(documentKey); + } + }; +} + +/** Register one pointer listener and dismiss only when the target is outside. */ +export function listenForPointerOutside(root: PointerOutsideRoot, onOutside: (event: PointerEvent) => void): () => void { + const handlePointerDown = (event: PointerEvent) => { + if (!root.contains(event.target as Node | null)) onOutside(event); + }; + + root.ownerDocument.addEventListener('pointerdown', handlePointerDown); + return () => root.ownerDocument.removeEventListener('pointerdown', handlePointerDown); +} diff --git a/packages/webaseui-svelte/src/lib/internal/popover.ts b/packages/webaseui-svelte/src/lib/internal/popover.ts new file mode 100644 index 0000000..8d0110e --- /dev/null +++ b/packages/webaseui-svelte/src/lib/internal/popover.ts @@ -0,0 +1,52 @@ +type ManualPopoverElement = HTMLElement & { + hidePopover?: () => void; + showPopover?: () => void; +}; + +function supportsPopover(element: ManualPopoverElement): boolean { + return typeof element.showPopover === 'function' && typeof element.hidePopover === 'function'; +} + +function isPopoverOpen(element: ManualPopoverElement): boolean { + try { + return element.matches(':popover-open'); + } catch { + return false; + } +} + +/** + * Keep a manual popover synchronized with component state. Browsers without + * the Popover API use the element's hidden state and fixed-position styles. + */ +export function synchronizeManualPopover(element: ManualPopoverElement, open: boolean): boolean { + const nativePopover = supportsPopover(element); + + if (!nativePopover) { + element.removeAttribute('popover'); + element.hidden = !open; + return false; + } + + if (open) { + element.hidden = false; + if (!isPopoverOpen(element)) { + try { + element.showPopover?.(); + } catch { + // A disconnected element can reject showPopover during teardown. + } + } + } else { + if (isPopoverOpen(element)) { + try { + element.hidePopover?.(); + } catch { + // The browser may already have removed the element from the top layer. + } + } + element.hidden = true; + } + + return true; +} diff --git a/packages/webaseui-svelte/src/lib/internal/roving-focus.ts b/packages/webaseui-svelte/src/lib/internal/roving-focus.ts new file mode 100644 index 0000000..ace8a2b --- /dev/null +++ b/packages/webaseui-svelte/src/lib/internal/roving-focus.ts @@ -0,0 +1,51 @@ +export type RovingFocusOrientation = 'horizontal' | 'vertical'; +export type RovingFocusDirection = 'ltr' | 'rtl'; + +type IsItemDisabled = (item: T, index: number) => boolean; + +function findEnabledIndex( + items: readonly T[], + start: number, + direction: 1 | -1, + isItemDisabled: IsItemDisabled +): number { + if (items.length === 0) return -1; + + const length = items.length; + const normalizedStart = ((Math.trunc(start) % length) + length) % length; + + for (let offset = 0; offset < length; offset += 1) { + const index = (normalizedStart + offset * direction + length) % length; + const item = items[index]; + if (item !== undefined && !isItemDisabled(item, index)) return index; + } + + return -1; +} + +/** + * Resolve APG-style roving focus keys to the next enabled item. Unsupported + * keys return undefined so components can leave native keyboard behavior alone. + */ +export function findRovingFocusIndex( + items: readonly T[], + currentIndex: number, + key: string, + orientation: RovingFocusOrientation, + isItemDisabled: IsItemDisabled = () => false, + inlineDirection: RovingFocusDirection = 'ltr' +): number | undefined { + if (key === 'Home') return findEnabledIndex(items, 0, 1, isItemDisabled); + if (key === 'End') return findEnabledIndex(items, items.length - 1, -1, isItemDisabled); + + const previousKey = orientation === 'horizontal' + ? inlineDirection === 'rtl' ? 'ArrowRight' : 'ArrowLeft' + : 'ArrowUp'; + const nextKey = orientation === 'horizontal' + ? inlineDirection === 'rtl' ? 'ArrowLeft' : 'ArrowRight' + : 'ArrowDown'; + if (key !== previousKey && key !== nextKey) return; + + const movement = key === nextKey ? 1 : -1; + return findEnabledIndex(items, currentIndex + movement, movement, isItemDisabled); +} diff --git a/packages/webaseui-svelte/src/lib/internal/select-state.ts b/packages/webaseui-svelte/src/lib/internal/select-state.ts new file mode 100644 index 0000000..580edd6 --- /dev/null +++ b/packages/webaseui-svelte/src/lib/internal/select-state.ts @@ -0,0 +1,9 @@ +import type { WeBaseSelectOption } from '../types.js'; +import { findEnabledIndex } from '../utils/collection.js'; + +/** Resolve the controlled value to an enabled option, or the first fallback. */ +export function findSelectedOptionIndex(options: readonly WeBaseSelectOption[], value: string): number { + const selectedIndex = options.findIndex((option) => option.value === value); + if (selectedIndex >= 0 && !options[selectedIndex]?.disabled) return selectedIndex; + return findEnabledIndex(options, 0, 1); +} diff --git a/packages/webaseui-svelte/src/lib/internal/timing.ts b/packages/webaseui-svelte/src/lib/internal/timing.ts new file mode 100644 index 0000000..942e34e --- /dev/null +++ b/packages/webaseui-svelte/src/lib/internal/timing.ts @@ -0,0 +1,35 @@ +export interface TimeoutScheduler { + setTimeout(callback: () => void, delay: number): Handle; + clearTimeout(handle: Handle): void; +} + +export interface AutoDismissState { + open: boolean; + paused: boolean; + duration: number; +} + +/** + * Schedule one auto-dismiss cycle for a mounted notification. + * + * The component remains responsible for starting a fresh cycle whenever its + * reactive state changes. Keeping that lifecycle boundary outside this helper + * makes pause, resume, and cancellation deterministic and independently + * testable without introducing a long-lived timer controller. + */ +export function scheduleAutoDismiss( + state: AutoDismissState, + onDismiss: () => void, + scheduler: TimeoutScheduler +): () => void { + if (!state.open || state.paused || state.duration <= 0) return () => {}; + + const handle = scheduler.setTimeout(onDismiss, state.duration); + let active = true; + + return () => { + if (!active) return; + active = false; + scheduler.clearTimeout(handle); + }; +} diff --git a/packages/webaseui-svelte/src/lib/internal/typeahead.ts b/packages/webaseui-svelte/src/lib/internal/typeahead.ts new file mode 100644 index 0000000..ac90254 --- /dev/null +++ b/packages/webaseui-svelte/src/lib/internal/typeahead.ts @@ -0,0 +1,81 @@ +import type { TimeoutScheduler } from './timing.js'; + +type ItemText = (item: T, index: number) => string; +type IsItemDisabled = (item: T, index: number) => boolean; + +/** Find the first enabled prefix match from a cyclic collection position. */ +export function findTypeaheadMatchIndex( + items: readonly T[], + query: string, + startIndex: number, + itemText: ItemText, + isItemDisabled: IsItemDisabled = () => false +): number { + if (items.length === 0 || !query) return -1; + + const normalizedQuery = query.toLocaleLowerCase(); + const normalizedStart = ((Math.trunc(startIndex) % items.length) + items.length) % items.length; + + for (let offset = 0; offset < items.length; offset += 1) { + const index = (normalizedStart + offset) % items.length; + const item = items[index]; + if ( + item !== undefined && + !isItemDisabled(item, index) && + itemText(item, index).toLocaleLowerCase().startsWith(normalizedQuery) + ) return index; + } + + return -1; +} + +/** + * Keep the short-lived typeahead query outside component state. Repeating one + * character cycles to the next match; adding a different character refines the + * current match until the reset delay expires. + */ +export function createTypeaheadController( + scheduler: TimeoutScheduler, + resetDelay = 500 +) { + let query = ''; + let resetHandle: Handle; + let resetPending = false; + + function cancelReset() { + if (!resetPending) return; + resetPending = false; + scheduler.clearTimeout(resetHandle); + } + + function reset() { + cancelReset(); + query = ''; + } + + function search( + items: readonly T[], + currentIndex: number, + key: string, + itemText: ItemText, + isItemDisabled: IsItemDisabled = () => false + ): number | undefined { + if (key.length !== 1 || !/\S/.test(key)) return; + + const normalizedKey = key.toLocaleLowerCase(); + const repeatedCharacter = query.length > 0 && Array.from(query).every((character) => character === normalizedKey); + query = repeatedCharacter ? normalizedKey : `${query}${normalizedKey}`; + + cancelReset(); + resetPending = true; + resetHandle = scheduler.setTimeout(() => { + query = ''; + resetPending = false; + }, resetDelay); + + const startIndex = repeatedCharacter && currentIndex >= 0 ? currentIndex + 1 : Math.max(currentIndex, 0); + return findTypeaheadMatchIndex(items, query, startIndex, itemText, isItemDisabled); + } + + return { reset, search }; +} diff --git a/packages/webaseui-svelte/src/lib/types.ts b/packages/webaseui-svelte/src/lib/types.ts new file mode 100644 index 0000000..8845f46 --- /dev/null +++ b/packages/webaseui-svelte/src/lib/types.ts @@ -0,0 +1,30 @@ +/** One disclosure entry rendered by WeBaseAccordion. */ +export interface WeBaseAccordionItem { + title: string; + content: string; +} + +/** One navigation entry rendered by WeBaseBreadcrumbs. */ +export interface WeBaseBreadcrumbItem { + label: string; + href?: string; +} + +/** One choice rendered by WeBaseSelect. Values must be unique within a select. */ +export interface WeBaseSelectOption { + label: string; + value: string; + disabled?: boolean; +} + +/** Produces an accessible label for a numbered pagination control. */ +export type WeBasePageLabel = (page: number) => string; + +/** Formats a visible numeric value using the consumer's locale and notation. */ +export type WeBaseNumberFormatter = (value: number) => string; + +/** Formats a slider value together with its consumer-defined unit. */ +export type WeBaseSliderValueFormatter = (value: number, unit: string) => string; + +/** Formats a current and maximum character count. */ +export type WeBaseCountFormatter = (current: number, maximum: number) => string; diff --git a/packages/webaseui-svelte/src/lib/utils/collection.ts b/packages/webaseui-svelte/src/lib/utils/collection.ts new file mode 100644 index 0000000..495d256 --- /dev/null +++ b/packages/webaseui-svelte/src/lib/utils/collection.ts @@ -0,0 +1,32 @@ +export interface CollectionItem { + disabled?: boolean; +} + +/** Return the first enabled item while wrapping around the collection. */ +export function findEnabledIndex(items: readonly T[], start: number, direction: 1 | -1): number { + if (items.length === 0) return -1; + + const length = items.length; + const normalizedStart = ((Math.trunc(start) % length) + length) % length; + + for (let offset = 0; offset < length; offset += 1) { + const index = (normalizedStart + offset * direction + length) % length; + if (!items[index]?.disabled) return index; + } + + return -1; +} + +/** Normalize a controlled collection index, using -1 for an empty collection. */ +export function normalizeIndex(value: number, length: number, fallback = 0): number { + if (length <= 0) return -1; + const safeFallback = Math.min(Math.max(Math.trunc(fallback), 0), length - 1); + if (!Number.isInteger(value) || value < 0 || value >= length) return safeFallback; + return value; +} + +/** Move an index by a signed step and wrap it into the collection. */ +export function wrapIndex(index: number, length: number, step: number): number { + if (length <= 0) return -1; + return ((Math.trunc(index) + Math.trunc(step)) % length + length) % length; +} diff --git a/playwright.config.ts b/playwright.config.ts new file mode 100644 index 0000000..746658e --- /dev/null +++ b/playwright.config.ts @@ -0,0 +1,47 @@ +import { defineConfig, devices } from '@playwright/test'; + +export default defineConfig({ + testDir: './tests/browser/specs', + timeout: 30_000, + expect: { timeout: 5_000 }, + fullyParallel: false, + forbidOnly: Boolean(process.env.CI), + retries: process.env.CI ? 2 : 0, + workers: 1, + reporter: 'line', + use: { + screenshot: 'only-on-failure', + trace: 'retain-on-failure' + }, + projects: [ + { name: 'chromium', testIgnore: /visual\.spec\.ts/, use: { ...devices['Desktop Chrome'] } }, + { name: 'firefox', testIgnore: /visual\.spec\.ts/, use: { ...devices['Desktop Firefox'] } }, + { name: 'webkit', testIgnore: /visual\.spec\.ts/, use: { ...devices['Desktop Safari'] } }, + { + name: 'visual-chromium', + testMatch: /visual\.spec\.ts/, + use: { + ...devices['Desktop Chrome'], + viewport: { width: 1440, height: 1000 }, + reducedMotion: 'reduce' + } + } + ], + webServer: [ + { + command: 'npm run preview --workspace @webaseui/docs -- --host 127.0.0.1 --port 4175', + url: 'http://127.0.0.1:4175', + reuseExistingServer: !process.env.CI + }, + { + command: 'npm exec -- vite --config tests/browser/vite.config.ts --host 127.0.0.1 --port 4176', + url: 'http://127.0.0.1:4176', + reuseExistingServer: !process.env.CI + }, + { + command: 'node tests/ssr/server.mjs', + url: 'http://127.0.0.1:4177', + reuseExistingServer: !process.env.CI + } + ] +}); diff --git a/scripts/check-api-contract.mjs b/scripts/check-api-contract.mjs new file mode 100644 index 0000000..86d59dc --- /dev/null +++ b/scripts/check-api-contract.mjs @@ -0,0 +1,41 @@ +import { readFileSync } from 'node:fs'; +import path from 'node:path'; + +const root = path.resolve(import.meta.dirname, '..'); +const indexSource = readFileSync(path.join(root, 'packages/webaseui-svelte/src/lib/index.ts'), 'utf8'); +const contractSource = readFileSync(path.join(root, 'packages/webaseui-svelte/API_CONTRACT.md'), 'utf8'); + +const exportedComponents = [...indexSource.matchAll(/export \{ default as (WeBase\w+) \}/g)] + .map((match) => match[1]) + .sort(); +const documentedComponents = [...contractSource.matchAll(/^### (WeBase\w+)$/gm)] + .map((match) => match[1]) + .sort(); + +const missing = exportedComponents.filter((component) => !documentedComponents.includes(component)); +const stale = documentedComponents.filter((component) => !exportedComponents.includes(component)); +const duplicates = documentedComponents.filter((component, index) => documentedComponents.indexOf(component) !== index); + +if (exportedComponents.length !== 28) { + throw new Error(`Expected 28 public component exports, found ${exportedComponents.length}.`); +} + +if (missing.length || stale.length || duplicates.length) { + throw new Error([ + 'Public API contract coverage failed.', + missing.length ? `Missing: ${missing.join(', ')}` : '', + stale.length ? `Stale: ${stale.join(', ')}` : '', + duplicates.length ? `Duplicates: ${[...new Set(duplicates)].join(', ')}` : '' + ].filter(Boolean).join('\n')); +} + +for (const component of documentedComponents) { + const section = contractSource.split(`### ${component}\n`)[1]?.split('\n### ')[0] ?? ''; + for (const requiredLabel of ['Props:', 'Binding']) { + if (!section.includes(requiredLabel)) { + throw new Error(`${component} is missing ${requiredLabel} contract metadata.`); + } + } +} + +console.log(`Validated public API contract coverage for ${documentedComponents.length} components.`); diff --git a/scripts/check-changeset.mjs b/scripts/check-changeset.mjs new file mode 100644 index 0000000..e3e990e --- /dev/null +++ b/scripts/check-changeset.mjs @@ -0,0 +1,61 @@ +import { readFileSync } from 'node:fs'; +import { spawnSync } from 'node:child_process'; +import path from 'node:path'; +import process from 'node:process'; + +const root = path.resolve(import.meta.dirname, '..'); +const requestedBase = process.argv.find((argument) => argument.startsWith('--base='))?.slice('--base='.length); +const baseRef = requestedBase ?? (process.env.GITHUB_BASE_REF ? `origin/${process.env.GITHUB_BASE_REF}` : 'origin/main'); + +function git(args) { + const result = spawnSync('git', args, { cwd: root, encoding: 'utf8' }); + if (result.status !== 0) { + process.stderr.write(result.stderr); + throw new Error(`git ${args.join(' ')} failed`); + } + return result.stdout.trim(); +} + +const diffBase = git(['merge-base', baseRef, 'HEAD']); +const changedFiles = new Set([ + ...git(['diff', '--name-only', diffBase]).split('\n').filter(Boolean), + ...git(['ls-files', '--others', '--exclude-standard']).split('\n').filter(Boolean) +]); +const publishablePackages = new Map([ + ['packages/webaseui-core/', '@webaseui/core'], + ['packages/webaseui-svelte/', '@webaseui/svelte'] +]); +const changedPackages = new Set(); + +for (const changedFile of changedFiles) { + for (const [directory, packageName] of publishablePackages) { + if (changedFile.startsWith(directory)) changedPackages.add(packageName); + } +} + +if (changedPackages.size === 0) { + console.log('No publishable package changes detected; no changeset required.'); + process.exit(0); +} + +const changesetFiles = [...changedFiles].filter((file) => /^\.changeset\/(?!README\.md$).+\.md$/.test(file)); +if (changesetFiles.length === 0) { + throw new Error(`Missing changeset for: ${[...changedPackages].join(', ')}`); +} + +const coveredPackages = new Set(); +for (const changesetFile of changesetFiles) { + const source = readFileSync(path.join(root, changesetFile), 'utf8'); + const frontmatter = source.match(/^---\r?\n([\s\S]*?)\r?\n---/)?.[1] ?? ''; + for (const line of frontmatter.split('\n')) { + const packageName = line.match(/^["']?(@webaseui\/[A-Za-z0-9_-]+)["']?:\s+(?:major|minor|patch)\s*$/)?.[1]; + if (packageName) coveredPackages.add(packageName); + } +} + +const missingPackages = [...changedPackages].filter((packageName) => !coveredPackages.has(packageName)); +if (missingPackages.length > 0) { + throw new Error(`Changeset does not cover: ${missingPackages.join(', ')}`); +} + +console.log(`Changeset coverage validated for: ${[...changedPackages].join(', ')}`); diff --git a/scripts/check-docs-design.mjs b/scripts/check-docs-design.mjs new file mode 100644 index 0000000..3f8703f --- /dev/null +++ b/scripts/check-docs-design.mjs @@ -0,0 +1,63 @@ +import { readFileSync, readdirSync } from 'node:fs'; +import path from 'node:path'; + +const root = path.resolve(import.meta.dirname, '..'); +const docsRoot = path.join(root, 'apps/docs'); +const sourceRoots = [path.join(docsRoot, 'src'), path.join(docsRoot, 'index.html')]; +const inspectedExtensions = new Set(['.css', '.html', '.js', '.json', '.svelte', '.ts']); +const pictographicPattern = /[\p{Extended_Pictographic}\u2190-\u2bff]/u; +const forbiddenDashPattern = /[—–]/u; +const inlineSvgPattern = / { + if (pictographicPattern.test(line)) { + failures.push(`${relativePath}:${index + 1} uses an emoji, pictographic symbol, or Unicode icon`); + } + if (forbiddenDashPattern.test(line)) { + failures.push(`${relativePath}:${index + 1} uses a typographic dash that is disallowed in the site design language`); + } + if (inlineSvgPattern.test(line)) { + failures.push(`${relativePath}:${index + 1} contains inline SVG; use a Lucide-backed component instead`); + } + + const iconImport = line.match(forbiddenIconPackagePattern)?.[1]; + if (iconImport && !allowedIconPackages.has(iconImport)) { + failures.push(`${relativePath}:${index + 1} imports ${iconImport}; documentation icons must use Lucide`); + } + }); +} + +if (failures.length > 0) { + throw new Error(`Documentation design policy failed:\n${failures.join('\n')}`); +} + +console.log('Validated documentation icon, emoji, and visual-language source policies.'); diff --git a/scripts/check-package-size.mjs b/scripts/check-package-size.mjs new file mode 100644 index 0000000..8810d7b --- /dev/null +++ b/scripts/check-package-size.mjs @@ -0,0 +1,170 @@ +import { existsSync, mkdtempSync, readFileSync, readdirSync, rmSync, statSync, writeFileSync } from 'node:fs'; +import { gzipSync } from 'node:zlib'; +import { spawnSync } from 'node:child_process'; +import os from 'node:os'; +import path from 'node:path'; +import { parseNpmPackOutput } from './lib/npm-pack.mjs'; + +const root = path.resolve(import.meta.dirname, '..'); +const baselinePath = path.join(root, 'docs/package-size-baseline.json'); +const fixturePath = path.join(root, 'examples/webaseui-svelte-consumer'); +const writeBaseline = process.argv.includes('--write'); + +function run(command, args, cwd = root) { + const result = spawnSync(command, args, { cwd, encoding: 'utf8', stdio: 'pipe' }); + if (result.status !== 0) { + process.stderr.write(result.stdout); + process.stderr.write(result.stderr); + throw new Error(`${command} ${args.join(' ')} failed`); + } + return result.stdout; +} + +function bytesForFile(filePath) { + return statSync(filePath).size; +} + +function gzipBytes(buffer) { + return gzipSync(buffer, { level: 9 }).byteLength; +} + +function filesUnder(directory) { + if (!existsSync(directory)) return []; + return readdirSync(directory, { withFileTypes: true }).flatMap((entry) => { + const target = path.join(directory, entry.name); + return entry.isDirectory() ? filesUnder(target) : [target]; + }); +} + +function aggregateFiles(files) { + const sorted = [...files].sort(); + const content = Buffer.concat(sorted.map((file) => readFileSync(file))); + return { + bytes: content.byteLength, + gzipBytes: gzipBytes(content) + }; +} + +function packMetrics(workspace) { + const output = run('npm', ['pack', '--dry-run', '--json', '--ignore-scripts', '--workspace', workspace]); + const pack = parseNpmPackOutput(output, workspace); + if (typeof pack.size !== 'number' || typeof pack.unpackedSize !== 'number') { + throw new Error(`npm pack returned incomplete size metadata for ${workspace}`); + } + return { + tarballBytes: pack.size, + unpackedBytes: pack.unpackedSize + }; +} + +function ensureSvelteBuild() { + const entry = path.join(root, 'packages/webaseui-svelte/dist/index.js'); + if (!existsSync(entry)) run('npm', ['run', 'build']); +} + +function buildConsumer() { + const temporaryRoot = mkdtempSync(path.join(os.tmpdir(), 'webaseui-size-')); + const outputDirectory = path.join(temporaryRoot, 'dist'); + + try { + run('npm', ['run', 'build', '--prefix', fixturePath, '--', '--outDir', outputDirectory]); + const assets = filesUnder(outputDirectory); + const byExtension = (extension) => assets.filter((file) => path.extname(file) === extension); + const js = aggregateFiles(byExtension('.js')); + const css = aggregateFiles(byExtension('.css')); + const html = aggregateFiles(byExtension('.html')); + return { + jsBytes: js.bytes, + jsGzipBytes: js.gzipBytes, + cssBytes: css.bytes, + cssGzipBytes: css.gzipBytes, + htmlBytes: html.bytes, + htmlGzipBytes: html.gzipBytes, + totalBytes: js.bytes + css.bytes + html.bytes, + totalGzipBytes: js.gzipBytes + css.gzipBytes + html.gzipBytes + }; + } finally { + rmSync(temporaryRoot, { recursive: true, force: true }); + } +} + +function collectMetrics() { + ensureSvelteBuild(); + + const coreSource = path.join(root, 'packages/webaseui-core/src'); + const svelteDist = path.join(root, 'packages/webaseui-svelte/dist'); + const coreFiles = filesUnder(coreSource).filter((file) => path.extname(file) === '.css'); + const svelteFiles = filesUnder(svelteDist); + const componentFiles = svelteFiles.filter((file) => /[\\/]components[\\/]WeBase[A-Za-z]+\.svelte$/.test(file)); + const componentMetrics = Object.fromEntries(componentFiles.sort().map((file) => { + const name = path.basename(file, '.svelte'); + const content = readFileSync(file); + return [name, { bytes: content.byteLength, gzipBytes: gzipBytes(content) }]; + })); + const svelteAggregate = aggregateFiles(svelteFiles); + + return { + schemaVersion: 1, + platform: process.platform, + packages: { + core: { + ...packMetrics('@webaseui/core'), + css: aggregateFiles(coreFiles) + }, + svelte: { + ...packMetrics('@webaseui/svelte'), + dist: svelteAggregate, + entry: aggregateFiles(svelteFiles.filter((file) => /[\\/]index\.(js|d\.ts)$/.test(file))), + components: componentMetrics + } + }, + consumer: buildConsumer() + }; +} + +function compareNumber(current, baseline, label, failures) { + if (typeof baseline !== 'number' || baseline <= 0 || current <= baseline * 1.05) return; + failures.push(`${label} grew from ${baseline} to ${current} bytes (${((current / baseline - 1) * 100).toFixed(1)}%, limit 5%)`); +} + +function compareMetrics(current, baseline) { + const failures = []; + const compareObject = (currentObject, baselineObject, prefix) => { + for (const [key, value] of Object.entries(currentObject)) { + const baselineValue = baselineObject?.[key]; + if (typeof value === 'number') compareNumber(value, baselineValue, `${prefix}.${key}`, failures); + else if (value && typeof value === 'object') compareObject(value, baselineValue ?? {}, `${prefix}.${key}`); + } + }; + + compareObject(current, baseline, 'size'); + return failures; +} + +const current = collectMetrics(); + +if (writeBaseline) { + writeFileSync(baselinePath, `${JSON.stringify(current, null, 2)}\n`); + console.log(`Wrote package size baseline to ${path.relative(root, baselinePath)}.`); +} else { + if (!existsSync(baselinePath)) { + throw new Error(`Missing ${path.relative(root, baselinePath)}. Run npm run size:update to create it.`); + } + + const baseline = JSON.parse(readFileSync(baselinePath, 'utf8')); + const failures = compareMetrics(current, baseline); + if (failures.length > 0) { + throw new Error(`Package size budget failed:\n${failures.join('\n')}\nUpdate the baseline only with an intentional, reviewed size change.`); + } + + console.log('Package size baseline is within the 5% growth budget.'); +} + +const summary = [ + ['core tarball', current.packages.core.tarballBytes], + ['svelte tarball', current.packages.svelte.tarballBytes], + ['svelte dist', current.packages.svelte.dist.bytes], + ['consumer JS gzip', current.consumer.jsGzipBytes], + ['consumer CSS gzip', current.consumer.cssGzipBytes] +]; +console.log(summary.map(([label, value]) => `${label}: ${value} bytes`).join(' | ')); diff --git a/scripts/check-support-policy.mjs b/scripts/check-support-policy.mjs new file mode 100644 index 0000000..7ecc257 --- /dev/null +++ b/scripts/check-support-policy.mjs @@ -0,0 +1,83 @@ +import { readFileSync } from 'node:fs'; +import path from 'node:path'; + +const root = path.resolve(import.meta.dirname, '..'); + +function read(relativePath) { + return readFileSync(path.join(root, relativePath), 'utf8'); +} + +function readJson(relativePath) { + return JSON.parse(read(relativePath)); +} + +function invariant(condition, message) { + if (!condition) throw new Error(message); +} + +function compareVersions(left, right) { + const leftParts = left.split('.').map(Number); + const rightParts = right.split('.').map(Number); + for (let index = 0; index < Math.max(leftParts.length, rightParts.length); index += 1) { + const difference = (leftParts[index] ?? 0) - (rightParts[index] ?? 0); + if (difference !== 0) return Math.sign(difference); + } + return 0; +} + +const policy = readJson('docs/support-policy.json'); +const rootManifest = readJson('package.json'); +const svelteManifest = readJson('packages/webaseui-svelte/package.json'); +const consumerManifest = readJson('examples/webaseui-svelte-consumer/package.json'); +const consumerTypeScript = readJson('examples/webaseui-svelte-consumer/tsconfig.json'); +const supportMatrix = read('docs/SUPPORT_MATRIX.md'); +const consumerScript = read('scripts/test-webaseui-consumer.mjs'); +const checkWorkflow = read('.github/workflows/check.yml'); +const releaseWorkflow = read('.github/workflows/release.yml'); +const compatibilityWorkflow = read('.github/workflows/compatibility.yml'); + +invariant(rootManifest.engines?.node === policy.node.engine, 'root Node engine must match the support policy'); +invariant(svelteManifest.peerDependencies?.svelte === policy.svelte.peer, 'Svelte peer range must match the support policy'); +invariant(rootManifest.devDependencies?.['@playwright/test'] === policy.browsers.playwright, 'Playwright must be pinned to the validated support-policy version'); +invariant(consumerManifest.devDependencies?.['@types/node'] === rootManifest.devDependencies?.['@types/node'], 'consumer fixture must pin the repository Node declarations'); +invariant(consumerTypeScript.compilerOptions?.lib?.includes('ESNext.Disposable'), 'minimum consumer must include Rollup disposable declarations'); +invariant(consumerTypeScript.compilerOptions?.types?.includes('node'), 'minimum consumer must include Node declarations'); +invariant(consumerTypeScript.compilerOptions?.types?.includes('vite/client'), 'consumer fixture must include Vite CSS declarations'); +invariant(consumerScript.includes("docs/support-policy.json"), 'consumer checks must read the shared support policy'); +invariant(!consumerScript.includes("typescript: '5.5.4'"), 'minimum TypeScript must not be duplicated in the consumer script'); + +const currentTypeScript = consumerManifest.devDependencies?.typescript; +invariant(typeof currentTypeScript === 'string', 'consumer fixture must declare TypeScript'); +invariant(compareVersions(currentTypeScript, policy.typescript.minimum) >= 0, 'current TypeScript is older than the supported minimum'); +invariant(compareVersions(currentTypeScript, policy.typescript.maximumExclusive) < 0, 'current TypeScript is outside the frozen support range'); + +for (const workflow of [checkWorkflow, releaseWorkflow]) { + const versions = [...workflow.matchAll(/node-version:\s*([^\n]+)/g)].map((match) => match[1].trim()); + invariant(versions.length > 0, 'blocking workflows must select a Node release'); + invariant(versions.every((version) => version === policy.node.release), 'blocking workflows must use the frozen release Node version'); +} + +invariant(compatibilityWorkflow.includes(`node-version: ${policy.node.compatibility}`), 'compatibility workflow must exercise the second supported Node LTS line'); +invariant(compatibilityWorkflow.includes('@playwright/test@latest'), 'compatibility workflow must warn on the latest browser toolchain'); +invariant(compatibilityWorkflow.includes('npm run test:browser'), 'latest browser compatibility job must run the behavior suite'); + +for (const requiredText of [ + policy.node.engine, + policy.svelte.peer, + `>=${policy.typescript.minimum} <${policy.typescript.maximumExclusive.split('.')[0]}`, + policy.browsers.policy, + policy.browsers.playwright, + policy.browsers.validated.chromium, + policy.browsers.validated.firefox, + policy.browsers.validated.webkit +]) { + invariant(supportMatrix.includes(requiredText), `support matrix is missing policy value: ${requiredText}`); +} + +invariant(!supportMatrix.includes('RC decision'), 'support matrix still contains an unresolved RC policy decision'); + +console.log( + `Validated support policy: Node ${policy.node.engine}, Svelte ${policy.svelte.peer}, ` + + `TypeScript >=${policy.typescript.minimum} <${policy.typescript.maximumExclusive.split('.')[0]}, ` + + `${policy.browsers.policy}.` +); diff --git a/scripts/check-token-contrast.mjs b/scripts/check-token-contrast.mjs new file mode 100644 index 0000000..e38c714 --- /dev/null +++ b/scripts/check-token-contrast.mjs @@ -0,0 +1,101 @@ +import { readFileSync } from 'node:fs'; +import path from 'node:path'; + +const root = path.resolve(import.meta.dirname, '..'); +const tokenSource = readFileSync(path.join(root, 'packages/webaseui-core/src/tokens.css'), 'utf8'); +const brandSource = readFileSync(path.join(root, 'packages/webaseui-core/src/brand-theme.css'), 'utf8'); + +function ruleBody(source, selector) { + const escaped = selector.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); + const body = source.match(new RegExp(`^${escaped}\\s*\\{([\\s\\S]*?)^\\}`, 'm'))?.[1]; + if (!body) throw new Error(`Missing token rule: ${selector}`); + return body; +} + +function declarations(body) { + return Object.fromEntries( + [...body.matchAll(/^\s*(--webase-[a-z0-9-]+):\s*([^;]+);/gm)] + .map(([, name, value]) => [name, value.trim()]) + ); +} + +function resolveColor(tokens, name, seen = new Set()) { + if (seen.has(name)) throw new Error(`Circular color token reference: ${[...seen, name].join(' -> ')}`); + const value = tokens[name]; + if (!value) throw new Error(`Missing color token: ${name}`); + const hex = value.match(/^#([0-9a-f]{6})$/i)?.[1]; + if (hex) return hex; + const reference = value.match(/^var\((--webase-[a-z0-9-]+)\)$/)?.[1]; + if (!reference) throw new Error(`${name} does not resolve to a six-digit hex color: ${value}`); + return resolveColor(tokens, reference, new Set([...seen, name])); +} + +function relativeLuminance(hex) { + const channels = [0, 2, 4] + .map((offset) => Number.parseInt(hex.slice(offset, offset + 2), 16) / 255) + .map((channel) => channel <= 0.04045 + ? channel / 12.92 + : ((channel + 0.055) / 1.055) ** 2.4); + return channels[0] * 0.2126 + channels[1] * 0.7152 + channels[2] * 0.0722; +} + +function contrastRatio(first, second) { + const firstLuminance = relativeLuminance(first); + const secondLuminance = relativeLuminance(second); + return (Math.max(firstLuminance, secondLuminance) + 0.05) / + (Math.min(firstLuminance, secondLuminance) + 0.05); +} + +const base = declarations(ruleBody(tokenSource, ':root')); +const themes = { + light: base, + dark: { ...base, ...declarations(ruleBody(tokenSource, ":root[data-theme='dark']")) }, + brand: { ...base, ...declarations(ruleBody(brandSource, ":root[data-theme='brand']")) } +}; + +const textPairs = [ + ['--webase-color-ink', '--webase-color-canvas'], + ['--webase-color-ink', '--webase-color-surface'], + ['--webase-color-ink-soft', '--webase-color-canvas'], + ['--webase-color-ink-soft', '--webase-color-surface'], + ['--webase-color-ink-muted', '--webase-color-canvas'], + ['--webase-color-ink-muted', '--webase-color-surface'], + ['--webase-color-brand', '--webase-color-canvas'], + ['--webase-color-brand', '--webase-color-surface'], + ['--webase-color-brand-light', '--webase-color-canvas'], + ['--webase-color-brand-light', '--webase-color-surface'], + ['--webase-color-error', '--webase-color-canvas'], + ['--webase-color-error', '--webase-color-surface'], + ['--webase-color-warning', '--webase-color-warning-field'] +]; + +const graphicalPairs = [ + ['--webase-color-info', '--webase-color-canvas'], + ['--webase-color-info', '--webase-color-surface'], + ['--webase-color-success', '--webase-color-canvas'], + ['--webase-color-success', '--webase-color-surface'], + ['--webase-color-warning', '--webase-color-canvas'], + ['--webase-color-warning', '--webase-color-surface'], + ['--webase-color-canvas', '--webase-color-info'], + ['--webase-color-canvas', '--webase-color-success'], + ['--webase-color-canvas', '--webase-color-warning'], + ['--webase-color-canvas', '--webase-color-error'] +]; + +const failures = []; +for (const [themeName, tokens] of Object.entries(themes)) { + for (const [pairs, minimum, role] of [[textPairs, 4.5, 'text'], [graphicalPairs, 3, 'graphical']]) { + for (const [foreground, background] of pairs) { + const ratio = contrastRatio(resolveColor(tokens, foreground), resolveColor(tokens, background)); + if (ratio + Number.EPSILON < minimum) { + failures.push(`${themeName} ${role}: ${foreground} on ${background} is ${ratio.toFixed(2)}:1; expected ${minimum}:1`); + } + } + } +} + +if (failures.length > 0) { + throw new Error(`Token contrast gate failed:\n${failures.join('\n')}`); +} + +console.log(`Validated ${textPairs.length + graphicalPairs.length} accessible color pairs across light, dark, and brand themes.`); diff --git a/scripts/check-tokens.mjs b/scripts/check-tokens.mjs new file mode 100644 index 0000000..1b1fecf --- /dev/null +++ b/scripts/check-tokens.mjs @@ -0,0 +1,142 @@ +import { readdirSync, readFileSync } from 'node:fs'; +import path from 'node:path'; + +const root = path.resolve(import.meta.dirname, '..'); +const tokenPath = path.join(root, 'packages/webaseui-core/src/tokens.css'); +const themePath = path.join(root, 'packages/webaseui-core/src/theme.css'); +const brandThemePath = path.join(root, 'packages/webaseui-core/src/brand-theme.css'); +const componentDirectory = path.join(root, 'packages/webaseui-svelte/src/lib/components'); +const componentLiteralBaselinePath = path.join(root, 'docs/component-style-literal-baseline.json'); +const coreManifest = JSON.parse(readFileSync(path.join(root, 'packages/webaseui-core/package.json'), 'utf8')); +const componentLiteralBaseline = JSON.parse(readFileSync(componentLiteralBaselinePath, 'utf8')); +const tokenSource = readFileSync(tokenPath, 'utf8'); +const themeSource = readFileSync(themePath, 'utf8'); +const brandThemeSource = readFileSync(brandThemePath, 'utf8'); + +const requiredLayers = { + primitive: [ + '--webase-palette-canvas', + '--webase-palette-surface', + '--webase-space-1', + '--webase-space-8', + '--webase-size-control-sm', + '--webase-size-control-lg', + '--webase-size-target-min', + '--webase-radius-sm', + '--webase-font-size-overline', + '--webase-font-size-control', + '--webase-z-dialog', + '--webase-duration-fast' + ], + semantic: [ + '--webase-color-canvas', + '--webase-color-surface', + '--webase-color-ink', + '--webase-color-brand', + '--webase-color-border-strong', + '--webase-focus-ring', + '--webase-interactive-target-min' + ], + component: [ + '--webase-component-control-height', + '--webase-component-control-padding-inline', + '--webase-component-button-height', + '--webase-component-button-height-sm', + '--webase-component-icon-button-size', + '--webase-component-switch-width', + '--webase-component-select-menu-max-height', + '--webase-component-dialog-width', + '--webase-component-overlay-z-index', + '--webase-component-overlay-viewport-padding', + '--webase-component-alert-min-height', + '--webase-component-toast-max-width', + '--webase-component-slider-track-height', + '--webase-component-tabs-trigger-height', + '--webase-component-accordion-trigger-height', + '--webase-component-card-min-height', + '--webase-component-empty-min-height', + '--webase-component-section-header-title-min-size', + '--webase-component-skeleton-media-size' + ] +}; + +function fail(message) { + throw new Error(`Token contract failed: ${message}`); +} + +const definitions = new Set( + [...tokenSource.matchAll(/(--webase-[a-z0-9-]+)\s*:/g)].map(([, name]) => name) +); +const missing = Object.values(requiredLayers).flat().filter((name) => !definitions.has(name)); +if (missing.length) fail(`missing definitions: ${missing.join(', ')}`); + +const references = [...tokenSource.matchAll(/var\((--webase-[a-z0-9-]+)/g)].map(([, name]) => name); +const undefinedReferences = [...new Set(references.filter((name) => !definitions.has(name)))]; +if (undefinedReferences.length) fail(`undefined references: ${undefinedReferences.join(', ')}`); + +if (!themeSource.includes("@import './tokens.css';")) { + fail('theme.css must import tokens.css'); +} + +if (coreManifest.exports?.['./brand-theme.css'] !== './src/brand-theme.css') { + fail('core package must export the example brand theme'); +} + +for (const name of ['--webase-color-brand', '--webase-color-canvas', '--webase-color-surface']) { + if (!brandThemeSource.includes(`${name}:`)) fail(`brand theme must override ${name}`); +} + +const darkTheme = tokenSource.match(/:root\[data-theme=['"]dark['"]\]\s*\{([\s\S]*?)\n\}/)?.[1] ?? ''; +for (const name of ['--webase-palette-canvas', '--webase-palette-surface', '--webase-palette-ink', '--webase-palette-brand']) { + if (!darkTheme.includes(`${name}:`)) fail(`dark theme must override ${name}`); +} + +const componentLayer = tokenSource.match(/\/\* Component tokens \*\/([\s\S]*?)\/\* Compatibility aliases \*\//)?.[1] ?? ''; +if (!componentLayer.trim()) fail('component token layer is empty'); + +const componentFiles = readdirSync(componentDirectory).filter((name) => name.endsWith('.svelte')).sort(); +const baselineFiles = Object.keys(componentLiteralBaseline.components).sort(); +if (componentFiles.join('\n') !== baselineFiles.join('\n')) { + fail('component literal baseline must list every public component exactly once'); +} + +const literalPattern = /(? { + const source = readFileSync(path.join(componentDirectory, name), 'utf8'); + const style = source.match(/ diff --git a/tests/browser/fixture/src/VisualStates.svelte b/tests/browser/fixture/src/VisualStates.svelte new file mode 100644 index 0000000..340359d --- /dev/null +++ b/tests/browser/fixture/src/VisualStates.svelte @@ -0,0 +1,112 @@ + + +
+
+

Action state matrix

+
+
Hover
+
Disabled
+
Loading
+
Pressed
+
Disabled icon
+
+
+ +
+

Form error state matrix

+
+ + +
+
+
+ +
+

Form disabled state matrix

+
+ + + + +
+
+ +
+

Selection disabled state matrix

+
+ + + +
+
+ +
+

Feedback tone state matrix

+ +
+ +
+ + +
+
+ + diff --git a/tests/browser/fixture/src/main.ts b/tests/browser/fixture/src/main.ts new file mode 100644 index 0000000..3fcb539 --- /dev/null +++ b/tests/browser/fixture/src/main.ts @@ -0,0 +1,4 @@ +import { mount } from 'svelte'; +import App from './App.svelte'; + +mount(App, { target: document.getElementById('app')! }); diff --git a/tests/browser/specs/components.spec.ts b/tests/browser/specs/components.spec.ts new file mode 100644 index 0000000..77be1a1 --- /dev/null +++ b/tests/browser/specs/components.spec.ts @@ -0,0 +1,460 @@ +import AxeBuilder from '@axe-core/playwright'; +import { expect, test, type Locator } from '@playwright/test'; + +const fixtureUrl = 'http://127.0.0.1:4176'; + +async function expectMinimumTarget(locator: Locator, name: string) { + const box = await locator.boundingBox(); + expect(box, `${name} must be rendered`).not.toBeNull(); + expect(box!.width, `${name} target width`).toBeGreaterThanOrEqual(24); + expect(box!.height, `${name} target height`).toBeGreaterThanOrEqual(24); +} + +async function expectStaticMotion(locator: Locator, name: string) { + const motion = await locator.evaluate((element) => { + const style = getComputedStyle(element); + return { + animationDuration: style.animationDuration, + transitionDuration: style.transitionDuration + }; + }); + const durations = `${motion.animationDuration},${motion.transitionDuration}` + .split(',') + .map((value) => Number.parseFloat(value)); + expect(durations.every((duration) => duration === 0), `${name} motion: ${JSON.stringify(motion)}`).toBe(true); +} + +test.beforeEach(async ({ page }) => { + await page.goto(fixtureUrl); +}); + +test('native controls participate in form serialization', async ({ page }) => { + await page.getByTestId('serialize-form').click(); + + await expect(page.getByTestId('form-output')).toHaveText(JSON.stringify({ + title: 'Field notes', + notes: 'A portable form contract.', + include: 'yes', + updates: 'enabled', + coverage: '30', + plan: 'standard', + channel: 'stable' + })); +}); + +test('select supports keyboard selection and synchronizes its native control', async ({ page }) => { + const trigger = page.getByRole('combobox', { name: 'Release channel', exact: true }); + await trigger.focus(); + await trigger.press('Enter'); + await expect(trigger).toHaveAttribute('aria-expanded', 'true'); + await trigger.press('ArrowDown'); + await trigger.press('Enter'); + + await expect(trigger).toContainText('Preview'); + await expect(page.getByTestId('native-select')).toHaveValue('preview'); + await expect(page.getByTestId('native-select')).toHaveClass(/custom-native-select/); + await expect(page.getByTestId('select-changes')).toHaveText('1'); +}); + +test('select typeahead refines queries, cycles repeated characters, and skips disabled options', async ({ page }) => { + const trigger = page.getByRole('combobox', { name: 'Release channel', exact: true }); + await trigger.focus(); + await trigger.press('p'); + + await expect(trigger).toHaveAttribute('aria-expanded', 'true'); + await expect(page.getByRole('option', { name: 'Preview' })).toHaveClass(/is-highlighted/); + await trigger.press('p'); + await expect(page.getByRole('option', { name: 'Paused' })).not.toHaveClass(/is-highlighted/); + await expect(page.getByRole('option', { name: 'Production' })).toHaveClass(/is-highlighted/); + + await page.waitForTimeout(550); + await trigger.press('c'); + await expect(page.getByRole('option', { name: 'Canary' })).toHaveClass(/is-highlighted/); + await trigger.press('Enter'); + await expect(trigger).toContainText('Canary'); +}); + +test('select dismisses its listbox after a pointer action outside the component', async ({ page }) => { + const trigger = page.getByRole('combobox', { name: 'Release channel', exact: true }); + await trigger.click(); + await expect(trigger).toHaveAttribute('aria-expanded', 'true'); + + await page.getByRole('heading', { name: 'Native form fixture' }).click(); + await expect(trigger).toHaveAttribute('aria-expanded', 'false'); +}); + +test('floating overlays escape scroll clipping, track anchors, flip, and shift inside the viewport', async ({ page }) => { + const container = page.getByTestId('floating-scroll-container'); + const select = page.getByRole('combobox', { name: 'Scrollable release channel' }); + await container.scrollIntoViewIfNeeded(); + await container.evaluate((element) => { element.scrollTop = element.scrollHeight; }); + await select.click(); + + const listbox = page.getByRole('listbox', { name: 'Scrollable release channel' }); + await expect(listbox).toBeVisible(); + await expect.poll(async () => page.evaluate(() => { + const containerElement = document.querySelector('[data-testid="floating-scroll-container"]'); + const listboxElement = document.querySelector('[role="listbox"][data-side]'); + if (!containerElement || !listboxElement) return false; + const containerRect = containerElement.getBoundingClientRect(); + const listboxRect = listboxElement.getBoundingClientRect(); + return listboxRect.top < containerRect.top || listboxRect.bottom > containerRect.bottom; + })).toBe(true); + + await container.evaluate((element) => { element.scrollTop -= 24; }); + await expect.poll(async () => { + const triggerRect = await select.boundingBox(); + const menuRect = await listbox.boundingBox(); + const side = await listbox.getAttribute('data-side'); + if (!triggerRect || !menuRect || !side) return -1; + return side === 'bottom' + ? Math.abs(menuRect.y - (triggerRect.y + triggerRect.height) - 9) + : Math.abs(triggerRect.y - (menuRect.y + menuRect.height) - 9); + }).toBeLessThan(1); + + await select.press('Escape'); + const tooltipTrigger = page.getByRole('button', { name: 'Viewport edge help' }); + await tooltipTrigger.evaluate((element) => element.scrollIntoView({ block: 'start', inline: 'end' })); + await tooltipTrigger.focus(); + const tooltip = page.getByRole('tooltip').filter({ hasText: 'This tooltip shifts and flips' }); + await expect(tooltip).toBeVisible(); + await expect(tooltip).toHaveAttribute('data-side', 'bottom'); + + const bounds = await tooltip.boundingBox(); + const viewport = page.viewportSize(); + expect(bounds).not.toBeNull(); + expect(viewport).not.toBeNull(); + expect(bounds!.x).toBeGreaterThanOrEqual(7); + expect(bounds!.x + bounds!.width).toBeLessThanOrEqual(viewport!.width - 7); + + await tooltip.hover(); + await expect(tooltip).toBeVisible(); +}); + +test('hover-triggered tooltip is dismissible with Escape and reopens after attention leaves', async ({ page }) => { + const trigger = page.getByRole('button', { name: 'Viewport edge help' }); + const tooltip = page.getByRole('tooltip').filter({ hasText: 'This tooltip shifts and flips' }); + + await trigger.hover(); + await expect(tooltip).toBeVisible(); + await page.keyboard.press('Escape'); + await expect(tooltip).toBeHidden(); + + await page.getByRole('heading', { name: 'Floating overlay fixture' }).hover(); + await trigger.hover(); + await expect(tooltip).toBeVisible(); +}); + +test('right-to-left direction preserves logical floating alignment and keyboard order', async ({ page }) => { + await page.evaluate(() => { document.documentElement.dir = 'rtl'; }); + + const select = page.getByRole('combobox', { name: 'Release channel', exact: true }); + await select.click(); + const listbox = page.getByRole('listbox', { name: 'Release channel' }); + await expect(listbox).toBeVisible(); + + const triggerBox = await select.boundingBox(); + const listboxBox = await listbox.boundingBox(); + expect(triggerBox).not.toBeNull(); + expect(listboxBox).not.toBeNull(); + expect(listboxBox!.x + listboxBox!.width).toBeCloseTo(triggerBox!.x + triggerBox!.width, 0); + + await select.press('Escape'); + const composite = page.getByRole('region', { name: 'Composite accessibility fixture' }); + const overview = composite.getByRole('tab', { name: 'Overview' }); + await overview.focus(); + await overview.press('ArrowLeft'); + await expect(composite.getByRole('tab', { name: 'Usage' })).toBeFocused(); + await expect(page.getByTestId('composite-tab-active')).toHaveText('1'); +}); + +test('forced-colors tokens keep focus and contrast semantics available', async ({ page }) => { + await page.emulateMedia({ forcedColors: 'active' }); + const trigger = page.getByRole('combobox', { name: 'Release channel', exact: true }); + await trigger.focus(); + + const tokens = await page.evaluate(() => { + const root = getComputedStyle(document.documentElement); + const control = document.querySelector('[role="combobox"]'); + const style = control ? getComputedStyle(control) : null; + return { + ink: root.getPropertyValue('--webase-color-ink').trim(), + surface: root.getPropertyValue('--webase-color-surface').trim(), + brand: root.getPropertyValue('--webase-color-brand').trim(), + outlineStyle: style?.outlineStyle, + outlineWidth: style?.outlineWidth + }; + }); + + expect(tokens).toMatchObject({ ink: 'CanvasText', surface: 'Canvas', brand: 'LinkText' }); + expect(tokens.outlineStyle).toBe('solid'); + expect(tokens.outlineWidth).toBe('2px'); + + const scan = await new AxeBuilder({ page }).include('main').analyze(); + const violations = scan.violations.filter(({ impact }) => impact === 'serious' || impact === 'critical'); + expect(violations, JSON.stringify(violations, null, 2)).toEqual([]); +}); + +test('localized copy wraps without horizontal overflow at 200 percent zoom', async ({ page }) => { + // A 195px CSS viewport models a 390px device at 200% browser zoom while + // preserving normal reflow instead of scaling the entire document canvas. + await page.setViewportSize({ width: 195, height: 844 }); + const fixture = page.getByTestId('i18n-fixture'); + await fixture.evaluate((element) => { + const main = document.querySelector('main'); + if (main) main.style.gridTemplateColumns = 'minmax(0, 1fr)'; + document.querySelectorAll('main > *:not([data-testid="i18n-fixture"])').forEach((section) => { + (section as HTMLElement).style.display = 'none'; + }); + element.scrollIntoView({ block: 'start' }); + }); + + const metrics = await page.evaluate(() => { + const root = document.documentElement; + const fixtureElement = document.querySelector('[data-testid="i18n-fixture"]'); + return { + documentOverflow: root.scrollWidth > root.clientWidth, + fixtureOverflow: fixtureElement ? fixtureElement.scrollWidth > fixtureElement.clientWidth : true, + tabs: document.querySelectorAll('[data-testid="i18n-fixture"] [role="tab"]').length + }; + }); + + expect(metrics.documentOverflow, JSON.stringify(metrics)).toBe(false); + expect(metrics.fixtureOverflow, JSON.stringify(metrics)).toBe(false); + expect(metrics.tabs).toBe(3); + await expect(page.getByRole('combobox', { name: 'قناة الإصدار والبيئة المستهدفة' })).toBeVisible(); + await expect(fixture.getByText('٦٢ بالمئة', { exact: true })).toBeVisible(); + await expect(fixture.getByText('٣٠ درجة', { exact: true })).toBeVisible(); + await expect(fixture.getByText('٧ من ٢٠', { exact: true })).toBeVisible(); + await expect(fixture.getByRole('button', { name: 'الصفحة ٢' })).toHaveText('٢'); +}); + +test('dialog reports confirm, cancel, escape, and backdrop actions only', async ({ page }) => { + const result = page.getByTestId('dialog-result'); + const openButton = page.getByRole('button', { name: 'Open dialog' }); + + await openButton.click(); + await expect(page.locator('body')).toHaveCSS('overflow', 'hidden'); + await page.getByRole('button', { name: 'Confirm' }).click(); + await expect(page.locator('body')).not.toHaveCSS('overflow', 'hidden'); + await expect(openButton).toBeFocused(); + await expect(result).toHaveText('confirm'); + await expect(page.getByTestId('dialog-clicks')).toHaveText('1'); + await expect(page.getByTestId('dialog-closes')).toHaveText('1'); + + await openButton.click(); + await page.getByRole('button', { name: 'Cancel' }).click(); + await expect(result).toHaveText('cancel'); + + await openButton.click(); + await page.keyboard.press('Escape'); + await expect(result).toHaveText('cancel'); + + await openButton.click(); + await page.mouse.click(6, 6); + await expect(result).toHaveText('cancel'); + + await openButton.click(); + await expect(page.getByRole('dialog')).toBeVisible(); + await page.evaluate(() => (window as Window & { closeFixtureDialog?: () => void }).closeFixtureDialog?.()); + await expect(page.getByRole('dialog')).toBeHidden(); + await expect(openButton).toBeFocused(); + await expect(result).toHaveText('none'); +}); + +test('select does not display an option that does not match its bound value', async ({ page }) => { + await page.getByRole('button', { name: 'Set invalid selection' }).click(); + + await expect(page.getByRole('combobox', { name: 'Release channel', exact: true })).toContainText('Select an option'); +}); + +test('card and empty-state actions never render as enabled inert controls', async ({ page }) => { + await page.getByRole('button', { name: 'Run action' }).click(); + await expect(page.getByTestId('card-actions')).toHaveText('1'); + await expect(page.getByRole('button', { name: 'Hidden action' })).toHaveCount(0); + await expect(page.getByRole('button', { name: 'Hidden empty action' })).toHaveCount(0); +}); + +test('toast auto-dismiss pauses on hover and restarts after pointer leave', async ({ page }) => { + await page.getByRole('button', { name: 'Show timed toast' }).click(); + const timedRegion = page.getByRole('status').filter({ hasText: 'Timed fixture' }); + const toast = timedRegion.locator('aside'); + + await expect(toast).toBeVisible(); + await toast.hover(); + await page.waitForTimeout(750); + await expect(toast).toBeVisible(); + + await page.getByRole('heading', { name: 'Composite accessibility fixture' }).hover(); + await page.waitForTimeout(300); + await expect(toast).toBeVisible(); + await expect(toast).toBeHidden({ timeout: 700 }); +}); + +test('tabs and accordion share wrapping roving focus and react to collection changes', async ({ page }) => { + const compositeFixture = page.getByRole('region', { name: 'Composite accessibility fixture' }); + const tabList = compositeFixture.getByRole('tablist', { name: 'Fixture tabs' }); + const overviewTab = tabList.getByRole('tab', { name: 'Overview' }); + const releaseTab = tabList.getByRole('tab', { name: 'Release' }); + + await overviewTab.focus(); + await overviewTab.press('ArrowLeft'); + await expect(releaseTab).toBeFocused(); + await expect(releaseTab).toHaveAttribute('aria-selected', 'true'); + await expect(page.getByTestId('composite-tab-active')).toHaveText('2'); + + const firstAccordionTrigger = compositeFixture.getByRole('button', { name: /Keyboard contract/ }); + const lastAccordionTrigger = compositeFixture.getByRole('button', { name: /Dynamic collection/ }); + await firstAccordionTrigger.focus(); + await firstAccordionTrigger.press('ArrowUp'); + await expect(lastAccordionTrigger).toBeFocused(); + await expect(firstAccordionTrigger).toHaveAttribute('aria-expanded', 'true'); + await expect(lastAccordionTrigger).toHaveAttribute('aria-expanded', 'false'); + + await compositeFixture.getByRole('button', { name: 'Remove last composite item' }).click(); + await expect(releaseTab).toHaveCount(0); + await expect(lastAccordionTrigger).toHaveCount(0); + await expect(overviewTab).toHaveAttribute('aria-selected', 'true'); + await expect(page.getByTestId('composite-tab-active')).toHaveText('0'); +}); + +test('the example brand theme changes semantics without changing component geometry', async ({ page }) => { + const action = page.getByRole('button', { name: 'Brand action' }); + const lightBox = await action.boundingBox(); + + await page.getByRole('button', { name: 'Use brand theme' }).click(); + await expect(page.locator('html')).toHaveAttribute('data-theme', 'brand'); + + const brandTokens = await page.evaluate(() => { + const style = getComputedStyle(document.documentElement); + return { + canvas: style.getPropertyValue('--webase-color-canvas').trim(), + surface: style.getPropertyValue('--webase-color-surface').trim(), + brand: style.getPropertyValue('--webase-color-brand').trim(), + controlHeight: style.getPropertyValue('--webase-component-button-height').trim() + }; + }); + expect(brandTokens).toEqual({ + canvas: '#f4f6f2', + surface: '#fbfcf8', + brand: '#315c52', + controlHeight: '44px' + }); + + const brandBox = await action.boundingBox(); + expect(brandBox && lightBox ? { width: brandBox.width, height: brandBox.height } : null).toEqual( + lightBox ? { width: lightBox.width, height: lightBox.height } : null + ); +}); + +test('reduced motion makes component transitions and entrances static', async ({ page }) => { + await page.emulateMedia({ reducedMotion: 'reduce' }); + await page.reload(); + + const select = page.getByRole('combobox', { name: 'Release channel', exact: true }); + await select.click(); + const tooltipTrigger = page.getByRole('button', { name: 'Keyboard help' }); + await tooltipTrigger.focus(); + + const samples: Array<[string, Locator]> = [ + ['field', page.getByTestId('field-input')], + ['button', page.getByRole('button', { name: 'Hover action' })], + ['card', page.getByRole('article').filter({ hasText: 'Action card' })], + ['pagination', page.getByRole('button', { name: 'Page 2' })], + ['radio', page.getByTestId('radio-input').locator('+ .ds-radio-dot')], + ['select trigger', select], + ['select menu', page.getByRole('listbox', { name: 'Release channel' })], + ['toast', page.getByRole('status').filter({ hasText: 'Fixture ready' }).locator('aside')], + ['tooltip', page.getByRole('tooltip').filter({ hasText: 'Press Escape' })] + ]; + + for (const [name, locator] of samples) await expectStaticMotion(locator, name); + + await select.press('Escape'); + await page.keyboard.press('Escape'); + await page.getByRole('button', { name: 'Open dialog' }).click(); + await expectStaticMotion(page.getByRole('dialog').locator('.ds-dialog'), 'dialog'); +}); + +test('interactive controls meet the WCAG 2.2 minimum target size', async ({ page }) => { + const targets: Array<[string, Locator]> = [ + ['check', page.getByTestId('check-input').locator('..')], + ['radio', page.getByTestId('radio-input').locator('..')], + ['switch', page.getByTestId('switch-input').locator('..')], + ['slider', page.getByTestId('slider-input')], + ['card action', page.getByRole('button', { name: 'Run action' })], + ['action link', page.getByRole('link', { name: 'Back to form' })], + ['icon button', page.getByRole('button', { name: 'Pressed icon action' })], + ['pagination', page.getByRole('button', { name: 'Page 2' })], + ['tab', page.getByRole('tab', { name: 'Behavior' })], + ['accordion', page.getByRole('button', { name: /Keyboard contract/ })], + ['select', page.getByRole('combobox', { name: 'Release channel', exact: true })], + ['tooltip', page.getByRole('button', { name: 'Keyboard help' })], + ['alert dismiss', page.getByRole('button', { name: 'Dismiss alert' })], + ['toast dismiss', page.getByRole('button', { name: 'Dismiss notification' }).first()] + ]; + + for (const [name, locator] of targets) await expectMinimumTarget(locator, name); + + await page.getByRole('button', { name: 'Open dialog' }).click(); + await expectMinimumTarget(page.getByRole('button', { name: 'Close dialog' }), 'dialog close'); + await expectMinimumTarget(page.getByRole('button', { name: 'Cancel' }), 'dialog cancel'); + await expectMinimumTarget(page.getByRole('button', { name: 'Confirm' }), 'dialog confirm'); +}); + +test('priority components have no serious or critical accessibility violations', async ({ page }) => { + await page.emulateMedia({ reducedMotion: 'reduce' }); + const trigger = page.getByRole('combobox', { name: 'Release channel', exact: true }); + await trigger.click(); + + const openSelectScan = await new AxeBuilder({ page }).include('main').analyze(); + const openSelectViolations = openSelectScan.violations.filter(({ impact }) => impact === 'serious' || impact === 'critical'); + expect(openSelectViolations, JSON.stringify(openSelectViolations, null, 2)).toEqual([]); + + await trigger.press('Escape'); + await expect(trigger).toHaveAttribute('aria-expanded', 'false'); + + const tooltipTrigger = page.getByRole('button', { name: 'Keyboard help' }); + await tooltipTrigger.focus(); + await expect(page.getByRole('tooltip').filter({ hasText: 'Press Escape' })).toBeVisible(); + const openTooltipScan = await new AxeBuilder({ page }).include('main').analyze(); + const openTooltipViolations = openTooltipScan.violations.filter(({ impact }) => impact === 'serious' || impact === 'critical'); + expect(openTooltipViolations, JSON.stringify(openTooltipViolations, null, 2)).toEqual([]); + await page.keyboard.press('Escape'); + + await page.getByRole('button', { name: 'Open dialog' }).click(); + + const openDialogScan = await new AxeBuilder({ page }).include('main').analyze(); + const openDialogViolations = openDialogScan.violations.filter(({ impact }) => impact === 'serious' || impact === 'critical'); + expect(openDialogViolations, JSON.stringify(openDialogViolations, null, 2)).toEqual([]); +}); + +test.describe('coarse pointer input', () => { + test.use({ hasTouch: true, viewport: { width: 390, height: 844 } }); + + test('touch keeps hover-only motion off and preserves equivalent controls', async ({ page }) => { + const media = await page.evaluate(() => ({ + coarse: matchMedia('(pointer: coarse)').matches, + hover: matchMedia('(hover: hover)').matches + })); + expect(media).toEqual({ coarse: true, hover: false }); + + const tooltipTrigger = page.getByRole('button', { name: 'Keyboard help' }); + await tooltipTrigger.focus(); + await expect(page.getByRole('tooltip').filter({ hasText: 'Press Escape' })).toBeVisible(); + await expect(tooltipTrigger).toBeFocused(); + + const check = page.getByTestId('check-input'); + await check.locator('..').tap(); + await expect(check).not.toBeChecked(); + + const action = page.getByRole('button', { name: 'Hover action' }); + await action.tap(); + await expect(action).toHaveCSS('transform', 'none'); + await expect(page.getByRole('article').filter({ hasText: 'Action card' })).toHaveCSS('transform', 'none'); + + await expectMinimumTarget(check.locator('..'), 'coarse pointer check'); + await expectMinimumTarget(page.getByTestId('slider-input'), 'coarse pointer slider'); + await expectMinimumTarget(page.getByRole('button', { name: 'Run action' }), 'coarse pointer card action'); + }); +}); diff --git a/tests/browser/specs/docs.spec.ts b/tests/browser/specs/docs.spec.ts new file mode 100644 index 0000000..c117bb2 --- /dev/null +++ b/tests/browser/specs/docs.spec.ts @@ -0,0 +1,165 @@ +import AxeBuilder from '@axe-core/playwright'; +import { expect, test } from '@playwright/test'; + +const docsUrl = 'http://127.0.0.1:4175'; + +test.beforeEach(async ({ page }) => { + await page.goto(docsUrl); +}); + +test('docs header keeps the logo-only brand, stable anchors, theme, and search', async ({ page }) => { + const brand = page.locator('header .brand'); + await expect(brand.locator('img')).toHaveAttribute('src', '/logo.svg'); + await expect(brand.locator('strong, small')).toHaveCount(0); + + await expect(page.getByRole('navigation', { name: 'Documentation' }).getByRole('link')).toHaveText(['Tokens', 'Components', 'Install']); + + await page.getByRole('switch', { name: 'Toggle dark theme' }).click(); + await expect(page.locator('html')).toHaveAttribute('data-theme', 'dark'); + + await page.getByRole('button', { name: 'Search documentation' }).click(); + await expect(page.getByRole('dialog')).toBeVisible(); + await expect(page.getByRole('searchbox', { name: 'Search components and API fields' })).toBeFocused(); + + await page.keyboard.press('Escape'); + await expect(page.getByRole('dialog')).toBeHidden(); + await expect(page.getByRole('button', { name: 'Search documentation' })).toBeFocused(); +}); + +test('global search selects a component and exposes its parsed API contract', async ({ page }) => { + await page.keyboard.press('/'); + const search = page.getByRole('searchbox', { name: 'Search components and API fields' }); + await expect(search).toBeFocused(); + await search.fill('dialog'); + + await page.getByRole('button', { name: /WeBaseDialog/ }).click(); + await expect(page.getByRole('dialog')).toBeHidden(); + await expect(page).toHaveURL(/#component-dialog$/); + await expect(page.locator('[data-selected-component="WeBaseDialog"]')).toBeVisible(); + await expect(page.locator('[data-selected-component="WeBaseDialog"]')).toBeFocused(); + await expect(page.getByRole('heading', { name: 'WeBaseDialog', level: 3 })).toBeVisible(); + await expect(page.locator('.contract-panel')).toContainText('showModal()'); +}); + +test('the reference desk indexes all 28 components and supports local filtering', async ({ page }) => { + await expect(page.locator('.sidebar-group button')).toHaveCount(28); + + await page.getByRole('searchbox', { name: 'Filter components' }).fill('slider'); + await expect(page.locator('.sidebar-group button')).toHaveCount(1); + await page.getByRole('button', { name: 'Slider', exact: true }).click(); + + await expect(page.locator('[data-selected-component="WeBaseSlider"]')).toBeVisible(); + await expect(page.locator('.contract-panel')).toContainText('inputProps'); +}); + +test('usage examples and install commands provide copy feedback', async ({ page }) => { + const exampleCopy = page.getByRole('button', { name: 'Copy WeBaseButton example' }); + await exampleCopy.click(); + await expect(exampleCopy).toContainText('Copied'); + + await page.locator('#install').scrollIntoViewIfNeeded(); + const installCopy = page.getByRole('button', { name: 'Copy install command' }); + await installCopy.click(); + await expect(installCopy).toContainText('Copied'); +}); + +test('favicon metadata covers scalable, small, touch, and installed-app icons', async ({ page, request }) => { + const iconHrefs = await page.locator('link[rel~="icon"], link[rel="apple-touch-icon"], link[rel="manifest"]').evaluateAll((links) => { + return links.map((link) => link.getAttribute('href')).filter((href): href is string => Boolean(href)); + }); + + expect(iconHrefs).toEqual(expect.arrayContaining([ + '/logo.svg', + '/favicon-16x16.png', + '/favicon-32x32.png', + '/favicon-48x48.png', + '/favicon.ico', + '/apple-touch-icon.png', + '/site.webmanifest' + ])); + + for (const href of iconHrefs) { + const response = await request.get(new URL(href, docsUrl).toString()); + expect(response.ok(), `${href} should be served`).toBe(true); + } + + const manifestResponse = await request.get(new URL('/site.webmanifest', docsUrl).toString()); + const manifest = await manifestResponse.json() as { icons?: Array<{ src: string; sizes: string; type: string; purpose?: string }> }; + expect(manifest.icons).toEqual(expect.arrayContaining([ + { src: '/icon-192.png', sizes: '192x192', type: 'image/png', purpose: 'any' }, + { src: '/icon-512.png', sizes: '512x512', type: 'image/png', purpose: 'any' }, + { src: '/icon-maskable-512.png', sizes: '512x512', type: 'image/png', purpose: 'maskable' } + ])); + + for (const icon of manifest.icons ?? []) { + const response = await request.get(new URL(icon.src, docsUrl).toString()); + expect(response.ok(), `${icon.src} should be served`).toBe(true); + } + + const robotsResponse = await request.get(new URL('/robots.txt', docsUrl).toString()); + expect(robotsResponse.ok()).toBe(true); + expect(await robotsResponse.text()).toContain('User-agent: *'); +}); + +test('mobile navigation and component selection are explicitly composed without overflow', async ({ page }) => { + await page.setViewportSize({ width: 390, height: 844 }); + await page.reload(); + + await expect(page.locator('header .brand-logo')).toBeVisible(); + await page.getByRole('button', { name: 'Menu' }).click(); + await expect(page.getByRole('navigation', { name: 'Mobile documentation' })).toBeVisible(); + await page.getByRole('link', { name: 'Components', exact: true }).last().click(); + + await page.getByLabel('Choose a component').selectOption('WeBaseDialog'); + await expect(page.locator('[data-selected-component="WeBaseDialog"]')).toBeVisible(); + + const horizontalOverflow = await page.evaluate(() => document.documentElement.scrollWidth > document.documentElement.clientWidth); + expect(horizontalOverflow).toBe(false); +}); + +test('reduced motion removes entry, reveal, and state transition animations', async ({ page }) => { + await page.emulateMedia({ reducedMotion: 'reduce' }); + await page.reload(); + + const motion = await page.locator('.hero-stage').evaluate((element) => { + const heroStyle = getComputedStyle(element); + const revealStyle = getComputedStyle(document.querySelector('[data-reveal]')!); + return { + animationName: heroStyle.animationName, + transitionDuration: heroStyle.transitionDuration, + revealOpacity: revealStyle.opacity, + revealTransform: revealStyle.transform + }; + }); + + expect(motion.animationName).toBe('none'); + expect(motion.transitionDuration).toBe('0s'); + expect(motion.revealOpacity).toBe('1'); + expect(motion.revealTransform).toBe('none'); +}); + +test('the documentation surface has no serious or critical accessibility violations', async ({ page }) => { + await page.emulateMedia({ reducedMotion: 'reduce' }); + await page.reload(); + + const pageScan = await new AxeBuilder({ page }).include('main').analyze(); + const pageViolations = pageScan.violations.filter(({ impact }) => impact === 'serious' || impact === 'critical'); + expect(pageViolations, JSON.stringify(pageViolations, null, 2)).toEqual([]); + + await page.getByRole('button', { name: 'Search documentation' }).click(); + const lightSearchScan = await new AxeBuilder({ page }).include('.search-dialog').analyze(); + const lightSearchViolations = lightSearchScan.violations.filter(({ impact }) => impact === 'serious' || impact === 'critical'); + expect(lightSearchViolations, JSON.stringify(lightSearchViolations, null, 2)).toEqual([]); + + await page.getByRole('button', { name: 'Close search' }).click(); + await page.getByRole('switch', { name: 'Toggle dark theme' }).click(); + + const darkPageScan = await new AxeBuilder({ page }).include('main').analyze(); + const darkPageViolations = darkPageScan.violations.filter(({ impact }) => impact === 'serious' || impact === 'critical'); + expect(darkPageViolations, JSON.stringify(darkPageViolations, null, 2)).toEqual([]); + + await page.getByRole('button', { name: 'Search documentation' }).click(); + const darkSearchScan = await new AxeBuilder({ page }).include('.search-dialog').analyze(); + const darkSearchViolations = darkSearchScan.violations.filter(({ impact }) => impact === 'serious' || impact === 'critical'); + expect(darkSearchViolations, JSON.stringify(darkSearchViolations, null, 2)).toEqual([]); +}); diff --git a/tests/browser/specs/ssr.spec.ts b/tests/browser/specs/ssr.spec.ts new file mode 100644 index 0000000..eb5f4c8 --- /dev/null +++ b/tests/browser/specs/ssr.spec.ts @@ -0,0 +1,24 @@ +import { expect, test } from '@playwright/test'; + +const ssrUrl = 'http://127.0.0.1:4177'; + +test('all public components render on the server and hydrate without warnings', async ({ page, request }) => { + const serverResponse = await request.get(ssrUrl); + expect(serverResponse.ok()).toBe(true); + const serverHtml = await serverResponse.text(); + expect(serverHtml).toContain('data-testid="ssr-root"'); + expect(serverHtml).toContain('Increment hydrated count'); + expect(serverHtml).toContain('data-component="WeBaseTooltip"'); + + const runtimeIssues: string[] = []; + page.on('console', (message) => { + if (message.type() === 'error' || message.type() === 'warning') runtimeIssues.push(message.text()); + }); + page.on('pageerror', (error) => runtimeIssues.push(error.message)); + + await page.goto(ssrUrl); + await expect(page.locator('html')).toHaveAttribute('data-hydrated', 'true'); + await page.getByRole('button', { name: 'Increment hydrated count' }).click(); + await expect(page.getByTestId('hydration-count')).toHaveText('1'); + expect(runtimeIssues.filter((message) => /hydration|mismatch|uncaught|error/i.test(message))).toEqual([]); +}); diff --git a/tests/browser/specs/visual-cases.ts b/tests/browser/specs/visual-cases.ts new file mode 100644 index 0000000..d317fce --- /dev/null +++ b/tests/browser/specs/visual-cases.ts @@ -0,0 +1,32 @@ +export const visualComponents = [ + { name: 'WeBaseAccordion', slug: 'accordion' }, + { name: 'WeBaseAlert', slug: 'alert' }, + { name: 'WeBaseBadge', slug: 'badge' }, + { name: 'WeBaseBreadcrumbs', slug: 'breadcrumbs' }, + { name: 'WeBaseButton', slug: 'button' }, + { name: 'WeBaseCard', slug: 'card' }, + { name: 'WeBaseCheck', slug: 'check' }, + { name: 'WeBaseDialog', slug: 'dialog' }, + { name: 'WeBaseDivider', slug: 'divider' }, + { name: 'WeBaseEmptyState', slug: 'emptystate' }, + { name: 'WeBaseField', slug: 'field' }, + { name: 'WeBaseIcon', slug: 'icon' }, + { name: 'WeBaseIconButton', slug: 'iconbutton' }, + { name: 'WeBaseLink', slug: 'link' }, + { name: 'WeBaseLoader', slug: 'loader' }, + { name: 'WeBasePagination', slug: 'pagination' }, + { name: 'WeBaseProgress', slug: 'progress' }, + { name: 'WeBaseRadio', slug: 'radio' }, + { name: 'WeBaseSectionHeader', slug: 'sectionheader' }, + { name: 'WeBaseSelect', slug: 'select' }, + { name: 'WeBaseSkeleton', slug: 'skeleton' }, + { name: 'WeBaseSlider', slug: 'slider' }, + { name: 'WeBaseSwitch', slug: 'switch' }, + { name: 'WeBaseTag', slug: 'tag' }, + { name: 'WeBaseTabs', slug: 'tabs' }, + { name: 'WeBaseTextarea', slug: 'textarea' }, + { name: 'WeBaseToast', slug: 'toast' }, + { name: 'WeBaseTooltip', slug: 'tooltip' } +] as const; + +export type VisualComponent = (typeof visualComponents)[number]; diff --git a/tests/browser/specs/visual.spec.ts b/tests/browser/specs/visual.spec.ts new file mode 100644 index 0000000..c708e59 --- /dev/null +++ b/tests/browser/specs/visual.spec.ts @@ -0,0 +1,228 @@ +import { expect, test, type Locator, type Page } from '@playwright/test'; +import { visualComponents, type VisualComponent } from './visual-cases'; + +const docsUrl = 'http://127.0.0.1:4175'; +const fixtureUrl = 'http://127.0.0.1:4176'; +const screenshotOptions = { + animations: 'disabled' as const, + caret: 'hide' as const, + scale: 'css' as const, + threshold: 0.2, + maxDiffPixelRatio: 0.01 +}; + +async function openSpecimen(page: Page, component: VisualComponent, theme: 'light' | 'dark' = 'light') { + await page.addInitScript((selectedTheme) => { + localStorage.setItem('webaseui-theme', selectedTheme); + }, theme); + await page.goto(`${docsUrl}/#component-${component.slug}`); + await page.addStyleTag({ + content: ` + body::before { display: none !important; } + *, *::before, *::after { + animation: none !important; + caret-color: transparent !important; + transition: none !important; + } + [data-reveal] { opacity: 1 !important; transform: none !important; } + ` + }); + + await expect(page.locator('html')).toHaveAttribute('data-theme', theme); + await page.evaluate(async () => { + await document.fonts?.ready; + }); + + const detail = page.locator(`[data-selected-component="${component.name}"]`); + await expect(detail).toBeVisible(); + await detail.scrollIntoViewIfNeeded(); + return detail; +} + +async function openFixtureState(page: Page, testId: string) { + await page.emulateMedia({ reducedMotion: 'reduce' }); + await page.goto(fixtureUrl); + await page.addStyleTag({ + content: ` + *, *::before, *::after { + animation: none !important; + caret-color: transparent !important; + transition: none !important; + } + ` + }); + await page.evaluate(async () => { + await document.fonts?.ready; + }); + + const state = page.getByTestId(testId); + await expect(state).toBeVisible(); + await state.scrollIntoViewIfNeeded(); + return state; +} + +function previewOf(detail: Locator) { + return detail.locator('.preview-panel'); +} + +test.describe('component visual baselines', () => { + for (const component of visualComponents) { + test(`${component.name} light specimen`, async ({ page }) => { + const detail = await openSpecimen(page, component); + await expect(previewOf(detail)).toHaveScreenshot(`${component.slug}-light.png`, screenshotOptions); + }); + } +}); + +test.describe('theme and viewport coverage', () => { + test('dark theme preserves the component reference hierarchy', async ({ page }) => { + const detail = await openSpecimen(page, { name: 'WeBaseButton', slug: 'button' }, 'dark'); + await expect(previewOf(detail)).toHaveScreenshot('button-dark.png', screenshotOptions); + }); + + test('mobile specimen stays composed without horizontal clipping', async ({ page }) => { + await page.setViewportSize({ width: 390, height: 844 }); + const detail = await openSpecimen(page, { name: 'WeBaseSelect', slug: 'select' }); + await expect(previewOf(detail)).toHaveScreenshot('select-mobile.png', screenshotOptions); + }); + + test('brand theme preserves component geometry on the shared semantic contract', async ({ page }) => { + await page.goto(fixtureUrl); + await page.emulateMedia({ reducedMotion: 'reduce' }); + await page.getByRole('button', { name: 'Use brand theme' }).click(); + await expect(page.locator('html')).toHaveAttribute('data-theme', 'brand'); + await expect(page.getByTestId('brand-theme-fixture')).toHaveScreenshot('brand-theme.png', screenshotOptions); + }); +}); + +test.describe('key interaction states', () => { + test('button focus is visible', async ({ page }) => { + const detail = await openSpecimen(page, { name: 'WeBaseButton', slug: 'button' }); + await detail.getByRole('button', { name: 'Save changes' }).focus(); + await expect(previewOf(detail)).toHaveScreenshot('button-focus.png', screenshotOptions); + }); + + test('select open state stays inside its specimen canvas', async ({ page }) => { + const detail = await openSpecimen(page, { name: 'WeBaseSelect', slug: 'select' }); + await detail.getByRole('combobox', { name: 'Release channel' }).click(); + await expect(detail.getByRole('listbox')).toBeVisible(); + await expect(previewOf(detail)).toHaveScreenshot('select-open.png', screenshotOptions); + }); + + test('dialog open state has a stable modal baseline', async ({ page }) => { + const detail = await openSpecimen(page, { name: 'WeBaseDialog', slug: 'dialog' }); + await detail.getByRole('button', { name: 'Open dialog' }).click(); + const dialog = page.getByRole('dialog'); + await expect(dialog).toBeVisible(); + await expect(dialog).toHaveScreenshot('dialog-open.png', screenshotOptions); + }); + + test('tooltip focus state remains readable and dismissible', async ({ page }) => { + const detail = await openSpecimen(page, { name: 'WeBaseTooltip', slug: 'tooltip' }); + await detail.getByRole('button', { name: 'Hover or focus' }).focus(); + await expect(detail.getByRole('tooltip').first()).toBeVisible(); + await expect(previewOf(detail)).toHaveScreenshot('tooltip-focus.png', screenshotOptions); + }); + + test('floating overlays remain composed at scroll and viewport edges', async ({ page }) => { + await page.setViewportSize({ width: 390, height: 420 }); + await page.emulateMedia({ reducedMotion: 'reduce' }); + await page.goto(fixtureUrl); + const container = page.getByTestId('floating-scroll-container'); + await container.evaluate((element) => { element.scrollTop = element.scrollHeight; }); + + const select = page.getByRole('combobox', { name: 'Scrollable release channel' }); + await select.evaluate((element) => element.scrollIntoView({ block: 'end' })); + await select.click(); + await expect(page.getByRole('listbox', { name: 'Scrollable release channel' })).toHaveAttribute('data-side', 'top'); + await expect(page).toHaveScreenshot('floating-select-collision.png', screenshotOptions); + + await select.press('Escape'); + const tooltipTrigger = page.getByRole('button', { name: 'Viewport edge help' }); + await tooltipTrigger.evaluate((element) => element.scrollIntoView({ block: 'start', inline: 'end' })); + await tooltipTrigger.focus(); + await expect(page.getByRole('tooltip').filter({ hasText: 'This tooltip shifts and flips' })).toHaveAttribute('data-side', 'bottom'); + await expect(page).toHaveScreenshot('floating-tooltip-collision.png', screenshotOptions); + }); + + test('right-to-left and forced-colors fixtures retain hierarchy', async ({ page }) => { + await page.setViewportSize({ width: 390, height: 420 }); + await page.emulateMedia({ reducedMotion: 'reduce' }); + await page.goto(fixtureUrl); + await page.evaluate(() => { document.documentElement.dir = 'rtl'; }); + const select = page.getByRole('combobox', { name: 'Release channel', exact: true }); + await select.click(); + await expect(page.getByRole('listbox', { name: 'Release channel' })).toBeVisible(); + await expect(page).toHaveScreenshot('rtl-floating.png', screenshotOptions); + + await select.press('Escape'); + await page.emulateMedia({ forcedColors: 'active' }); + await expect(page).toHaveScreenshot('forced-colors-fixture.png', screenshotOptions); + }); + + test('localized copy remains composed at 200 percent text scale', async ({ page }) => { + await page.setViewportSize({ width: 195, height: 844 }); + await page.goto(fixtureUrl); + const fixture = page.getByTestId('i18n-fixture'); + await fixture.evaluate((element) => { + const main = document.querySelector('main'); + if (main) main.style.gridTemplateColumns = 'minmax(0, 1fr)'; + document.querySelectorAll('main > *:not([data-testid="i18n-fixture"])').forEach((section) => { + (section as HTMLElement).style.display = 'none'; + }); + element.scrollIntoView({ block: 'start' }); + }); + await expect(fixture).toHaveScreenshot('localized-copy-zoom.png', screenshotOptions); + }); + + test('button hover, disabled, loading, and pressed states remain distinct', async ({ page }) => { + const state = await openFixtureState(page, 'action-state-matrix'); + await state.getByRole('button', { name: 'Hover action' }).hover(); + await expect(state).toHaveScreenshot('action-state-matrix.png', screenshotOptions); + }); + + test('form error states keep visible messages and invalid affordances', async ({ page }) => { + const state = await openFixtureState(page, 'form-error-state-matrix'); + await expect(state).toHaveScreenshot('form-error-state-matrix.png', screenshotOptions); + }); + + test('disabled form controls remain legible as a group', async ({ page }) => { + const state = await openFixtureState(page, 'form-disabled-state-matrix'); + await expect(state).toHaveScreenshot('form-disabled-state-matrix.png', screenshotOptions); + }); + + test('disabled selection controls preserve state and hierarchy', async ({ page }) => { + const state = await openFixtureState(page, 'selection-disabled-state-matrix'); + await expect(state).toHaveScreenshot('selection-disabled-state-matrix.png', screenshotOptions); + }); + + test('warning and error feedback tones remain distinguishable', async ({ page }) => { + const state = await openFixtureState(page, 'feedback-tone-state-matrix'); + await expect(state).toHaveScreenshot('feedback-tone-state-matrix.png', screenshotOptions); + }); + + test('navigation hover and disabled states remain composed', async ({ page }) => { + const state = await openFixtureState(page, 'navigation-state-matrix'); + await state.getByRole('button', { name: 'Page 2' }).hover(); + await expect(state).toHaveScreenshot('navigation-state-matrix.png', screenshotOptions); + }); + + test('tabs expose a stable hover state', async ({ page }) => { + const detail = await openSpecimen(page, { name: 'WeBaseTabs', slug: 'tabs' }); + await detail.getByRole('tab', { name: 'Behavior' }).hover(); + await expect(previewOf(detail)).toHaveScreenshot('tabs-hover.png', screenshotOptions); + }); + + test('accordion exposes a stable hover state', async ({ page }) => { + const detail = await openSpecimen(page, { name: 'WeBaseAccordion', slug: 'accordion' }); + await detail.getByRole('button', { name: /Consumer surface/ }).hover(); + await expect(previewOf(detail)).toHaveScreenshot('accordion-hover.png', screenshotOptions); + }); + + test('toast open state remains readable and dismissible', async ({ page }) => { + const detail = await openSpecimen(page, { name: 'WeBaseToast', slug: 'toast' }); + await detail.getByRole('button', { name: 'Show toast' }).click(); + await expect(detail.getByRole('status').getByText('Saved locally', { exact: true })).toBeVisible(); + await expect(previewOf(detail)).toHaveScreenshot('toast-open.png', screenshotOptions); + }); +}); diff --git a/tests/browser/specs/visual.spec.ts-snapshots/accordion-hover-visual-chromium-darwin.png b/tests/browser/specs/visual.spec.ts-snapshots/accordion-hover-visual-chromium-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..65cf123d699fa812a32c70b13d5bb1e659c3ab77 GIT binary patch literal 18513 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 literal 0 HcmV?d00001 diff --git a/tests/browser/specs/visual.spec.ts-snapshots/accordion-light-visual-chromium-darwin.png b/tests/browser/specs/visual.spec.ts-snapshots/accordion-light-visual-chromium-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..480eed314f197d82dfcd2994512e4963ddc000bd GIT binary patch literal 18411 zcmdVCbySpX+c%20w_*XJDAIxg($dn>-O{DfE!{H)igYv5-7ylw(5OfZDIEh0HFP(_ z0N=^|>}RdL)?V+o_V>s8ynDM`4$KVB73X;zzd8ukP?IORMR|*WfPhF*K}L&!;BRsQ zf-8PE{sPZj|Fb_sKya5pQAYBWcgp${p|LLZ;$kOzou2qrO2+#TmKrZ7RkwxdJnXbV z1Yb|QWn%nd89Tpx#3X~$HCYXfzsbMeVZL?ancvC9j~y@Q&8QbvXDz0EgqTymsU_p3 zl(m%8!~O&DQK6-g$k6at1T%E7w6wfupKp8kzK~tM^(B?oKhHWUkX}Cf-~8g@aL!ljzBEg= zg_5Y@(2@J(C^%jAv>qdM5eUQxFz%M{E)+tP6DDOcs5UwUJ!qJNTuKOF?`dxwNqz&%uL`JI7n}focw%dCMNJN zwi04!XecGsP_|d7qokx%T{(|$Mn|LRLM$OwET8enVGW_ zbh?-ti23@Mi%zj_Y;amyn&~vTR!r>Rz(BrAqVMYqab%@+o!44Zz-jgD6S_22K`6#iE|HGexxLMrQ)cQ5P<~3&sZf_Kh#& z;(f@-h=JgeM(IQhqp}5K#o{XQu!z?RYiK(&Q{dl(Fiw*?(=(i-AyTKxyY)zRf4P5S zto;7!HCawh&J8p&)(Y!3zP-I|gyi|FW!-?c-eWDvvF!8b @YPg_Mtz8@eR_m+C% zZ_r~oQ$>1`1@-3idhIqQ5H22WvA_DWnFSc{J-<(m( zqL?fD?ow}UB$WtcmoS!!-%hJQgMI~vv>UHeoM+-NtcpX9SDWUmP2Iw>g;9#N_4ji> z-_B!)%>KG&+dalTZ){Agcn#LV`9v-(js>FU9~&EUFZRCQ!MdfRg;VgB>A_9QoboFj%ig_dTt4s52yq`e)>cXMJS|t z&wkX~TPz)N{q*Ia`OGRfjP2yaq|gu%;w0&z@H9V7tiJ29Vi0l~7cjax+ww(OrMo^_ z?n@h+9t4vmn=DXj!~$-@vlk2NhiOywSDmi&IZeKr_VxBvsMtU+lgYCQDlfO z`}~87^&rQIPVdj`ocD>s!|u(^4-O7mmL(?Es<7ylO@cMGHeBlL;84OjRxF<`f#zjo z+KE+Nq;)+7!ShPnb z8@^`sv#F83{qy6)ZE>Tq0+*Jr+h5zlsaEpf`c3SSY)PD^4Se2ze%zdIM}6(X5mCuU zPzJodF!dNQaz? zx2T<`LelWy5jnZDvop+NB$U$D*_unza`O0Q%u_OO9m($I<>fgyjW_s3(rQISMuI-o z=(eQx`PPHR22MW5iFM86?EQT{MN)2VZrRX>@xsG2MP32gwSGrx zi=THt8xsqO2n#Eo<*6nM3y%md__tk2ZBL@8-)z6+;K?8+|>pv&|oJnesS{ zoz_OQE+~DumcV`@z{n_jm@gMDxS+pm#UHJi#T1V5o+mO1^p1v{;R4QE$#>s$1oY|I;oUUY} zr0R##MX>d(Sf zSSoX!9+PpHs;H}Pjg_0{tEb}}(TkOv)^5|k*Ea%Y4>$hIM9uV?)Rh?`lvV|8#@?Om zZt1}dhRa*fTC*Dw&KLWGk!-r`UL`9zayLL-sOX54DCs$H+EONOL~f03VzG?bY`eN2 zdurV_2Xgk((x%B9oh*!N@4L>-d|*~j>zs5*j@59%4He#JR&!teGaHh=6<@5E)5|3R zkL}sOAocpoG>jb*X=hNlTk1=6CicZfU4+UZ?m~baYam_^ChU{4A!eNVk+HU}ESC5!JKAKAR$g`S72g z2*m<$RY}s}r$Ts%iZ?iOr^xaSR(}7=b-=jyY)uWJd>F;@<;#~&%o6|uf&mPB z;JD78|Ft>(_m`ZUryeg>a#2B~`z zd)dMW7FJebAAM#^y8PNk_P_NQ{wL1+|0kcB4JW(nC4Kd>4$mNTf94fw-6i`*rl~=E zdBe6R=0lh+@6Uf`sr;W^GSl3lp;rW)X7D)N~<6A>vY2pDzm&beUA2UX45Mx)PwgQZiqYpKbSG|M=y$n zZ{M>k!LdTMs=92f)-8X!(QjgW9NXw^XlRFuVVs|PYxatso4ee5XKtJc6h*m*<5jlG zn5M>m{)hLk+2?9+J?QlFPO%;P-W12d!GUzf2-^-E*VG(?kF0h?OUm8bH8p1Vy@0yk z700rdb<1OQh*r$kqB@w@N~P4Gvh5ppb{sUks;UY!fm%m2G1hs0bydK3U!QXg?BHiL zx9mb{{KYKxXpzbEM;_Y0=p@G77Vte$gq_O$gM+bmG%74uSg0O7;&T|A$&M7qZ`L!e zPMSfda_~gc0bbi5uKEEiP=L3m7F}j1{e{7po%rSC<@F{bXSQdv6%`f12K@njX=sQe z+=E6-usnl@{^cVZn|`s;G~et|V%0cvO4BabSE@0h#RMsLJ+kd9P7hnt%+)f$KCqpv zi8hQXzftat`EZqxxRc;B5@{_Z^)a;TjkPr_TRsvrVb!C}DR*U)rgcHvfgtO?I^|l~ z(8Wrto~Y=M6gJo`fL+AhJ1qZXoX6-71%r!cQ2rL%8Y&K|cTW=k#?Z<}1P!JW;mB2# z7!y+gIg_(qlD=}~LtC31!hRGqN{6XB4~vnr(<2k(h>nuA(KF}?wjBe-c;Kpx%HPTo z5>Y<)-p-Kve9LjNW~CU;^D(ymw6-;r_ZH~0b)Flz=qK`1Q(_jRLd0%Mz0kcLt7HMk zD8$+MX__*O)7RHmQB}U3Qac~=su?1N@L5?|iIIC6+rfbCf;mq&toUsag@=bHOI%cD zWV|l??th}h%gakel?>YZ<(`7GC=%0gOwPFCVsMA(ap{A7)1cxHw-&^yCBo?6O#fR8 zSVQMJHl`Nmk9bvxZJglMuv_9ZhWT=q*!ViHtrLCu;CqZ}X`+mzQn=04xUXM38vTxx z1EY2;t@|oCJx&id0NIhZnrQS>?@J4~cmIB6seu}b%jobD8Re?^`+pSfZ)wSv4IM!v zx7J7DM_IDBk2cT}R^2sVKP)FtxaIQ~g^Kax&@o+#=Tk1WG) z+yPZXLj%|dr-wA}4ptH0zkjC^#7msHPXqp9$t5Z(I&378m2EC1C57D@$W^8iaEP0V zTX9?Lj=d2rBxpEY?TlGTc5XscRvIClN@HWQ*+tx!w~vp#8TTp*NT0~{qzEb7o$n7C z-VS8|N0cb$7vZqBGylwkd~>q)$r^O~u?pyH-l~=nQh0X2CrgqTpjuH#c>7nG4=SWr zev)(=#Yahf=3z9$-OH1RkBh7FSQ9`@*6yJ}9axzk#*#Kgny+H-SrOzLT@p8o z^$~Wpjg5^B8$*TJaai@XXHTyecyxk7&?9IjA|zyBWYkq4HD1A!88!qXP2QPrw-8|0 zt@uDz?J({;_nU=<-EiM0RT!bFqB6waaON3w^L|?q*dNVt2kL2}nwQswrjT?lY&1L^ zqvr1V9cvJSHTlC)3xeLdf|ZJe8p!q;BunDPrrU(5z+uZ=kFw~$D5qGww$ zdVBAgWJAbSFwNLM&TEkM4xYy$BeS-te2LuDa~$9)pw>x-yJB{iwrpRRNTUJcCLHYAxSH|%8%Sl)nBHH6v7|f4b#Hf#-hV1l zpq=v_f(ophKIc(pnYpzPKuTjcBJ9=QY}qU%Cd_9y{Wv?8hCE##+2ziXQu|J9!RdHN zbL$y2ys&WP{gnW0j$bTOcy4iNLtLGQeepF!R~j-S<1s=bQ_6?Y?R%C%WuBq^^}qk_ zC=MfeL_txgU8Eb3Rv{(jBf@ScWfu{- zR2YgkUL}L-xlI@SEzWmikp^`KfhmadsB183w!l|$K~zpn;`dP}n^vAmVxNTBc2;e0uwq}D7~8AmzE6^_t`&whBPHYMx`37i z8oqNA8O)O1gB7z}y&WAL{o%uh!otEB&bTl%Ng4@H9IK9&k4JB+h@khj2IKr2#9&(( z1^hh9idIkV*CwDW@-sKUoZNs z4D%oQ2)1;L^M?<}-Lj17!^ge{tBG!9WfX)Y!fQ<8{>RVlX{G{J!RJ1Ecf7H>WZ^vv zz;q<7Sj_HVe)-Rz^p>6aD^9m{SAM;Oo1TeyI&d*h3?nr)`|I2;71I_n z<%x+WV4dif=xZ7@hutf9@T;W-2u+~g4Kq{9%F8n|GNPXUI^HqYEi=CV@Zm`9o`^}E zdqQT|Rl=0^a4KGlj+v64j_f@A#&n}z9+yd-!_SXCqi~GImi{*hs8gXWcmA}x3KIEx2YKZRuq%C{%2 z{sx*LpWV>QMpA}KwXpRSLOPYn`lI(aeP%8$XCotYu^zmx-p{ykRlCZD8?o5nlkTxL zGThl&qzqF7ONihWS))O^KmO@rxh%IbwwZ%zQSsAt)lE#F_nfwp(k@^kT`;bt<>R2e zqt=iIv4HeUMV*)LpJD>M{>-+>TjEv*%M=w+pdzDdcJvG);cyJV9$0q>Xb-w@Q`1J@ zwp1!3u-Y2J+ z_3=uht!c4PGM1Q91Xqzkg#`+1axn=0_;>JNv2N*jrFD8^|~N<`1g{tpEo#G;kK7g?)Cb*7N?(1f|-k?va4Q!Ug~7cYI;A++T7w z%Ny_CzmJO2CcYMzj1~%U)8BWI(Y!b% zIU5$-0KetSmvW*ORX@k{_dLva)b5d!GrP>GZ=FSzQaxHuPE2ep_!tK1xDl3{o9mPz z$H=W>hI#3A`^DwG3aQV$0!W(TKYIACvMMROWy|?0c;%Qm`aeOl{?D*8IIjPS_bvC} z7Ur3`BRN70SdYnX6A?{S`i(|s2PO0S@uExWy*B^8HpQx4?Eo2>-`s5S8!g-Z`n5=> z*v{l|Yu>fP2P_TH0LnBnv&xLCZ2ANIj(}X8uN2R^xF|~&&hUicXnnfTYiru~V2z5B zlJz3a=);G4&ofBxRO6c#IfHx=5xTgkezp?5OsQ+wt+VDX@|ay1iMaI`V}C!>=b#XN_NM72@m9sy({Sub#T4GR{hR&i1C($2+j1 z&;C}p0j$jA_5)V;ojF;-(LooN9Yw`pI@Lri&}_&ZH4_Z0 z_v=rOwz_<9YR+DE1676T>6rc}^6VjoVUM^6&|PbQ(tY_N_wb=C{_G4eztbZ+jm)=g zIy2nd{UV<0H;8ZX@bbc3cjhQsC=Fm!&CZxyW!U=qIs?Nm%QFCowwgqShWO^=s)O2v z)JY=SBk7V8ljFJc$~EXMXEG!SNvNY#JBpOzp6&cxAlb9oE;pC&OA|6rv0W(81Uqcu z-L-4irs}==e*Ky|d((oQ^qFq=L04le)+&nXJk}1@hn3aU)gMYg*2losX=$P3cka*9 z&hOPyC7#(d5jng1mx`(it8U4Q<0<+&{>d7bfYGh`9PF0+nrUst#+C@OEC1nx2g5Sr zA304-tEN(nY6DIWKb)OfjDrsE=j*HR&3`G?>0osf)(PMUA@Tar;h_KzUyOt8+qWre z!c$Y&*B1UG0s;b`FadhkIW3was6B<&Hq+7)tZWS`%q}3k-jfK57jb&skv|P1-%aNLrG87N?fA8-h8F2%H7C-=gclf^d5LapYEexmJv}u^ zdC=7i+dN3A-TOj91vv~u1H{zR(@jlHoddVEw-;RbgaRio?$)M?^S^oXW{luOmE#er z#9&}vQAwrOFMFO@1@GO~U8GY4I=IN;iuTH3A~`oKzJvXg^-!*@t-QRP!>}5t5Gwxu zlPiPy@!iCm6}eqG&(G!~E!jp!Mpla|IN3Cr=_PSr6$4HWVCTr3)M7onMcw{Et_V8Y z8eY4%D5eZOocY-(m@Ig7)I7WD>$_g#lHQw06>a&9DSy5_B2Cog?eW)WI>>(X{-;Jx z;~K~Y4i(Gncd)rP{;MxnnKi%#+qb_wemW@RHi3Y4b*=q+AYqnRu`)^&!}o z<>f9$)ebK1t}(hg#fArC{n@KZ3-6C{rUHD=*Qc|sL93zUb9ihvQ&r`D@Vu?P9m->W z_%*tPL`XzgWbZu0N+fM$BtDS3AO?7B|JDL%#r&%6G2+%&Ra8{k!f2R38oDxx547LywnXYw%Ib>5Cz&IRr40TNrhB_~u#7h4`vM-!$%GyMVW@NHY8q^OA{H$p82fl0t-;Bd@0mdnkFDJ&aDva$iXj z@EaWI)xGyQMFw^s-^Ro=K>q4HEb~KCdATCG+7ZiM4?`kV5})sUGHvuzM4CoaHiU-y!338jv~E^evumi-ZXjhbmW%?XSUka`nr@tWO^;uXVB53DI#8`FVBx5v@*k zV;fkDf0Aw5$3$4<5}TKpzZAO=R^v~x(A_A^9z_@sAT893up2D|s5Y{XQRw}>t518! z$HzMbb5zmQJbW(GdmsJXhCXD3U8j2VEjhW^vXrizPhU$TRrp{5%^0i@QCoM<{JuGb zQ%vS}Ce@^lnsBEV3UYl?($bc3GrvyuJ_tH1YFkdSZ^3P<=UI9Z${$~qzIs!lHI%#$ zafOGKu~zC_(*h!Vq&=wRUM|l_6!k1?dV^ylnybiCQP}`o5YsZM_y(=pJbT-3^hav*)l%a~c7C1_4qOii5JPn<8r%cULI;Ufpw&QroZAmqCSb;>uMQO! zCzl;Tk9y?-twq!2k6x;;JW(3e=%uqZ33hkMS$eu8le_h7Nd_CXwRD@jj#~KXV7z}+ zL0f|y|tbjtD(9vF)DO-?scYo!or8QoG-PJY_hTSvI8O*a` z&i9r`;yD;XX#-)j@#q|2wcVYan?T!1K0z@L*ux;6ySIDiI~CnmQcg}!ty8_Xe_RpN z8wCyYa7`j3$C5=hG%9Kapi`jSS9tc=jUS=tAVXCKydJv!-R%rhcW!jl4jtc|$G*5| za7q=wd+)8sD3=E27Bb0mdTl%VI=AL4zLXt=2j1KvqB`4 zjB5wqZZxDEwmUCNw{x&I>bW^KU8oI<&XyB;@dCf%3!vLGirL>8o~d=K=@wHB%~`dy zeby^|yH4-Jay#C)fcC`rd8E{c%UaoP#651_t#?Z7`Sa&!E{SI+=XYf_-YveKpxe_S zy?t9qmxmz-t$I?%3OMI&um?V0tnb&RH1#YKq`JWh9;e2?PZnGoDNR1OQ|4~1PA$O+ z=P*Jv1&FwJC2+XLG@TjI#C5YBo4?KS+ML{(X@%hwK1&A?D{fUvw&0Y+huqy`Mgg`{ zG`CQA%Cs1qC96Mnbv$)IS9d_bBV=twyTa?<^CYAVOJ$m+0L!R=GU3i`y zGHMP+300ylbKdXXMfsQ15hNA^_a1sd1ylvwLo2rv-61&U@w4TG6dIUSeSN+1XWs)J z-(lAumT>G>)c*GN*9NNXtVn&a8`w@*ye^6`6AyMrm%`HY@G$?gJtYAl4Ojpt79V0| z@^on@ZZ`caMm~?M+B%ShMN8N!4xa~EN zskL9%1O)|GK9f)gzY>NIT!|6)RZ$5`c}`5!xUqp{G;!nAt^}qzwUDd6a9jmsC7fb; z&Cl0c!35I<)7Fm7jWsE;;a(9~N$_yENlca4@@ehcdZYiXwzf75`GT(7 zTPosdATYyg>S{+^iyoZ3*zK5YLH>0$R}g=QPGvPTYA)zGJUpzJ;B|7UC_y5>%yXReqS)T9Fo9d`iug{&B45^2^9 z)B(lfh2ySUVq&7X?9##?J_yp#&|rru!u(R)B>dLLG$|0z%$h!?T!Te;zkK-;xOJBM z^1|(|DY=5{i@rD@uEntV9&9?kc|$)g9igIm`?ft5l}VS|R7iPrG_{VR%z#jW%QrJY zClw{7{brYJfR3=8348ndqR{gOf7%t>72q7XxVR*GDO^OBs8V_!h8ewwzN`mwewFPL zmS4TSn=Te@eGc{Y=^#k5Sug$NRmnG(*!R>YYgwie7k0n_*_y% zgkBjA6~uUUz#tpa@mmDB)zR+Wk2ccXeZC&e{_Weh@18xBwi~5Ck_TplJ=Sn0JMq0o zg|W=o)5Yb5r{(l$J-#(Hlfxa9rzoQi&baO=5Y&NbrP_Oa2!)S{<230!*k8GFl`t`B z@jTGrB&MsEnEHjn*-0o+Cps#QHZfcV6*6O=zL!vifBianaJt39f&y(`z~;~Pu4OuK zRBF>bn%#G@q&)~J4q~{zTKob;JW# z(NyJZV^zwfJlad@D%)5?5?zXvuB$J4Y)s+ENN*HwVg@o6LT*dR-yT_tH5N_Vym_>fftxoqiyX}Q9b5%?(1M~yS9|?@#kJFX zQbb1coh7iAw!%EMF@41fq@g9+mvN5;I&;#CC{PLo9Q5fZNNvr{d0)?DkWVFYI8EIu z($8$jJWRu2=tV{SyB1ZCwlG|VRp0i}bxnf^S4(ut@VSoTh>X_np5!Y+&>vLL^i+{* zKR-Vtv{;%}q6C15bHq^j4Xxi2GQPzqR3Egg>(3vJ!TV|#&C05(@q3fkihGU)fwZtR zTLki48pi$mkujV#npZ@1;GL%eS6{L*fVl8AnhOp>AUyt$#8CdX`e=BQ*2_sEqDv#> z{ixx!7j|a`8-es6B83zj=SdO=b6<~{PD*(4@x5=y?_gTnN=X;3zM~grKB`i^-Q#d zV@fo$57EwEwo`Q`;gks9{pEn!kFbx;Gk`zwT6M?VD7POaW@ctiyhlS*3Vu3+;4S+c z3CK&oc>QArc-<_0DMF1-Q+2?HFV?%5S@&NaDa`WMtr9MB9TEtA$y#>~MwbR)_ zfA+Rgyu&}~zn9lM*ynZ+qI&!$oxV(ts_rzB;?_0?cZ(WI_V@RJhf+W~*Fm}jg0PAX z@7&$j(MaTO5h~ax_r14{YNIPQq#=RR#L%>-yPH+7EC+9SZTb0Mz%z{dowGnJEgs8h z-)kT~DrKSjRx3m+>OlwD>=Lwo>)6?g?r@!Fy{n#t!7>E;r%`;qX{X-B$W$!guXxzp z`uZHmZGQ&XPq)-i2dI%K5NqHbE*2?pK07;Wk4zuRl3i1ZU$1vxsdisE+S%FRIRlyr zprI6Ez7F8xK`#Q1yf7S&qh;oezTr6;^|3Fwxm^I9ej*=HXj~h@e%>o0)|ci11!-Y* ziL=RUdFRA?)YJ^aYN^6vZj0;&kqxYgPo7c<;3w+6Oq@0X|E&c`B+kvwa{KI(88{{j zY*@OHl9GZ@LM#!#6Mk_QTm07C{K6{^Uv`H|Knhs+mImWdDk_SKLJ<7#cDlZ}75kBr zc!Z*40uc#GpC_MbSz$%Kh$o&?85Os;#HCP~yEyYxx-V4(>9hB+@Ub$7X@ku9uV245 zG0j|#335u7CukI_**)FTqbSiP06>B3k_a`Ix&2=$Z~2&bt& z5JidJ-JUgP)n%tkTxlWUHPorJBJz;N`0qJ>zJ&!lh7$`CE{YfEfdSXmp~y7RV1p`~ zoeW87AVdQXava!RMX3iMW&#o^qpJ`KN=i!+O0LmY&dyszR02hWZ+cUF1f7oA5|1QO zgxmyxgo(PrtVmB!F)s@sOrsx3)HV4CYH_)~*ddax#UL5RV$Y5l>&!|&2Ty%iaOjer#e9FCJ$WR8vH&$opG*__~{JVYh1ooCArIn~Dq??f&Jj>&v{{zIyWxh=}JcfPj&b+yw74YaM(gR-{KI zTm(^;-#}(&CUNPXpBS@sB%ZGfS}SEbq6MVC+;JKz_+W9`nt&xZII^v+JOGtsm^r<>qb@U^tr@P_ zB6;Nb<2_)cs+wJ!n`NAwgn)kJHl6KuaS>CG`5hER{(arYZ+F3#ac@P7*UBR7P8hA2 zR055dZ`@NNpL)CDRiODPCTJKja=&~CvrK1>%gz4a?5Blf`5>W01a) zk$SQK!m?|Tr@z0vtw^T}3zrGLXW69`&vS`~gFzmnfTP)s`3XDFfK60ifOs=xt@IEG z$*_v@a$tJ)E%v5z4I3itgnV`h0byI4s)uzOHXJ8|yxKJovon*%sdX(9$96w=@4ST~ z*=4@w!*<^?LF>nZj`FWo2h@i&^>-iAZftnjuNDAdEZ%yM{0#S;!RkEdOlniSgR6pZskfzad}nA{RBbAKBIXGH_?ubKt8H?Gy%*Y7U)Hw8`N__?{{s@1r)q_VC+Kp@eEj?_3myQ9Ljhz z{yvarU(EwUELt4jl9D25MC1V6J09(#j`lY5X(XF@o)dZ(t^~$WhVD;;#DdNiiS7vw z2f}chz?vrvS`s8UK0Yq`JTo&>Qxn$Czz=ec>Z4q?zfpyo*sdlTktUDjKUY@f*bX9W0A8`) z5k7Z$`5Q><75go%`#)QA%YC|3pyvpVa)#~)y!R}!sp-5k9s`CxB!z20yd#+hn+>KI z64(uPK{K=a9K*;#&i+l%x>t1N7p(+Ds*SDb%rh~@hiV4|Lx7}xc@p}>7*fY(|LSQqmKsV`$8sY}3CVkdx=r zQrmuC|9Hp!h49F$V&GI{Yi3`s`@}B7AYTED2`WLS!`>%SG@kmEdiYe7D_5A#t6HE zIuEKL$?Ng4v4iX5yugBbj0Iv8^z7i?LHkN~cQ+VgV(@7hs0d6c(&Osa1gTY}-jR#r zdEu$J+vL3mtHXK$uZv?`uIQXOO-=WkJh`04%2jTL4R;CySF_O>bLD`$aDdkdU42kt z$>zRR>wogL)X>AjnQ`p+l(3+=EhDDjG0hIRKac~RwmzPM`K2)yeKe;s5L!&hhmxjS5 zni;O6qSWYbOCyUG5&B6-K|xAEVQFQ>l?!zo-5XTppHp zsm}MpBC@})G0Bp}UA^QX4Tm*ZH^Jk7cGlqk-Qj=LV-XiWpKDbHn%yM|dOu1I(&9Cc zv$o@%*lF*ULhC+pfKIgkc?s6^QH3Y$F~wuF3@`5Z;FgN7%y-u8$TjY4*e{7?r6$92Q!N$GV7?C?CDs?47)+ffd zqYZ);S(GGoA8QBxE5$t(Fjm?1ooh?{YaEOE{JljkvS)U>1mSNx3#UoXdQ)sgACw77A%GD4ogl$1%Upyw}HfXtdALt`~g&|P&*%( z3@f8%f*Tm<%SGI=@%e5S+`}<8p&NGs?$VD!uGO@CG^7@7Q*l2YM&(22xAl-0(7Caa2DtL03S$I?OZ zfCb)67IX%A^c5hTG)d#mv$AmyZ_6mM3*%q0Md z&Hm%gfDu^rrhsuMF`GYkeR^tb4N#|BBrprD2Jhf>=z0Ihh$qNrf{?VEr?~%SN)Y=% zqaPgH31S*tSyib5shce-KfO2hn)Bo~6#qiW1OBc{v z^_xGb)nmEye}nNBAvbP7G^UFJ$yno9SmsGqe^*uQi^+37qM!tSS)r;b-LZ5~W9EE( zZZ?;5zH0JBo~k{|F%DN|a{7sEu`hk^5KUv%m&S+%0UsI>*V<{8txgx0n*cVKSC=i% z%v>hw!P@TneVe>t;Q%!6ORgjZk~XU&rM&NE2w2uuR!|iHmzP-VFOy!qzE1^!x$rBH z3|dVwg3*V9&}hzcyP<86F6}554rmLrHS;gu2AtZGN2l;Dmm>&3!Ma_&j-vE@MBe<; zN9@kEnt{;^|J{Y)Bu{Fv;FaVqO1CR&Tb}aXNv)9D{e)MPobHrK%q4qwZI?o|XH{rj z#FL&~bOOCKGNd_Wp(OQI>v%ptG>>GRcQg5RlOWA{Cks^4!eU_{w<{OMjs;e#``U<( znZ*1{(C>BF9Hww+FeKuBaP{g{x3Z^Oodf)^W`O7^9@e~@{pj0dR?P+n!4@m4#fk&l zLGi=Az0;Xbm((pZMFJ{WINnP+D&M>hz>JMv5Qpnrb+#b57~!clty=g$s;! zg1|k%4dIWtJ6o|CDkL|3AO=QY`Pwz(=Ogp2no3jL7=82-W+UR+^ZKv#GY6E zncZ6P$prWal;7c6uo%lsr|7r%7fgKG!VYllL!er^xY*FI z2pS65&QR&8f1EiO(WnzAGfgRNup`!+z_I*DcJbD{n*mC7yuxyR{(ea*+jN7^6dLW;n=;O*Y*};#K{&E=pcW>M z1N0)4oa-SeX`y%kzkq=5(RV%6J#ZKHkB;;(0uE!}|F?*En2Na~ILyCfdRrq`$wTom zz>@ZZc{;!(wRn-G7|X=7PY>l`peGuuvMsJtaCdhHIqi^#9C=Ntf?JiKLmL_xcx>Vi zLk}%CCWbG;$hrBg)>gUcn?xnAwRKLMLn9-h^F;Y2+J~D{;M8JMT+*Mv832jt;b2o! z+Gadh+c?$L#!;}9#e5q;NW9+E)HL0Hx6o;v^vRdYUlJfC^$RRwH(gMGI>BHWIlKNd zNhziXY9Zr~?TbA|LzZ9_yl`E3;X%r{m#GNMuz0nG7z&TW_3_hTJ!N+Zy8dd%40WEW<9Ayu*<0eJy*ZpMe*~Pco>URD z(swgIOewM-@me+bhR5d609v3%dzuB#bVg#{$>yajm7kVOlS13q@Blj})8C*-r7~nc zyng+QD}#hY=#rrU!v_@@>Gi3raTUF{NT6i*_p08u-U4o>klv$zaH?b*(Jk`cv!tqY z2+ju#+gjZCHSW_q6rCA=vPWJZ0VO3P%iv@*;?m3t^v#!1i+Q+zKok}hwp+;sj^Q{` zL;G(%K5VFMUWsBtD}yiLYoM-S}`EtGgjN=qA^kieAq zv#qVp*Mm@zl!q_#Hm%Rr$1s5fVUxjsEmxTkZ!th4&u1i;IyyS~v)h~Y)JEUGPX=-G z=-1oBdS;h{RX@yH9;m`ONFw)WX_qFa`ebEf42_Hg9Vcp>F-<_7`3LI3S_A&|8%s2` zf7|cQ`+%P#IOqOP&cps2qvDjVxCrvS1bv&p)c%1(5$iR{4~nGMu+g6nMoe`O%4j z@(M*(LR7;u^gtc| z$)^M&+yeAeogGCJpT74I4|w^yjg~(}>QmyUpa-PLo=4N70ZY@y5qQ)`{1t^a?pw zg#7oEmszj=y?Y}@^{-+3F7~ha^8fn6seP3D-@jWHP*W`}F&X)@0k=kq;Otk|y90CztnfFN{h&^mcqg?_B7;zB&}7 zM%>-rmKn9XBT^=lMIeI5OS_Yn)i!fgrUebk>RMn8(~wYXvSzRIkY(7zfBqIk_hs-x z!|}<96Y_7wXwltHl_`8g@9~5K@{_@y+Phq@J@Ap4g~dWsRI)TXJ6jG%K|Ila33GFM zJ1My&Ie8Wpm1jpA+Kw`S~ojw@JUSsBkGnazp*@E+_=P zp8UZ3Kmk&kt+hTMNoy(GrfhLHc>W>_2g~(bHAgC45G+EsvvaymYvi@LdEEA(>tW+_ zb+Az9bA7nrQ8Yfcu+XB{z;fJvU0zqmeQjrAG7*MP`z?wB=6%_-rMQoYiM31pEogL7 z9SGaqV~Zn{%UbR6F56kV^t0P~kK&Q>U?Ow-!&XTm^8*fr!2N#3U?DCnVv|wJW%TNJ zronl=2kyKFhYTjM8Z~(*JZ6Oodw)&gbNA5h4bM2~3Zdn&| zH(YL08@9;>zRpfhUoClT>FDUZ74qa`+o2O)Y&Lf-(PFkvjuv_RihM+I(2t6XGgVWo zt{2?s}%mZSerX7ORcG6hfX(N##p!1zm2wms5X} zj7Tdtw(|(S()kQ~+vW!bb_AkgD5Z&rk5W9J9hI!w$IjueQ z%T;h~rMW&eZ1EoN?EFTSInSAzl2q{E33|NwfElIF3qzzhDjC!t^mk?W-y0vy&eYV@ zTpui5_fobTt>6}xJ8|);M>lu^B$*AVfyt_!^+sV%xI76BjIxp;=8xQVq^N* z{`qL-)jD;K6pY8`s&saikAbWmxhx1Ta7}X1Fxn8K;(aNJbXf8!1}$WXYgOoqM*Osh zwYVID#EC2~|BJ!iv*1o${`_B<@*4Q0+-KZJ#u>}7#%6dr%*PEwufai>TFi~adY+&> z8UmpYW^ltg`_)m(PkokbY zw&_hnO`Ukopz%Eitgf!s6gr}$WCX5j)ZEwF{P~^$v#7}9&yTe-y$8-W#9I`!AAxzc zwdH?)cnufLh`#zJGOyvcduFbMM@*aqexxe3C0-wgJ4voSa%C8qY5YCPo3z*`u?P4SQ2dST5fHZ;0LdR|@+%;4*;qa+a8 zllH&SCTAP6(oa$2Vq@u-CRRFwGn61gMI74HLjwZ>zBe+z1Ka8RRZ*CkO5p~d3#}9O z=@=N~M*GIDju#qu9~Nq}T}|W|oy(+gqAgX_IrW9($-#(IX`8Hk2^p{J2+0gipo4|3 z+?1HO6haEfa)TD{lgz;8hZc`(@X5*AvEbuah*;D;KTA!v=7mRA$pwGY(?Ed>0)pw^ z2C+qD=R>=3`@D9D-2!R_KZ<_dg?f9?tICz-<+jwStK${Ww!Pck?rKMn)hds@F6-wT z5|1{S+s23{6(wDm4O)r#RQj4tO>J#uU0uG44A^o6-B#HZs0afD)X#efj%J(UTohJB zVDcA~y#6mAd~VMOk0v;ColP&DO=DtI51PEZy1s_*)m4$AL#zEO#r-xG-3Ks?j z_G(6na41Dmo14}TYtKF^8(>)+8(yj=P*5Btl=|-)D$e(A_xBSmfLA*92F{0^E}uPn zcK>*%WD~Jc>n!ZixY0`q9sv55=`iI)x7dzUMtFRuVNO`x*%_;FG}@c3_rvgL!7HDY zvKURj+fi+Gmti0^X!Q)+eTzy=q9bba)u}Q=c%OOiGtApSODnM+8G=m)*%FE^Qm3if zj>|A|0tVxuc}ZAR6(T%jdD(DL+`*x%vvbp>$^A{1N*^p|Xh@-4+1uM2m?mLiwzvlo z;fU?D=BB2$M+Dv8XCV8k7mQflm1q3CQ?iOmG*8SAj_*1t?8?Sro6m7)%W^sCUs&|*Tl&#$axEA9do9IuW}q>i4><-uH#$#i1b zg4KraL;eO-)RcGDOz5 z_7anl8jQR0%?GEX*UJoH6EoU=Ny{4>@r>H#he-7_{j}7#X$Gmg!7eT?J8tyF6RCQ7 zdQDBuYE+dM{3Ki*m;1bC78cxgt5n*3NW}gsYkQ%i@mW{&it{lS56#tV)jC&9m-JI> zHXAx#b|QWO0hhXl9O-Ctb4y_6M!$A)cgMl*8E%C@ytm9m*YMU} zya-c-ayd*D15o4DFx4=pp9p)Eb6}vTk?-wPBC{ThlzVS#u>Im207Bx|p5nZHiHobv zkZ?F(S68WGgoKEA*~}H-M)t1PU7Q2cFTUSQV{WP0o{SmChNytXQ(hj+hN=AO4v-W2y+L0Z;m}!oq5b+nY zfBr~V(Jj_kg0RIamP?x|WXyg>Xao2J9#}dACvEY(?2jv;Rk+_qFq!uJG(4M(Zbr4L zupY`PUQ1+7DO?{&C^2Grl+z1bcUb4~hRYnGlL0mM-PaCeBV&z9%GMw&4Bpa!EF3p= zqph*Lc$pJPcWDHyUNR6k=lh4^dXrT5rLl<$beB5>&c(pcT#GEd48wr3A7Z2q%g=Drz zpw>19CXmXY&3+Wk)FYnpop>p|yBKSW5{H6guZGQxOf|BVk`d_^MUu6F2|4Z=hhL1`8 zTGrV3Nf5F)HB}$+w9kwKoi*{`;2=Buy_TTW00{|+3#7EMF&Nh|c)M>;x;M^YPbDFrgLYM-sSLREJytx%ja#N~ePr;IT<@Obv<@bHjEcX7S_eA~qtBb<|q>Eh3+ zX*7j!wj{sZtP?ISE+VU3r)K{1$8aBlne3*O6TA<}Ta3=@h&rt@-S*R-kKV}{thYxk z$KS;QtE#H%5-#D^j%uR;0ie+|EO&Qz5@GM!k`l7ZCa?XisFj9EVktTT8X9WmM-%ok zRJl=9IA4NXoyFlE#`riknfFNQZQ`d)Lu;A5i98T1I|or-UVbDcC`+ft0)Bol$9b_p z9QL#Q-i1B7H%G*Fx?E09AzN~5cbDI+k4;@&UDwEQ38ClfE5tkiK=0Vq)f(_)6ZmM+ z13)aoUS}J6oR(f*K1S{Sm!lx0-RgKin?{Xg`{Cwhcczkrq?E%Pg6!eVExPY6eF+u3$Q-x zfUfHHwR(I0@bk@1cG1TbKp`nfhLHvNc`QctKc}yVh=>Tbq}oM#8j2iu>m(qqEzVtt z*+xFnnF8na8R_UOk&C?f%U&f9-s>NI&*z=Sa^)(L2J~TUo;;7KbB?+?3pLO$_V)N> zWP(;>UtFZEUCA{JdO4Qo;MFb{wIz2 zd1z-3^YgX(GjaYqGk=@`AS!S!upU-}Zqd<|=ZRR1+7!r6!|<1PX0uQa+uin;)4V4f zP#)}HFqlSncN9+4;xG5Bt2kQa{yrJ-8+`FOrH`-O4rb{&I9vwet(T#7HKEc$jM^;H zl9EcPH&U|?l>io3ZT;NtzXTM~b;n~JbKTt|(<2ggota9rv$JNF=GOOL76G)lZ*Nc^(oAqTnGb3kRNJ=!NaJXKByW(ohhsCbD z>#kNIGWKEj?x`tZ27&NqpX*)MvkQ6~l~t^p`7+ORiE7tgoOxMto&(K8c%ev@=P7Xz z2CjK#g;hU-+tCZ)WjHeO()=kYGpObLvy0ix`N}O%=4xuCtTr~?Sol5*ZtPAL_&>N= z8)wDu;ZxIy2`0@u%*&;Kvlj8xpg!pFla|20@R9xl4n{FVK? z3(Az875?BQzwgZ|5Kpz3kcE{G*_(G39AWA@UqkKx|X|@P|cyejJUmm-TOX@WFi1p{&oF z;gq}0Et9y+cB_71(1g054*Fgh?!eHog||nMRyQSGK~d-&!+|C-F?dg@Rz{YO_UcOH z@?y!VwJVm7Th9%Z!N>?IVmSq~>vDs$c3f3b5tEOHVZ{w}0(wzr+fQt!>&x^Y-j|2h zpUx*o`un*FQ`8t=PyX?X4#CF4JSTLKR8#wQ^!fT|$&JC|iQDmVP)Pse{Vb3$&d;ns zswQ+?tv=VwIXBWT_q5h&6s6jDT$Wos>SP^Oe|OY^)6)|2$a@ACET{Eq4i66i_HJYV zQ583+&7wNERFJ`wC0d^=_y`sPrnf^N0Oa2}26(GH9Q zd;lNeG)3suSPav{^a@)@kC)4O?~cJTioxShw;x);wl56o-Ro-!Gre*g7!CXwoAxl>?n*OocpSjP0+)Zu<>9Se15Ae1 z;8H2XvBmwc(DL)=+5R|M4o*&hiRH1|VdM4iK;WtQ{K_yYDJ}ge;x~m6ay0)CDiM3U z_qUjiA=?=h=YFo;5hTryciW7 zz0zn6Q+byw5`=-1NJN;Bj#20g_pEhzAVmaEm`n+2Y~S$MFB~nN3KDuGFiicxt5D4- z(XQzEBV@On?Iqu?Roekj*puJTkS+e}x+Y@p6VjNNnDP}M16*WpY^Jk(D~;C?ENRVS zEdHLJe9Zge7)WnF_GS=P z{E)*X^bH7$*&D46*}tKsrL~Ex<8zKu7h1nR?{{ihH1RZ>^=JKNjJ5l9w+VhJ-Ci&- zRO8vKQpz-n)7`EDi2VDIi37f8wQq}l*fMc&aB-L*CxnFL4GqhSiXcZjqq?jKpJAV@ zadVERB>!6s`$=WJBChz4{fb7W@w zPhwjI<sim;#3_(h)MDw-mh#$_Zst-02SNw0(9AiohP0r z*B?H`ugbuj8TvFU>(eK&Oz0(UB8dh@*@stnd*oSJc-?|pZl4#q3+LrUm1SIN@Z%^f zw`8;)DSRJ$x-7AY2$Q71y<(k3dUkfRb&5GLtaa`l_0H}t>}A`5H=y9N^xDdR>UT!( zxY#*(*ywUP6~|RhJiy}Oc){YqV&%W&H_uFBWc0V_G8_JdHq%6dE<7@FWN5&k;jXh^ zJ|=;Zy_)mrLUnIrt zY{6(=@ND2%R5DH!&s#o$rYp^*Yl^bZe8n*Zw9wegSDH7u!MFMOMBJ~}zwfPMq20#5jj3vsBb2_;&a9$DK}o0o zAPk6i4tt&C+_BI3qvL8UndV7I$kSqCIzMF;YA`hE>(&Gd+oTyC04bIwl_C-TM=ou-Id%}TPuN%5Hdk4r->(wR4obbBpZJ`4Xg#i6e58kS4c zu6mOCpXlX&@2v_QS;UG|GO0UIGW%;pdo1GrR=u=I82z3R6N|d1hsMq68(XyHI}Rds z+1NlsF<_nt6sY((xGOCer)}$`eQx69;}#aAM9T$-$>nJf(W8A6Xm-g}vHG0LB=(`& z|GyV}r0!w8zf`HKkp8U6pm~~95|x{`rmz7Ht*!iIX4kp*OUCSd!r!(=#Pfd|_#;&u zAx+-)v}jjVxsR&sTvKf4(-%R_c}xu1TI&LB-`-ujG>S!1bat0KL0P5Lf$ZKzFO}Y( zP_ebCzE1YN-#RH23x?5hM3>A^) zuOX|oblBVC;tSOPfG-Dn%#5rh%o$x6I$Q5T@b;$JUpxSMr_e;LVE77Z!mUbMNZTwqi>i1DwrpvV0sWUVoxUrP4&#SuJZpVU>lw_1) zO?Nh@XBit0bN^+qSeEgnw$^C>Sl^Gm_>hq2!QK)T;#tut!)G2wIBkS_d4t-gT(<8~ z74gwG3luY6(*L3tS#jEeN6yaNr;L!#sTR{A+^#p70~>m-Y}vCd)iHe)@N<31<{zr} zU-QP43hmBH-qlSGB|WN7-Pt`rOtmS;PQ;rLzHIe_J0ipWAoqqpLR{Ci4X+{yBnO;P zbye!uy%Apg_gn=lw+qp2Na62}zZ2W<1|}Meyl)>?YCcXRt*nTmGWq7{#i7@)w?EHx zkTvcX`1?KSzUR``neU^^VcAY|RHFmH zh0C{C#El{ZgV0+^r+B>$vJ+GHiVHnvh&^iD!DcOt1Oi#_jhm zNq-W-Vx&yr{Rz<)P3^H(2NzausZ05a4_BpSR6?C_kU$m_!|UgaZLcF$T*uaSBd)Ew z7&sUlJ&P0!OBwPXp2Zk<$8DazB*1JkCO3G2!5|41&q|6Qr0zWT_}ez`5~WE@&4V99 zMTo5C?zi3!^GP4k>T2c%6s@v`nA6>gE4$9%&T&6ziAJ}N^2)Z924P9{8Rj5_qi*>K zL?+^>AqvQRD)(R^$42zs^Wz#xq5O+WfrLw+07BM7;ifESsON zwKnkn8eSh26?NU!1&~OEWg4pIJL9Ik=(rRce-9LP*ZN|9r|>$C?{Lu)Jh2V{Kt8`9 z|HQ(KpJbWsOa(xtUF|RQE-eYu(ryDHi6o|EgM&enPVrQq@q03+$JNlyXT2W4khm$++7*L8*+)L$H7A^hY z8stKrC%=-Ch?zeW8&8(^WpzoHmNJpQeLIWwQ9G9Gfev=owV(?jww3>8t^$Ij>CHt% zf6U*cBS^4s3fY#{69|&iuhcdBcrahSd)b1^wX_+`2T>5c(@k68BEn=WM~*vIHonnj zgtK~+Vipa1Y~GOsbTOOK>%2uo2$av5wCdN715?34|=&na! zzP0gov>D0^;A^#v8_bH<1Um+o4*kUSy>50dl{KOqv#8?@t@kg}Rxc)Ko=cfL(T^x& zK}6P_I_pItWUJ%;129s*c%PNmHdK??>s?fy^V!yn38hNzTvMKx6 zB!@H>gHP^ zCnqOc!@l%5Qj(IkUFNe7PEdB1pHL|D>TrRVS9_^ZxkTouZYQN5_Ar5;`_2V$AIb3p ztn6Q&6OG`_SgF|*hI{zDVfD-3;9X4NQJ1CqBd#Wf3^@?`bQ~9-V-XHT6*A%DCVw8uPS)yGXv9fw00Q^unugminWmQ(#4Ehgf;&BpVl7 z$+L8X3LTT{1dKo12k;;G&4md+zLp7EN-I9;94 za_7D`uj<<=a%_z&Ls$_WMR=Zh4~aFIbfSQYZ~5nvZEQWi>-sA%{TLU?eU^X75>L1( zPpBwlXPxYSY{%-?*;}~W_OvZ9B`CNi%_~NY+t%}LPCiNnoL4-nqB0yr+n8(Xcni<6 zFo{vQ#vmk$^WPEsNJtM1JoC#y7>wNBO8)x#cy3+h%h)EPwh$T5#mUK-!-1@XgxO@i z;^E;T{jI7V^UTQrSMM4cI(gnEG$BDUvb$L|Qz3p&O)dQ`pSgv@a*=81MAz)xoSGIR zT^}zy-u_jA$;ZvtnD+4}EC$WF*un7P+2XtmcQ#vFMucfXTuO-uTKMa-dR!P*IO{G6 ziH1jRXuPTS)s9k~RFVs0rZ+XBL)?+If)vESCCIoi-XWUliicf1l_ugEA{U@PIyN@8 z?B}hgqigv5MU2cxf-!mJ4IQi`;kz6qC8aD(t{KI+yfl1WsgMv>T{^Q-ma)YC&Y|2^ zv8?99M$81z@E$>4PP4chc96}|yi$=yTDyBjOKX$L@8jum`V6DZL5j(dcFb$;aZco8 zcL_a%-=*G30e;K1{dPZB!F2iKmoJ+5RC7LCBG(=#zPa_=-7Tk5Vxpn>Bl99aK|mlw zIL`?lUHs|ORKv@?p1(~XVXdUFCWE;N|5N(F7*AiTY>(S~cT}ANm$Nma`+U31n73_a zc5D$V7Hst4Zh9F9(ljwG64fKM$BdEiqUcmt@UuAW;N&1J!b`LGFidL_;)RAP;B9@U z@|A~}%;1I3-cCkELwe4@&P3B?PE1TMyDZbROUQY=+=8MS=G1zT({@raCdjpkny94Z`%ebAn6Xw4=}JC z;SDQC(Y&+S7QOXl|yyQ}}nf@k|ke5mtRlgqDn)7o#KEhEvW;AXo1PNu6sMMbPb zIBqF+htlkqI{}Vr%$zop_4gO`_ZJg;f5`t`I^NGZ!ID{jq(;QXd^|2q9D3OPDA4G! z^7!kQ`~jN!(2eGt2RDAiXD_O1KGycubtk!By9fT_eyU-UNm+>kvtG zpQzmh-{DZyX#H@*>Y9O+a1K>dXDOu)OLcF71?YH}whxc>fkO-O!0!-cA4k7|op*Ps zzN3xv+D)2kl|%)r`YKx9tvQzCEjxp3!#3 z{FbV_FZh=IXm}4)Jf)+jm$U;(OY_@xthL$)bUzkfPSE(9-nBJ`_m zwF{EFSi&E+x!4+$7WF8U?jI7i>(z`st!(i)*FFjw4N)gby-^z^5uYlU&Nn9>(;JM5 zw}ZZjl+6jb2{gF4=;O>&GeG&E(bwd+J@ShxNdD!gNI$%o7=log&<-1x%gtyGTnM6b{`Gm+$V^O-C^vE#6+ph_ebwJ;-vw5mYJoaGIkpTqC-V2 z=IiIj*o2`N1Qd6>(`9<`ra%#Mes)&A(zrX5Eg6RTie5~0kcK-R$etXq?Tro3^Q|(M zSbRxd$_&i5LbzOsf!c*%rsGrY>Pej6-SSD^w|8VDB;##Qx-XVt-t5EO0Xu`7HXAZz zWVR0DVoO6PC@=K>?GacUZnw|slkveSeT}89y&FBhw3N0y0^zg-kO?hO#N;GrHl+|7 zZwaN~7frQW_fKT9M)UqG4rMyo9_yl z<{XJbUBaHUEfOezoBe3~{5~xxI!8VhsugM!)3GML@#tt)r$#toe6X<>_!{?kP^M6Q zX4ZUN4D#N5@?cHL^2nV0nEaTP0q*OTzv$)Ce!aU;fa~!)m1V#Z(2(W2J0p@WC+KT7tITnuVK_@i>@3XSe_U%@!sL0PMA+9MH!tuA^5CfSGVC zqaK+lirVCDY-h*BOK#(3H&H7K_~Yb;CsEr zh=^zk>?fYFl)XnqMa2T_;sz?}o)BpPHHx#-t9-VBi}a+VnW>T)z=N|?U3w$QE%YHK zW}kDQ_AMegCp#zSQRGd)#OIcJ``s?UFFqQKMf^Bhmm)?n^^+dvTorB8U(44h(Z@wK z(O^9ZxTTKfFo_*rP>a}vhXHDz0Qj+ge}W@BOq(ypJCyYm-yF0cS9?zYNt9O(Q~4W@ z@12~e6Rd~s**N;agHZS+!E;GwK zJ>9wL`Hx8@(RW;>p)-}uCoxgvf{5F?v8!C>j=KFB zdV(kl?lXSY$%j-*w>m;1B9YPVlKs_fb$iHee@Q)>{i0EkDfI%E<4te1*L)~+Kjlpy zp=3xW?It?I(2>B`(?RpQ&znOeGp6(V56n!L7hPVbeP(Lui1!l-x@%6BMA};i>t~_k zUYBAv9VHtj;^dxh{BW;D(1kTA*WYdPo60S%WanI|PIlW5%zD0aaA0O13_jw}_rZ&^&pax| zSpj-fCF1Sdw=_y`kUOfr3JMAiF6Cuu1^^^lT3RC6p^oYM)72k4x=o)zm;rWTo`4Oh=(^lBaxp^}Nu3h(R=u|Acb57l96NjW)!Z9~$vtBs;?MGGyTj z_kuU6t#4GaG+@(q(!81HXm- zhmd%QdAPd*XXoY}OVbXC2gWPRXX!^c^FbH`(yWNT26qo=|JekDtgNZa;BVG57c=Ik zWA(r9ieiZ5uu$>QOOac8fok(h#fmOT7Gj(i^(XW9416$Q>KQe)>RZJ^aHTS!s36&R z*lViU4ri;M0CCmzoSjP!|JnU=k0^tc&Z1kR!PHGA>ld-DAv7@kpG_&CfRB&QkF6EfAxbnq&@i8_|8d=3A4 zbBzGIn*=c2V7S2d1!n}pB(?~eflK(G;6HC`=Mrz zH6_gU)DA`7HO?GMs;POOz%=0+~0&5U>dIJ`g#}j>B zZe7~z2c@=+u+imtyJ6xA-YbWXJau0(DW5&1s{1gb#xgWI%FV+rDf@Z!UpIeq&du}l zI%#i2R@PwUB21A#b1CH3 zq4Qn#86&3OP_qs!D&p6T+(-MzIu`~cB#>)*Tl^%#Io@xu+Kj2(G1HQy>FE@G9F~T` zd*%lwx^nQsr4T(cQnCE71CTokTJKiL{+fti$|#12>0!lPqzb@L zXyANg@{5raC<9;Ym>k9`!xA(R)ymQ|mK#SP_j3su35T}QPCPvxz}DKlwz@pLDT%H@ z^=DIN4@>tifFY-D>6TPkHn6@Ygq?9=c6Yot$8!Uuj5Y7?mstNNTbjJ)EC5sfg6Q>S z`d72_>YR_OC|mAhhH6m0GcjW-T|DFvRUU&HFfekJAPjvB4HIQFP_boyb8X@majgsu zg-_|#PK}O^4i5~(%TZTF*ElSL@85}VZ#i3N=#vTq=)=jm(y5Z&!>#tjegobyYQUfk z2_FXbv9J-CM5?kD#mhB`Nf{YXtdo$EsESvTjt2Cuvky}RF(8x*H7<~~vGmhipCqqdz}C2h_Z0M!$(8hK+unz3^i% z434?tuC8|7F%r)bcu%Lv(DaQy!s}_^@A2i4#l={GH?6O%!ieb!G|)7*f19|yHiMF7 zpTPNJDyVXiZ{W%Vn5TNddzst;BsloDqnT5}M7;4*MlUfNFD%XNM^`}siH%u!l#1xA zY;X7e*|q=o-ogL9k?{YoU4oyUU914RYW_JUQ69TIZ)0EnNBl+FBQb!Kg=FlA{{?)5 d{;$kJMVZ&%W7x#tz5aKytfZ1ex!9L){|h+E7H$9l literal 0 HcmV?d00001 diff --git a/tests/browser/specs/visual.spec.ts-snapshots/alert-light-visual-chromium-darwin.png b/tests/browser/specs/visual.spec.ts-snapshots/alert-light-visual-chromium-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..e72da798739986a13d2fd372769c1d7718f5e973 GIT binary patch literal 13647 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 NRZ&x+TK-+=e*qSP77YLZ literal 0 HcmV?d00001 diff --git a/tests/browser/specs/visual.spec.ts-snapshots/badge-light-visual-chromium-darwin.png b/tests/browser/specs/visual.spec.ts-snapshots/badge-light-visual-chromium-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..e6fb3e55a21929433fb4b8a1fe4c4d0503784223 GIT binary patch literal 8768 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 xxrCIJBr;L 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 literal 0 HcmV?d00001 diff --git a/tests/browser/specs/visual.spec.ts-snapshots/breadcrumbs-light-visual-chromium-darwin.png b/tests/browser/specs/visual.spec.ts-snapshots/breadcrumbs-light-visual-chromium-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..94cb385c0bd6c8dcd5186fa9d9ebcc1f15026d0f GIT binary patch literal 7577 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 literal 0 HcmV?d00001 diff --git a/tests/browser/specs/visual.spec.ts-snapshots/button-dark-visual-chromium-darwin.png b/tests/browser/specs/visual.spec.ts-snapshots/button-dark-visual-chromium-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..c74c9070ac14cc2257343724d1651c33c80d4994 GIT binary patch literal 10694 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 literal 0 HcmV?d00001 diff --git a/tests/browser/specs/visual.spec.ts-snapshots/button-focus-visual-chromium-darwin.png b/tests/browser/specs/visual.spec.ts-snapshots/button-focus-visual-chromium-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..108f8e814ddac3b968b620aaceda9fc79bf209a1 GIT binary patch literal 11235 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 literal 0 HcmV?d00001 diff --git a/tests/browser/specs/visual.spec.ts-snapshots/button-light-visual-chromium-darwin.png b/tests/browser/specs/visual.spec.ts-snapshots/button-light-visual-chromium-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..1501e1a52d1c31ad2d70d9ce778742027aa6177c GIT binary patch literal 10679 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 bbpl^o9*wC18sK&&Adr($mM(bx_m}?$`anq$ literal 0 HcmV?d00001 diff --git a/tests/browser/specs/visual.spec.ts-snapshots/check-light-visual-chromium-darwin.png b/tests/browser/specs/visual.spec.ts-snapshots/check-light-visual-chromium-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..9b60c40be7cea89cd9398344c17ca0026e8d6c15 GIT binary patch literal 13801 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 NIS1!cRVRGz{tIG3#ghO4 literal 0 HcmV?d00001 diff --git a/tests/browser/specs/visual.spec.ts-snapshots/dialog-open-visual-chromium-darwin.png b/tests/browser/specs/visual.spec.ts-snapshots/dialog-open-visual-chromium-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..29ee4d7fc27944ebe100e5a98d8416f3fdff67c5 GIT binary patch literal 165652 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 |(vt1_g1da_=1oBM7s9x#Q zS_5=qC<6&(FiAvW@QecUt`8TWKhpXH#J@GSl@4f8i2`0s< z@LOD)77zjyP$4cXVf&mc%K~?!5b{sclfa#5d}Yqp@6pA4UVz(VoWi;D_@5PvJ%JE{ zb;3;w_<(*yeT`<1+DSf3P-z?jbH1?QVLxv|Nqt~D$>8)+s9{c6oD$Y}x@TFzKFas` z^QBYPpy!Tdjyw}Zb5W#Xx|U#0wgaJ>`XaX8sQ;LzfHm7=oY3zlR*1>VA2oAok8A&j zCa5J+tw!#rdg`am*ZL7yUisMscTOKf50{nbXY$(6CyhN9Jc%N>X8m6b$>E^r%BQ0! z4k@3Z35v&0pPQEH-`Nka40Iyi#CMEkq6LP!4A8Y1Qq+}te{zEwfK7y=piQ2CdO}%K z`0PLpqy}M64yf66W-ZxrRO|$SKZ&vZISs|GPN(-wS#&Cf!@;hBECgW5rY4E|@YzmH&2-FRigZ zF^Vxp+>G6%hj0&c$9*Gu*I( z8TD}U%!!Tm0rHm^))*S)6tBv-6@;c08kB?m=*TmhI_FX&ywyNXlGO9@*VUmZ4p-4Qw_$;Fj33GZmn3vR% z!{+jiv9#lY^rH}of~b9 z7=Z<`eFod7V&G4FYjlew3griB=IhT4W|Q8V3-M>P#3sDXR7IMH_I2xY=3VQT1P$94 zv+9Q#W==Ag{ZjQ`Fg>L0uSO6b*c(I-QIn78|DI{wqc)HR-kgH^(w>W-GERA0SMlLwERzG}@5!g)`9+Ps z-nKee3j4n=iE%*fTnT+L=jnKcZj?guT4I!`gZ<6(prrhaSV0>5+CO$Z{9$&pVE#Iz zX)3h;*VDfT{teRfxOFcyktju~07$dRzK5 zL*@o^clmuhpnjz5Z)mnh9}rip0EjM%$%LQiiH@rEW^XqIh6nzD=%Hk2bA5U#N!R7m%Boi_6Mn0pN3Y0hHv zgN_s*s@i9`(M;1(jSqO&wrIm*2tygop&hnG-IM{Dk&J`URL zPeE#Y?u{tcp4Ay4cb7@OHR)lX$ykNBphIt~hu)f;GPck%zOWmE>R@uobq#6~jG1?F z^E)MBB}yoN5h)!s7qv-cV!tVTUMk;D-r#U#MVC z8EV9gC8wNfDPzMMKVuB5ew=mGYU(f{(B3TaX{6AQEvY87UX-JBf+bW&TJANF62L6X zBjZbNRxk2%Jf3A`bV3E|DkS^f@`{E)P$nJBM1~wW60H&^PFE;V@%{9gJa;G&bY77EKB)RHO!ada8LfZAEMAn>lK!o$%ZfKVO212=(A}c)%KFR^t;Sf zin5ffkC}X7p>7D`1<8JMfqddXX>;N;S@@oz6Cn87Ghzr;oS=KPcEE(;$f8L1+rx`Q zxX7K}xf9K49P z4cTD#!7xu&H1qblG7no-2eA)Ey_PNq(2Q3QK=uraIL&UPbuenmI01!eEGDvAacDXZ zne^*CBP~>)lM-0VsPV*A`@*P2jsrJV6iA0Kthl`zaRh51VxNfR2k)9q%B~(wgepXy z8cIdtR%SjIR5|G9HHV3!PI{4yQtD{z7oTaPrM3Z(cW`d@G)n-d$RedMNKzWl@&iR& zra_Sfg)(m;yYyuUeWmNfV4#qGVzz<{HLz_Dl26D55n8fi&JmE5CBS5;KpWm_6lb19MmAT;0=yY>Bie}NMan+U`s!aR0HfxC(pluFy`<}H?heqk!3Q6Z z8`v0{Kbc4k8{^ZUZdT7u5zwM-*Yz79&)}n2Gmf9nl?l*4{oC=$Pz|yOK*Y!Kr@mz z>aLZ{b1_WYCZ;W#OZI1w1+{teB9f*neq+us3o^bKR^U2{7jU&%Ss%80%;N1VL$gYY zs3UqZP}?;E0lvy!PzDGD$O>FthTeZqgPrw&t zN^y{_CPKKG_!X?|SAj#jW6lQTu&3tII42kBBz9U;J-f%#x&6lWP3XNA+gm2=`Uyp` z#^^E;DW7IoWDDZLH~mr^U&aTQ-7Tt-#xHzBl_EbKO79o|DE%6fq%(@l43@Y8Iznh? zp}Md;q(vqV9_Ip;N-CqK`Y%AsZ=o>&ZCNOOeV6X$hm9xbPd zF*~dE&LdW*FQJqfVY@3vIfAYRI=YJfcHSd?)bJ1aF_ZHMYPryG2L!O$u^tqNqcM&y zL+-7FgTJwF5ZBj_K_Hy0VFVP7xfmehu?KCvS4WY0LR?{%Ydmg0A7QJAU9gbPCH z4a1BOdf3b;pEf9`c0F;mdnpVV9gs>9rrMY=gd}cj9^^}98Axr&>^~5rDE-kc7$@Jp zdCu*)S;tq7(MvJFpwO3z@R9@b=0w5px@QE@Qh=D~f{d;d{z4dQh{7fXoRd8WyfAuI zB^+dQ;K!l_W%@TA^(_+Z1^6Z1XhO*ZUxFKv_oL<4htuSbPLml?RY6gYz~Uj!DT5fKwgX#X41^%730v^6yhcm zj2LroOVcm3+CKpYS!Cr!;fRh-__!USlI18ieL^>;`4>|bFWax(?KG8R(NRYF53G1; zl^yI1X;rf_FN6^(T06$z0gw3fbKTou4PzZGry1uYQEVW2Sd?wTRe=_aw34Oqkt6*_5KdbLsyVTy!&Q<*KUREyB6zRc z5wHxwFO#J@NqMum74h(DH&`O;1S5u3Cu@Vo$4Scy5tv(yRGGSH84=^0(24)V(peY$ zi%WZA2L~B=ipTJxO}Q-*3I$m*t!ZQMr-iZ0k)?qJD7&F(J)H6!WtcJpvhX|of8&?n z{C?3e!%s}i%_Lse%n=K)4qw!Cw71MTc;XAg!zklUT=E|zQ`$`p;Gu)|ke2%B=y{7x zh0(VrUb8q5zfz;1Bu|xo!Ve*Yaq`?2BgKd#b>t&N!ImQV;{2Z$a8C$-vL;I)QuDL@ z2>RUn;;Rhz1^t!qTv~`#jS+)iN3g6_CL$>eLXdT9k>A=di*C?@gk(Ti^Eb4iE%=Gj zi9tx;$fJkFNm16WYjj{L;E&Q}O^s+O^qEw#bR-b{+v>_^p&*_O7UZBk!&svX^e#q| z-W1HHA(fVzFYTQ{tQ2*ExMR`-F^FPm6sdwvTpa6RtR6X&^2)i5Q4*E+atdkRmaGOR z$^(e5@zvjJJFo%UMsTWeC6ubkKN*a-ggr>gAN~zf5%C`yI}c;_JmDBfH;FG)#;PPt0s}AX(LfIQ^S_q~{X-`x zxG1E;DXgx05H*e%T8tqwuU!Fy`?ZB0B|PdgkOTT6w!}yx{Uc1r@9_yEI`TK#-JpF~ z^iCNt!iB|xp$30Tz6`%usgWs$p(<#O6v1+;=#H5np(IvkFZHNHMo^6w7a8)_syndC zjU~LYP8G(6R>c`)O)@``7mfYt1(mMiL*aBZF?F9BQl-fUaZMmZ>$q~gmbkp5Fq=bo zG4O>%V?;276;(K*vqhDPL9o|MRGEpL?g;pL1Dp6SCppNQf-vV_VJ9Rbem_f{4l(15 zmF~JBc#W$f@MQq)j8H}A`XWf@t)MR0UaDOb!kA?}m*iFgu1+YeA2!cL2^VDK*pDpy z8X?7!aB7It0E87+7K=L`9t6;YNX-PQTTZH)ZDXRGqQlsFwfjgsRxv;SSBxqV#HQjzsQRvYZN z!dDx%c|Byl$)xyAI=p5@OKU@M)KW&K7&)`S!d(#(ygac-x#Jkg?uP2aU$_=k|LBYr zP&HJx7hus-j~7wJ>ebChRQX;N>lMMn$(4nl%Cs+_l)cVPcKqgb=*K&$jHq8{0go2f zJYXz(OX=;K!yv=DFeXwaNE-`o1=O%Wg6E~}_!sAxSwtofp_0&qOT#!3o2;WbkoAIB ziA$r0Yc&Z)cN|)LHMaN#S@b9z@zRqpc!u_fvZ~-n6X3UZ1el16!HSo?L@rkXVGab%mf#n2tDvLbAhZ9e%uBvjF z?jew#@d9kLUY51BP&EgN0Ad0(SWQ%c+hTh{nY&G8A*r3yNGzbL9_B>GuS`h<0vhI~ z%DWR1cLZK^)thE)j4Z7fN0V%6?+g|=sjJl8gPwN!1cr^3l3DS$g!GoO863p-<#Lnb z(aO%fo<0e}m@ossT5Ba8?4kpcqoB7PyPAdWABs0>hfHMxN(N|!JStc!DBs59BaZ+2 zl&w4D@R&`^ylnUPlM!%Ida^GWyDPr_TAPq1E3~&yJF@K1gyi$aM2yHES-==@#Ly!ww1_SD(ZuLW(i@<>F)yhKtc&075i0dxad7Z=!D832aK)f#ZL~^HNIO#>L{gP4Fey5#DtHMYm%k=xi(-1F znUa&BHJaOmbgcB%sYMy&lBno=L}Pvpxkx--4A#`~8y2TVc)>Oy7nf~;?|+WliGgGLpy5U#tc5ZmEfG%hXrba zi5dv6QbAkoQCtrh5Nz?YA+D#{Lh#CI08ICj*AJW&JYtGtgCr0 zCMW&gOBSz?qqWp)^7!L?;L;)REWrqx3x^ zD#l$Ma=a*&qIHA5QPEGKg5{!`f|q8VQDkY#A_no&O{?9@12((&l1PE5o`4rJ4PmL7 z#Q8;k3ryl$Cgsl@PVC1gzg8+IJdPI}klG&{C7PnLJaUdYj2QF7eYCYugECROAFm3N zig~?3^{RLuvAyzz1(DoP=du+x!p+8EM#o`!Q{gEzwS(2#D))NUwj}l+CoxM0s_5K> zuqY{is87jb758Z%Pj(k*V?cPr3SCRXiVDZ?as?7zapIC8x#Ms~HA`J^K_a&XB%@xr z0LxWmxIv2>Ooj|_qL7jJO-RD^E8R*BLxdCWz_pxj$}ImX)?Qft-2MLc7y&NQi(gOy z+Cp;&q#tz3?75>vxr=?9({ zMP#Z7s9tL3oIdII>Lr^Db?U?k=CTqCP@c6%LBd3^Q4pr^=M! z9;tH^XT)eU7UfXE0(a)XW!{ zNQsh)4HdOl3@0uM%I>#U3dJ!aQ%Mo6bjRZG4hw;_9EbA*1%X4#fv=a8wr(kOEG%Cu zVtz^>9R1`K<>1Ot>pX%qC2E3VO!GQp+-)PWtoOXQ`RK)Z^0xLl0htY#{gcvdEo#uZ z!R+CU_8<#_=DVeOD1a6E1QRhs!pdOH!8}5!3WKzim5FdcxhOs=TO(Er^|By2(Mw*A zy#(@bM2Gz(OCD&uEHy#iN7pk10jy*P0{X*zI{_nU)8f^4bh;uaQB7xAyuN9`*1>v# zPyw$t6h9kuK1K41Sk%nPC9kc`CCZ9&XDJHXA38&9$tL1Za z*LB{GQ2Acv|2(qxjF}@YpH^nXjOm-Cio9^oY7m$K<1Hx#hEZ7i%}C9h@`mPCtv=LH zCN3SCvDsUZYeM!6bfM%86G#^8PYXm(#n8%x3h&Ju&_3pPa&w^plqcZRCS$50pm-kv zl`Mc!$9LRvvajM~x5+D27r6;bt1cyt&TBl^Lglzy+GdEy@N4l@yX9KT8=RNShp&~H zV#95xxrN*ja>CROReK{Pv0L6j@^ED8EjlNguLa@>!KeZ%!dg|mZX#GTw*9xHU&};i zQmV|P(rksA5oOi1avhitc`%cVbwFvwD>oNW5J-dud$r}EOeux)+cad*esA{v*VC)t z9?tDIjQnW3^s6a(ES2Xq-90KNQ4~;d7{?^CKzO8KbAczCH1GXJoxmzhYodX^4=OF4 zU>> XJmdxha!|)z@OJamDx^T_9G{ht%RAk`0vO+)H22KDAF(Wal+$YjBwB}JY5W@$D?3hphGG+o_g z|Dr@~P!6)ef-lUqY<iBgo(Jh6zcojN+$88`^HYBFL>@m93Hr^=TI=%3B0@t(v zYY~+Nl#$eJzS^ao%5Aj!;cAecBEVX^@>A4mbEhn9DR{AQS&E9YNk(HSJp^-*fM@^r9T$yH^q68^5FHy4ecCLS~JmW?-*b^BmwIYuFUDJkrO5<*J>L}^<_`FClj)pZ# zhh`Bk;NXF3(N(~|P>K3q5lZ2M>qj?W=o2&{ZhZW^5OJG90z61mKXMVLU#}#`xFsT4 zfp==!MA|rG1ZathK<+_ukQ&X8RHX6%m%3BX{gh~o%uRjAa6xW|y-vv z)pL--fs=^jgn%k{KUd>NF)B3K&DKL?<~||ZC`7O@{DQZX9a<_tV#KI%C~GdoJ&Vs> zQnhtxmLLP=^dQmkM^*Rj1KAjjQgFL$KZE*ZFNVSFub9)|CnXi+4F3UBco35l;(MG* z1W06o!;i$#XX*wA^guU3*^{`f4XcSlvD)5O8z@^nyd0nofwnu*+JP|eU*Za_%IaMT zHo`cP>;1xB4B47+SuzYNT7}&}dKRKp8O07h9PkK@3~uYOU@dRp&XN|QKWozGq>(tD zpmFe?6Q>&CB@o8f2~o9?-bF3E9nwI_IbI>Gp#zdVamkyYhJelNi3X9YXo4EaIGTMW zE7aB4#jt}BCL(DudbxNf7O8dxuu_%w?l8FPO7+4p&ru#SJcRVo|0#~F^~=``i&UJ(KzIXXA$_ycXRR1iTJM z03-O_i3EVVZWac(rZooLt^5D9fN*tg^(`=PrG8p?q2k}}Rx!Dd@ggh|(+622Q&_0T zDE``Ep}!2gjJL6eV%xDF7CoY(4f{5u{zy2=oFG){&Wm>O)9P`Qemf+c>g^-WfQA_e zg`4tK1M9Z*r8;RU2b$}-)JG|pi|LR1m6n-@hPj}ccG4}#&@jf%$VgikM&5VM&O$H> zH`**{*TYnui@T5`v>`ummLqycB76CAm&#i`>w7 zj9x#548CO$0ZhHtdbipi8c^T2ic%^Es=EGvV0@U6mgthQ-kCcFD_xx1uULH@zM?LlgrW%qJu!xMr>baY6p z4()XV6%&nK2&>)Yw|W#I=99-tnvu-Ons*p(GC4_P5av4@8Kmg!g5Jy{|hrnjlk^@x$%Gk02+)xe8?eC3?xO|m)OLDUC(t_r_@=t{2fRn_Ruy0^XAmm zA&smcBi43UO$!7$=HUdZT-cy)lO+0Ljc=o1ua#(?5^U~M0;6A%?%o^u?-R~5qILJI z>4zd|9IdL}W-9>cuo+Y#%GFbJzq)>HY?c2CSive-4`AQgzJ~R=Ap9JH{=+(Lr2>rn z7s!*|!G#(N(Jf8CJK7F4;iVE7rtazvtt)&vqt`;ub~>laJhRk*EQbJl>VOn#ZfID- zQeO)OUYz_p%7H5!w?4V)g?#G+iTsZtJD;U_weQv-KX8xX?DLhDisr9E&U$Q(1_n|- zB&7E7?<*BvccjQTp#%HCDp5CYWY~@5;##oJa9vX~HZ{Vp+zbci-u#WcDNHH0jdI{( zL{p+G)b7G?zHHakfD@CYn(F{-QO`o%U3r+_BC$NJ;vSGnXiDxRmRhYu9{5|0s#;*`MYAEVs;0O7wrV7|mm7QKO z^y9`JzuyOGWivTzuiZ0NN~Z(D5z(kKbTE}Y`!EOED((iEjQ>7|uG2-k&lkDuGVE)I z#oL43^)FeA)S|$CPtEFqH~v0(TpzGesBiG{jalo(XS?5!j& zpuhFo%7`ClS z5}f%FIoxN|wTPGtpB(v}YJ}_U=Na6igjL>su!GX(eck1)*-P}-3H4HkS$MaemvjyO zXno8n=dcv=PfPSKqwL<^>;rsm+rJzhsAvC??C29Y_9YhM9(m!Y`3u#Q&A=typ0P8;Kpy zOp6eSfAx%xoFHpk{!vF>Yv+zlTu?!2%+A&AB{r;5MVa=2c>;DT&X1JrpXi9|hCpy{ z81G?dhj?DAEKW~TgPQZ%=nPL7e-I%3791V(Q#^qkzX;EoRn%kE#=*&9w_C3j=S_Fq z`tQRCf&2&h?r>X6ednh5ud&mSIWOGrPjEF6!+$5DgL(m^qvA(wxuK7@SDybJZTeuq z(k{s7qMM|JyW^NF%xd$a56sU@SC#ILJATwH0r@~#+K)a5Zv?WKAm zftPYKf$N^fQP;qt52nk)xpQ&uTl$&xaGO~DVFph?1yX*4Bu3~v7f8aBG8Tt5Ni(A? zcwiYi9(o<@IZY`yY600}#pj8%NX~C=$-_2`a^xMyCh@P%Q>KRfOIFqL7quPfdsn<+ zX8q|>`TKv;2WvBcZNE!&xW_LFL-p@_Ll3@UzV04Is38XK1NA2L-=LL*1|fxKYvf5} zCay_%OBryr=%cBPkC_^9Kp-wy1{vSthBpALU=}=ah&hl3@zE622*Ya3ne3c;WcxLD zDL00vfsY0a942>ygl|kOI6o=7Z55lFmv-2->;Pz2D2Vb+(>`zjrCHwd53C$HE9FB@ z%9f>y`mK2tYexOaDxc{~Jqom4NOy;(S|_hdh5spR-{G#fo-|Xu7akk<-$kAvWEjNI zmYZ-6f(-5oyQ>;e{Xl(B;Ly71({eLT;08hgi>4hUE#p;N&iiqfqlkeTTpAhG<{y36 zFYkq%N%ILpa?=Qd_qFH!ryX(|{8R6Lyq|IJOO7Da`x$#BDP5BGvG{pEW#3{=HX0l# zlmiVtIw^l9K-D*Qa3$&Q9|sL(%`A9g%kfE2BAA^dUgjM^v@MJx*zwvkdvi^wWF|OD z$f~|okg1A=w6^I{e3(Ho)4eM%7W{7_;}4&*sp@vP6gKdWwMrLsln>nCh?oiZ;EJ(A z68=lPi6AhaP26>mWkR5!u{NX51x92%1zy3emJm-Hxo_npmD<3D_j2c)0Y271#38bw zb`g^Rp}4~9;Kr@uqC85jyD`HffZERwQ3lioHs(|a4%Ju4637fb6mXarQ@n%k6KLvD zwVE2go&eBNE}YyB8Dby1d|Br4YgNF6+P@StPmY5ucLCEUKF)FB0nsht87|w7x$`pn zIDAXf++iP%S;zm8WY(cv=<%Ib*9aPN6YohnWWF8RzID**0&Aax#F$vRhEIq8za}cf z3xIsU2_HbSR%22H9Wmr3kUrFG9d+Ot7Qq%F<==2Xs< zaBw+<|8m_HFY{Wzycg7tXyQc$q(CFYdCkMT7)pQ)cnDbHi4NIB7-q}Vz!8};=xmu&o<>VZ$C+PRft(c2xy7#O$%w!gbphpo7-M{p_>Mp4LTzMOmob}|S~1Um zKO*_yD|@}L-UDk;)cejQq`~B#$4*6Py;!MDp zj72Sg+aerg*`)wddcQ5tvYt_&OU=`DD()2w&BPgI`bB}}2cB{Wr6az8^WAM2^xJf1 zuXg*<{eKkQ-b6t)?b_IWU?1e#XjoA3=WwAG;*O&R-#US1J)#Oo$wd{dmII(S&mIFO z4d#ty3Id2_Dz5$H`WZI`jzYuN+%*l~5wT6s-P5J>1fPb3!%y{e%h6;de>s2{84wR> z*7G9?BEAeea~Tr6a=YcsGKzGNP$Y{oUR+_sa(s1*5B3ikRFJ^U$^sV$g0a#N4l)!}o3jy;jd>J1bQRQd z9+87e9$q5{J;@D-5Be3T!!-r1Kj+9`kI~v_8)j(~qu7_G zKGX9@5@J|yje-UFw+Iy=%_8SH;fHb`k>J{itB+G^1=oYXR^gHTHbXS1HU60D&kD=; z?cfa5;{J>v9bA7k9`gry6+nwFSx%4Xw=;${N>9S#Wr-x7S!y_C5W<)KiLrcP3az9H z|23B~KP0U@h1te?HzOrAg+vl`D5$nwu=dn2hy{V-)mw4x0J992IX95x+LgSz_X1Dy z84#mQe?03L0W3}s);=@eqD*El1sok*J-h)A7+xdBvk(KgqKJP>GKR&TnfBirPtd_b zN$!8}s6eYa_x$2B7T8LP0zBC$5qG5+UK`{%S4YU^pF+q_`kj2IghgDpZm^6~Pes3q zfu>+Go4x`E8orQ>HZG=N1ck_tb;CwF2bZ1dcvJ_iN#B&PLSi@zHAcKy4eso_Q$w{?`EdIZy zzB(?-=Xw0-?mp`1P*URP?hYxD?ve&+IF6DAk(3makd&@F8Wcg1?naOnP67EH==<~g z{`I`>o_S_>c4B8|XJ<9-GfZ$kryX$b1-s7LJHAO)9(~_`X3`X&s)y+k<+ZO-F53MS zipOU1F4Yd@Ay)q@TKwBmUNxe@-frhzn3`mF0On}x2MC;|inSxQ zS#`E*jd0SQEfp63`QoY_?3Qs?{G|B1#QMK-w8IMK8jKz3ybbjT(YL6q%C3?A}TZVf$@iC5NHZDu4=}W z$x6BAF>$HfJ{$P_OA(hqfYSQd_Mrv$>s&)zs3pdVHP&6MftXceiwIT=0-M)^3tq|jR{1;V4_Zgth!*qOg>F=LWO04$G=-O>?+)}put@C_(WKZU zim6vX9^Pb{%Et{{s-$*CYaBXJ1FES@e_b^5T;{IgtI} z1yCxjtZG|i@wt(d<8Of^bGL%CG)Be z&X(9rMonnDcA6y{W39eIii#Diq9{yIY*(XDv^ffH*os+Or+4TjbYl2fk}U9FEP&7% zEUv?P#+ctw^`pWRVuDvGRCJ${fD2`ew`@>SvNJLcG*9!iJy1G48m_A0WFM9HAs^D? z>_k5lPT~XonDHa6+Hg>foF(Q6Tf>(6wut}1`)&0G-)ar&jT64V_t9ny13>NT>piEY z$R~J&qNT$U>gE+6uCyzT<;Dx#0MC2SS<@++?GjAYu-~0c%sv-Qd8!pBCl}yKVkN~G zGlwml+C>8j6ruWf>$Ltfqa&^|qvjXEDS-cwghu4VEMdeQMEce6cG z;*ZHr=FnsF`WGky+Ew_d9kD*4?#iKR8ff&5@*u&_akq1+Hm563H`^zL# zu79J3>?t?<>iSUXf*`I=A3%yK`pFCWpI&E~`CC*sPtLYym3ciE5|K;H`}83htim28jQshDJd74!usAGIH8*nsW?lsn)?hq z*WHK*S#p{*dJu5h%i$K_X-7c6YPdz{`ZJW(xsMP;@_;P;lpu1-BsN8bcaZYspkuv= zfadOuKc`2vUMVT3H$-JoKdokrU*)^$hcDwenhZ;8&!59Rj&KncWMWOI`Y-(?7`nq0 z_t5#6s%Y7iCx)Tc3NuG^!c}F8BSxE=QaC4Q48njCyir-uBGb5p2>B1iU*?YJX3Nf zm`MZd@VduspUPamfRgI-&%f;kBv=cVWzVIEp)dX9$0%X9anIYnF~S0G`6z3*+xNk2 zjX+?yH6_fvDA;*DJl<}==w!L_d@c;_qOF4tP$SzCESi|OUgx}V(qBtVn>rGgVI!>t zh{~W7LyvMzU|}Pg%0&|}usUWYxGxTmH%V~v6)abw>D#WXN#aPy z?ED0y1qFH!+LIrO$eXSkBy-F;=E~zOb1V1;LPr@HC4Xa(qf@`QvN3 z$O1~y{y2GprD%U2@B2DeoBYRLK8aqtB@IeQ^5@H(GAX0hcO!aU(n>bInw|dHs)bSh zJxmy-c>N(k;!YN=>+mY2z%Sib|C5mZSVlqMMRx4QRpK6K;aciSP`vbr;b;frIR17? z5U8fj!z0kF8;H`NQ#9gSgAt&D>dR(sne$7HvW!+TTvQz^8@adDx7MzQ{Y? z|CL!CeDte>d(`mEhFMm&?Yr1$hHo@Za}rwW0y z#{p^oXWmE(bv%n2X$xjoGXOLJ?& zN0ZvNZ$w5zkP)u`k2a;Zwr(}`0k?f0&I;<-$01GK)wWx=2E8fe`#Iy^&@e`?$o{>! zpo>wpSa-JM_dg4Dr|II7u^e`JU(A28hH4nMpHYe5=cseuYf!5YT3$bB_* zT9d4@Uvl@DZ&6%Gx$oc}-NzOjj=j1db09~tQR&LN{@r50&kYRp?m*w`-c<)|?Vl}g zp!T`%`Ed%G=*s=bfR*l!TQMmREqXdAB#Nnb-g|XD$)4!3VKsYi?=S`5}miW{dl;tz(CNn{Wtm9)|G7+ymUQdxq*t-cvY!Uzre$l7~i=+sF8~amJ#z zNq6cZsdCr$8fo@>eWV$yT{EMoS~f(w%}ti~qh?-uSE2~nN;gSu^&^gjxA#Ag1h*93 zz3`0J@56-#z@#wwRw!|y#xT+6-zZ=HAH3*zAM}Dui#=nCo;P9Fc-VUz*@Ri8r#amijQZ)%vzh?Lm#JBRc z%*QJ~Q2D*#e;=J4f5k~wbWfBClkSVmH|sAE!wtt8zS?VJP|kanQ1IG!>8qX$gF5BO ztHaVDvo%rJPUkag;+8)rA5G1SQ!OyR{rpSYwcE8*6hyI(h3YWQBJ1o}ef@V-S!)CN zg6!-ZWGRr9qOiPF7vYOtA!jFbp1)Oetr1Z!=)R;fGs$*g;h;W)NO~M~3#y<85G>>~^3#o2|(|D1Gv7mOyb-AkZ{S>WqgT8Mtv3Y(J2b?b(tgl$r z_kHM=vXXQ)J5jGb$$d>Zd(BaRH?EpIIaYm^Dy?p)bl#9lsjR3;hFI5In?&i%d6_{L$;<~RdB-37J)ga%HqYJAc1c{GSLQo-TALKFy5#V?`RYUb zYP3D*o?fOWnU8aj2EI2WPWq&_#Xshl+IW`Lwo*08n=9#ev6MV|R? z^g=2?n3L)_k(P;y{OL4Z<&47lzV`~4jN;RF3wke{4}C9(wla?Xi$W-LE)ZVdgCBA; zm$W&s8EQUC?5spc$sWwZ1ZK#kU_k#NqA6M?Gx{8W)Igy`5t+ppThA-OTQ0TTW(X^O zf9srLIh^+%~c8_k8syvC*a_HF(4b1pR!5NMx>H{V~$LB36P(O z?ZEtr;K1Jugibrp+RygNFIODca?3=kav&U=+FlALYB zuGenicr>Tr*Y#I$WdL_a17yuBn1y#Dtl&)RFU`#bGg*!NeFdn<^w!Chh>81L1bZmi zG>FiNzm3sj`P+)1ktnl9iVVz zUT*r0)13(RUo7CyEu2qL+)*JY`6tE(_f(BP%4+~rT!^+H6=N?0CA`1E)V)wEAb% zsO`wO&HTrF2uj+~qLm`=vxyJ3(%U?AIQpE|K_Ky$OjnAkv@-M0wuriPas$Zmo?o1PB*;*U1x-y2ypBadq5ui*P;@1u~V0%db_Oy=7` z#>s+4+SXKBV4nU1B=Jh<=xJBFWK}qk@@t|Bzwu6!YP!NNw9HOw+?3M};pC-9*A0aG zq(O8g3ye3BF>w+)YRm`qm!m##H~5HDy|wm&8@Jee4CG;3hU?kTc?3 zaCzs;Wt7(|b%9S3hEtABSznTY?G~dSz)PUO?JD%7m z6|09a$E0(xNR9m{8`p<0BYOU&?^s2yxwRRS>OQK$4DDL;hy67>G5ve%ReWr@zC%g} z=inThmpvC3V)Vqs zsvJs=M%to>^yBV&a;<{AkJ3>0fOk=LgK2ijv#S*yaQgj-d2Qg$ zyFi645#m4_ui~}d{(4pBz9TBs2jtRJiySXEsM+a_g=}&e&d1;1Bq?PVYV*X1bV9Sy@Hw7iHKu$I`fIfR1cyXp41rj5b-b}C z-Z75}9I=?9?G+tRbG)__Z$#6UJ6u=fs45l34aXxLI_Y&6x~?I7NtO0$=E>OaMiYhe z-x%rx+}F&YdAY)2N81-tLpF)^mkixs8{eN`$_WHWJ@o(UKf{UODLqQifXrcvTGg>6 zjw5I@!42NKpu-|JByOV3V~ef_&n4&E7eYGlFWHP|yeM%C@itxcBRF8+2AL0b%x<=i zj3tL(1#AD$_z^H#!BEIPo#1drw^w;%ExnD2bfr{@!RZdswUvHF(rBw;S_RcJIdPS8i%O2mo z3?sOAB3JO+!+s}lY6Uy8L8<;Y5Qm8F{uVf?O%h2$CJ^*J1v#yd@X{4ltZh#AeBwmr zlvPn;c4xljn+DC*9$y};o-O(4t_b`L>^B!QH)$BGm=A}J8N}!rvkEenw zNnzj&@t|cK_>01hUU(a3MP%9+tZ3#yj~zKCaP&J&627mNcY_44ST!c0^W}PF^=SbL zm%%vN-|QT9&@U!P*?bQBD{Nz-HJGNc+* zqaW(m-Zb&-RQ$tS@XNe_fxCz6Lh%I#MEr`Imn->^OcPj+3o`h|OIrNKi$Gt!&zzA- z$}%Q;d_GaS8T@W12I+^-A=uEdv|^gPNJZlzo}vDfQwE*y?L&hjpl~8|jqT>m zVBK58pS$}BaStB}8uD;)bsk@?mN>%VyCQv)>txp2OyR&i26 zLZzfn%!WZeHFi=s?zkDASFO5;Uv>5aDpZn+9Ae36is?lAStQe;&0~$#q$fbzM_q4E zY@AzC`I1YI_r2yDLB2Kgo;aIAxF3Mo?DQKV^VI`AYrdS-rkXt@@oHOVcsxcv5%BwNH~#1uJ6e>*2?Lfe!-b$vqmB z3Z}KR(Vnw4kvn9PD81{`GK9i)FymbWr_wjV>OeXwhC1eYfrP?^holIB^O9Jgm&Ea| zKKOyM+YaG}brZxV@SZ98wnRXp-ilN~rTIzWczDEc+vhB@IBONOaazMg9*oEH*CGz0 zW~J}714N2$168Is0gbehzUM1gjse?f`F}o+=!8S#MLp@kZMnFk#+q5j`Nnc~83e#z zQCK~4H9Jv@f&=r!rYIPAc#!*yntnxi9&*BWu%{6z{?j zOqF^^OeH#Ziu-2v@*(Nr@$eb`ZWu`ju>6w`2w3C6j57`oBMV!$V}7&z$hxINaohUq zTefJG&p$eqB|KX4v_pyfWqB~=U9v~l=$4Oc@o6@&m3&A)q77uO^iD>Y!pfq&UF;-? zKQ$L^&$8iyV+IsH%kGOXK80@9bOF3@jD7st=)8%MKO+U2?Ph+#>2{%vOgW|51 zji&Nrc6jZFCnq?0XJO}k^F*22HM_F}DSgPuU^6e1f8k~Q_dYnWjH87DRPYaxns@^2 zgzv+46BwYmZL*0M;g>dmCWfbF{pAa`Lb~$<%@P>JkRIX$^wr(2>*plZ(PeQ;ytn*= z0V;`PSBBq-EpPA_2->BLREC&Y7JoCd)Cx7Y;?EoBc$0_G@&;vbRh?C%IvV6-(9m2r zQLla_ar@~3ln@-`GkcD{zg^j`QOIb{Mlae)@=UX>I2%k?^UIBcl1_o5kJqA&_39r;(Zh@t zq&u1}(!egF6!HgiMgYTtMtSD2z&f^5#C$iY{8Un+EEj_!V(x*vJMqKC;~S#ZN$>Aw zV8p{~LcHYqj+ZkD9gCi#$$fzYAJ+JtT`WRTGq%i^L2(y#Hm~w-#@9gA7mVfeH5#fn zwybJ?V#}BkWt=I^;AD6TR+>m?eg9$TB$!ZOgfOI-X>{8=S4QJ(o<4QzQ)o3BS%Pp} z!b%1?G7pK}EtqmaIMwCm5ZJQ+XF;}){AE|1bU_98>#N!N^y8eClswS&LE?#FwRB7l zpjL2rRKfU$Nf#A#@rtD}z@llwT5*ox3(lkwoxVc>wQg3_cD_SO>S+!h2QaZt?@d0| z6oE-HM2q3~u1{~B%U+fUviN>feaNs_Ws7TF8$EYzM4bsSC&QMoJRCBaZ-}Q`CXTtK z=mf{2C&K*B1d)8Zsj@~i4k2Qsp~K#e{yT@2p1{ymW}m9tdH3Cf2W)}kqRdNd;@?M7 zBV38Y6IX|64HK8JUvONzY^w|Q$uVh0)y37g3O0v3n5K#AH1lNR$MNU?Q0 z+-*PSe{vv0^u1AS(A?b9Kxdv zpLWv3!D(zBuv5PJ;1Xt%&_v> zPCm^p=NX>q2tm6TADf=|P>RnHVe4psO#-L(P-c45muIrD{?elt*%X(uqP?d22IW!C zBbzH+=v;X9RufY@w(Rn}uPOBECS-FH0IkyA)DGXhDZiLQgmRwQAY`!QE*5M-2{a1! zwFfy1TiF3SGReIu6p;HZgU_(oLfBeJKiDfYmF~8KsAMC|aT4b_&nypH`%qo3{R-z3 ziwF(Lkr1>}0u?LKFQ_zPjca(^k>Zn~Bi)d4+Glhv7l^i-!ZR*kgR6;j9$Xp5N@ALM zlgk6cg7+NX#ovAK>KzsVoFm~x4MXNi-2uoNjZy#Rykx^(ON0y88z0FU6k?x z5>FJ&Rl2PNwUOyw`~?LWWenEbneU1|)_T7eQX2a8Ou93vOW27OW!OLeM3~%_oNT#9 zj{btU`n>#FP((6I7w7f$s(67R zMEir6hGIGjDXljk zIa2TD48c`q+*|jS@zCkN=q9=eOSIi5tap@O5TUFVj5-l!9kEbLjg6Wy?;?(MxYFai zwuyd?(b*E=7Sn16?)`yve$=~}cl%aE<%diI!}1BUHUH-jjfYG$k)XOBM-|8lb)yYh z7timsugIgY*5dubjZB50X71O9`E7YS5EV`f#+;A8)2oylyhpk5UjwpN16wc!Zdh$% z59IUm&BS#^NUOJ^(2P_3Mby+7?@1TBro>A|dDP7+6ZP~!@v6(6++Fl~N}-g|Zqm6` z&U4FU*qFI5v0zNWh{iI?NyV8>*`I@j2e|{E%GNvG4;*<~ALO%GJS0H+^1=v#?pf-% zUVC!k+x_Q64mbI7mgpdbk`8&-u${0#rO9NL!jCf;mBxvt+`B`4#AB1-Y0!YPpagm| z8NePSo70m)D0j9llV1-V42Y%(D_Gc^h(FVI+|fe82qtDg7g^pk?J;|^(#9PS>&p`L zqXP}%I+Wo4igX#TM%cuA3u;F9XCe=3pq2iapUn_7!bq_$7g%Os zHRdbI{|Y--cHLbVQ?TlGdN`Ko_KxU+ZFG0Ql{`$K%n{|Xy4!h7yJOfzRLk;U2LJU= zR-m>xDf`mOORJC(0CPENL5OKdN({}%JzoPXY6)Q|uq(lNNn})XsApE6j5o48&MHZ5CT%NMF9a3m0lw%1VV`h2qg*GTdEXMY0_1i zAXQ2Tke~q#JtDpLL_1an?E)=juD>Dzn~MGnwa^Xa4h_-}Ae73ke@j37d@MS&(6$=6#0U6!AZV`~aFzWxtviIH6q-xkj$0)&j z*ACo5kl!BL7aA!m>!$lPT=u-dBk*&z=MNEGH)9M+jW6ANDSCZQzwpmPk@pkFPChu_ zh+mrNoPBm8=~@5tMeb4zx2S@n%WdDTz`>Z<+tiUysJW?q2SK1eZ``eR_{yHSzZs<_ z3M^xMu5F(WncDL!2=vEcu{|JA(>)QODfz$O)YKL$hfy zY^m@F33X460TT?PgoMr-fBG2&T2ejcD8d=#e9p>5dpCT^%U8<+8NIGzgeD8r7CR6w9`+t5>A>QrUqH&K ze%QuaC$g@(uaM9Jd=zsiafEs{PB$3N3_7W3SM4$Wbf|K!<%>O{ZaUH0Nl+jSj1W@b z&woopI^pTPMDiE;m!cTdl zb^eIqYBlpZb*~{` zRv=yY6x%6TDWma0$o@6{l_e$*wbI`}x{BFYx+nAE{Jr;06P$21llxKRY&g9w8PPxp zyB-ogf*U99J9O*-SMsXc69Q76rtMc2vd~Qr_vbI8G-7~iAT<3Z^Fs34<6A&)*zCuW z`4li>jGl=@v0y%>ggoonR!j24OiO(JowQFrloz9Q6^Q!fye}bRQd+?d`99YKPb__# zwRW(bPB_IahIo$**jB*8s8!wFKepHe613sBicg=6C9&*&DAtdv!^zFtDHZ++Yk#w| zB~favLBMR(Y^OT)A6KyQ?D-%}Yu|j#VL5trYJUu>n$MzUK_34^ySvX>7Fu|9=XEq4 zJo+t0s=~EnKE5s4%+!=n3oGS~b+X;fAsb5}OXV8{Rq(8S!fG@R+B}pZW>vS^Ic#6$ zja|4xA#U{VP-Of^)|s}WN()x&O-DIcLZM|Lo6)bl@cRP6t``pT|9L`vycRqBK1{$Q zS;?_9n3n{rG;Y#p=jf-SS(;}JFfZ%hx($>$dks|zMfgPympBo(qLtV8H)i;cpgJ|B zIOytIuVlq8S{%sTkU|GA*TAfuQN#_s&{-iEoT6v)QU#7Eqcjr~9I#eh}+Ns1I z&(f-f$;nEQ2$6`;Z}S7?yq9MhYyBIR60M`Q@>*4DL>p{T&-rbXRmOyDYn$3A-U zq@sQ1)1Y5Ke~z5R)aoo{_|tH@4Ns@@CMR=R;`Qv>Q*}s{_g(J}1gh^LbP0 zIP51$S83yE93kypN_YB1joux?mkGz&MneQ#mg5Y*$!ZWDMmBlgJhx8Ih zKX^ZOt-+~a{OwMOBY*2B=I8f!(Z{hVT~qA6P^C-4GU}e6|J=hI#tXO6{Yj?@EmtU# z_8;y}-ppxq5c#4%S~u>qh>bl3cBlw4o&FY!{FW88vb#Pr) zEhxA^k-}}y_o5Lz!ET{_hmPMiH5H_~x_Tcxv%J<1O=kK&Bw;p@>X&Q_XBw~`btqPm zAH4YC*XVFUWQG>sFUvrK%N!`b5n%WZwT>o~VXTI$f$*9~YSk{uVA)+Qres^+as>Qh z>m)y~KWJ^!B*Un0(0mpEwp4!oRc^xsb+dJR`EUGe|x*}gIKBC)85S!`Do`14%^*>-1X zvT?lxf@~t|N9)NQQ@sCpWT2c|+~7lh5fgJf4ze>qQH32>bh@Od=+zV{l5H3l#EZ42 zn4Q2)n6`K4nc9AOyiC>?pt8O%r@%4~GQe&FOD*zQ0qbVeN}Z36Ht!sVQNTIP$_koq zNmYZ(9ep^kDu#U~gcWmfica%euCD<&8=<tkldad_2te4&=AdyS6$$S*U%OA7VQj}gahrEto zo~F<}dvi_b6dAPd_-F~VfrJ>B7?-&sd;5%-veWh;Ec5W-5m#KR^@sHOx}fnydDB!t z4f$$qs_>rX*2IfpDXBni`J>lE^kOYb9Oh`y@t!j0kS6eWm&J6#yf_roMe9iWXrVL9 zC{4n!yAtluQJJb}8m+@#X`v5075Wr75?3C5BQ24mm5Du&z?X`55Pmnt8EAIR?|VRh zu*5t28w;jMt02BNZ{f23vX0Uo<3lp35!4+YUAQn)#9#%OUqc0`!^SDV>$N6*JmDx} zXwe*AR8%zM`-5|Q=R``%q?!GB!2C&CwM1!bbM&{5Y&N{waMtrQIsgJ`Acgo?z!ZMQ zssHc0!vEwpjm&mnYlXRgGpS3ZQRnUIZv#eoLd$Ec^2%h?IS}Y{QWW4=r#=8{I{o7R zoByAO|6vj2$RnR8+(bP)`ylT1ub|VfRd4-A0Y!!kmAQLtBv(CxO*PvSy}Q?oWY~HN zR)~>WMUUb2BEShtIumH5$Z^POXEfr4ci&t1Uzor`OO46Y=;55)T-_D&L<3QEJr3`X zkU^xgDB}x5CIkX^5Q| ztFGK*E<5_1KX<(>E<7gn3N4$ea>~jB7nHF&q<(vW8PT359U#X@>)vXSQGRn}L)cKP zonLII=G{6n%q3dAx0!tXRRA&csmf@y73_dQomdR`8e*%35)7WC2_-{p%KjMpi#nP> z@I#l@ZAI+;V43S+44>LY#cEX+r469h8zzUw>+jaw{YyEysJ_si5v`>r9D)nP&V*2f z;oU{FAwl~)1-|4ABGtsmC`H@n3sabAHUCpKI=Q&OYHlM#3&mr0jXBSn(Uh^3{FguE zqVHrbZxUeY3)mK0;4o{v{=ur@C7DX}i(NqZPURN|h7{stRGv=wH0W|;YW;Op-ri## zk~2AW!Ti%ta_+}1r#{k@5v84r4CK7%Fg~Vmth1uQiBMvgtQrLUff`y+1|tToh(8W~ zjXI`He7bh9n@-$*vWSg;Yxi{;*Hydo8Fwd;F$fKtotfa7HJE232aiZ(bb4N1t@z3` zE6o5?@$|mul;p$lpi!!OUr}%(O|VdLGstUtD3Kh{b}qkO)Av3TE+3o9HsVK=XcqoK zDvQ{vYE`zWf6ouG1{YfsJhCWUhac)if&FLq4po1^QmW{@mHHSD7UoR$y{hbJu@d`i zj7APPb6(=%bRUG&w-a;ij4BPg+`CLks3~eY*=Fq(K+9~?Gxy_vb$1qipiy`N1QK%D zWdXwcS>lW0dB@&jOGY<5FX#8xESqy8^0PAhbR=(-2T3KoU1_0&K_4J{-d+#cFL>&z z+xLk$$VNBbeR}BqSL2yfLS#-a1FUFMDI0qIR^+17>MY(+H~{e@a=D_G_uf|aN2vR1 zT~>wvozrS+xqO+@9Xx|SIrx_Z7^chlgUV3$N|w~jvnWq1SqPZ)i{o!{tP?NpKq68T zs}w9K&C3;Vs|#t8DeClS27006IlHp*a<}NY`xmo(Jp*cd`b(_$zu;lIqP`1Ll9Y}c z+)=W>c3b0j{2}wB$&OD9keU|XO*wq8nNUsBc`JC@J*{P(oNW&E*gqlxLgMF#5N;aN zlB!I^l{MZu%r=?X8_Q~CGY}qDn&t4Y=|*{8zQq{&ILU3W5S@w93Vc6K_vaz%-!~e` zCkVB1w3l6r;j`qqjR|2`kyG8=yJ4k6Aq=qVdj0g~9<$LSNm;>x8@Y6Rb4r4nUl;K# zl&C11cJ7-#5x+ zVe#Wq4cf(H{B1uyYwcA$PB*BZ-*$5FH32*PLaG8{ztRbTT=d7x0jYl(Ihp3P2c+TK zcATngU-D2%D+IHZ*|uADft^z6PZqk)h*o=1hlpC}u1{(%af&Gwv}G4#i&9^`?rVuj zN>HDPU>b(xIs9eOmG%8or$orP@QPI(^!i~bHJ`@3;^(;h8*R0dmz{#qw^t_FngaRl zTT`PD{uZyif{g5h3&Je}w(-eMLj--5GtX4h`XyE1uBi3QL=Sb03eITsl)OA;H7DO6 z-aS!1?ttW*BbXyqTrH=qDX31Bdv{-wsfWYRCfiK>k_q4(M3Ov8+_u&hp^oK2k0=V# zhqJ2iZWcP4Z!(kms&2$bBLd)*&QW@0K~_>VIEp;S)#9hC1g*fF0~ys)aU*MOWlOWK z6Z^+kf7B~C2%!%MCl}jDR0|4}9+u>On|SV=bUMbLF;L0XL@VO}&FcH!Rgvn?^LqY1 z3~mjXV}I)vLRp-pP^B+Fp8DRU8g*P3&ZsV`ua?^J93CxUE$d|h?*4q%g z?l)kT(6kN$7yM-^F(YUl&Dv3DP1v^9Papln>h<5rW#%?OiQdzQ5-mueg|IH+dI4jx)AS0D;?c-qha?xIS&PS~3T2UbKRGsxXdR<0|jr0y&*nXRh$E)KmS zF7gFT`~~!fp8m~c(^3%VpL45=93}vUkGL(oDMyQ<=lhD| zU%ytz4po*pd~_|=^l@GEuiOP#{s5 zc&rztzpCu%Nh-FZx5Uc>S%|PKNr|?pb7eO2q=Atit#}DfrztoU*qsxSTB!Ck1j#mc zWlSKJTw$+{P`dl}Gr*br0YUI%^zA{^ODCC|oA)CIE(iX|=}AafLX3?N1RAzgmWkV+ z5kXSAm;nIb&G!`J;cJC)x~Y=En^_nYc}X*y1B)I2@lu7g-!?IWEV*@en>SJkSskV( zTx-#VF(P`VS;RT4z&x+SsS4iPng~3t?+u{7&;@AJwB!->?WAhY!Ph{oH!AkG>mQa- zuha{R0$|>eq*YpnL}wyrVNlic=XWK?+MW_~{B_y#faUl1vJL!x4wOHc)SG;?b6MmS z1WKan@+ytK*R({oWlRd8FFi?W!&a4!S+cX4YHBw3( za_x|12C=C?P^L<8G7w!kIhQT=T*kGGG|7Wm{lHT_8~8uMYDt|a-%v$G#VL3$7r>;D zxtw?am>e_EyBDe%?_!dibjcFV8X-8=Ila-S%r-SMLjd)W9`R0QzNaAGL8wB~ht{rJ z?m+lhI+q9}_3Y_>hpq&9v#oGJi5*V!*o80vB+1FRy1M4^IXWQysAG;hYyG*#Nrl#> zPRJa9*z|LV?*OF8=qn!nSvv$; zet2ONe~wib?{m%Xkk%%_N59-0|Lvjz!1)*8+0%wfbx%^3v+g&45+ zkKZLXf8LW(_X-*cPLo`4OIEV|ja1nno*304rLqK z9Pl~z$RKWvgyrh^^VK~?I~#!FN!{qm&0pkMMocT4)82g7mb&KK%;{*q@y6i8z3jeE zE+(ys3dtKZ^am$QIX~D?Ya+HEKmE?Jou)2FNaX@IhKA@rD9V?Evlr!&A$JAr@m`8{l{T%q{G)S%5`E(5 z?_M6qL50}yRmj=ahhL+-M#{=9=I(Q)`I$Os)Z$o1`(Z#y`dj0_0OCE$hUray}`y`f74n1No2=pFW@N5 zLJ5%vh|2DGDifG>Ni}y@<>_|7h4*)PHu{G=haT*vnWpP1@5(=d6&*RT>#9yWEA8HX zE=sb`5JCGue}+ayPW|osf58lq2S{^bAdo09>hHb(K8lRf=>qT0h^7IV`Ios%cXRSD zWe)z&1vJ;fzhtis0ZQ}9f!*V33flg;{us76SRt>bsJI6-qt2HBf%tqUmv6wu2-?5< c;M@yRPOdLg3qB7Rbr8r%|IW=4y$8?!4VJY{asU7T literal 0 HcmV?d00001 diff --git a/tests/browser/specs/visual.spec.ts-snapshots/emptystate-light-visual-chromium-darwin.png b/tests/browser/specs/visual.spec.ts-snapshots/emptystate-light-visual-chromium-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..7330044f44ab537bdf93486b23e117af84c2a6b9 GIT binary patch literal 20422 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 Xrtxd@>Ru8457Ou9>gTe~DWM4fUvrQ5 literal 0 HcmV?d00001 diff --git a/tests/browser/specs/visual.spec.ts-snapshots/feedback-tone-state-matrix-visual-chromium-darwin.png b/tests/browser/specs/visual.spec.ts-snapshots/feedback-tone-state-matrix-visual-chromium-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..2b6ba82a2d4b5d1e376368dc04b5ccec6cb88c20 GIT binary patch literal 25631 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 D!;u;a literal 0 HcmV?d00001 diff --git a/tests/browser/specs/visual.spec.ts-snapshots/floating-select-collision-visual-chromium-darwin.png b/tests/browser/specs/visual.spec.ts-snapshots/floating-select-collision-visual-chromium-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..0bc9cd216baa1bd62890864a8dc5956a9fff6c38 GIT binary patch literal 23797 zcmcG$WmF|?v!+>S;qLAf?pC;a0fkd&;ZEW1?(XhdxVyW%ySqDdzTY=z`mCPro-?y% zSny}BO=j-r*%@)i9am(C{10(>7#x@{U%tRgN{IaY@&zOi_{)a^1zu?hM34IN1?h{V zh@g^l`dP+TO+;(F!OD_?9G~b0k!3eDY6BycpAQ6vmGa9h&?(C_G3^1x7SzxQ=rcb} z%icOWH}CoRJLjzvq&FM251S7=9@pM4GGEsopZO-&hYt?&QFC|p+a0%i0{o-hUms+Z zm6a6~V(9o;SZee0MHCg|=oD2{R76DsR89N)`%6kn98Tt9VqX6aX6V}b78hn zKAZ|o`HhAK)-h@knnd!)k3bd#V;>~Q98Uy@EJg2NZ<|9Ik}ilzHXSW3tu7gr?3L@z zaP(v(Ul4TsxrivA*jN+=g8d5?)sc7N1hC2sRRa6*wY9ZE*)&L};0RofiDV|f zC;|{$nI-0JaA;fS=PVIzsC&C;m>mWQl%KrV+>Ygefdk`d9D*io?d`yMpuxAlkVBV{ zW!LkCLi-T4#ZVxD3z~pQq4*N9f|5fEBH{SN`V&D#2uKPc`HN+f5km=)%Euys=OBNR zgz}w&st%N5w5rel2a3(rHrka&sBsa>mKO{X zax}`J?3b?L?C7_)w?{%g6p8)ZO?f#5$v;a|KJFG*XG-6E(?Lbl`Vz>%1(BeAw=IFI z0sk*wO+4^l|E0J8Za;b$ZM^I)di9hZB>_G%RBl7!3Up^mi-Q?*F3AGT+IK{)#Mnqz zf1)94dsgL32p7~`lEfr`-~}jLs^evUEM40F`_=g`U(df6GoCCzHaa1uB(Fj&IJ8h~ zT*HhS{HBt0;Wak8b9AFVuBDENbhe+I{Pjnm)shFu40}eJ)gys;NLR8~JYx%DW5U4l z?=DQ~JWvwo5bgQY;b?;HKPHYCmu4p%=C`BWP}42y%u9Ys%eJ=m>J$-6Gis{*75Q6iQJ(#H)a6d+-{kWswA=k zM{u}y@V3^?OxuS}o!k4^>#Scjxr2V^sn) z?#(aum;KdzVnz0PJ2kwIz55o3iFhP1x-=ZPDof$>FFs0tt8xXmUG`s1~m%7x73yW}wT?7D01#q9`J z@4Oi`$`C(@)X(`sPkdPu8(z-Zo4ZJL1SrIzl29&pqRhG;A&euT((`+b%54c9{ zt)Vp+B;2GYhg5Thg&C5}4wvVH*#*PAz5S>9qqvSj+|$MFF(=%$dj%!Xx>8S!q%kZ@ zIU`5QMJ$b9*%a|9Njf%Tr&0d8SaXY!VV^yzx18UngZssAH*hpHHEZ1NML?e^1td#X z_6{&JTb{P==7Z#NH|wpfey?w&YuxeD6csl$#R#rX4j;4A(-gmT@M^pd4eKy_$SX|C z*(9Bum{ehK8hLuRwWV*?D7dq0Xu_N`KFC06oh}-)4rcF_r?++Ut|nrC(#9kpx2Fmc z$p|ZluzkfTik2M5K*Mk;=bT&9+}!@8BT>eQ&o6~PnmF*lT!c&y_$KFS6gk>OKbJe4 z>853D=@*Fdt=|Ci7jv!Rsn}Hh$i%R@xv7${HU`PE9p&9?ZI@;+q0{BkT$LdH-(UXD zvcg&w{)odC&n)80es=jerEug$UXwmmXd=tR{BOs&5{emyRWI*~8^GQm`y$^S#5GHT znI3Nn<}P3aUSD?BtoV!d`SXU}rm)HUz&N!__$sG2FD9me^II6HLycu|l5%aClTLgBkCoQR;~Dl?@ML|}x1)UST08b{q-SPbq1CA;Y*AT=l;B|O zN-t&hlP4ia6hQ}jE6)>E4xhrR%VUMk7j#rq#BTf1)bLV2(IGV$h**)k`Sd8;voUEO z&M9q@IL8a=*I_rN{wkvy7#e7>GC_6VNz(bkb_BMqRq>rKtN0w?Hu02m(HJ3qy*wzs zv=?q)sZ}L-xx0^={1n8*vOjz!Y!liC*9vB3Dg8>Vepl;O*g=c zQDnsH6J|n;2=SK4&!YDwL-?)NDhDe#PnvV|J zV+`CE3i62)$83be3m1DOt)_;#T+i0Op$fqO6$6htL|1|p`NypZ)DMJJK3`4DRjU4p1i?x z?d=s>PnkU167E<>r@xI)TEAwtzh2{bw+h+YhgVj1M#x%&3D-&|{Y6Rmv3AOVO7Vk< z)oiWYC5_Jm|F=$mH+_Xh`^Q-`ETHnhe`>{$_ic@*J*ocr^JZx_U#k3edssZZTaw=$d!zl8hK6RbL=o2tor#Izz44;S z>u^`brN;TQ>$^0oUyVZfUzNu-o)8vCU{zp(0Ub_=R`jeYTdoTs6 zjTc2J2N>j?<;IxpaIB%}@v%rjTx{z1RF^PYr!00G-OuSfN^i3Hzlv#dq(pptAmk-0 zBr3g@XKIaAtsJdRjTFZ9tZY$u%X05roN#2f4)$h`7na7qEku-HY`#JU9o?lMHM|Wg zQp7@YEFz2C53~XC0a=+%dB?iSc+&GKoJh}9FDI|U)IRXI?$#S^z>e`A zdC8Jtb2!HLc74FW+>DF>(&RDN6^nS(hNC-D3R=XaB2$47oy(G6v`wkF)=eey}YCZ`Wga|i`quV$JiyNrq3?V zrKQv_FE7l@%;nNqd>#m{edbz#g3l)tD=@C8N0NEJ+V%?#l{#Ok*JJ1B|6G4X)JUzj zx3_P?0Ig;;x$Lr{CaxX9oef^D=Rz|{I_2=7cSJxL$ z&>}%8DJdhPhU)5^x;obUZKBgt4qB(yDda@pCpGoqRMoUXBlZ5|7zG7XDl*tzpfDj} z*(pyf0w*No5*`j`WOx`E6wKJ5wvxZH00IJ{QoB8H<+s6IP!>YWRC;=PB3)Xo5sYn< z=i88^goMA0hX=2ViwkJXH*|7IB+RLWg;0;@a?R1Uwzi57ZUj6|nE({;?cN|-O-95u zdg`yG>(%;{Iji*a7iloM}=DYFpksH63wy{%6ZJ3fjFsoL6khN2Q<76vPDtKve3$*dCwP-YnN*Dn;hxbjSAJy4@Wi9E(R~!eO8E zHH?HEM$OI7yFQ$VznhsX^0=UYgg9MpFkEX+;AEaob*!hd(QKjk-n~8&{@rYHxZWYR zwL{)^`mL{TJeCgT_9LMyVQnoPAEY%3pLZC?$ZWl(p!F4QCdqWZRM=AxdjQflFRatc8=|QRDjQT9MhfIZ19jm5msrn^{Y1T{@{!v%?+U zlMQdr!woyl6aDdJreKtq_;7pROYOC_j_(_^b5qYn0E5;^Lh@7OiVrerItE?(=)IA5 zu$ZW1>|lAbYUPGA_HF#Nt z717eQK^9WOMBxT|=sM9K_~E;h*!alI+x{Zo{0Konwo9AcU}Z&WKBv3pFX;G4$ccxJ z4xc-_+CkZkv^K@0kDbGWR6m_37P!#?n-Q|*p{BknCbm}bt8wBEyS6KHp2nFNiay^Up=Px|tc9pIlIvG7KgUURe-gPghJjuNwuPixdpzSeB&~)K$LK ze|P~_kRh3l>^2~N)ZK{bT>7E(9D`<$neE0x6F+N-FbsB98{@00UM&Xjzt{N@c9=i% z**2KYQmAOPdfze|H+*#=%SaErud7{e=Z>Bs^_||g%{yy+8)~<`$2sJ4cB>!>h(Z@c zNUFSC81MK+tY^7i53G~$*QmA#Iq%Ka9nrbw+9H34L}YCVXU(5fs3vLNWtxAPIQfvG z$nJ}yJQ%#Zbc_$TJw4L|?1{c!%)nyMLh=*N07+{uVKdjzF31P0!TRxZt(n%!;o%G- z83!ACK!hKkxzA?|kH?v4EY>SBQrK#v$--zM*x@t+Cq;+?-7l!1)zPZe_1-t?@n;iL zYzij5cH!CMCBKArna%L|I_lQW&RL@&Y5iT_wea?%HR8M1sYMr?@bG>~b{^_LR6u91 z_(L4mR|JA)k5_ulb5zR6uMFN}W257Kb-B4Dw~d_9?|0HkbdGioK6y;m+9~n`+^$pe z^W-+0^f%ccryLf($C2lr-9?d#+yYv#+oa zVlrqmy4b20f!~dwC!q<4eVE%ak0Ic)JCC2BueYcJU!I$ndg(b08^~eiMvLXEqitR& zq8jv8{h-Ypzt<&}QEp8eNJ(B_x2}$M?rqwxz#&&qZpW89b|SQ${PWes;Bv1(^0`r$%&DbbX;Jz5#;>=s4sg|eBK ze*5+0+rqoP!p+Xq#3v-Tx?oXFO7 z+@V3w!~*2Sd^976wM+vylo$~$7%2T5Ew1(k&9KPg-weHq&&H)-iy9D`52u}%`_o@4 zx~|_@_lH=OT%T&|>bx_VlhwTPZwE?j(5N_0x(9N z?TWrT9!*v2yZL^_NR-|FNf}j}nu>GFNWHYO5-rW|^(;e?z1Lv*E6#KT9b%ft^^A-x z5D~Yp%pD57WbW;pO_8$rN5*#wiUCd4Ynv>wb!i@+1MOy8d_2^l90TNs==-r!q1p&_ zialZ0DkIqkd5$@9I!ni9+DDrTHFZbdm%C%p?;?!ncV5O5^X42-B0>^P+hQu4S^QyJ z4LX1S$jHzpSS_46xed*8P@?uND6Rh<~DhfV=Ia;818hayJ1i?-ap@YD|x2N45!=^+=h7hAdLqmg;5R*|! zQVfW>Ia*WBzP}(ES*F|V&zGqhfa2*k6mp9El;A%-Uv;KN#W|<^0U6|;H7@#)1(mdWoASbeiC8cIk zSd5cg>A^YZf{#O%R##&Z8FELyPZN*fA!AD>2)M{_aW(U}!j67T&p2JQhRosu^ruhVgI#L0RzN7zCoxK%}~)w1;JB{#cln(X7lrw~$=*}YdeJcTJa9y^Hl zx=tn`8qi3LLd?KG={d&GnH?=tuGRSG^&taXvGZU&&2n?~VIt$z?m%V3j+nRQm!Nro zJ$#E}y$|PTjWDYy4TJea7=f#rFKFh#^z>HEioH} zqEv1tjJ^iw;p^K&xkF^DJ!^lPo4S&?R>$+B<~dv(Ka0ezsR$c_9|M_Dc)S~BN%&3D zHfAk=>ZSHZpxxNN;PsiBG}O(OQ^FuGAXj?n^5L~HfXeSFE*`Wpp0o{eCdSU#7tIqh zWC9Hiui`b849HDo)f17sSVyG157zCIij1$cZQKm${%{h~R_yj)pg(yN7 za!4Hrc+ppi+qv)xs;j991WO6GLn>)Rd*X`VeH^^T($acvS`rxv7L;s3OpV1N>$lkC z&{}|dGCLgK9KJqY`se!;Kg=43b588^-|Fk|aeL7(jhdVKLEb-CLQEr_bhsW~5E3`M zK90KP34*Hmks=^~4T0M~`-pX&U|@9O2JSHtC;v%*a(?(W@OYWBb%sRp=j>^?MwYd9 z%ZnRCMm8cxFAU+`e4`z{(CehGrKwiM*MlOjQ1bC3_Ow9woM#2jn2KE!zZl7}c+fqcg| zXw-=KTs@hB0Q`Bw;$POA6gKAv(Q$O<)En(?ge`SpDM%=wuA9RMg~CCREpB6AS)jR3 zKnbw_x5<4Og&E{U2tL>62di0jbK~Mq6+oh{`~*YxMxKZ)m!_1#6Mu&74QkbFb$lO; z!W+QaZ(1~8umX}6a8n}ZRm9Ww2u6CK58}z<41aHkgU3wT)aQO(dfZ`Y6EJW*TXJ}R zfj@G6yh;XX;qiDeVD@?sl%1Y7{E=HXc4_ARbX6T6kLJ6~Ajo*3=P=}MV^JiNfsEt& z72&nMOvovkPQ4~t#+wrXpB=O(73p?j;sc~Tcecn)&FNH>2t~-~I``SXSfGN}cJFC8 zuIT3GR*#)@*Ujq3MC&7A>L-`Q<7%UI61`S{E*%!q*lJS^%B~>lQLE)_%X~yyV;76p z3{HL{~Q(<=W?jPbO9AaNl9e|y4EtXZ8EjnwdV7%u6C%$u8=IVELT zS=k-!PA-=nv}1VWF>ZqhoSVIVNQDew7g5FvMKm?n-mjp7>xCyqlPYC!Q>q3^my1>9 zR8_>-d3=#WJDjg?CbRluVh}ND@5mmFH`dhSe~ExzVBMW6_PVNrUBz>U}ECD zP10-UPm0JJwd!4PVjxj8gE+}>5pb-l$Q$2?uPbbFs> zv3Q!5$he?@e9N;izmV7ECZ5N2Y7rp_feZ_Q!89=`t*AU#Q?4=7S7>>Hb#8XG^AqWr zCXqoWcW|a_8|G{>WS5dEg67*dDM?8-W@h(ml9#h(*u87Lvx+){*6t^R%~^;^yB9QZFhT|TUgj=u02CYijKyz zec)mBC;jxw4bY7w_P%}H?iJ??3VW8u-8;mL{(89Dh-O3CXtj=D>%#o)={~Jd-j3o2 zo;Xpg05ymB-J)VT4>pg}hERh{lkQR`DTt2l*pj4$(dt{{-T7*ot{I4?f}mj0u)-*K zZL8(d6!Gq0R3SBZH}gx1uH*T5GS|33r{1P#XHeIZGlPSJgU{bPmsM^iZy7AaMSZVzXhbuO^x6yV|6J{aie`_ao`t5j%=WpSjLH=$9tWM~oka*4SBS}q-uXlH}3Y=}c3 zrYjPjU~g-Wwa)Q;MX_kY0RK?Z_W6d()?ju-`PA|JxAhZ`J5ph8E|1eiE>P)2b4}&( zJ57`yGUO)G-5${T_YE4)1168&tdo@vWsv!`-o~3~x!<}Z0Y8EcAYoQfS8NcEOpWcf zwvee0r@B416r*gg`yWDaZDqKc`0Wm8iGs|#ed-%dm@Sr&Y0!`i;pEIsjY2I`Xr+u=><>%l9P*u;MrZl@O!=$XJ;`B;ogL+2W626&Umwb*#Q&N=?5_U=3yj`{3xxY~^`H?Nqb1_2H6Ma=}ANv1B=L$~5wsNHHZg zl0r~uG z%NSh8|4mwAM*4Tas$1%4#ZQyl%4Hjm0eHcuE;}S|PI{CgAEHU&VF~HHaekv-myP9? zH!krnSJ~b3n?dXPLe%{)x@z7=4d2DI~~y8llX|{h&?b_ zEk2PbLJB}atCAv4*M%1x5xvQ4L>2+Bq9-QPbX@~?Pw@AaWtUX0_wC6#-mFbPH!m(L zf$CVe&{w_Sbzd%QK4xw7EPrk!)lP4JAR@gT^ck;(&iAFFqf7Ycbc?KC4EMUkt^8o) zd$+10R-+~*6((w+VU;yUOkSMJoyXw! z0^RODVZ&{)KWAE-4#;Nu-QHt4nrIm)7BSoj&<_iu3_1fiX{=04mMi5hzl3-eE_pom zC*ojV6Lp|8J$H{r!pF{heMxMm@2ia87TMT}i%Q1~CE~5lHCF29phU1x_}v}um+r1> z$s9C)UVf2RP$1w~pyS|35^!eG71;dlV1{}pCc+R>PQzmSWBsHtWegg=UAk&6r)<$G zI^^BQ4eGkd^-z+bOhxR)fw zv>+aN%w&eIuh49vZ14$qU8mIs9J(3$?SPS)*$H^NUJ{w!DLAWCt3&Ni6%{^I+r$xn zKZhOXsc#&CUf)Q2m;8q&o4P;dqLaK5qLuDylk2!@-9mh{GmaJs56YKd3F4A2k)K`@ z6I0Stn|m&os)ozP++=JYS5h)=SIxtmUtG61vj)~Fd+w&gI1ISTJJE!YUj6>AMySED zEAlqR!SlL%Mx@HVq_W!{Kq?Bad(Y4A8yJE!1l?nE2-#MWZ)+CRwedbbHvJ*BpEcs| zKKEiGHi;6@M)}mqEzV|ip7NfW;@<4=AhjbQAt)^^X|Pz1)l5U$#pY0}&XQe4l-vxI z)%KudhM~@E!`qFWQmS0;tIMg06^i;XzFk>Zv$NyyN}AQq*I}tQq&->Ylo`nHDT@9( zSBJyK?{&Fd8Xav#=%!>VATDd$<5f zA8gy~u_C#w+H*Mdj=Wt7#?ys%%H#^I#+cZ-_&Fu0&~6nXFF=*-F>TY{_5_TEVKR6C z(mc0+bPEwh7Zo3$rN>Z7*kji5y!C9YIc;SpPh3tn3^39B{ak?h!gu41SQ0e!ThUiO zo2@U&+D*;@V>}+;4VJ39%hyR@;Lx5iX-MhlNXH8*4Icaj71v)ne#oTOnWU|jM_h-) z1|q{To5j>z$7k+HcTr=y!6%J%eY(U{anEk>y`D={lx^lzF$TkK$T zG)pglEAm#hlUTWb&J-0erNW7%}SRpI&BxG}o zYc}nr8>Rdx5eKylb00XrKjrXvy-Vfuxakdw+VUmC^kIj$$Fj28I696CW+{?eYjaqg zx1==@mz__wy4THS|Hs%T&#Fj#yJ&pFiv;5(ahv9 zlE3Z-N=iyNSEj?U>jtUWQl@HcUy2M!pTVLt$8?~65f14>3Dt?=8= z*uh$Od~G_i%522f_U7_y=G3`8pkrrZw*_qVT{wQlA3rj)IZ$vj8SR66Tkg|x^603kam+F! zBN2$91#otD;xt&9Z><^ZFJX#uwOL=X;ydhU;FSY1d7KGs&SXtCMooTU=&ntxXM{_~Gzz_Eo$w?A{AQJH5U2w*Z0cDQFM{0WF zKvUAvk|TptE7J4AqBT_H(l~C;WG0Ko&w@@V-Itx`u!V|WJ@;^?wPJ-=gEeIjGLRsVhtow&vg5bsFq_v@PCYzgV$5SZ+m|N@&nO0f9cy(mfs6$oXSHppDz;$l zT8xJ?aUaK8_fp%Wcb5YD{Kiq)C8CqWrYM(moe^FY#Gnu>A&|h%kj7}-Phd)A3Vni% z8xRm6^}TaYZ)lk1VuL>=1IvPqG76j2$rcZRx2^oS_3?}pD@TSrmxt(ShuOAHHtHg- zNM>k!n7mgQd^b?_%c5m-*(dGqrm>sPSIn(aZ#gBUJ|tutJ9-_yM$dN&6CvLyy9*1O zcGniC3r)nOYS>(U;PbUQZ-;Mb`9M5}(`WAvA_zT~Kl{c*clOWZ9$)VUsj+ll`u^FVmj{FX20Y1lcYtk*I^M`-9QBFYdKYzQiIFgyZE&fVQf_#8(R#yoQS3zuFfJk@ z;J_ZwHMVQv%sy(3CwngfFfq`CxRLW=;Qng1i$R5lP?1)Bxu$J!*ETdV{v-f{qw5YH z`f8y1CBTYzU@FCY@rYo?NOTQGRSkSZd!d!z`AQ%e0h>qOhYHDnQb;mHt-W??qBO6< ziu?B;hQ$KQ*Jg1Z5A>#KKfKhrzX8~^_}^U|I+?Tqd=3dTNW1m{%qSpGJOyWg+m^z9 z^14RK{cTO_R1cQ@{QK-mkHKf5x=p(v4FltmtF0LYc&08QrkvB6;k?<7Z-uNSC1O@f zgC{36^|K6hV#;`wMfzG9Db-eV0LIY1@(CHAn!h+8(C{TZ^Bqd#MHb@p37$DLlx9 z(mY9>E~tq8LK10bMEW#+%PyQ}z16#d{rzy17f;owi~$lzGK=Nvh|`1;U3A!mVq$?n zOG!`faX6xGE4|0{7KM83(S0h`fbD1tFGR({p3a$AbA83(nrmccqG(apW)k^y1ZKPU+O*Q z6A_C|f-hWw>5 zA?WNJLufR(+`2-+W$`*~teT^PYeI?9lylo}ST0pP_wC>>L65&6-jITAr z0?Lv|1N^F(o(ZFz1EOT!K+#|ew`OUuIp(2SS1v$b`*tIFgy##lvl z0o*aN(V$;XE%jyDqlj}D^r%yVKs(!qVj`1;KL&d;5b1SKayKIbzc~>)m&J@#e~B8e z7@xaAhzQR0sI5&kHY3DxwINU#Jm+q%j@9Xr>+vE$n1WS@=m%n&oekDes|&uMw0~T_ z?d%$g$VsEz4#0Y&>m}sBp@>d=H6#vtTd@=qE3By@;nMV;4`+do6c!U}DJ;ae*QHBA zRLy8fO~un0#GoeAETg7gyX2UXEiW%uy67!#ZszLmFEBGJE$-S$_a$P9sx3cU!L!Mf zg_p=eww_qOWb1U6w?=66Nyj$*ouEN2nNhHoIsXqYKuPHeMG#2@oLVyWirZ>_Ht-yq z1Dp!8dIMZObNrIkbFjj7rK&wP;v1rS7#PXLktLrGnaaQ4`RP)$f%pu|KNa|fIPfn* zT}UF<^}!OTC4dZxvdtnF6I8KpWokCjQ!`jKg~OkU`DD zd~tAi`F?L$5nR!vrpBxMSLbraq`;_=uG|D+fd}=DQXHPsj-)N)t z?P`aI>Ti-=*~`kE4LCeb`;)m4w?}Yrhz#wWW{WcuO1=PjL}B7jYKPM~Wkp44_eaka z)<*@aznRh)0Rii)b<36345tGTdHGo%4>6#{h}U-2=Ol#wYcwLxH+o*zqg{s>J<3-`vvB)Yeva?}?ci&|ykS zNT{#*-S&2SQh(Z)Rawbrqg$C;O6{YhFM{1J+pHv;#%{W?W?Ngi=@*2^yJpO8Z3PmR zt1VJ*HV=9cs;g`E8`R5`O7i*nIa~g1@FsVh-xN%7T%%qW=k-QePhmQ}8FpB-u#jR; z+DM#}JF=6vf1qKqt^`#}GkyPR-(?=Rn&4YZVj`cd^Jhq0H!iyc!S}J@LAT|rZQ-Vl zNwsL>wW$NbdSWGIbCfa6g0xgDV1y&p%q-?o`eb4JLyHk;h;9VE&rEG#W9Ht2pc1ATUh z-Pfks*+s3XsR6{LC=t|dtwy*!DR}KHO9x;v^0_}b^WL(U0RZCL9ThZ+!wI8yiiv@N znv&97h1(>+GRh~E68~mfQ&Liz&}mA3y3o=S^a(JWHJvRKpb(+wu+(TZ+yDN`7cRHu zcxq(1Y|jVm$yUey&dyx5evmo=ixc=+iwg}JGaYT}*q^K~(D3jML4v)*i>lUZO)9F5 zR)T_po&=;&5V2%*5qU0Un1&23bdPk6ZQ6g*vUIL?#T|hemZ3%BxUivpKvjlHh1M|F zAZ;An=Kk8-q+sG3_?u-uloF=|MYZc@B#Ukc;B3r^;O?K9!!IvpRsKz!!3q&LY)@@3 ziEk4}h@|GxWsnYy%}0|slsLKYWzo^}FifzXFC*#n3b z_;x_hD;%gGxNt1I178-4U?~d@PB;ek!dDR_M#td)VG70M4!?1v+U4`3Hw0A>(D>QI zA8)tp0P8DEE*V=jDdXbue6%p@$3JRBCo41VwzOoq(nij~q55WAi9pD=!({F#Bt*iO zrlQUcMFP$ohN=8Cb<(zGVTrG$zHFO$m1rn$q;F|iP@M1lXr*R9SL*}zRYFn{_@dDKrOc4JkcHXe!m<7)?kSV+R9q?Y1|-DsTC*a639L3= z*B*`qENI%>%Oue+M0*!-adF*Z(vqY(^YPJyg@tig-PG4yfOv%^Is102d|E~aE^PLP zB~i$v!$H@mO`tbkLJ_IjKPE#!Vq;_LzTFto=5tuB$Y8{#zeNZj<^L|m$!qj_e{ncf z`Nkp zv1GE?0c=g*=M~`};^!ABVCK^%+VxY#QF=^1by&Ve{^F?g=^jtZsnqV*>iknHiF&(S z%aa|QCyp40SWXJ{6M1S~nwpL-LM~XR-fVoaa=4a<$KK(z!EF30{H^iDXXR%i* z$pZr&zQ@nEhqxTcMJYqzVE%h~|sgLc#;XeJAc9Zw%`uM&&7qX z*=&BfBMK{+44i;;E0oP_?r6Qtcxj!{l5SiO0Rcc;1IFAQFSJ@cEicl!{(U%Ht9{1^ zY%HuUR@yUyLlU>wjVZ@p&1Urx5%AzS;5ya7S~Ln-XTg1kAomsmAfv~-B2`2NBQ(@@TJt8F^5Ve1BO1?@+$UB4y$WL;|yD`X2}J z{xiCt^+z}@w4NAA1nUZ$qprjR7aSSXeE{C_qXyo$%D4Le7?R^wP*A8fnmnHA|4vC6 z1Ox=zoD#DCMbu0xcD8qL0C)jZ6jUJc0K*K_Nm8NY(4#emnJeE{XjIBwkz77c7x!*4 z>463^Jq^q3s5!Pmw~47Ko5fPJ0Meedz-C}t9jpFk_UHhh*$3`Q;Bikfpt+>!3Nnui zfWZL6jD1!lz?wq=6^!l_nGYuSVRX1y1NtQJD^|E1&j|PjN|m0y9q*8R0|O}GM{;#x zVdn3UF93F(Ei!fFcd&86>jquO=;JY|{V?@%YPlIjOUHDLza(5%rF`1Z-Q8_K!8)65 zxs;=Sh(Wg+j?bO>&sE8@kwM4rFI33e#6Lh>Y&QLg`&^)_X2`2yu8qXwg_L%%x2L6} zlVCxr%;Y^6Xp>-|;^E;T(p?PM70=@Jc-rZQ9U2}RJ6kT3+Z~9|=@$b^D90B#MCNc_ zw}~~DqDeenTh5dIS^U*^V9h=t?UTq%BKs-(DmCgMNu+>y2jG8I_Qxm=4r~q%_mLUj zH(D_f*nuI{KyTK1DFAr^qSVk`uehA8on1|>S8;JM9uP-t0rCTsOR-Sqr@TDY-qshc z#>=&c$Vh;o%Vg9`2e_}jp~Wtz3F4tmpTccR7=2WhDNH-NT3$ED<;M$%e<~}WOb51! z0QtGmHy#Uv(foI@HC=&7EeM(CXA{U})$F_{2Sfug9~-mm8fN?Cc*` z+q&4SR(wQx*DB~u zb<+(--6@G`mrTItPR7P|e>_{HEAZEOtE(IEMTw>bD*1|&eL6bgYDveeHrfiZy|=-& z+U%c?rgs5q#ZTtwj~{*8-kvp)!Pt8V@flwpd=b14QIEjv)kCEB7r=jxKAM?NMT3e3 zG^xki({Nwi^$5E8*f=gF83h0mAm2p5!GA?00DpfUPi=&OZwKQ7M67nZqpX&&$IM=d za1ht?tF=ybkGP6TLrlqWhes=5izjnbv$8VtI^L<>9wY+l`@8$mRuY4brG?w_{aHq4 zCIUGe0dsj(6>taUqr{Ai>uGvwe#NLUvX%9EL1Ng#l!A*$LqW++hF)A{u)hK(Uq*+A ztBs5d4FwxB0GX2ZM?)hO08-1C&KQGZ0Kv}AK_>CrT?RQvtneC^d>({z*XuS4>`*;0|E}i#V?_3UI%D;J9ccO|CM%Wyvjg6fO*yint3<&_TP#*4w@H>r{^;T4 z|C{)kt0D1IN-8udNe&1l+uPgzOKo1C+kGL~J3GHY1(76$6(vC-rYnlRdL@o)q$a06 zR#mUoxkv*;Lc}Q4)YRv?(lwzp)AwwG7iqy)7_ogS}=0!Sh=N;6Gldg={hioe9& z`a_iwNiMzKQ{6v$`s>XX4GoQ4UFb;t#U&+66!OIUi-E6p|G)r12m7Ss^LuKBCDM(J zjRCow4Bi9RYGx+fBQ7?UnUyt}$-}HS&=nx(QAiYi{_IJ4K3%+w87wF$a8JzS!$+~F zPEM`R`c)L=VU3p*PJ}Kv?>qqi_Y*LkfVT+lj;`xt)Exk6JdBM@_ZWy?2jeVH)+LQObpV1f}$gh zHz>wsZ>Smw>&eON+HD--9|Qm41@zSx7Y8F9H>x_|f(rWQ#F9yl85edLH#^Xv;gJW! zm@dqKTc$GpnW@?q2I9llFtI4?uTp;=Cn|!kS^>#QPr4o&=GCKtdzGv z>kG@vHO+){ z4>h7yAdTdF#Gdn|Y)A^J``dcD*_(eoehocto^W`q%xQ5ui2ycUka$ybq>`$ts)`CW zud9;g+9|iwB{~KM{k7&or4G*rr@GHkQCW;}5;otJhP+aK+D_Y_jq`Mz28k9aV_*(hXWXYwmsUt6=7%+z{lcT;$F zb%h@i(Okn#ZZMk1%g2G&74$OVc-A^+QSq`0K7Z#latYXS7i%Z|5$SI3%*= zMgVWPW$^x{E^3jyW=xAnLbyZd0crzZy9&=6>&*#r9!XQLG2>-F!u&o7_0U7elc(J8Sp7 z8Nh)0pz;sS;lTlPhbeHkD&$m>y}u|+y)9#ZdVLUbsiVI5dlR0QaNFoz1DE%J}AvOl^66#hIe8W_$CQ&U*%7DE+NtAc{v zKs5#(5<*N&99@}T{Pc9ad%4-Es1K1{88TVOx%S7DV*3tNLsN$oH(RZX$QdKYi$%Qs@@&!nOcT96-kpfGWz$31>R`1^M}8EG&w^ zvo>nKUAe-*z^H|R>YE6~=5au5vVxKg45A^M8KhbSDn|SPH0*zr!$UgY6V85txj_s^ z1REH5hK3h0XBzcpf5wwyVzx`g!DnxO&tfuC_;0fM67~2pPzwH^PoDtXJ`=_2e>4J^ z=ODZ#^$Mh*|Ci3)Kz6TXNI|u3wg2jqEBPovWdKtN45;qJ`>`ij3ljx1PQ73^-re2pYxAl8)l^h6n0u|OtJ7{jYp`CW zw%{_kRkcJCfjW8(|Mhdm_?7P+Kz1jyxGjy0fNojky4%CctF`KXYvZfJqH4pg0TG6D zh7!r4I|K!3hR#<(IzQLy4PASUXT^jRA)B;WG}O*H`=FN(#|95arA5p*50(}x;L8q6UR9Wiet71!!EJ_ zjyls8ZwarnwA55vfLaRGNJ-aSSr@ZA)3$%To2py%pPJI^B_wFv+z`sI z^O17M7j@p9D|VR$hJa`;RLyfWZ(*-NBOtASlkS^yCDLZ3$%@a5Yllw4ZWpjS@bj{R zgQgWB0Cs%MDq;q^;Fki!(sgdpl;J zum5H+ZJOwms#L!@_TM`T^YmgX{FAW9Ks2P3t^!i)3x^0WoO_3Fswo1;oW`l1&SE6s;e^%1&Y<;jN45K zWKt~y!v%4yVR-_8F(rSZ>;wQgVMp@?6l{XBvR+P>8ApY9>lM@z7pVVBsTyc$>6JBS znB3!(=rvn9TxH9Y@*AnhUbwwp_B9kD1!R{o)~>!%gly&FAy8J|{|+x?pHPGR7e`bH zATIpm7^sW@A=Ec~i#JSJ0wCRacytsWPsD4vL*A-j8HGZDw94?J9QOPC%6|k7^WGJ` zsPi+9-+~F3KwvndrA$Wx-6(K)2+$S%fJJZU99@TYmYiZF-C~un!&XH$P#6*jd~h-C z^jh=Z^i#+N69rq6O?%v}{SZXOeEX&VR6~$~_LlKp3&1tfWz%I4yY-lMq9x@AzLqUy ziMDEI@9;l}iGpdxaxU%!NtVmvo~H^U?G_6%-{!IoKbNxl({#2s+n)1(gWt!mHV1EU zi4jSUocF9OEh8Nq@2k2+>4URm#fF~3_1#Dg%PT>PLZ<57!o8H_PgPkYeL{r!Z8{o4?9YHO08|6OA@Ele7h66{TY)|vOJ!xew=V|* zZQmR9n^kQddsEnz1xL*Pq@K+Cv~+CydZulfk8vDA;gd~rbz0M~;lx@$c=SW=FJtK8 zVlApXNU@_Gz0BfQV@+uQL-(Te8;P5%w8VNjHHOn2Zm7B7v zHmgKH8QS*iZ#O^|6#8O+ylAX4H#o%aJXrwn@oYhIMrDV0rD4zGcnrT;oUrR2#favi zrCafqqu3>ocQ#+p-BjBnrnpZ_QkX#ZObu=fnO+h!R)7zW3tN-C-Sc{%Avrs?$p&YF zG7#Gq!UzYujKFR5Q^F#6g^f1p0RaoB=m`mnWo{|}-o-D{efOLHasNPQEb|Ocq!E{t zROY2Oj@0l*W;H`siHMR*F1|Pzq}p>}q)Hnp=VZ_>t5u+fJhF+{nldgFiv=0GW3h{5 z^@gB26@zfJ|Nm;|$)Qmu>6_k&lP(rXdx|JjL6a9}l%eO!Z__d<;qKn4{^YQ{D$bU5 zO-8M*sxhPaN4|J1EN}={Yz*_VMCn%zSGz$ntCY!&!fOB7@3#I@SakFz_FOT!!R{td zp}r`V!&`@lcsSQldHMRp5y~wJEgguMl4ToDCeg{eAPcdoHDI{JRk`p|<5vCLXDqLx zv>E<<{(F$&{RAd-c_2x^0pfLRm$u}E)SHf!A2s(CA;Tf0-sccG=8Fq%^tB2){v#aQ zuv6We-Y{AXvHfK8jsLH@qh;}3nRGGOHV%U(i`-upY^o&Y|9D^`zFnuD()PvJ^>kLX zG?@D=H+75%!L`iy&C9GTH(SivRB!Bf1SGplE$!B;w8w0y*<#5$gv#Y6Slb0J14K_B zFumqhj`nwM(EMy_di^{=>SIG9U;R~%Hw33#MMY@8fC5Mq-{}5pbuzppNY~(?d#T|$6ZiifQ4Bp8{X5z&XRIrDGTvi;&9K!6u;il$tdmX} ze;!!~ZVWuBO_BKZ7McCJPjjRjU3H*1D6}IH zp2p&*B@D!!#2byJl8LC|7ykxY1MkwRK4`-v&fz7pzL4<2%x z8<#v@ZG^w>N@iklV52RkK~ON<5t5(Q z%%bGNWF0Rcr0s^DeP415^~o4bhtQ3xGQSBhcuC%C(PBHsbOmQJhpw{2){98WX$0E2 zGIum3mwdFb^W>;BcuMJDTZ{~I(Q9sV*uNt=goFJgcQl0{a_)hmvFJ>0#2|$7V@6|w zbTKj1hmA7>MTNYfWkKvVY{x@la#0dYTA#zDv7?luNf9%1K9pQbVeY8k7}F2*MnXh9 z4dL31fp~98v7`jhj*Ov9O9_0Iv+5QMvc>n-Rb%51_A#LRRYsd3ty>VyP>ovluGWnY zr?2~d5*i7oN3qRp#P0t%2!QAg_E5f-Z#t61;j{VVq#0n2q2?PQy4e7JN8Dm zSAc3bRs3Zf4Z53%OR^3wzwZ+-1S7G zdt%nnvT>{%zP`R#Cj8Q~ASqmj{O+Owq~QT&BH#3xi4}$Zr5>F?z;Mf33}DO1g(Zq~t z`w@PwDU_Nm`$%A}?p@|RTw)6=tNy+|bR)Kif`S5QF5%?tYyM;nVsDrZF{8@gW+u@aqn_JXV+lj7jo$g*O zs*YdpurN{Q3$$kkZ-yf;58T)UEb}LM`*c^dWf~04`l~^;hK(|0Aobi-hUs-kvBK!& zNjb+N-r>a&&#ISBBs{UA!7WqstM3|Y1<|5jlmn|=W_53d&6QwvM`c!^)>V4-TfFtF zEEAWSr1z-@gphN3K!h+fY~&&Z$+9i|;}au;Tm>Q!)Zr>Ai;0PW+U3-~X|q^p@&LAK z_rEtDYHA zm{oSgT?N>%Z4CPU)MX7!#q#ue2l`Q~G6k8dn+V0VoL;tfyg`x-oJm>X%gNIXfrVsA z@$T2@yTZt)3^)!+F6YyAC_{&aM5%C99Xq0w3hSP-+{ut)|E)@9%o3(ITp{UzLxjM1 zfh#JJ*BGY?e7h#~4w$?!Wy#>QkaCOWf@!cm7Uzlh>-Rvoy-t+; zmRrAZ^+|)8g2BvP+vnXhZ&b|As~w{7xvAau?@Y`@CAmHfCzbw^#FG*+2{DI;l4VWW z{g>nprE`ks>vO_`E+7$rrK6s*Y{~aGj<9sIWCiMWQXAh!znjRp|2PJXMh8Ejcl|vo zub~0Ed1#&GvOC4_?3w$o;$KTdm5=Df-5sXCex{?Vnkd!x+8B5n!sW>G($Ek$AMAAP zF0&LVDAc29#r}i)X}-`q*^(EByl`@oo$&rdG`A%AQ!p#*pg@L5Z?9}YytBZA0?rc|_6pwUsvCc)1^Ds|#_vXo4j#O~DB5uI|!7O$aJ?>Ov?lv)LK31j zEzurp3i>*f^(Q;juId9-dhj~GsX6vKck4k9?J%&Kn9ano%IV&;J zQK|9#5q{|NTYg~CTlpDZhs9F^B-5(I2O}(~`SEeBVJ6&Q1Q;x(FAH|R7a8p@4BG?% zlZN_q?HkJp$c$%&e9jfa_lNQysLlf>zy5|PJ2?e-wcB3q#PGKq?`!wfIR05&?~+&O zPVowk{=Iao$^yaC@hxj4~u z>a^1Y1No7=dqPuJ8@F2`tGMnBVras7kAtsUR)-fK#I8=Qo$kiB@djNld-#{ z@4AP|!yD=K>=@Oj!}-Y{1{|>4$K&s{XWKsfm?qeA7x3^9)GP*Pb~o^rfAJpblc=SSo<>Z0E%QIm8FU2A0ROb;K2t8vPuorE^%DKyhnD#;I85-a?rh5k(J zx@VwIiRgHfrQKVj$f<%~+!r=4%8xY8YWhjF6Rgl3?b|bDCUJFUeGd<)TWgvwPuIJ< zPnV-67i4I~TtsrpA{C~X6f%{0PE+13`d~)HB_%QS(+F1gtj`WXHg@zq-E8HBLcZ0$ z9k4Yvnf;1flxs|+y7_EjaVUzlM29j?+Jl^ISu4jY0+@(7l=Mt#SH4cODKmrILLOtr zHYg})i5;;d!o#DkuYdolBQ0GqT6J&NlTOT)@anqV^7@R{#AE?jRBT7P=DNFU!K8=5 zmMb8Hy`wYLZ(mmBhgDV{Ci1jEUC?Qup~QZ++x<&%K&Q0doqcVsE3nibpPdooiO9}) zxw}I{_(ND_OG{es(m1m!Wr#cqe2q80hzw5^wnXN0>Qa*id~6(*-Z>?Vaz}I_5PC3n^dqd&w7RX_)Qin#EJTR7z&H1m?xfI=Mk_;8*PY3jZ(pAi4l`|;23QO4Fgkc=S?Es-Ji7lJUz};woFp0a0BlvQe$-}2 z3&}_1&$Aj!oLm#IuoCTPu0t-q6Oe3m{}D!Nw}pkKCof=k%_P}9!x6=5=L_MTcCoL0 zb(A$6^2t7!cXNZ>`zi(bt1NVgTk$}k7Te@w#FQ}WXh=0jKm2byGdm5WT(knv!jlVV0>Oze?Tk2S$_wiK0F}*GVU~TYdaT6$Y zKH@`!>w$vk-wW;N|9|@h=p61|aCwQBxBWt7lYkltq$Ef@^IEyt@SA_+k8{&I`~S5; zgI8I+mWYvt68BQ`T~cINHe0>fT~WiRtVO6!0y2Ewipxu^1*r?ak)?6j)qcyQgpRC$cQyi_bki zyXhYHk(GhRKJ$v_^ADZlZkldCWlM-#5fU|=wRN&VEpcaRW_LxdbmX2)&k~Iog=C0( zT_T5>yHn>4pFDm>%P+NTE^xUAXKEG|j^w_}NEicL9DR9kJ4Qeaq0n8)ywON#^8=mb lcXtz#*>d0l=O6R9he4ZSi%FhpcmVETD9isRS0?ic{Xc}9jNt$P literal 0 HcmV?d00001 diff --git a/tests/browser/specs/visual.spec.ts-snapshots/floating-tooltip-collision-visual-chromium-darwin.png b/tests/browser/specs/visual.spec.ts-snapshots/floating-tooltip-collision-visual-chromium-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..73e19a9c5d880566f1630adaccf8e1adc02969f4 GIT binary patch literal 21122 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 literal 0 HcmV?d00001 diff --git a/tests/browser/specs/visual.spec.ts-snapshots/form-disabled-state-matrix-visual-chromium-darwin.png b/tests/browser/specs/visual.spec.ts-snapshots/form-disabled-state-matrix-visual-chromium-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..640dfc536baa594fe9fcd56cdb55607717427d12 GIT binary patch literal 20917 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 bcgv>Hqi3b@<`wV3l}*N%%`X+{Uw`l)&l)!| literal 0 HcmV?d00001 diff --git a/tests/browser/specs/visual.spec.ts-snapshots/icon-light-visual-chromium-darwin.png b/tests/browser/specs/visual.spec.ts-snapshots/icon-light-visual-chromium-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..db9152402d2ba565333e089fea4c6908bdeb71ee GIT binary patch literal 10358 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 To;x3b6_ELLt7}-3`+xrr9fgH9 literal 0 HcmV?d00001 diff --git a/tests/browser/specs/visual.spec.ts-snapshots/link-light-visual-chromium-darwin.png b/tests/browser/specs/visual.spec.ts-snapshots/link-light-visual-chromium-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..5ae0ffb59f0d75fe0469595cd11d7ddae6692bc7 GIT binary patch literal 8369 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 Ty?Fq%fF5b;-7mTK_sjnUG6fTv literal 0 HcmV?d00001 diff --git a/tests/browser/specs/visual.spec.ts-snapshots/loader-light-visual-chromium-darwin.png b/tests/browser/specs/visual.spec.ts-snapshots/loader-light-visual-chromium-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..90cd815b44c2c0821f77f8038af1fe563bc94dc4 GIT binary patch literal 6181 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 literal 0 HcmV?d00001 diff --git a/tests/browser/specs/visual.spec.ts-snapshots/localized-copy-zoom-visual-chromium-darwin.png b/tests/browser/specs/visual.spec.ts-snapshots/localized-copy-zoom-visual-chromium-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..8d3f87dacadb835a481bea54aac6e7cf68c43d56 GIT binary patch literal 89149 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�&%=KY_ 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 literal 0 HcmV?d00001 diff --git a/tests/browser/specs/visual.spec.ts-snapshots/pagination-light-visual-chromium-darwin.png b/tests/browser/specs/visual.spec.ts-snapshots/pagination-light-visual-chromium-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..87dcaf6d26656dbde5c7d4c5498266b24f70ef52 GIT binary patch literal 6691 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 mCcEpk4A_03-QRTG4iG5l~PRklsWEq=S@@ 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 Zcp-fc4jmQ|KRf@0ih}yH61i9J{ue9u0)GGi literal 0 HcmV?d00001 diff --git a/tests/browser/specs/visual.spec.ts-snapshots/rtl-floating-visual-chromium-darwin.png b/tests/browser/specs/visual.spec.ts-snapshots/rtl-floating-visual-chromium-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..d71c9c87fd92bdf83f45bb199b34397ded1631ec GIT binary patch literal 17150 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 literal 0 HcmV?d00001 diff --git a/tests/browser/specs/visual.spec.ts-snapshots/sectionheader-light-visual-chromium-darwin.png b/tests/browser/specs/visual.spec.ts-snapshots/sectionheader-light-visual-chromium-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..eba00352d2a60f03dec5172cb107e05eb832e4c5 GIT binary patch literal 23353 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 literal 0 HcmV?d00001 diff --git a/tests/browser/specs/visual.spec.ts-snapshots/select-mobile-visual-chromium-darwin.png b/tests/browser/specs/visual.spec.ts-snapshots/select-mobile-visual-chromium-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..d4988b958c9bce4ee8063c2440268503fbaf2c9e GIT binary patch literal 8863 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 LXeyMyd=>H^UBrX! literal 0 HcmV?d00001 diff --git a/tests/browser/specs/visual.spec.ts-snapshots/select-open-visual-chromium-darwin.png b/tests/browser/specs/visual.spec.ts-snapshots/select-open-visual-chromium-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..e318dc8312dbdf1f407d5366e09cf8b21631108b GIT binary patch literal 14983 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 literal 0 HcmV?d00001 diff --git a/tests/browser/specs/visual.spec.ts-snapshots/selection-disabled-state-matrix-visual-chromium-darwin.png b/tests/browser/specs/visual.spec.ts-snapshots/selection-disabled-state-matrix-visual-chromium-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..47eb27ed9421e0bc617b99a3d7389cee9c6b9f58 GIT binary patch literal 16062 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 literal 0 HcmV?d00001 diff --git a/tests/browser/specs/visual.spec.ts-snapshots/skeleton-light-visual-chromium-darwin.png b/tests/browser/specs/visual.spec.ts-snapshots/skeleton-light-visual-chromium-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..6f33dab416c4c214f9463951a7fd7ff6f671d713 GIT binary patch literal 4830 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 D-F=nC literal 0 HcmV?d00001 diff --git a/tests/browser/specs/visual.spec.ts-snapshots/switch-light-visual-chromium-darwin.png b/tests/browser/specs/visual.spec.ts-snapshots/switch-light-visual-chromium-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..a62942366c3dc2b980741347e8e80272272c7791 GIT binary patch literal 11021 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 literal 0 HcmV?d00001 diff --git a/tests/browser/specs/visual.spec.ts-snapshots/tag-light-visual-chromium-darwin.png b/tests/browser/specs/visual.spec.ts-snapshots/tag-light-visual-chromium-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..5785310db3e2417de463e2028e7d764fa4209a90 GIT binary patch literal 9780 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 literal 0 HcmV?d00001 diff --git a/tests/browser/specs/visual.spec.ts-snapshots/toast-light-visual-chromium-darwin.png b/tests/browser/specs/visual.spec.ts-snapshots/toast-light-visual-chromium-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..9f4823e17581bb2722b3c310a01f7187b29ce19c GIT binary patch literal 6349 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 literal 0 HcmV?d00001 diff --git a/tests/browser/specs/visual.spec.ts-snapshots/tooltip-focus-visual-chromium-darwin.png b/tests/browser/specs/visual.spec.ts-snapshots/tooltip-focus-visual-chromium-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..d6ea5d888b5df09dbe708716210cc346781822d8 GIT binary patch literal 11851 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 + + + + + WeBaseUI SSR hydration fixture + + + +
+ + + diff --git a/tests/ssr/server.mjs b/tests/ssr/server.mjs new file mode 100644 index 0000000..670e974 --- /dev/null +++ b/tests/ssr/server.mjs @@ -0,0 +1,52 @@ +import { readFile } from 'node:fs/promises'; +import { createServer as createHttpServer } from 'node:http'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { createServer as createViteServer } from 'vite'; + +const root = fileURLToPath(new URL('.', import.meta.url)); +const templatePath = path.join(root, 'index.html'); +const port = Number(process.env.WEBASE_SSR_PORT ?? 4177); +const host = '127.0.0.1'; + +const vite = await createViteServer({ + root, + configFile: path.join(root, 'vite.config.ts'), + server: { middlewareMode: true }, + appType: 'custom' +}); + +const server = createHttpServer((request, response) => { + vite.middlewares(request, response, async () => { + try { + const url = request.url ?? '/'; + let template = await readFile(templatePath, 'utf8'); + template = await vite.transformIndexHtml(url, template); + const { renderPage } = await vite.ssrLoadModule('/src/entry-server.ts'); + const rendered = renderPage(); + const html = template + .replace('', rendered.head) + .replace('', rendered.body); + + response.statusCode = 200; + response.setHeader('Content-Type', 'text/html; charset=utf-8'); + response.end(html); + } catch (error) { + vite.ssrFixStacktrace(error); + response.statusCode = 500; + response.end(error instanceof Error ? error.stack : String(error)); + } + }); +}); + +server.listen(port, host, () => { + console.log(`WeBaseUI SSR fixture listening on http://${host}:${port}`); +}); + +async function close() { + await vite.close(); + server.close(); +} + +process.once('SIGINT', close); +process.once('SIGTERM', close); diff --git a/tests/ssr/src/App.svelte b/tests/ssr/src/App.svelte new file mode 100644 index 0000000..1ee771b --- /dev/null +++ b/tests/ssr/src/App.svelte @@ -0,0 +1,124 @@ + + +
+
+ +

SSR hydration fixture

+ +
+ +
+ (clicks += 1)} /> + {clicks} +
+ +
+
+
+
+
+
+
+ + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/tests/ssr/src/entry-client.ts b/tests/ssr/src/entry-client.ts new file mode 100644 index 0000000..7c5a074 --- /dev/null +++ b/tests/ssr/src/entry-client.ts @@ -0,0 +1,4 @@ +import { hydrate } from 'svelte'; +import App from './App.svelte'; + +hydrate(App, { target: document.getElementById('app')! }); diff --git a/tests/ssr/src/entry-server.ts b/tests/ssr/src/entry-server.ts new file mode 100644 index 0000000..4faa93b --- /dev/null +++ b/tests/ssr/src/entry-server.ts @@ -0,0 +1,6 @@ +import { render } from 'svelte/server'; +import App from './App.svelte'; + +export function renderPage() { + return render(App); +} diff --git a/tests/ssr/svelte.config.js b/tests/ssr/svelte.config.js new file mode 100644 index 0000000..21b9399 --- /dev/null +++ b/tests/ssr/svelte.config.js @@ -0,0 +1,5 @@ +import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'; + +export default { + preprocess: vitePreprocess() +}; diff --git a/tests/ssr/tsconfig.json b/tests/ssr/tsconfig.json new file mode 100644 index 0000000..084eedb --- /dev/null +++ b/tests/ssr/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "module": "ESNext", + "moduleResolution": "bundler", + "lib": [ + "ES2023", + "DOM", + "DOM.Iterable" + ], + "strict": true, + "target": "ES2022", + "types": [ + "node", + "vite/client" + ] + }, + "include": [ + "src/**/*.ts", + "src/**/*.svelte", + "vite.config.ts" + ] +} diff --git a/tests/ssr/vite.config.ts b/tests/ssr/vite.config.ts new file mode 100644 index 0000000..65decff --- /dev/null +++ b/tests/ssr/vite.config.ts @@ -0,0 +1,9 @@ +import { svelte } from '@sveltejs/vite-plugin-svelte'; +import { defineConfig } from 'vite'; + +export default defineConfig({ + plugins: [svelte()], + ssr: { + noExternal: ['@lucide/svelte', '@webaseui/core', '@webaseui/svelte'] + } +}); diff --git a/tests/unit/collection.test.ts b/tests/unit/collection.test.ts new file mode 100644 index 0000000..8816aca --- /dev/null +++ b/tests/unit/collection.test.ts @@ -0,0 +1,70 @@ +import { describe, expect, it } from 'vitest'; +import { findEnabledIndex, normalizeIndex, wrapIndex } from '../../packages/webaseui-svelte/src/lib/utils/collection.js'; + +describe('findEnabledIndex', () => { + const items = [ + { disabled: true }, + { disabled: false }, + {}, + { disabled: true } + ]; + + it('finds the first enabled item in the requested direction', () => { + expect(findEnabledIndex(items, 0, 1)).toBe(1); + expect(findEnabledIndex(items, 3, -1)).toBe(2); + }); + + it('wraps starts that fall outside the collection', () => { + expect(findEnabledIndex(items, 6, 1)).toBe(2); + expect(findEnabledIndex(items, -1, 1)).toBe(1); + }); + + it('returns -1 for empty or fully disabled collections', () => { + expect(findEnabledIndex([], 0, 1)).toBe(-1); + expect(findEnabledIndex([{ disabled: true }], 0, -1)).toBe(-1); + }); + + it('uses the latest collection after enabled items are added or removed', () => { + const dynamicItems = [{ disabled: true }, { disabled: false }]; + expect(findEnabledIndex(dynamicItems, 0, 1)).toBe(1); + + dynamicItems.splice(1, 1); + expect(findEnabledIndex(dynamicItems, 0, 1)).toBe(-1); + + dynamicItems.push({ disabled: false }); + expect(findEnabledIndex(dynamicItems, 0, 1)).toBe(1); + }); +}); + +describe('normalizeIndex', () => { + it('preserves a valid controlled index', () => { + expect(normalizeIndex(2, 4)).toBe(2); + }); + + it('uses the fallback for fractional, negative, and overflowing values', () => { + expect(normalizeIndex(1.5, 4)).toBe(0); + expect(normalizeIndex(-1, 4, 2)).toBe(2); + expect(normalizeIndex(8, 4, 2)).toBe(2); + }); + + it('clamps the fallback and returns -1 for an empty collection', () => { + expect(normalizeIndex(Number.NaN, 4, 99)).toBe(3); + expect(normalizeIndex(0, 0)).toBe(-1); + }); + + it('re-normalizes a stale controlled index after the collection shrinks', () => { + expect(normalizeIndex(3, 4, 1)).toBe(3); + expect(normalizeIndex(3, 2, 1)).toBe(1); + }); +}); + +describe('wrapIndex', () => { + it('moves in both directions and wraps across either boundary', () => { + expect(wrapIndex(2, 3, 1)).toBe(0); + expect(wrapIndex(0, 3, -1)).toBe(2); + }); + + it('returns -1 for an empty collection', () => { + expect(wrapIndex(0, 0, 1)).toBe(-1); + }); +}); diff --git a/tests/unit/dialog-lifecycle.test.ts b/tests/unit/dialog-lifecycle.test.ts new file mode 100644 index 0000000..5952be5 --- /dev/null +++ b/tests/unit/dialog-lifecycle.test.ts @@ -0,0 +1,258 @@ +import { afterEach, describe, expect, it, vi } from 'vitest'; +import { createDialogLifecycle } from '../../packages/webaseui-svelte/src/lib/internal/dialog-lifecycle.js'; + +afterEach(() => { + vi.useRealTimers(); +}); + +function createDialog(open: boolean, overflow = 'clip') { + const body = { style: { overflow } }; + const trigger = { + isConnected: true, + focus: vi.fn() + }; + const ownerDocument = { + body, + activeElement: trigger as unknown, + addEventListener: vi.fn(), + removeEventListener: vi.fn() + }; + trigger.focus.mockImplementation(() => { + ownerDocument.activeElement = trigger; + }); + + const dialog = { + open, + ownerDocument, + close: vi.fn(() => { + dialog.open = false; + ownerDocument.activeElement = body; + }), + contains: vi.fn((target: Node | null) => target as unknown === dialog), + showModal: vi.fn(() => { + dialog.open = true; + ownerDocument.activeElement = dialog; + }) + }; + return { body, dialog, ownerDocument, trigger }; +} + +describe('createDialogLifecycle', () => { + it('leaves an already closed dialog unchanged', () => { + const { dialog } = createDialog(false); + const lifecycle = createDialogLifecycle(); + + expect(lifecycle.synchronize(dialog, false)).toBeUndefined(); + expect(dialog.close).not.toHaveBeenCalled(); + expect(dialog.showModal).not.toHaveBeenCalled(); + expect(dialog.ownerDocument.body.style.overflow).toBe('clip'); + }); + + it('closes a native dialog when controlled state becomes false', () => { + const { dialog } = createDialog(true); + const lifecycle = createDialogLifecycle(); + + expect(lifecycle.synchronize(dialog, false)).toBeUndefined(); + expect(dialog.close).toHaveBeenCalledTimes(1); + expect(dialog.open).toBe(false); + }); + + it('opens a closed dialog, locks scrolling, and restores the prior overflow on cleanup', () => { + const { dialog } = createDialog(false); + const lifecycle = createDialogLifecycle(); + + const cleanup = lifecycle.synchronize(dialog, true); + + expect(dialog.showModal).toHaveBeenCalledTimes(1); + expect(dialog.open).toBe(true); + expect(dialog.ownerDocument.body.style.overflow).toBe('hidden'); + + cleanup?.(); + expect(dialog.ownerDocument.body.style.overflow).toBe('clip'); + }); + + it('does not call showModal again for an already open native dialog', () => { + const { dialog } = createDialog(true, 'auto'); + const lifecycle = createDialogLifecycle(); + + const cleanup = lifecycle.synchronize(dialog, true); + + expect(dialog.showModal).not.toHaveBeenCalled(); + expect(dialog.ownerDocument.body.style.overflow).toBe('hidden'); + + cleanup?.(); + expect(dialog.ownerDocument.body.style.overflow).toBe('auto'); + }); + + it('restores the opening focus target after native close settles', () => { + const scheduled: Array<() => void> = []; + const { dialog, trigger } = createDialog(false); + const lifecycle = createDialogLifecycle((callback) => scheduled.push(callback)); + + lifecycle.synchronize(dialog, true); + dialog.close(); + lifecycle.restoreFocus(); + + expect(trigger.focus).not.toHaveBeenCalled(); + expect(scheduled).toHaveLength(1); + scheduled[0]?.(); + expect(trigger.focus).toHaveBeenCalledTimes(1); + }); + + it('uses the opening click target when WebKit leaves activeElement on body', () => { + const scheduled: Array<() => void> = []; + const { body, dialog, ownerDocument, trigger } = createDialog(false); + const lifecycle = createDialogLifecycle((callback) => scheduled.push(callback)); + let clickListener: ((event: MouseEvent) => void) | undefined; + ownerDocument.addEventListener.mockImplementation((_type, listener) => { + clickListener = listener; + }); + + const stop = lifecycle.listenForInteractionTarget(ownerDocument); + clickListener?.({ target: body } as unknown as MouseEvent); + ownerDocument.activeElement = body; + clickListener?.({ target: trigger } as unknown as MouseEvent); + lifecycle.synchronize(dialog, true); + dialog.close(); + lifecycle.restoreFocus(); + scheduled.forEach((callback) => callback()); + + expect(trigger.focus).toHaveBeenCalledTimes(1); + stop(); + expect(ownerDocument.removeEventListener).toHaveBeenCalledWith('click', clickListener, true); + }); + + it('does not reuse a stale click target for a later programmatic open', () => { + vi.useFakeTimers(); + vi.setSystemTime(1_000); + const scheduled: Array<() => void> = []; + const { body, dialog, ownerDocument, trigger } = createDialog(false); + const lifecycle = createDialogLifecycle((callback) => scheduled.push(callback)); + let clickListener: ((event: MouseEvent) => void) | undefined; + ownerDocument.addEventListener.mockImplementation((_type, listener) => { + clickListener = listener; + }); + + lifecycle.listenForInteractionTarget(ownerDocument); + clickListener?.({ target: trigger } as unknown as MouseEvent); + vi.setSystemTime(2_001); + ownerDocument.activeElement = body; + lifecycle.synchronize(dialog, true); + dialog.close(); + lifecycle.restoreFocus(); + + expect(scheduled).toHaveLength(0); + }); + + it('falls back to the current click when activeElement is not focusable', () => { + const scheduled: Array<() => void> = []; + const { dialog, ownerDocument, trigger } = createDialog(false); + const lifecycle = createDialogLifecycle((callback) => scheduled.push(callback)); + let clickListener: ((event: MouseEvent) => void) | undefined; + ownerDocument.addEventListener.mockImplementation((_type, listener) => { + clickListener = listener; + }); + + lifecycle.listenForInteractionTarget(ownerDocument); + clickListener?.({ target: trigger } as unknown as MouseEvent); + ownerDocument.activeElement = {}; + lifecycle.synchronize(dialog, true); + dialog.close(); + lifecycle.restoreFocus(); + scheduled.forEach((callback) => callback()); + + expect(trigger.focus).toHaveBeenCalledTimes(1); + }); + + it.each([null, 'body', {}, { focus: 'not-a-function' }])( + 'ignores a non-focusable active element %#', + (activeElement) => { + const scheduled: Array<() => void> = []; + const { dialog, ownerDocument } = createDialog(false); + const lifecycle = createDialogLifecycle((callback) => scheduled.push(callback)); + ownerDocument.activeElement = activeElement; + + lifecycle.synchronize(dialog, true); + dialog.close(); + lifecycle.restoreFocus(); + + expect(scheduled).toHaveLength(0); + } + ); + + it('uses a microtask by default so native close can settle before restoration', async () => { + const { dialog, trigger } = createDialog(false); + const lifecycle = createDialogLifecycle(); + + lifecycle.synchronize(dialog, true); + dialog.close(); + lifecycle.restoreFocus(); + + expect(trigger.focus).not.toHaveBeenCalled(); + await new Promise((resolve) => queueMicrotask(resolve)); + expect(trigger.focus).toHaveBeenCalledTimes(1); + }); + + it('treats missing or non-focusable opening targets as a restoration no-op', () => { + const scheduled: Array<() => void> = []; + const lifecycle = createDialogLifecycle((callback) => scheduled.push(callback)); + lifecycle.restoreFocus(); + + const { body, dialog, ownerDocument } = createDialog(false); + ownerDocument.activeElement = body; + lifecycle.synchronize(dialog, true); + dialog.close(); + lifecycle.restoreFocus(); + + expect(scheduled).toHaveLength(0); + }); + + it('does not override focus explicitly moved by a close callback', () => { + const scheduled: Array<() => void> = []; + const { dialog, ownerDocument, trigger } = createDialog(false); + const consumerTarget = { focus: vi.fn() }; + const lifecycle = createDialogLifecycle((callback) => scheduled.push(callback)); + + lifecycle.synchronize(dialog, true); + dialog.close(); + ownerDocument.activeElement = consumerTarget; + lifecycle.restoreFocus(); + scheduled[0]?.(); + + expect(trigger.focus).not.toHaveBeenCalled(); + }); + + it('restores when WebKit leaves focus inside the closed dialog', () => { + const scheduled: Array<() => void> = []; + const { dialog, ownerDocument, trigger } = createDialog(false); + const dialogControl = {} as Node; + const lifecycle = createDialogLifecycle((callback) => scheduled.push(callback)); + + lifecycle.synchronize(dialog, true); + dialog.close(); + ownerDocument.activeElement = dialogControl; + dialog.contains.mockImplementation((target) => target === dialogControl); + lifecycle.restoreFocus(); + scheduled[0]?.(); + + expect(trigger.focus).toHaveBeenCalledTimes(1); + }); + + it('skips a trigger removed before or during deferred restoration', () => { + const scheduled: Array<() => void> = []; + const first = createDialog(false); + const lifecycle = createDialogLifecycle((callback) => scheduled.push(callback)); + + lifecycle.synchronize(first.dialog, true); + first.trigger.isConnected = false; + lifecycle.restoreFocus(); + expect(scheduled).toHaveLength(0); + + const second = createDialog(false); + lifecycle.synchronize(second.dialog, true); + lifecycle.restoreFocus(); + second.trigger.isConnected = false; + scheduled[0]?.(); + expect(second.trigger.focus).not.toHaveBeenCalled(); + }); +}); diff --git a/tests/unit/floating-position.test.ts b/tests/unit/floating-position.test.ts new file mode 100644 index 0000000..b71577a --- /dev/null +++ b/tests/unit/floating-position.test.ts @@ -0,0 +1,239 @@ +import { describe, expect, it, vi } from 'vitest'; +import { + autoUpdateFloatingPosition, + computeFloatingPosition, + positionFloatingElement, + readCssPixel +} from '../../packages/webaseui-svelte/src/lib/internal/floating-position.js'; + +const viewport = { x: 0, y: 0, width: 320, height: 240 }; + +describe('computeFloatingPosition', () => { + it('uses stable defaults when no placement options are provided', () => { + expect(computeFloatingPosition( + { top: 10, right: 60, bottom: 30, left: 10, width: 50, height: 20 }, + { width: 40, height: 30 }, + viewport + )).toEqual({ + x: 10, + y: 30, + width: undefined, + maxWidth: 320, + maxHeight: 210, + side: 'bottom', + align: 'start' + }); + }); + + it('places a start-aligned anchor-width overlay on its preferred side', () => { + expect(computeFloatingPosition( + { top: 40, right: 140, bottom: 80, left: 40, width: 100, height: 40 }, + { width: 60, height: 80 }, + viewport, + { offset: 8, viewportPadding: 10, matchAnchorWidth: true, maxHeight: 120 } + )).toEqual({ + x: 40, + y: 88, + width: 100, + maxWidth: 300, + maxHeight: 120, + side: 'bottom', + align: 'start' + }); + }); + + it('flips to the roomier side and shifts centered content inside the viewport', () => { + const result = computeFloatingPosition( + { top: 190, right: 316, bottom: 230, left: 276, width: 40, height: 40 }, + { width: 180, height: 100 }, + viewport, + { side: 'bottom', align: 'center', offset: 6, viewportPadding: 8, maxWidth: 200 } + ); + + expect(result).toMatchObject({ x: 132, y: 84, side: 'top', align: 'center', maxHeight: 176 }); + expect(result.width).toBeUndefined(); + }); + + it('supports end alignment and constrains height when neither side fully fits', () => { + const result = computeFloatingPosition( + { top: 96, right: 180, bottom: 152, left: 120, width: 60, height: 56 }, + { width: 90, height: 200 }, + viewport, + { side: 'top', align: 'end', offset: 4, viewportPadding: 8, maxHeight: 180 } + ); + + expect(result).toMatchObject({ x: 90, y: 8, side: 'top', maxHeight: 84, maxWidth: 304 }); + }); + + it('treats start and end as logical alignments in right-to-left layouts', () => { + const anchor = { top: 40, right: 180, bottom: 80, left: 100, width: 80, height: 40 }; + const floating = { width: 50, height: 40 }; + const start = computeFloatingPosition(anchor, floating, viewport, { align: 'start', direction: 'rtl' }); + const end = computeFloatingPosition(anchor, floating, viewport, { align: 'end', direction: 'rtl' }); + + expect(start.x).toBe(130); + expect(end.x).toBe(100); + }); +}); + +function createPositionFixture() { + const style = { width: '', maxWidth: '', maxHeight: '', left: '', top: '' }; + const visualViewport = { offsetLeft: 12, offsetTop: 18, width: 280, height: 180 }; + const view = { + visualViewport, + innerWidth: 320, + innerHeight: 240, + getComputedStyle: vi.fn(() => ({ getPropertyValue: () => '11.5px' })) + }; + const ownerDocument = { + defaultView: view, + documentElement: { clientWidth: 320, clientHeight: 240 } + }; + const anchor = { + ownerDocument, + getBoundingClientRect: () => ({ top: 130, right: 282, bottom: 160, left: 202, width: 80, height: 30 }) + }; + const floating = { + ownerDocument, + style, + dataset: {} as Record, + clientHeight: 60, + scrollHeight: 100, + getBoundingClientRect: () => ({ top: 0, right: 0, bottom: 0, left: 0, width: 80, height: 62 }) + }; + return { anchor, floating, style }; +} + +describe('positionFloatingElement', () => { + it('uses visual viewport offsets, intrinsic scroll height, and applies styles', () => { + const { anchor, floating, style } = createPositionFixture(); + const result = positionFloatingElement( + anchor as unknown as HTMLElement, + floating as unknown as HTMLElement, + { side: 'bottom', align: 'end', offset: 4, viewportPadding: 8, matchAnchorWidth: true, maxHeight: 120 } + ); + + expect(result.side).toBe('top'); + expect(result.x).toBe(202); + expect(style).toMatchObject({ left: '202px', top: '26px', width: '80px', maxHeight: '100px' }); + expect(floating.dataset).toEqual({ side: 'top', align: 'end' }); + }); + + it('reads resolved CSS pixels and falls back for non-numeric values', () => { + const { anchor } = createPositionFixture(); + expect(readCssPixel(anchor as unknown as HTMLElement, '--offset')).toBe(11.5); + + anchor.ownerDocument.defaultView = { + ...anchor.ownerDocument.defaultView, + getComputedStyle: vi.fn(() => ({ getPropertyValue: () => 'auto' })) + }; + expect(readCssPixel(anchor as unknown as HTMLElement, '--offset', 7)).toBe(7); + }); + + it('uses layout viewport and document fallbacks without forcing a width', () => { + const style = { width: 'old', maxWidth: '', maxHeight: 'old', left: '', top: '' }; + const documentElement = { clientWidth: 240, clientHeight: 180 }; + const ownerDocument = { + defaultView: null as null | { innerWidth: number; innerHeight: number }, + documentElement + }; + const anchor = { + ownerDocument, + getBoundingClientRect: () => ({ top: 20, right: 80, bottom: 50, left: 20, width: 60, height: 30 }) + }; + const floating = { + ownerDocument, + style, + dataset: {} as Record, + clientHeight: 42, + scrollHeight: 40, + getBoundingClientRect: () => ({ top: 0, right: 0, bottom: 0, left: 0, width: 100, height: 40 }) + }; + + const first = positionFloatingElement(anchor as unknown as HTMLElement, floating as unknown as HTMLElement); + expect(first).toMatchObject({ x: 20, y: 50, maxWidth: 240, maxHeight: 130 }); + expect(style.width).toBe(''); + expect(readCssPixel(anchor as unknown as HTMLElement, '--missing', 3)).toBe(3); + + ownerDocument.defaultView = { innerWidth: 260, innerHeight: 200 }; + const second = positionFloatingElement(anchor as unknown as HTMLElement, floating as unknown as HTMLElement, { + side: 'top', + maxWidth: 90 + }); + expect(second).toMatchObject({ side: 'bottom', maxWidth: 90 }); + }); +}); + +describe('autoUpdateFloatingPosition', () => { + it('observes scroll, resize, visual viewport, and both elements with batched updates', () => { + const listeners = new Map void>(); + const visualListeners = new Map void>(); + const frames = new Map void>(); + let frameId = 0; + const observe = vi.fn(); + const disconnect = vi.fn(); + class ResizeObserverMock { + constructor(_callback: ResizeObserverCallback) {} + observe = observe; + disconnect = disconnect; + } + const view = { + addEventListener: vi.fn((type: string, listener: () => void) => listeners.set(type, listener)), + removeEventListener: vi.fn(), + requestAnimationFrame: vi.fn((callback: () => void) => { + frameId += 1; + frames.set(frameId, callback); + return frameId; + }), + cancelAnimationFrame: vi.fn((id: number) => frames.delete(id)), + visualViewport: { + addEventListener: vi.fn((type: string, listener: () => void) => visualListeners.set(type, listener)), + removeEventListener: vi.fn() + }, + ResizeObserver: ResizeObserverMock + }; + const anchor = { ownerDocument: { defaultView: view } } as unknown as HTMLElement; + const floating = {} as HTMLElement; + const update = vi.fn(); + + const stop = autoUpdateFloatingPosition(anchor, floating, update); + expect(update).toHaveBeenCalledTimes(1); + expect(observe).toHaveBeenCalledTimes(2); + + listeners.get('scroll')?.(); + visualListeners.get('resize')?.(); + expect(view.requestAnimationFrame).toHaveBeenCalledTimes(1); + frames.get(1)?.(); + expect(update).toHaveBeenCalledTimes(2); + + listeners.get('resize')?.(); + const stoppedFrame = frames.get(2); + stop(); + stop(); + expect(view.cancelAnimationFrame).toHaveBeenCalledWith(2); + expect(disconnect).toHaveBeenCalledTimes(1); + stoppedFrame?.(); + expect(update).toHaveBeenCalledTimes(2); + }); + + it('updates synchronously without animation frames and works without a window', () => { + const update = vi.fn(); + const view = { + addEventListener: vi.fn((_type: string, listener: () => void) => listener()), + removeEventListener: vi.fn() + }; + const anchor = { ownerDocument: { defaultView: view } } as unknown as HTMLElement; + const stop = autoUpdateFloatingPosition(anchor, {} as HTMLElement, update); + expect(update.mock.calls.length).toBeGreaterThan(1); + stop(); + + const windowlessUpdate = vi.fn(); + const stopWindowless = autoUpdateFloatingPosition( + { ownerDocument: { defaultView: null } } as unknown as HTMLElement, + {} as HTMLElement, + windowlessUpdate + ); + expect(windowlessUpdate).toHaveBeenCalledTimes(1); + stopWindowless(); + }); +}); diff --git a/tests/unit/npm-pack.test.ts b/tests/unit/npm-pack.test.ts new file mode 100644 index 0000000..bbe312f --- /dev/null +++ b/tests/unit/npm-pack.test.ts @@ -0,0 +1,24 @@ +import { describe, expect, it } from 'vitest'; +import { parseNpmPackOutput } from '../../scripts/lib/npm-pack.mjs'; + +const pack = { + name: '@webaseui/svelte', + size: 10, + unpackedSize: 20, + files: [{ path: 'dist/index.js' }] +}; + +describe('parseNpmPackOutput', () => { + it('accepts the legacy array format', () => { + expect(parseNpmPackOutput(JSON.stringify([pack]), pack.name)).toEqual(pack); + }); + + it('accepts the workspace-keyed object format', () => { + expect(parseNpmPackOutput(JSON.stringify({ [pack.name]: pack }), pack.name)).toEqual(pack); + }); + + it('rejects invalid JSON and empty payloads with workspace context', () => { + expect(() => parseNpmPackOutput('{', pack.name)).toThrow(pack.name); + expect(() => parseNpmPackOutput('{}', pack.name)).toThrow(pack.name); + }); +}); diff --git a/tests/unit/overlay.test.ts b/tests/unit/overlay.test.ts new file mode 100644 index 0000000..03f9078 --- /dev/null +++ b/tests/unit/overlay.test.ts @@ -0,0 +1,52 @@ +import { describe, expect, it, vi } from 'vitest'; +import { acquireBodyScrollLock, listenForPointerOutside } from '../../packages/webaseui-svelte/src/lib/internal/overlay.js'; + +describe('acquireBodyScrollLock', () => { + it('restores the original overflow value after the last nested release', () => { + const targetDocument = { body: { style: { overflow: 'clip' } } }; + const releaseFirst = acquireBodyScrollLock(targetDocument); + const releaseSecond = acquireBodyScrollLock(targetDocument); + + expect(targetDocument.body.style.overflow).toBe('hidden'); + releaseFirst(); + expect(targetDocument.body.style.overflow).toBe('hidden'); + releaseSecond(); + expect(targetDocument.body.style.overflow).toBe('clip'); + }); + + it('makes each release callback idempotent', () => { + const targetDocument = { body: { style: { overflow: '' } } }; + const release = acquireBodyScrollLock(targetDocument); + + release(); + release(); + expect(targetDocument.body.style.overflow).toBe(''); + }); +}); + +describe('listenForPointerOutside', () => { + it('ignores contained targets, reports outside targets, and unregisters', () => { + const inside = {} as Node; + const outside = {} as Node; + let listener: ((event: PointerEvent) => void) | undefined; + const ownerDocument = { + addEventListener: vi.fn((_type: 'pointerdown', nextListener: (event: PointerEvent) => void) => { + listener = nextListener; + }), + removeEventListener: vi.fn() + }; + const root = { + ownerDocument, + contains: (target: Node | null) => target === inside + }; + const onOutside = vi.fn(); + + const stop = listenForPointerOutside(root, onOutside); + listener?.({ target: inside } as unknown as PointerEvent); + listener?.({ target: outside } as unknown as PointerEvent); + + expect(onOutside).toHaveBeenCalledTimes(1); + stop(); + expect(ownerDocument.removeEventListener).toHaveBeenCalledWith('pointerdown', listener); + }); +}); diff --git a/tests/unit/popover.test.ts b/tests/unit/popover.test.ts new file mode 100644 index 0000000..321828a --- /dev/null +++ b/tests/unit/popover.test.ts @@ -0,0 +1,51 @@ +import { describe, expect, it, vi } from 'vitest'; +import { synchronizeManualPopover } from '../../packages/webaseui-svelte/src/lib/internal/popover.js'; + +function createPopover(native = true) { + let open = false; + const element = { + hidden: true, + matches: vi.fn(() => open), + removeAttribute: vi.fn(), + showPopover: native ? vi.fn(() => { open = true; }) : undefined, + hidePopover: native ? vi.fn(() => { open = false; }) : undefined + }; + return element; +} + +describe('synchronizeManualPopover', () => { + it('uses hidden-state fallback and removes unsupported popover semantics', () => { + const element = createPopover(false); + + expect(synchronizeManualPopover(element as unknown as HTMLElement, true)).toBe(false); + expect(element.hidden).toBe(false); + expect(element.removeAttribute).toHaveBeenCalledWith('popover'); + + synchronizeManualPopover(element as unknown as HTMLElement, false); + expect(element.hidden).toBe(true); + }); + + it('opens and closes a native manual popover idempotently', () => { + const element = createPopover(); + + expect(synchronizeManualPopover(element as unknown as HTMLElement, true)).toBe(true); + synchronizeManualPopover(element as unknown as HTMLElement, true); + expect(element.showPopover).toHaveBeenCalledTimes(1); + expect(element.hidden).toBe(false); + + synchronizeManualPopover(element as unknown as HTMLElement, false); + synchronizeManualPopover(element as unknown as HTMLElement, false); + expect(element.hidePopover).toHaveBeenCalledTimes(1); + expect(element.hidden).toBe(true); + }); + + it('tolerates selector and native method races during teardown', () => { + const element = createPopover(); + element.matches.mockImplementation(() => { throw new Error('detached'); }); + element.showPopover?.mockImplementation(() => { throw new Error('detached'); }); + + expect(() => synchronizeManualPopover(element as unknown as HTMLElement, true)).not.toThrow(); + expect(() => synchronizeManualPopover(element as unknown as HTMLElement, false)).not.toThrow(); + expect(element.hidden).toBe(true); + }); +}); diff --git a/tests/unit/reference-utils.test.ts b/tests/unit/reference-utils.test.ts new file mode 100644 index 0000000..eea5262 --- /dev/null +++ b/tests/unit/reference-utils.test.ts @@ -0,0 +1,45 @@ +import { describe, expect, it } from 'vitest'; +import { inlineParts, parseFields } from '../../apps/docs/src/lib/reference-utils.js'; + +describe('parseFields', () => { + it('parses named fields and joins indented continuation lines', () => { + expect(parseFields(` +- Props: \`label\`, \`disabled\` + and native attributes +- Boundary: keeps the root stable +`)).toEqual([ + { label: 'Props', value: '`label`, `disabled` and native attributes' }, + { label: 'Boundary', value: 'keeps the root stable' } + ]); + }); + + it('preserves colons inside the value and labels unlabeled bullets as Contract', () => { + expect(parseFields(` +- Events: callback: event +- Keyboard behavior remains documented +`)).toEqual([ + { label: 'Events', value: 'callback: event' }, + { label: 'Contract', value: 'Keyboard behavior remains documented' } + ]); + }); + + it('ignores prose outside the bullet contract', () => { + expect(parseFields('Introduction only.')).toEqual([]); + }); +}); + +describe('inlineParts', () => { + it('marks alternating backtick segments as inline code', () => { + expect(inlineParts('Use `open` with `onclose`.')).toEqual([ + { text: 'Use ', code: false }, + { text: 'open', code: true }, + { text: ' with ', code: false }, + { text: 'onclose', code: true }, + { text: '.', code: false } + ]); + }); + + it('omits empty segments without changing code parity', () => { + expect(inlineParts('`value`')).toEqual([{ text: 'value', code: true }]); + }); +}); diff --git a/tests/unit/roving-focus.test.ts b/tests/unit/roving-focus.test.ts new file mode 100644 index 0000000..4db1b75 --- /dev/null +++ b/tests/unit/roving-focus.test.ts @@ -0,0 +1,57 @@ +import { describe, expect, it } from 'vitest'; +import { findRovingFocusIndex } from '../../packages/webaseui-svelte/src/lib/internal/roving-focus.js'; + +describe('findRovingFocusIndex', () => { + const items = ['First', 'Second', 'Third']; + + it('moves and wraps horizontal collections without consuming vertical arrows', () => { + expect(findRovingFocusIndex(items, 0, 'ArrowRight', 'horizontal')).toBe(1); + expect(findRovingFocusIndex(items, 0, 'ArrowLeft', 'horizontal')).toBe(2); + expect(findRovingFocusIndex(items, 0, 'ArrowDown', 'horizontal')).toBeUndefined(); + }); + + it('reverses horizontal arrow meaning for right-to-left collections', () => { + expect(findRovingFocusIndex(items, 0, 'ArrowLeft', 'horizontal', undefined, 'rtl')).toBe(1); + expect(findRovingFocusIndex(items, 0, 'ArrowRight', 'horizontal', undefined, 'rtl')).toBe(2); + }); + + it('moves and wraps vertical collections without consuming horizontal arrows', () => { + expect(findRovingFocusIndex(items, 2, 'ArrowDown', 'vertical')).toBe(0); + expect(findRovingFocusIndex(items, 0, 'ArrowUp', 'vertical')).toBe(2); + expect(findRovingFocusIndex(items, 0, 'ArrowRight', 'vertical')).toBeUndefined(); + }); + + it('moves Home and End to the collection boundaries in either orientation', () => { + expect(findRovingFocusIndex(items, 1, 'Home', 'horizontal')).toBe(0); + expect(findRovingFocusIndex(items, 1, 'End', 'vertical')).toBe(2); + }); + + it('skips disabled items while moving, wrapping, and resolving boundaries', () => { + const choices = [ + { label: 'First', disabled: true }, + { label: 'Second' }, + { label: 'Third', disabled: true } + ]; + const isDisabled = (item: (typeof choices)[number]) => item.disabled === true; + + expect(findRovingFocusIndex(choices, 1, 'ArrowRight', 'horizontal', isDisabled)).toBe(1); + expect(findRovingFocusIndex(choices, 2, 'Home', 'horizontal', isDisabled)).toBe(1); + expect(findRovingFocusIndex(choices, 0, 'End', 'vertical', isDisabled)).toBe(1); + }); + + it('returns no target for empty or fully disabled collections', () => { + expect(findRovingFocusIndex([], 0, 'Home', 'horizontal')).toBe(-1); + expect(findRovingFocusIndex([{ disabled: true }], 0, 'ArrowDown', 'vertical', (item) => item.disabled)).toBe(-1); + }); + + it('uses the latest collection after items are added or removed', () => { + const dynamicItems = ['First', 'Second']; + expect(findRovingFocusIndex(dynamicItems, 1, 'ArrowDown', 'vertical')).toBe(0); + + dynamicItems.splice(1, 1); + expect(findRovingFocusIndex(dynamicItems, 1, 'End', 'vertical')).toBe(0); + + dynamicItems.push('Third'); + expect(findRovingFocusIndex(dynamicItems, 0, 'End', 'vertical')).toBe(1); + }); +}); diff --git a/tests/unit/select-state.test.ts b/tests/unit/select-state.test.ts new file mode 100644 index 0000000..626192c --- /dev/null +++ b/tests/unit/select-state.test.ts @@ -0,0 +1,33 @@ +import { describe, expect, it } from 'vitest'; +import { findSelectedOptionIndex } from '../../packages/webaseui-svelte/src/lib/internal/select-state.js'; +import type { WeBaseSelectOption } from '../../packages/webaseui-svelte/src/lib/types.js'; + +const options: WeBaseSelectOption[] = [ + { label: 'Alpha', value: 'alpha', disabled: true }, + { label: 'Beta', value: 'beta' }, + { label: 'Gamma', value: 'gamma' } +]; + +describe('findSelectedOptionIndex', () => { + it('keeps an enabled controlled value and falls back from missing or disabled values', () => { + expect(findSelectedOptionIndex(options, 'gamma')).toBe(2); + expect(findSelectedOptionIndex(options, 'alpha')).toBe(1); + expect(findSelectedOptionIndex(options, 'missing')).toBe(1); + }); + + it('returns -1 for empty and fully disabled option sets', () => { + expect(findSelectedOptionIndex([], 'missing')).toBe(-1); + expect(findSelectedOptionIndex([{ label: 'Locked', value: 'locked', disabled: true }], 'locked')).toBe(-1); + }); + + it('re-resolves the controlled value after options are added or removed', () => { + const dynamicOptions = options.slice(); + expect(findSelectedOptionIndex(dynamicOptions, 'gamma')).toBe(2); + + dynamicOptions.splice(2, 1); + expect(findSelectedOptionIndex(dynamicOptions, 'gamma')).toBe(1); + + dynamicOptions.unshift({ label: 'Available', value: 'available' }); + expect(findSelectedOptionIndex(dynamicOptions, 'available')).toBe(0); + }); +}); diff --git a/tests/unit/timing.test.ts b/tests/unit/timing.test.ts new file mode 100644 index 0000000..bfecae7 --- /dev/null +++ b/tests/unit/timing.test.ts @@ -0,0 +1,93 @@ +import { afterEach, describe, expect, it, vi } from 'vitest'; +import { scheduleAutoDismiss } from '../../packages/webaseui-svelte/src/lib/internal/timing.js'; + +afterEach(() => { + vi.useRealTimers(); +}); + +describe('scheduleAutoDismiss', () => { + it('dismisses once after the configured duration', () => { + vi.useFakeTimers(); + const onDismiss = vi.fn(); + const cleanup = scheduleAutoDismiss( + { open: true, paused: false, duration: 500 }, + onDismiss, + { + setTimeout: (callback, delay) => globalThis.setTimeout(callback, delay), + clearTimeout: (handle) => globalThis.clearTimeout(handle) + } + ); + + vi.advanceTimersByTime(499); + expect(onDismiss).not.toHaveBeenCalled(); + vi.advanceTimersByTime(1); + expect(onDismiss).toHaveBeenCalledTimes(1); + + cleanup(); + }); + + it.each([ + { open: false, paused: false, duration: 500 }, + { open: true, paused: true, duration: 500 }, + { open: true, paused: false, duration: 0 }, + { open: true, paused: false, duration: -1 } + ])('does not schedule inactive state $open/$paused/$duration', (state) => { + const scheduler = { + setTimeout: vi.fn(() => Symbol('timer')), + clearTimeout: vi.fn() + }; + + const cleanup = scheduleAutoDismiss(state, vi.fn(), scheduler); + + expect(scheduler.setTimeout).not.toHaveBeenCalled(); + cleanup(); + expect(scheduler.clearTimeout).not.toHaveBeenCalled(); + }); + + it('cancels a pending cycle exactly once so pause and close transitions are safe', () => { + vi.useFakeTimers(); + const onDismiss = vi.fn(); + const clearTimeout = vi.fn((handle: ReturnType) => globalThis.clearTimeout(handle)); + const cleanup = scheduleAutoDismiss( + { open: true, paused: false, duration: 500 }, + onDismiss, + { + setTimeout: (callback, delay) => globalThis.setTimeout(callback, delay), + clearTimeout + } + ); + + cleanup(); + cleanup(); + vi.advanceTimersByTime(500); + + expect(clearTimeout).toHaveBeenCalledTimes(1); + expect(onDismiss).not.toHaveBeenCalled(); + }); + + it('starts a full fresh cycle when a paused notification resumes', () => { + vi.useFakeTimers(); + const onDismiss = vi.fn(); + const scheduler = { + setTimeout: (callback: () => void, delay: number) => globalThis.setTimeout(callback, delay), + clearTimeout: (handle: ReturnType) => globalThis.clearTimeout(handle) + }; + + const cancelBeforePause = scheduleAutoDismiss( + { open: true, paused: false, duration: 500 }, + onDismiss, + scheduler + ); + vi.advanceTimersByTime(300); + cancelBeforePause(); + scheduleAutoDismiss({ open: true, paused: true, duration: 500 }, onDismiss, scheduler); + vi.advanceTimersByTime(500); + expect(onDismiss).not.toHaveBeenCalled(); + + scheduleAutoDismiss({ open: true, paused: false, duration: 500 }, onDismiss, scheduler); + vi.advanceTimersByTime(499); + expect(onDismiss).not.toHaveBeenCalled(); + vi.advanceTimersByTime(1); + expect(onDismiss).toHaveBeenCalledTimes(1); + }); +}); diff --git a/tests/unit/typeahead.test.ts b/tests/unit/typeahead.test.ts new file mode 100644 index 0000000..96a556f --- /dev/null +++ b/tests/unit/typeahead.test.ts @@ -0,0 +1,107 @@ +import { afterEach, describe, expect, it, vi } from 'vitest'; +import { + createTypeaheadController, + findTypeaheadMatchIndex +} from '../../packages/webaseui-svelte/src/lib/internal/typeahead.js'; + +afterEach(() => { + vi.useRealTimers(); +}); + +const options = [ + { label: 'Alpha', disabled: true }, + { label: 'Beta' }, + { label: 'Bravo' }, + { label: 'Release' } +]; +const itemText = (item: (typeof options)[number]) => item.label; +const isDisabled = (item: (typeof options)[number]) => item.disabled === true; + +function createController(delay = 500) { + return createTypeaheadController( + { + setTimeout: (callback, timeout) => globalThis.setTimeout(callback, timeout), + clearTimeout: (handle) => globalThis.clearTimeout(handle) + }, + delay + ); +} + +describe('findTypeaheadMatchIndex', () => { + it('matches case-insensitively from a cyclic start while skipping disabled items', () => { + expect(findTypeaheadMatchIndex(options, 'BR', 1, itemText, isDisabled)).toBe(2); + expect(findTypeaheadMatchIndex(options, 'be', 2, itemText, isDisabled)).toBe(1); + expect(findTypeaheadMatchIndex(options, 'al', 0, itemText, isDisabled)).toBe(-1); + }); + + it('returns no match for empty input, unmatched input, or an empty collection', () => { + expect(findTypeaheadMatchIndex(options, '', 0, itemText)).toBe(-1); + expect(findTypeaheadMatchIndex(options, 'missing', 0, itemText)).toBe(-1); + expect(findTypeaheadMatchIndex([], 'a', 0, () => '')).toBe(-1); + }); + + it('uses the latest dynamic collection for every lookup', () => { + const dynamicOptions = options.slice(); + expect(findTypeaheadMatchIndex(dynamicOptions, 'br', 0, itemText)).toBe(2); + + dynamicOptions.splice(2, 1); + expect(findTypeaheadMatchIndex(dynamicOptions, 'br', 0, itemText)).toBe(-1); + + dynamicOptions.push({ label: 'Broadcast' }); + expect(findTypeaheadMatchIndex(dynamicOptions, 'br', 0, itemText)).toBe(3); + }); +}); + +describe('createTypeaheadController', () => { + it('builds a multi-character query and refines from the current match', () => { + vi.useFakeTimers(); + const controller = createController(); + + expect(controller.search(options, 0, 'b', itemText, isDisabled)).toBe(1); + expect(controller.search(options, 1, 'r', itemText, isDisabled)).toBe(2); + }); + + it('cycles repeated characters through matching enabled items', () => { + vi.useFakeTimers(); + const controller = createController(); + + expect(controller.search(options, 0, 'b', itemText, isDisabled)).toBe(1); + expect(controller.search(options, 1, 'B', itemText, isDisabled)).toBe(2); + expect(controller.search(options, 2, 'b', itemText, isDisabled)).toBe(1); + }); + + it('starts a new query after the reset delay expires', () => { + vi.useFakeTimers(); + const controller = createController(500); + + expect(controller.search(options, 0, 'b', itemText, isDisabled)).toBe(1); + vi.advanceTimersByTime(500); + expect(controller.search(options, 1, 'r', itemText, isDisabled)).toBe(3); + }); + + it('ignores non-printable and whitespace keys without scheduling a reset', () => { + const scheduler = { + setTimeout: vi.fn(() => Symbol('timer')), + clearTimeout: vi.fn() + }; + const controller = createTypeaheadController(scheduler); + + expect(controller.search(options, 0, 'ArrowDown', itemText)).toBeUndefined(); + expect(controller.search(options, 0, ' ', itemText)).toBeUndefined(); + expect(scheduler.setTimeout).not.toHaveBeenCalled(); + }); + + it('cancels a pending reset exactly once when disposed', () => { + const scheduler = { + setTimeout: vi.fn(() => Symbol('timer')), + clearTimeout: vi.fn() + }; + const controller = createTypeaheadController(scheduler); + + controller.search(options, 0, 'b', itemText); + controller.reset(); + controller.reset(); + + expect(scheduler.clearTimeout).toHaveBeenCalledTimes(1); + }); +}); diff --git a/vitest.config.ts b/vitest.config.ts new file mode 100644 index 0000000..58dfaff --- /dev/null +++ b/vitest.config.ts @@ -0,0 +1,25 @@ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + coverage: { + provider: 'v8', + include: [ + 'packages/webaseui-svelte/src/lib/internal/**/*.ts', + 'packages/webaseui-svelte/src/lib/utils/**/*.ts' + ], + reporter: ['text', 'json-summary'], + reportsDirectory: 'coverage', + thresholds: { + perFile: true, + branches: 90, + functions: 90, + lines: 90, + statements: 90 + } + }, + environment: 'node', + include: ['tests/unit/**/*.test.ts'], + passWithNoTests: false + } +}); From e24b741f45c8963007db6df702c6e7db6a70cef9 Mon Sep 17 00:00:00 2001 From: willxue Date: Tue, 18 Aug 2026 07:09:24 +0800 Subject: [PATCH 2/4] ci: pin npm before clean installs --- .github/workflows/check.yml | 3 +++ .github/workflows/compatibility.yml | 3 +++ .github/workflows/release.yml | 6 ++++-- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 28282ca..9b4b5d6 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -27,6 +27,7 @@ jobs: with: node-version: 22.13 cache: npm + - run: npm install --global npm@11.5.1 - run: npm ci - run: npm run check:changeset - run: npm audit --audit-level=high @@ -51,6 +52,7 @@ jobs: with: node-version: 22.13 cache: npm + - run: npm install --global npm@11.5.1 - run: npm ci - run: npx playwright install --with-deps ${{ matrix.browser }} - run: npm run test:browser:project -- --project=${{ matrix.browser }} @@ -72,6 +74,7 @@ jobs: with: node-version: 22.13 cache: npm + - run: npm install --global npm@11.5.1 - run: npm ci - run: npx playwright install chromium - run: npm run test:visual diff --git a/.github/workflows/compatibility.yml b/.github/workflows/compatibility.yml index f461c19..369bb65 100644 --- a/.github/workflows/compatibility.yml +++ b/.github/workflows/compatibility.yml @@ -24,6 +24,7 @@ jobs: with: node-version: 24 cache: npm + - run: npm install --global npm@11.5.1 - run: npm ci - run: npm run check - run: npm run check:consumer @@ -40,6 +41,7 @@ jobs: with: node-version: 24 cache: npm + - run: npm install --global npm@11.5.1 - run: npm ci - run: npm run build - run: node scripts/test-webaseui-consumer.mjs --include-latest @@ -56,6 +58,7 @@ jobs: with: node-version: 24 cache: npm + - run: npm install --global npm@11.5.1 - run: npm ci - run: npm install --no-save @playwright/test@latest - run: npx playwright install --with-deps chromium firefox webkit diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 59e4a0d..550f607 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -36,6 +36,7 @@ jobs: with: node-version: 22.13 cache: npm + - run: npm install --global npm@11.5.1 - run: npm ci - run: npx playwright install --with-deps chromium firefox webkit - run: npm run check:changeset @@ -57,6 +58,7 @@ jobs: with: node-version: 22.13 cache: npm + - run: npm install --global npm@11.5.1 - run: npm ci - run: npx playwright install chromium - run: npm run test:visual @@ -79,8 +81,8 @@ jobs: with: node-version: 22.13 cache: npm - - run: npm ci - run: npm install --global npm@11.5.1 + - run: npm ci - id: release uses: changesets/action@52025003bf4794281597cb5b5e566485d9473389 # v1.5.0 with: @@ -112,8 +114,8 @@ jobs: with: node-version: 22.13 cache: npm - - run: npm ci - run: npm install --global npm@11.5.1 + - run: npm ci - run: node scripts/release-channel.mjs "${{ inputs.channel }}" --publish env: CI: true From 3b94110191b4e4a0843a314d5420c1fcf42e7153 Mon Sep 17 00:00:00 2001 From: willxue Date: Tue, 18 Aug 2026 07:37:46 +0800 Subject: [PATCH 3/4] fix: preserve tag contrast in forced colors --- packages/webaseui-svelte/src/lib/components/WeBaseTag.svelte | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/webaseui-svelte/src/lib/components/WeBaseTag.svelte b/packages/webaseui-svelte/src/lib/components/WeBaseTag.svelte index 026832d..3814f2d 100644 --- a/packages/webaseui-svelte/src/lib/components/WeBaseTag.svelte +++ b/packages/webaseui-svelte/src/lib/components/WeBaseTag.svelte @@ -68,5 +68,6 @@ a.ds-tag:focus-visible { outline: var(--focus-ring); outline-offset: var(--focus-ring-offset); } small { color: currentColor; font-family: var(--mono); font-size: var(--webase-font-size-meta); opacity: 1; } @media (hover: hover) and (pointer: fine) { a.ds-tag:hover { border-color: var(--brand); color: var(--brand); background: var(--brand-tint); } } + @media (forced-colors: active) {.ds-tag.selected {forced-color-adjust:none;border-color:Highlight;color:CanvasText;background:Canvas}} @media (prefers-reduced-motion: reduce) { .ds-tag { transition: none; } } From 50bc603b3b3a17a127c0f241d7b92f7bcf477f34 Mon Sep 17 00:00:00 2001 From: willxue Date: Tue, 18 Aug 2026 08:07:28 +0800 Subject: [PATCH 4/4] fix: publish changesets prereleases with configured tag --- scripts/release-channel.mjs | 6 ++-- tests/unit/release-channel.test.ts | 50 ++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 tests/unit/release-channel.test.ts diff --git a/scripts/release-channel.mjs b/scripts/release-channel.mjs index 2e03893..47da6f7 100644 --- a/scripts/release-channel.mjs +++ b/scripts/release-channel.mjs @@ -20,13 +20,15 @@ run(['pre', 'enter', channel]); run(['version']); if (publish) { - const result = spawnSync('npx', ['changeset', 'publish', '--tag', channel], { + // Changesets reads the active prerelease tag from .changeset/pre.json. + // Passing --tag in pre mode is rejected and prevents trusted CI from publishing. + const result = spawnSync('npx', ['changeset', 'publish'], { cwd: root, encoding: 'utf8', stdio: 'inherit', env: { ...process.env, NPM_CONFIG_PROVENANCE: 'true', NPM_CONFIG_ACCESS: 'public' } }); - if (result.status !== 0) throw new Error(`npx changeset publish --tag ${channel} failed`); + if (result.status !== 0) throw new Error(`npx changeset publish failed for prerelease channel ${channel}`); } else { console.log(`Prepared ${channel} pre-release versions. Review the versioned files, then publish from trusted CI with --publish.`); } diff --git a/tests/unit/release-channel.test.ts b/tests/unit/release-channel.test.ts new file mode 100644 index 0000000..b49f714 --- /dev/null +++ b/tests/unit/release-channel.test.ts @@ -0,0 +1,50 @@ +import { chmodSync, mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs'; +import os from 'node:os'; +import path from 'node:path'; +import { spawnSync } from 'node:child_process'; +import { describe, expect, it } from 'vitest'; + +describe('release-channel', () => { + it('publishes from Changesets prerelease mode without passing a custom tag', () => { + const temporaryRoot = mkdtempSync(path.join(os.tmpdir(), 'webaseui-release-channel-')); + const binDirectory = path.join(temporaryRoot, 'bin'); + const logPath = path.join(temporaryRoot, 'calls.jsonl'); + const npxPath = path.join(binDirectory, 'npx'); + + try { + mkdirSync(binDirectory); + writeFileSync( + npxPath, + '#!/usr/bin/env node\n' + + "const fs = require('node:fs');\n" + + "fs.appendFileSync(process.env.WEBASEUI_RELEASE_TEST_LOG, JSON.stringify({ args: process.argv.slice(2), provenance: process.env.NPM_CONFIG_PROVENANCE, access: process.env.NPM_CONFIG_ACCESS }) + '\\n');\n" + ); + chmodSync(npxPath, 0o755); + + const result = spawnSync(process.execPath, ['scripts/release-channel.mjs', 'next', '--publish'], { + cwd: path.resolve(import.meta.dirname, '../..'), + encoding: 'utf8', + env: { + ...process.env, + CI: 'true', + PATH: binDirectory + ':' + (process.env.PATH ?? ''), + WEBASEUI_RELEASE_TEST_LOG: logPath + } + }); + + expect(result.status, result.stderr).toBe(0); + const calls = readFileSync(logPath, 'utf8') + .trim() + .split('\n') + .map((line) => JSON.parse(line)); + expect(calls.map(({ args }) => args)).toEqual([ + ['changeset', 'pre', 'enter', 'next'], + ['changeset', 'version'], + ['changeset', 'publish'] + ]); + expect(calls[2]).toMatchObject({ provenance: 'true', access: 'public' }); + } finally { + rmSync(temporaryRoot, { recursive: true, force: true }); + } + }); +});