diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d6e8e35e..d70b2b0c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -64,8 +64,6 @@ jobs: - name: Typecheck workspaces run: npm run typecheck - - name: Guard the frozen showcase - run: npm run check:frozen-showcase - name: Typecheck documented examples run: npm run check:docs:examples @@ -94,9 +92,6 @@ jobs: - name: Check CodeMonster UI contracts, accessibility, and visual fixtures run: npm run test:ui - - name: Run migration tests - run: npm run test:migration - - name: Run release preparation tests run: npm run test:release-prep @@ -119,8 +114,8 @@ jobs: - name: Install dependencies run: npm ci - # The suite hides dist itself; the build is still needed for its other output, such as the - # generated theme CSS that vueforge-core's parity check reads. + # The suite hides dist itself; the build is still needed for its other output, such as + # generated CSS that some workspaces' own tests read back. - name: Build packages run: npm run build @@ -155,9 +150,6 @@ jobs: - name: Check consumer tree shaking run: npm run check:consumer-tree-shaking - - name: Check deferred runtime budgets - run: npm run check:deferred-budgets - - name: Dry-run publish artifacts run: npm run pack:all:dry-run @@ -260,12 +252,8 @@ jobs: unzip -q "${RUNNER_TEMP}/chrome-for-testing.zip" -d "${RUNNER_TEMP}" "${chrome_for_testing_path}" --version - - name: Verify frozen showcase visuals + - name: Verify cross-platform adapter visuals env: - SHOWCASE_CAPTURE: ${{ runner.temp }}/codemonster-showcase-current - SHOWCASE_DIFF: ${{ runner.temp }}/codemonster-showcase-diff - SHOWCASE_STATE_CAPTURE: ${{ runner.temp }}/codemonster-showcase-state-current - SHOWCASE_STATE_DIFF: ${{ runner.temp }}/codemonster-showcase-state-diff CROSS_PLATFORM_CAPTURE: ${{ runner.temp }}/codemonster-cross-platform-current CROSS_PLATFORM_RAZOR_DIFF: ${{ runner.temp }}/codemonster-cross-platform-razor-diff CROSS_PLATFORM_RAZOR_FIXTURES: ${{ runner.temp }}/codemonster-cross-platform-razor.json @@ -274,8 +262,6 @@ jobs: set -euo pipefail chrome_for_testing_path="${RUNNER_TEMP}/chrome-mac-arm64/Google Chrome for Testing.app/Contents/MacOS/Google Chrome for Testing" - npm run dev -w @codemonster-ru/vueforge-playground-example -- --host 127.0.0.1 --port 5175 > "${RUNNER_TEMP}/codemonster-showcase-vite.log" 2>&1 & - vite_pid=$! npm run visual:cross-platform:razor-render -- --output="${CROSS_PLATFORM_RAZOR_FIXTURES}" npm run visual:cross-platform:serve -- --razor-fixtures="${CROSS_PLATFORM_RAZOR_FIXTURES}" --port=5176 > "${RUNNER_TEMP}/codemonster-cross-platform-vite.log" 2>&1 & adapter_pid=$! @@ -283,16 +269,15 @@ jobs: chrome_pid=$! cleanup() { - kill "${vite_pid}" "${adapter_pid}" "${chrome_pid}" 2>/dev/null || true + kill "${adapter_pid}" "${chrome_pid}" 2>/dev/null || true } trap cleanup EXIT for attempt in {1..60}; do - if curl --fail --silent http://127.0.0.1:5175/ >/dev/null && curl --fail --silent 'http://127.0.0.1:5176/?case=button-default&platform=vue&theme=light' >/dev/null && curl --fail --silent http://127.0.0.1:9226/json/version >/dev/null; then + if curl --fail --silent 'http://127.0.0.1:5176/?case=button-default&platform=vue&theme=light' >/dev/null && curl --fail --silent http://127.0.0.1:9226/json/version >/dev/null; then break fi if [ "${attempt}" -eq 60 ]; then - cat "${RUNNER_TEMP}/codemonster-showcase-vite.log" cat "${RUNNER_TEMP}/codemonster-cross-platform-vite.log" cat "${RUNNER_TEMP}/codemonster-showcase-chrome.log" exit 1 @@ -300,28 +285,19 @@ jobs: sleep 1 done - node scripts/visual/capture-showcase.mjs --origin=http://127.0.0.1:5175 --output="${SHOWCASE_CAPTURE}" --label=ci-current - node scripts/visual/compare-showcase.mjs --baseline=visual-baselines/vueforge-showcase --current="${SHOWCASE_CAPTURE}" --diff="${SHOWCASE_DIFF}" - npm run visual:showcase:states:capture -- --origin=http://127.0.0.1:5175 --output="${SHOWCASE_STATE_CAPTURE}" --label=ci-state-current - npm run visual:showcase:states:compare -- --current="${SHOWCASE_STATE_CAPTURE}" --diff="${SHOWCASE_STATE_DIFF}" npm run visual:cross-platform:capture -- --origin=http://127.0.0.1:5176 --output="${CROSS_PLATFORM_CAPTURE}" --label=ci-actual-adapters node scripts/visual/compare-showcase.mjs --baseline=visual-baselines/vueforge-cross-platform --current="${CROSS_PLATFORM_CAPTURE}/vue" --diff="${CROSS_PLATFORM_VUE_DIFF}" --threshold=4 node scripts/visual/compare-showcase.mjs --baseline=visual-baselines/vueforge-cross-platform --current="${CROSS_PLATFORM_CAPTURE}/razor" --diff="${CROSS_PLATFORM_RAZOR_DIFF}" --threshold=4 - - name: Upload showcase visual differences + - name: Upload cross-platform visual differences if: failure() uses: actions/upload-artifact@v7 with: - name: codemonster-showcase-visual-diff + name: codemonster-cross-platform-visual-diff path: | - ${{ runner.temp }}/codemonster-showcase-current - ${{ runner.temp }}/codemonster-showcase-diff - ${{ runner.temp }}/codemonster-showcase-state-current - ${{ runner.temp }}/codemonster-showcase-state-diff ${{ runner.temp }}/codemonster-cross-platform-current ${{ runner.temp }}/codemonster-cross-platform-vue-diff ${{ runner.temp }}/codemonster-cross-platform-razor-diff ${{ runner.temp }}/codemonster-cross-platform-vite.log - ${{ runner.temp }}/codemonster-showcase-vite.log ${{ runner.temp }}/codemonster-showcase-chrome.log if-no-files-found: ignore diff --git a/.github/workflows/refresh-visual-baselines.yml b/.github/workflows/refresh-visual-baselines.yml deleted file mode 100644 index f1e3e0a6..00000000 --- a/.github/workflows/refresh-visual-baselines.yml +++ /dev/null @@ -1,118 +0,0 @@ -name: Refresh Visual Baselines - -on: - workflow_dispatch: - -permissions: - contents: write - -jobs: - refresh: - runs-on: macos-26 - env: - CHROME_FOR_TESTING_VERSION: 151.0.7922.138 - - steps: - - name: Checkout - uses: actions/checkout@v7 - with: - ref: main - fetch-depth: 0 - - - name: Setup Node.js - uses: actions/setup-node@v6 - with: - node-version: 24 - cache: npm - - - name: Setup PHP - uses: shivammathur/setup-php@v2 - with: - php-version: '8.4' - tools: composer - - - name: Install dependencies - run: npm ci - - - name: Build packages - run: npm run build - - - name: Install Razor visual runtime - run: composer --working-dir=packages/razor update --no-dev --no-interaction --prefer-dist - - - name: Build the frozen reference showcase - run: | - set -euo pipefail - reference_commit="$(node -p "require('./contracts/visual.config.json').reference.commit")" - git worktree add --detach "${RUNNER_TEMP}/vueforge-reference" "${reference_commit}" - cd "${RUNNER_TEMP}/vueforge-reference" - npm ci - npm run build - - - name: Install pinned Chrome for visual checks - run: | - chrome_for_testing_path="${RUNNER_TEMP}/chrome-mac-arm64/Google Chrome for Testing.app/Contents/MacOS/Google Chrome for Testing" - curl --fail --location --retry 3 --silent --show-error \ - "https://storage.googleapis.com/chrome-for-testing-public/${CHROME_FOR_TESTING_VERSION}/mac-arm64/chrome-mac-arm64.zip" \ - --output "${RUNNER_TEMP}/chrome-for-testing.zip" - unzip -q "${RUNNER_TEMP}/chrome-for-testing.zip" -d "${RUNNER_TEMP}" - "${chrome_for_testing_path}" --version - - - name: Capture and commit baselines - run: | - set -euo pipefail - chrome_for_testing_path="${RUNNER_TEMP}/chrome-mac-arm64/Google Chrome for Testing.app/Contents/MacOS/Google Chrome for Testing" - showcase_capture="${RUNNER_TEMP}/codemonster-showcase-reference" - state_capture="${RUNNER_TEMP}/codemonster-showcase-state-reference" - cross_platform_capture="${RUNNER_TEMP}/codemonster-cross-platform-current" - cross_platform_reference="${RUNNER_TEMP}/codemonster-cross-platform-reference" - razor_fixtures="${RUNNER_TEMP}/codemonster-cross-platform-razor.json" - - (cd "${RUNNER_TEMP}/vueforge-reference" && npm run dev -w @codemonster-ru/vueforge-playground-example -- --host 127.0.0.1 --port 5175) > "${RUNNER_TEMP}/codemonster-showcase-vite.log" 2>&1 & - vite_pid=$! - npm run visual:cross-platform:razor-render -- --output="${razor_fixtures}" - npm run visual:cross-platform:serve -- --razor-fixtures="${razor_fixtures}" --port=5176 > "${RUNNER_TEMP}/codemonster-cross-platform-vite.log" 2>&1 & - adapter_pid=$! - "${chrome_for_testing_path}" --headless=new --remote-debugging-port=9226 --user-data-dir="${RUNNER_TEMP}/codemonster-showcase-chrome" --disable-gpu --no-first-run --no-default-browser-check about:blank > "${RUNNER_TEMP}/codemonster-showcase-chrome.log" 2>&1 & - chrome_pid=$! - cleanup() { kill "${vite_pid}" "${adapter_pid}" "${chrome_pid}" 2>/dev/null || true; } - trap cleanup EXIT - - for attempt in {1..60}; do - if curl --fail --silent http://127.0.0.1:5175/ >/dev/null && curl --fail --silent 'http://127.0.0.1:5176/?case=button-default&platform=vue&theme=light' >/dev/null && curl --fail --silent http://127.0.0.1:9226/json/version >/dev/null; then - break - fi - if [ "${attempt}" -eq 60 ]; then exit 1; fi - sleep 1 - done - - # Ports 5175 serves the frozen reference commit; 5176 serves the current adapters. The - # reference names Inter in its tokens but never shipped it, so its captures are given the - # faces the product now ships; without that a baseline records a system fallback. - node scripts/visual/capture-showcase.mjs --origin=http://127.0.0.1:5175 --output="${showcase_capture}" --label=vueforge-reference --font=inject - npm run visual:showcase:states:capture -- --origin=http://127.0.0.1:5175 --output="${state_capture}" --label=vueforge-state-reference --font=inject - # The adapter capture checks Vue against Razor; it must never become the cross-platform - # baseline, because a baseline taken from the product cannot prove anything about the - # reference. The baseline itself is captured from the reference checkout below. - npm run visual:cross-platform:capture -- --origin=http://127.0.0.1:5176 --output="${cross_platform_capture}" --label=vueforge-cross-platform-current - node scripts/visual/compare-showcase.mjs --baseline="${cross_platform_capture}/vue" --current="${cross_platform_capture}/razor" - - npm run visual:cross-platform:reference:serve -- --reference="${RUNNER_TEMP}/vueforge-reference" --port=5178 > "${RUNNER_TEMP}/codemonster-cross-platform-reference.log" 2>&1 & - reference_fixture_pid=$! - for attempt in {1..60}; do - if curl --fail --silent 'http://127.0.0.1:5178/?case=button-default&theme=light' >/dev/null; then break; fi - if [ "${attempt}" -eq 60 ]; then cat "${RUNNER_TEMP}/codemonster-cross-platform-reference.log"; exit 1; fi - sleep 1 - done - npm run visual:cross-platform:reference:capture -- --origin=http://127.0.0.1:5178 --output="${cross_platform_reference}" --label=vueforge-cross-platform-reference-vue --font=inject - kill "${reference_fixture_pid}" 2>/dev/null || true - - cp -R "${showcase_capture}/." visual-baselines/vueforge-showcase/ - cp -R "${state_capture}/." visual-baselines/vueforge-showcase-states/ - cp -R "${cross_platform_reference}/." visual-baselines/vueforge-cross-platform/ - npm exec -- prettier --write visual-baselines/*/manifest.json - git config user.name 'github-actions[bot]' - git config user.email '41898282+github-actions[bot]@users.noreply.github.com' - git add visual-baselines - git diff --cached --quiet || git commit -m 'Refresh visual baselines' - git push origin main diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md index 177edc76..e2795d8d 100644 --- a/ARCHITECTURE.md +++ b/ARCHITECTURE.md @@ -1,16 +1,17 @@ # CodeMonster UI Monorepo Architecture -This repository contains the CodeMonster UI package line, the retained VueForge products, shared -contracts, cross-platform examples, and the tooling used to validate and publish them. +This repository contains the CodeMonster UI package line, shared contracts, cross-platform +examples, and the tooling used to validate and publish them. CodeMonster UI succeeds VueForge, the +Vue-only design system this project migrated from; VueForge is sunset, and its own packages and +documentation now live in [`codemonster-ru/vueforge`](https://github.com/codemonster-ru/vueforge). ## Repository layout - `packages/*` — publishable npm packages and the Annabel Razor adapter - `examples/*` — local runnable examples for Vue and Annabel Razor - `contracts/*` — component manifests, behavior contracts, schemas, and visual-fixture metadata -- `docs/*` — product, package, architecture, migration, and release documentation -- `migration/*` — machine-readable VueForge-to-CodeMonster UI migration data and checks -- `scripts/*` — build, CI, contract, migration, release, and visual-validation tooling +- `docs/*` — product, package, architecture, and release documentation +- `scripts/*` — build, CI, contract, release, and visual-validation tooling - `visual-baselines/*` — reviewed visual-regression reference images used by CI - `.github/*` — repository workflows; `.githooks/*` — local Git hooks @@ -32,27 +33,13 @@ Each publishable npm package should keep a consistent shape: - `test/*` The `razor` package follows Composer conventions and keeps its PHP metadata and tests alongside -the adapter source. Shared CodeMonster UI packages use the `ui-*` naming line; retained VueForge -products keep their published `vueforge-*` names while they are in maintenance. +the adapter source. Every publishable npm package uses the `ui-*` naming line. ## Naming conventions -### Vue components - -- Component file names: `Vf*.vue` -- Public component names and plugin registrations: `Vf*` -- No `Vue*`/legacy aliases in public API - -### CSS classes and tokens - -- Base namespace: `vf-` -- Package namespaces: - - `core`: `vf-*` - - `layouts`: `vf-layout-*` (plus component-specific `vf-*` blocks) - - `codeblock`: `vf-codeblock*` / `--vf-codeblock-*` - - `playground`: `vf-playground*` / `--vf-playground-*` - - `icons`: `vf-icon*` / `--vf-icon-*` -- Legacy prefixes (`vif*`, `vcb*`, `cm-*`) are not used for new code. +Component names, CSS classes, custom properties, and runtime hooks all use the `Cm`/`cm-` prefix. +See [naming and prefixes](./docs/architecture/naming-and-prefixes.md) for the full, authoritative +table; it is not duplicated here so there is one place to keep it correct. ## Shared behavior layer @@ -105,9 +92,9 @@ Each publishable npm package should expose, where applicable: root `format:check`, which runs with `--if-present`, so its formatting goes unverified. - `prepack` (usually calls `build`) -The root scripts compose package checks with repository-level documentation, contract, migration, -consumer, and visual checks. New repository checks should be added to the root workflow only when -they validate a cross-package invariant. +The root scripts compose package checks with repository-level documentation, contract, consumer, +and visual checks. New repository checks should be added to the root workflow only when they +validate a cross-package invariant. ## Release hygiene diff --git a/README.md b/README.md index 5f97c0ad..228c6de5 100644 --- a/README.md +++ b/README.md @@ -18,23 +18,18 @@ composer require codemonster-ru/ui-razor:^1.1.0 ``` See the [CodeMonster UI 1.1 release notes](./docs/codemonster-ui-1.1-release-notes.md), -[component documentation](./docs/components/button.md), -[CSS-only guide](./docs/css/getting-started.md), and -[VueForge migration guide](./docs/vueforge-to-codemonster-ui.md). +[component documentation](./docs/components/button.md), and +[CSS-only guide](./docs/css/getting-started.md). -Local runnable examples are available in [`examples/vue`](./examples/vue) for Vue +Local runnable examples are available in [`examples/ui-showcase`](./examples/ui-showcase) for Vue and [`examples/razor`](./examples/razor) for Annabel Razor/PHP. -## VueForge maintenance +## VueForge -VueForge design-system foundations are in maintenance. They receive critical security and -correctness fixes, but no new component families or design-system foundations. Use -[CodeMonster UI 1.1](./docs/codemonster-ui-1.1-release-notes.md) for new shared Vue and Annabel Razor UI -work. - -Existing VueForge releases remain installable and are not being unpublished. Icons remain -supported until a verified replacement exists. CodeBlock and the Playground packages remain -separately maintained products and can be used alongside CodeMonster UI. +CodeMonster UI succeeds VueForge, the Vue-only design system this project migrated from. VueForge +is sunset: no new components, no new fixes. Its packages and documentation now live in +[`codemonster-ru/vueforge`](https://github.com/codemonster-ru/vueforge), where existing consumers +can continue to install them; nothing in this repository builds or publishes them anymore. ### Requirements @@ -44,93 +39,11 @@ separately maintained products and can be used alongside CodeMonster UI. - Published packages may declare narrower runtime requirements in their own manifests; consult the package documentation when consuming them outside this repository. -### Existing VueForge applications - -Use the package manager that owns your application lockfile: - -```bash -npm install vue@^3.5.0 @codemonster-ru/vueforge-core@^2.4.0 -``` - -```bash -pnpm add vue@^3.5.0 @codemonster-ru/vueforge-core@^2.4.0 -``` - -```bash -yarn add vue@^3.5.0 @codemonster-ru/vueforge-core@^2.4.0 -``` - -### Quick start - -Install the Core plugin once and import its complete stylesheet in the browser entry: - -```ts -// src/main.ts -import { createApp } from 'vue'; -import VueForgeCore from '@codemonster-ru/vueforge-core'; -import '@codemonster-ru/vueforge-core/styles.css'; -import App from './App.vue'; - -createApp(App).use(VueForgeCore).mount('#app'); -``` - -Wrap themed UI in `VfThemeProvider`. Components are not registered globally, so import the -components used by each application: - -```vue - - - - -``` - -`VfThemeSwitch` persists the selected light or dark mode through the provider. Build the -application with its normal production command—for a standard Vite project: - -```bash -npm run build -``` - -### Packages - -| Package | Release | Purpose | -| ------------------------------------------------------------- | ------- | ------------------------------------------ | -| [`@codemonster-ru/vueforge-core`][npm-core] | `2.4.0` | Components, composables, theme integration | -| [`@codemonster-ru/vueforge-theme`][npm-theme] | `2.0.1` | Framework-agnostic theme engine | -| [`@codemonster-ru/vueforge-layouts`][npm-layouts] | `2.1.2` | Layout primitives and application shells | -| [`@codemonster-ru/vueforge-icons`][npm-icons] | `3.2.0` | Vue icon renderer and catalog | -| [`@codemonster-ru/vueforge-codeblock`][npm-codeblock] | `4.0.1` | Highlighted, themed code blocks | -| [`@codemonster-ru/vueforge-playground`][npm-playground] | `3.0.1` | Vue playground UI adapter | -| [`@codemonster-ru/vueforge-playground-core`][npm-pg-core] | `2.1.0` | Framework-agnostic playground runtime | -| [`@codemonster-ru/vueforge-playground-vite-plugin`][npm-vite] | `1.0.0` | Vite playground virtual-module integration | - ### Documentation -For full documentation, visit [docs.codemonster.net/vueforge](https://docs.codemonster.net/vueforge/). -Use the [VueForge 2 migration guide](./docs/migration-to-v2.md) for breaking changes and the -[release notes](./docs/release-notes.md) for the coordinated package changes. New applications can -adopt CodeMonster UI for shared Vue and Annabel Razor components. Existing applications should use -the [VueForge to CodeMonster UI migration guide](./docs/vueforge-to-codemonster-ui.md) for package -and component replacements, retained products, manual migrations, and the deterministic codemod. +Start at [the documentation index](./docs/index.md) and see the +[release notes](./docs/release-notes.md) for coordinated package changes. ## License -VueForge packages are available under the [MIT License](./LICENSE). - -[npm-codeblock]: https://www.npmjs.com/package/@codemonster-ru/vueforge-codeblock -[npm-core]: https://www.npmjs.com/package/@codemonster-ru/vueforge-core -[npm-icons]: https://www.npmjs.com/package/@codemonster-ru/vueforge-icons -[npm-layouts]: https://www.npmjs.com/package/@codemonster-ru/vueforge-layouts -[npm-pg-core]: https://www.npmjs.com/package/@codemonster-ru/vueforge-playground-core -[npm-playground]: https://www.npmjs.com/package/@codemonster-ru/vueforge-playground -[npm-theme]: https://www.npmjs.com/package/@codemonster-ru/vueforge-theme -[npm-vite]: https://www.npmjs.com/package/@codemonster-ru/vueforge-playground-vite-plugin +CodeMonster UI packages are available under the [MIT License](./LICENSE). diff --git a/contracts/visual.config.json b/contracts/visual.config.json index 92cfc31d..37c47217 100644 --- a/contracts/visual.config.json +++ b/contracts/visual.config.json @@ -1,8 +1,7 @@ { "schemaVersion": 2, "reference": { - "commit": "fd793696f50d3be0fcd3788f0f8f751c63869963", - "routes": ["core", "layouts", "icons", "codeblock", "playground"] + "commit": "fd793696f50d3be0fcd3788f0f8f751c63869963" }, "themes": [ { diff --git a/contracts/visual.states.json b/contracts/visual.states.json deleted file mode 100644 index 4dc52630..00000000 --- a/contracts/visual.states.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "schemaVersion": 1, - "states": [ - { - "id": "hover", - "route": "core", - "selector": "[data-test=\"action-geometry-matrix\"] :is(.vf-button, .cm-button):not(:disabled)", - "pseudoClasses": ["hover"] - }, - { - "id": "active", - "route": "core", - "selector": "[data-test=\"action-geometry-matrix\"] :is(.vf-button, .cm-button):not(:disabled)", - "pseudoClasses": ["active"] - }, - { - "id": "focus-visible", - "route": "core", - "selector": "[data-test=\"action-geometry-matrix\"] :is(.vf-button, .cm-button):not(:disabled)", - "pseudoClasses": ["focus", "focus-visible"] - }, - { - "id": "disabled", - "route": "core", - "selector": "[data-test=\"action-geometry-matrix\"] :is(.vf-button, .cm-button):disabled" - }, - { - "id": "invalid", - "route": "core", - "selector": "[data-test=\"form-geometry-matrix\"] [aria-invalid=\"true\"]" - }, - { - "id": "selected", - "route": "core", - "selector": "[role=\"tab\"][aria-selected=\"true\"]" - }, - { - "id": "open", - "route": "core", - "selector": "[data-test=\"navigation-geometry-matrix\"] :is(.vf-accordion__trigger, .cm-accordion__trigger)[aria-expanded=\"true\"]", - "padding": 160 - }, - { - "id": "closed", - "route": "core", - "selector": "[data-test=\"navigation-geometry-matrix\"] :is(.vf-accordion__trigger, .cm-accordion__trigger)[aria-expanded=\"false\"]", - "padding": 80 - }, - { - "id": "loading", - "route": "core", - "selector": "[data-test=\"action-geometry-matrix\"] [aria-busy=\"true\"]" - }, - { - "id": "indeterminate", - "route": "core", - "selector": "[role=\"progressbar\"][aria-label=\"Background sync progress\"]" - }, - { - "id": "reduced-motion", - "route": "core", - "selector": ":is(.vf-progress-bar--animated, .cm-progress-bar--animated)", - "media": "reduce", - "assertReducedMotion": true - } - ] -} diff --git a/docs/architecture/application-shell-ownership.md b/docs/architecture/application-shell-ownership.md index 0e59a6c7..979537a1 100644 --- a/docs/architecture/application-shell-ownership.md +++ b/docs/architecture/application-shell-ownership.md @@ -78,9 +78,8 @@ canonical. ## CMUI-188 verification -The boundary was re-verified on 2026-08-15 against the -[representative consumer inventory](../verification/consumer-usage-inventory.md) after the portable -components and maintained recipes were delivered. +The boundary was re-verified on 2026-08-15 against the representative consumer inventory after the +portable components and maintained recipes were delivered. | Reconsideration criterion | Consumer evidence | Result | | ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | diff --git a/docs/codeblock/api/index.md b/docs/codeblock/api/index.md deleted file mode 100644 index 40a32a10..00000000 --- a/docs/codeblock/api/index.md +++ /dev/null @@ -1,153 +0,0 @@ ---- -title: 'API' -description: 'Public API reference for the codeblock package' -order: 3 ---- - -# API - -Reference for package-level exports and runtime helpers available in `@codemonster-ru/vueforge-codeblock`. - -## Overview - -Public API surface of `@codemonster-ru/vueforge-codeblock`. - -This page documents the package-level API (plugin entry, exports, helpers, and types), not only the `VfCodeBlock` component tab API. - -Subpath exports: - -- `@codemonster-ru/vueforge-codeblock/view` (component/plugin-oriented entry) -- `@codemonster-ru/vueforge-codeblock/highlight` (highlight helpers) -- `@codemonster-ru/vueforge-codeblock/style.css` -- `@codemonster-ru/vueforge-codeblock/tokens.css` -- `@codemonster-ru/vueforge-codeblock/codeblock.css` -- `@codemonster-ru/vueforge-codeblock/critical.css` - -Migration note: - -- Root entrypoint `@codemonster-ru/vueforge-codeblock` removed. -- Use `@codemonster-ru/vueforge-codeblock/view` for plugin/component API. -- Use `@codemonster-ru/vueforge-codeblock/highlight` for highlight helpers. - -## Plugin and Component - -The following items are listed in this section: - -- `default` (`Plugin`): registers `VfCodeBlock`. -- `VfCodeBlock`: standalone component. - -```ts -import VueForgeCodeBlock from '@codemonster-ru/vueforge-codeblock/view'; -app.use(VueForgeCodeBlock, { - themeScope: '#docs-root', - allowedLanguages: ['ts', 'vue', 'json'], - preloadLanguages: ['ts', 'vue'], -}); -``` - -Plugin options: - -- `themeVars?: { base?, light?, dark? }`: runtime CSS variable groups. -- `themeScope?: string`: selector used for runtime theme variables (`:root` by default). -- `styleNonce?: string`: CSP nonce applied to the generated runtime style element. -- `allowedLanguages?: string[]`: global runtime allowlist. -- `preloadLanguages?: string[]`: preloads selected languages on plugin install (non-blocking, respects allowlist). - -## Highlight Helpers - -The following items are listed in this section: - -- `escapeCodeHtml(code: string): string` -- `renderPlainCodeLines(code: string): string[]` -- `highlightCodeLine(language: string, line: string, theme?: 'light' | 'dark', highlight?: boolean, options?: CodeBlockHighlightOptions): Promise` -- `highlightCodeLines(language: string, code: string, theme: 'light' | 'dark', highlight?: boolean, options?: CodeBlockHighlightOptions): Promise` -- `highlightCodeBlock(language: string, code: string, theme?: 'light' | 'dark', highlight?: boolean, options?: CodeBlockHighlightOptions): Promise` -- `preloadCodeBlockLanguages(languages: string[], allowedLanguages?: string[]): Promise` - -`CodeBlockHighlightOptions` accepts `allowedLanguages?: string[]` and -`fallbackLanguage?: 'plaintext' | 'text'`. - -## Runtime Theme Helper - -The code snippet below illustrates this section. - -```ts -import { setCodeBlockThemeVars } from '@codemonster-ru/vueforge-codeblock/view'; - -setCodeBlockThemeVars( - { - base: { - '--vf-codeblock-border-color': 'var(--vf-color-border-default)', - }, - }, - { themeScope: '#docs-root' }, -); -``` - -Injects CSS variables into a runtime ` -``` -```` - -Enable `multiSort` to let users add criteria with regular clicks. The `sort` array stores criteria -in priority order and the headers display that priority. Clicking a sorted column cycles through -ascending, descending, and removal without clearing the other criteria. - -When an API provides already-paged rows, use manual pagination. Manual pagination always leaves row -ordering to the consumer, preventing the component from sorting only the current page: - -```vue - -``` - -Changing the sort resets pagination to page 1. Map column keys to the API's field names in the -consumer; the table does not prescribe a server query format. - -## Pagination - -Client pagination slices local rows. The paginator shows page numbers in a compact range. The first -and last pages remain available, pages around the current position are shown directly, and omitted -ranges are represented by non-interactive ellipses. - -```vue - -``` - -The current page uses `aria-current="page"`. Number buttons use `labels.goToPage`, while the current -button uses `labels.pageSummary`. Previous and next controls retain their localized labels. -Below the VueForge `xs` container threshold, the paginator keeps only the previous, current, and -next page controls visible so it does not overflow narrow table regions. - -Use `paginationMode="manual"` with `totalRows` when rows are already paged by an API. The same page -range is calculated from `totalRows` and `pageSize`; fetching remains consumer-owned. diff --git a/docs/core/components/data-table/index.md b/docs/core/components/data-table/index.md deleted file mode 100644 index ea06d2af..00000000 --- a/docs/core/components/data-table/index.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: 'Data Table' -description: 'Data-driven table component' -order: 38 ---- - -# Data Table - -Data-driven table component for rendering rows from column definitions. - -Use `VfDataTable` when the table is backed by structured records. Use `VfTable` when you need direct semantic table markup. - -## Tabs - -- [Features](./features.md) -- [API](./api.md) -- [Theming](./theming.md) diff --git a/docs/core/components/data-table/theming.md b/docs/core/components/data-table/theming.md deleted file mode 100644 index ab927437..00000000 --- a/docs/core/components/data-table/theming.md +++ /dev/null @@ -1,26 +0,0 @@ -# Theming - -`VfDataTable` reuses the table token namespace. - -Skeleton loading rows reuse the `VfSkeleton` token namespace. Spinner loading reuses the `VfProgressSpinner` token namespace. - -Selection controls reuse the `VfCheckbox` token namespace. - -Pinned columns reuse table background, stripe, header, and border tokens. - -| Token | Purpose | -| ------------------------------ | ---------------------------------------------- | -| `tableBorderColor` | Outer, row, and optional column divider color. | -| `tableBackground` | Base table background. | -| `tableColor` | Body cell text color. | -| `tableCaptionColor` | Caption text color. | -| `tableHeadBackground` | Header row background. | -| `tableHeadColor` | Header cell text color. | -| `tableFootBackground` | Footer row background. | -| `tableFootColor` | Footer text color. | -| `tableStripeBackground` | Alternating row background. | -| `dataTableStateColor` | Empty and loading state text color. | -| `dataTableErrorColor` | Error state text color. | -| `dataTablePaginationColor` | Pagination metadata color. | -| `dataTablePaginationPageColor` | Current page color. | -| `dataTableColumnResizerColor` | Resize and reorder interaction color. | diff --git a/docs/core/components/date-picker/api.md b/docs/core/components/date-picker/api.md deleted file mode 100644 index 08794979..00000000 --- a/docs/core/components/date-picker/api.md +++ /dev/null @@ -1,75 +0,0 @@ -# API - -Public component contract: props, events, model formats, and related types. - -## Props - -| Name | Type | Default | Description | -| ------------------ | ---------------------------------------- | ---------------- | ---------------------------------------------------------------------------------------- | -| `modelValue?` | `string \| string[]` | `''` | Controlled value. Array values are used by `multiple` and `range`. | -| `min?` | `string` | — | Inclusive lower boundary in the active model format. | -| `max?` | `string` | — | Inclusive upper boundary in the active model format. | -| `multiple?` | `boolean` | `false` | Allows toggling multiple values without closing the picker. | -| `range?` | `boolean` | `false` | Selects a sorted start/end pair. Range mode takes precedence over `multiple`. | -| `monthPicker?` | `boolean` | `false` | Selects months and uses `YYYY-MM` values. | -| `yearPicker?` | `boolean` | `false` | Selects years and uses `YYYY` values. Year mode takes precedence over month mode. | -| `showTime?` | `boolean` | `false` | Adds hour/minute controls and emits `YYYY-MM-DDTHH:mm`; ignored in month and year modes. | -| `minuteStep?` | `number` | `1` | Minute interval, normalized to an integer from 1 through 60. | -| `locale?` | `string \| string[]` | runtime locale | Locale preference passed to `Intl.DateTimeFormat`. | -| `displayFormat?` | `string` | localized | Display pattern using `yyyy`, `yy`, `MM`, `M`, `dd`, `d`, `HH`, `H`, `mm`, and `m`. | -| `firstDayOfWeek?` | `0 \| 1 \| 2 \| 3 \| 4 \| 5 \| 6` | `1` | First weekday, where `0` is Sunday and `1` is Monday. | -| `size?` | `'sm' \| 'md' \| 'lg'` | `'md'` | Trigger size. | -| `invalid?` | `boolean` | `false` | Applies invalid styling and `aria-invalid`. | -| `disabled?` | `boolean` | `false` | Disables the trigger and generated hidden form controls. | -| `readonly?` | `boolean` | `false` | Prevents opening, clearing, and value changes while preserving the value. | -| `clearable?` | `boolean` | `false` | Shows a clear action when a value is present. | -| `placeholder?` | `string` | — | Text shown while the value is empty outside a floating-label field. | -| `placement?` | `'bottom-start' \| 'bottom-end'` | `'bottom-start'` | Preferred floating placement; the calendar may flip above the trigger. | -| `teleportTo?` | `string \| HTMLElement \| null \| false` | `document.body` | Calendar teleport target. Use `null` or `false` to render beside the trigger. | -| `disableTeleport?` | `boolean` | `false` | Disables teleporting regardless of `teleportTo`. | -| `labels?` | `Partial` | `{}` | Overrides visible and accessible calendar labels. | - -Standard `id`, `name`, `class`, `style`, `title`, `tabindex`, `aria-*`, and `data-*` attributes -are supported. A string `name` creates hidden form inputs containing the unchanged model values. - -## Emits - -| Name | Parameters | ReturnType | Description | -| ------------------- | ----------------------------- | ---------- | ---------------------------------------------- | -| `update:modelValue` | `[value: string \| string[]]` | `void` | Emitted whenever the controlled value changes. | - -## Slots - -`VfDatePicker` has no public slots. - -## Model formats - -| Mode | Value format | Empty value | -| -------------------------- | ---------------------- | ----------- | -| Default day picker | `YYYY-MM-DD` | `''` | -| Day picker with `showTime` | `YYYY-MM-DDTHH:mm` | `''` | -| `monthPicker` | `YYYY-MM` | `''` | -| `yearPicker` | `YYYY` | `''` | -| `multiple` or `range` | Array of active format | `[]` | - -Display localization and `displayFormat` never change these model or form-submission values. - -## Types - -### `VfDatePickerLabels` - -The `labels` prop accepts a partial object. Omitted values retain the built-in English labels. - -| Name | Type | Default | -| ----------------- | -------- | ------------------- | -| `calendar` | `string` | `'Choose date'` | -| `clear` | `string` | `'Clear date'` | -| `previousMonth` | `string` | `'Previous month'` | -| `nextMonth` | `string` | `'Next month'` | -| `previousYear?` | `string` | `'Previous year'` | -| `nextYear?` | `string` | `'Next year'` | -| `previousDecade?` | `string` | `'Previous decade'` | -| `nextDecade?` | `string` | `'Next decade'` | -| `time` | `string` | `'Time'` | -| `hour` | `string` | `'Hour'` | -| `minute` | `string` | `'Minute'` | diff --git a/docs/core/components/date-picker/features.md b/docs/core/components/date-picker/features.md deleted file mode 100644 index c2c93fd0..00000000 --- a/docs/core/components/date-picker/features.md +++ /dev/null @@ -1,136 +0,0 @@ -# Features - -## Import - -The package root is CSS-free. Browser component subpaths automatically load the Date Picker CSS. - -```ts -import { VfDatePicker } from '@codemonster-ru/vueforge-core/date-picker'; -``` - -For a manual CSS setup, import `VfDatePicker` from the package root and add -`@codemonster-ru/vueforge-core/date-picker.css` with the shared foundation styles. - -## Basic date selection - -The visible value follows the requested locale, while `v-model` remains `YYYY-MM-DD`. - -````playground-src -mode: component -framework: vue -height: 420 -entry: /App.vue - -```vue file=/App.vue - - - -``` -```` - -## Range and multiple selection - -Set `range` for a sorted start/end pair or `multiple` for independent values. Both modes use an -array and clear to `[]`. - -```vue - - - - -``` - -## Month, year, and time modes - -Month and year modes change both the selection grid and model format. Time controls apply only to -the default day picker. - -```vue - - - - - -``` - -## Display formatting and localization - -Use `locale` for normal localized output. Use `displayFormat` only when a product requires a fixed -pattern; supported tokens are documented in the [API](./api.md). Neither option changes the model. - -```vue - - -``` - -## Floating labels and forms - -Inside a floating `VfField`, Date Picker participates in the field's filled/open state and hides its -empty placeholder. Passing a string `name` produces one hidden input per model value, so native -form submission receives the same ISO-like values as `v-model`. - -```vue - - - -``` - -## Accessibility and keyboard support - -The trigger exposes dialog relationships through `aria-haspopup`, `aria-expanded`, and -`aria-controls`. Calendar, month, and year choices use grid semantics with roving focus; current, -selected, disabled, and range states are announced through ARIA. - -| Key | Function | -| ----------------------------- | ------------------------------------------------------------------------ | -| `Enter`, `Space`, `ArrowDown` | Opens the picker from the trigger. | -| Arrow keys | Moves by day/week, month/grid row, or year/grid row for the active mode. | -| `Home`, `End` | Moves to the start or end of the current week, year, or year range. | -| `PageUp`, `PageDown` | Moves by month, year, or 12-year range for the active mode. | -| `Escape` | Closes the picker and restores focus to the trigger. | - -Provide a visible label through `VfField` or an accessible name through `aria-label` when the -component is used independently. diff --git a/docs/core/components/date-picker/index.md b/docs/core/components/date-picker/index.md deleted file mode 100644 index b09b328b..00000000 --- a/docs/core/components/date-picker/index.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: 'Date Picker' -description: 'Accessible date, month, year, range, and time selection' -order: 4 ---- - -# Date Picker - -`VfDatePicker` is a controlled date input with localized display text and stable ISO-like model -values. It supports day, month, year, time, multiple-selection, and range workflows. - -## Tabs - -- [Features](./features.md) -- [API](./api.md) -- [Theming](./theming.md) diff --git a/docs/core/components/date-picker/theming.md b/docs/core/components/date-picker/theming.md deleted file mode 100644 index 8f834f25..00000000 --- a/docs/core/components/date-picker/theming.md +++ /dev/null @@ -1,20 +0,0 @@ -# Theming - -`VfDatePicker` uses the existing VueForge control, field, selectable, surface, and overlay token -contracts. It intentionally introduces no Date Picker-specific public theme fields. - -## Shared token groups - -| Token group | Representative CSS variables | Purpose | -| ----------------- | ------------------------------------------------------------------------------------------------------ | ----------------------------------------------------- | -| Select surface | `--vf-select-background`, `--vf-select-border-color`, `--vf-select-color` | Trigger surface, border, and text. | -| Select states | `--vf-select-hover-border-color`, `--vf-select-focus-border-color`, `--vf-select-invalid-border-color` | Hover, focus, and invalid trigger states. | -| Selectable states | `--vf-selectable-color`, `--vf-selectable-hover-background`, `--vf-selectable-active-background` | Day, month, and year interaction states. | -| Field geometry | `--vf-field-*` | Sizes, icon placement, clearing, and floating labels. | -| Control geometry | `--vf-control-height-*`, `--vf-control-font-size-*`, `--vf-radius-control` | Shared control sizing and radius. | -| Floating surfaces | `--vf-surface-padding-compact`, `--vf-surface-gap-compact`, `--vf-overlay-viewport-padding` | Calendar spacing and viewport positioning. | -| Focus and motion | `--vf-color-focus-ring`, `--vf-focus-ring-width`, `--vf-motion-duration-fast` | Keyboard focus and open/close transitions. | - -The time selectors reuse `VfSelect`; navigation and calendar cells reuse `VfIconButton` and -`VfButton`. Theme those primitives to keep the combined control consistent with the rest of the -application. diff --git a/docs/core/components/dialog/api.md b/docs/core/components/dialog/api.md deleted file mode 100644 index 7b404172..00000000 --- a/docs/core/components/dialog/api.md +++ /dev/null @@ -1,69 +0,0 @@ -# API - -Public component contract: props, events, slots, and related types. - -## Props - -Component props and their default values. - -| Name | Type | Default | Description | -| --- | --- | --- | --- | -| `open?` | `boolean` | — | Controlled open state. | -| `defaultOpen?` | `boolean` | `false` | Initial uncontrolled open state. | -| `title?` | `string` | — | Text title shown in the component header area. | -| `description?` | `string` | — | Supporting helper text. | -| `size?` | `VfDialogSize` | `md` | Size token for spacing and dimensions. | -| `dividers?` | `boolean` | `false` | Shows separators between header/body/footer regions. | -| `closeOnOverlayClick?` | `boolean` | `true` | Closes component when overlay/backdrop is clicked. | -| `closeOnEscape?` | `boolean` | `true` | Closes component when `Escape` key is pressed. | -| `closable?` | `boolean` | `true` | Shows close control and allows explicit dismiss action. | -| `ariaLabel?` | `string` | — | Explicit accessible name; takes precedence over the generated title relationship. | -| `ariaLabelledby?` | `string` | — | Explicit ID reference for the accessible name. | -| `ariaDescribedby?` | `string` | — | Explicit ID reference for the accessible description. | -| `teleportTo?` | `string \| HTMLElement \| null \| false` | — | Teleport target selector/element; `null`/`false` disables teleport resolution. | -| `disableTeleport?` | `boolean` | `false` | Forces in-place rendering without teleport. | - -## Emits - -Emitted component events and their payload shapes. - -| Name | Parameters | ReturnType | Description | -| --- | --- | --- | --- | -| `update:open` | `[value: boolean]` | `void` | Emitted with next open state. | -| `openChange` | `[value: boolean]` | `void` | Emitted when open state changes. | - -## Slots - -Available slots and their slot props. - -| Name | Parameters | ReturnType | Description | -| --- | --- | --- | --- | -| `default` | `[scope: { close: () => void }]` | `void` | dialog body (`{ close }` slot prop available) | -| `header` | `[scope: { titleId: string }]` | `void` | Custom heading, wrapped by the generated title ID. | -| `description` | `[scope: { descriptionId: string }]` | `void` | Custom description, wrapped by the generated description ID. | -| `actions` | `[scope: { close: () => void }]` | `void` | (`{ close }` slot prop available) | -| `footer` | `[scope: { close: () => void }]` | `void` | (`{ close }` slot prop available) | - -## Events - -Native DOM events exposed by the component. - -| Name | Type | Description | -| --- | --- | --- | -| `—` | `—` | No additional native events are documented. | - -## Interfaces - -Exported interfaces related to this component. - -| Name | Type | Default | Description | -| --- | --- | --- | --- | -| `—` | `—` | `—` | No dedicated interfaces in this component contract. | - -## Types - -Exported utility and union types. - -| Name | Values | -| --- | --- | -| `VfDialogSize` | `'sm' \| 'md' \| 'lg'` | diff --git a/docs/core/components/dialog/features.md b/docs/core/components/dialog/features.md deleted file mode 100644 index 07ce8eb3..00000000 --- a/docs/core/components/dialog/features.md +++ /dev/null @@ -1,72 +0,0 @@ -# Features - -Overlay dialog for confirmations and focused workflows. - -## Import - -Import statement for this component. - -```ts -import { VfDialog } from '@codemonster-ru/vueforge-core'; -``` - -## Basic - -Basic usage example. - -````playground-src -mode: component -framework: vue -height: 260 -entry: /App.vue - -```vue file=/App.vue - - - -``` -```` - -## Accessibility - -Accessibility behavior and keyboard interactions. - -### Screen Reader - -The following items are listed in this section: - -- Dialog content is rendered with `role="dialog"` and `aria-modal="true"`. -- The accessible name is linked through `aria-labelledby` (title) and optional description through `aria-describedby`. -- Provide a meaningful `title` (or `header` slot) and description so screen readers announce context immediately when opened. - -### Keyboard Support - -Keyboard interaction follows native semantics of the rendered element or composite widget. - -| Key | Function | -| --- | --- | -| `Tab` | Moves focus to the next focusable element inside the dialog (focus is trapped while open). | -| `Shift + Tab` | Moves focus to the previous focusable element inside the dialog. | -| `Escape` | Closes the dialog when `closeOnEscape` is enabled. | -| `Enter` | Activates the currently focused action (for example, confirm/submit buttons). | diff --git a/docs/core/components/dialog/index.md b/docs/core/components/dialog/index.md deleted file mode 100644 index c9e0c0e2..00000000 --- a/docs/core/components/dialog/index.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: "Dialog" -description: "Modal dialog component" -order: 4 ---- - -# Dialog - -This section provides a quick overview before the detailed subsections below. - - -## Tabs - -The following items are listed in this section: - -- [Features](./features.md) -- [API](./api.md) -- [Theming](./theming.md) diff --git a/docs/core/components/dialog/theming.md b/docs/core/components/dialog/theming.md deleted file mode 100644 index bf43f639..00000000 --- a/docs/core/components/dialog/theming.md +++ /dev/null @@ -1,19 +0,0 @@ -# Theming - -Component styling surface: available classes and design tokens. - -## CSS Classes - -Documented CSS classes and their intended usage. - -| Class | Description | -| --- | --- | -| `—` | No documented CSS classes yet. | - -## Design Tokens - -Available design tokens and corresponding CSS variables. - -| Token | CSS Variable | Description | -| --- | --- | --- | -| `—` | `—` | No documented design tokens yet. | diff --git a/docs/core/components/divider/api.md b/docs/core/components/divider/api.md deleted file mode 100644 index eda0b7ca..00000000 --- a/docs/core/components/divider/api.md +++ /dev/null @@ -1,51 +0,0 @@ -# API - -Public component contract: props, events, slots, and related types. - -## Props - -Component props and their default values. - -| Name | Type | Default | Description | -| --- | --- | --- | --- | -| `orientation?` | `'horizontal' \| 'vertical'` | `horizontal` | Divider orientation axis. | - -## Emits - -Emitted component events and their payload shapes. - -| Name | Parameters | ReturnType | Description | -| --- | --- | --- | --- | -| `—` | `—` | `void` | No custom emits. | - -## Slots - -Available slots and their slot props. - -| Name | Parameters | ReturnType | Description | -| --- | --- | --- | --- | -| `—` | `—` | `void` | No public slots. | - -## Events - -Native DOM events exposed by the component. - -| Name | Type | Description | -| --- | --- | --- | -| `—` | `—` | No additional native events are documented. | - -## Interfaces - -Exported interfaces related to this component. - -| Name | Type | Default | Description | -| --- | --- | --- | --- | -| `—` | `—` | `—` | No dedicated interfaces in this component contract. | - -## Types - -Exported utility and union types. - -| Name | Values | -| --- | --- | -| `—` | `—` | diff --git a/docs/core/components/divider/features.md b/docs/core/components/divider/features.md deleted file mode 100644 index 951fb854..00000000 --- a/docs/core/components/divider/features.md +++ /dev/null @@ -1,57 +0,0 @@ -# Features - -Visual separator with horizontal and vertical orientations. - -## Import - -Import statement for this component. - -```ts -import { VfDivider } from '@codemonster-ru/vueforge-core'; -``` - -## Basic - -Basic usage example. - -````playground-src -mode: component -framework: vue -height: 220 -entry: /App.vue - -```vue file=/App.vue - - - -``` -```` - -## Accessibility - -Accessibility behavior and keyboard interactions. - -### Screen Reader - -The following items are listed in this section: - -- Divider is decorative/structural and should not interrupt reading flow with unnecessary verbosity. -- For semantic section separators, rely on heading structure in addition to visual separators. -- Use orientation consistently so visual and structural grouping stay aligned. - -### Keyboard Support - -Keyboard interaction follows native semantics of the rendered element or composite widget. - -| Key | Function | -| --- | --- | -| `Tab` | Divider is not focusable by default. | - diff --git a/docs/core/components/divider/index.md b/docs/core/components/divider/index.md deleted file mode 100644 index 04823c2f..00000000 --- a/docs/core/components/divider/index.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: "Divider" -description: "Component documentation for Divider" -order: 22 ---- - -# Divider - -This section provides a quick overview before the detailed subsections below. - - -## Tabs - -The following items are listed in this section: - -- [Features](./features.md) -- [API](./api.md) -- [Theming](./theming.md) diff --git a/docs/core/components/divider/theming.md b/docs/core/components/divider/theming.md deleted file mode 100644 index bf43f639..00000000 --- a/docs/core/components/divider/theming.md +++ /dev/null @@ -1,19 +0,0 @@ -# Theming - -Component styling surface: available classes and design tokens. - -## CSS Classes - -Documented CSS classes and their intended usage. - -| Class | Description | -| --- | --- | -| `—` | No documented CSS classes yet. | - -## Design Tokens - -Available design tokens and corresponding CSS variables. - -| Token | CSS Variable | Description | -| --- | --- | --- | -| `—` | `—` | No documented design tokens yet. | diff --git a/docs/core/components/drawer/api.md b/docs/core/components/drawer/api.md deleted file mode 100644 index 5064e2b7..00000000 --- a/docs/core/components/drawer/api.md +++ /dev/null @@ -1,73 +0,0 @@ -# API - -Public component contract: props, events, slots, and related types. - -## Props - -Component props and their default values. - -| Name | Type | Default | Description | -| --- | --- | --- | --- | -| `open?` | `boolean` | — | Controlled open state. | -| `defaultOpen?` | `boolean` | `false` | Initial uncontrolled open state. | -| `title?` | `string` | — | Text title shown in the component header area. | -| `size?` | `VfDrawerSize` | `md` | Size token for spacing and dimensions. | -| `placement?` | `VfDrawerPlacement` | `right` | Controls floating panel placement relative to trigger. | -| `dividers?` | `boolean` | `false` | Shows separators between header/body/footer regions. | -| `rounded?` | `boolean` | `false` | Enables rounded outer corners. | -| `offsetTop?` | `string \| number` | — | Sets the shell-oriented top offset CSS variable. | -| `bodyPadding?` | `string \| number` | — | Overrides body padding through the component CSS variable. | -| `teleportTo?` | `string \| HTMLElement \| null \| false` | — | Teleport target; `null`/`false` disables teleport resolution. | -| `disableTeleport?` | `boolean` | `false` | Forces in-place rendering. | -| `scrollLockTarget?` | `HTMLElement \| null \| false` | — | Custom lock target; `false` explicitly disables scroll locking. | -| `closeOnOverlayClick?` | `boolean` | `true` | Closes component when overlay/backdrop is clicked. | -| `closeOnEscape?` | `boolean` | `true` | Closes component when `Escape` key is pressed. | -| `closable?` | `boolean` | `true` | Shows close control and allows explicit dismiss action. | -| `ariaLabel?` | `string` | — | Explicit accessible name; takes precedence over the generated title relationship. | -| `ariaLabelledby?` | `string` | — | Explicit ID reference for the accessible name. | -| `ariaDescribedby?` | `string` | — | Explicit ID reference for the accessible description. | - -## Emits - -Emitted component events and their payload shapes. - -| Name | Parameters | ReturnType | Description | -| --- | --- | --- | --- | -| `update:open` | `[value: boolean]` | `void` | Emitted with next open state. | -| `openChange` | `[value: boolean]` | `void` | Emitted when open state changes. | - -## Slots - -Available slots and their slot props. - -| Name | Parameters | ReturnType | Description | -| --- | --- | --- | --- | -| `header` | `[scope: { titleId: string }]` | `void` | Custom heading, wrapped by the generated title ID. | -| `actions` | `[scope: { close: () => void }]` | `void` | gets `{ close }` | -| `default` | `[scope: { close: () => void }]` | `void` | body | -| `footer` | `[scope: { close: () => void }]` | `void` | gets `{ close }` | - -## Events - -Native DOM events exposed by the component. - -| Name | Type | Description | -| --- | --- | --- | -| `—` | `—` | No additional native events are documented. | - -## Interfaces - -Exported interfaces related to this component. - -| Name | Type | Default | Description | -| --- | --- | --- | --- | -| `—` | `—` | `—` | No dedicated interfaces in this component contract. | - -## Types - -Exported utility and union types. - -| Name | Values | -| --- | --- | -| `VfDrawerPlacement` | `'left' \| 'right' \| 'top' \| 'bottom'` | -| `VfDrawerSize` | `VfDialogSize \| 'full'` | diff --git a/docs/core/components/drawer/features.md b/docs/core/components/drawer/features.md deleted file mode 100644 index fb2cca10..00000000 --- a/docs/core/components/drawer/features.md +++ /dev/null @@ -1,86 +0,0 @@ -# Features - -Sliding panel for secondary workflows and contextual actions. - -## Import - -Import statement for this component. - -```ts -import { VfDrawer } from '@codemonster-ru/vueforge-core'; -``` - -## Basic - -Basic usage example. - -````playground-src -mode: component -framework: vue -height: 360 -entry: /App.vue - -```vue file=/App.vue - - - -``` -```` - -## Accessibility - -Accessibility behavior and keyboard interactions. - -### Screen Reader - -The following items are listed in this section: - -- Drawer surface is rendered as `role="dialog"` with `aria-modal="true"`. -- Accessible name is provided via `aria-labelledby` from drawer title/header. -- Include a meaningful title to announce drawer purpose when it opens. - -### Keyboard Support - -Keyboard interaction follows native semantics of the rendered element or composite widget. - -| Key | Function | -| --- | --- | -| `Tab` | Moves focus to next focusable element inside drawer (focus is trapped while open). | -| `Shift + Tab` | Moves focus to previous focusable element inside drawer. | -| `Escape` | Closes drawer when `closeOnEscape` is enabled. | -| `Enter` | Activates focused action (for example, close/apply buttons). | diff --git a/docs/core/components/drawer/index.md b/docs/core/components/drawer/index.md deleted file mode 100644 index a959c41a..00000000 --- a/docs/core/components/drawer/index.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: "Drawer" -description: "Component documentation for Drawer" -order: 20 ---- - -# Drawer - -This section provides a quick overview before the detailed subsections below. - - -## Tabs - -The following items are listed in this section: - -- [Features](./features.md) -- [API](./api.md) -- [Theming](./theming.md) diff --git a/docs/core/components/drawer/theming.md b/docs/core/components/drawer/theming.md deleted file mode 100644 index f209fe43..00000000 --- a/docs/core/components/drawer/theming.md +++ /dev/null @@ -1,23 +0,0 @@ -# Theming - -Component styling surface: available classes and design tokens. - -## CSS Classes - -Documented CSS classes and their intended usage. - -| Class | Description | -| --- | --- | -| `—` | No documented CSS classes yet. | - -## Design Tokens - -Available design tokens and corresponding CSS variables. - -| Token | CSS Variable | Description | -| --- | --- | --- | -| Drawer size | `--vf-drawer-size-sm`, `--vf-drawer-size-md`, `--vf-drawer-size-lg` | Drawer panel size by component size. | -| Drawer surface | `--vf-drawer-content-background`, `--vf-drawer-content-border-color`, `--vf-drawer-content-color` | Panel background, border, and text colors. | -| Drawer focus | `--vf-drawer-content-focus-border-color` | Border color used for focus-visible state. | -| Drawer chrome | `--vf-drawer-header-min-height`, `--vf-drawer-footer-min-height`, `--vf-drawer-divider-color` | Header/footer minimum heights and divider color. | -| Drawer offsets | `--vf-drawer-offset-x-rest`, `--vf-drawer-offset-y-rest`, `--vf-drawer-offset-x-left`, `--vf-drawer-offset-x-right`, `--vf-drawer-offset-y-top`, `--vf-drawer-offset-y-bottom` | Translation offsets used by placement transitions. | diff --git a/docs/core/components/dropdown/api.md b/docs/core/components/dropdown/api.md deleted file mode 100644 index 4a4903b0..00000000 --- a/docs/core/components/dropdown/api.md +++ /dev/null @@ -1,60 +0,0 @@ -# API - -Public component contract: props, events, slots, and related types. - -## Props - -Component props and their default values. - -| Name | Type | Default | Description | -| ------------------ | ---------------------------------------- | -------------- | ------------------------------------------------------------------------------ | -| `open?` | `boolean` | — | Controlled open state. | -| `defaultOpen?` | `boolean` | `false` | Initial uncontrolled open state. | -| `placement?` | `VfDropdownPlacement` | `bottom-start` | Controls floating panel placement relative to trigger. | -| `closeOnSelect?` | `boolean` | `true` | Closes popup after selecting an item. | -| `variant?` | `'default' \| 'pills'` | `default` | Visual variant for component appearance. | -| `disabled?` | `boolean` | `false` | Prevents pointer and keyboard opening. | -| `teleportTo?` | `string \| HTMLElement \| null \| false` | — | Teleport target selector/element; `null`/`false` disables teleport resolution. | -| `disableTeleport?` | `boolean` | `false` | Forces in-place rendering without teleport. | - -## Emits - -Emitted component events and their payload shapes. - -| Name | Parameters | ReturnType | Description | -| ------------- | ------------------ | ---------- | -------------------------------- | -| `update:open` | `[value: boolean]` | `void` | Emitted with next open state. | -| `openChange` | `[value: boolean]` | `void` | Emitted when open state changes. | - -## Slots - -Available slots and their slot props. - -| Name | Parameters | ReturnType | Description | -| --------- | ------------------------------------------------------------------- | ---------- | ------------------------------------------- | -| `trigger` | `[scope: { open: boolean; toggle: () => void; disabled: boolean }]` | `void` | trigger node (`{ open, toggle, disabled }`) | -| `default` | `[scope: { close: () => void; open: boolean }]` | `void` | menu body (`{ close, open }`) | - -## Events - -Native DOM events exposed by the component. - -| Name | Type | Description | -| ---- | ---- | ------------------------------------------- | -| `—` | `—` | No additional native events are documented. | - -## Interfaces - -Exported interfaces related to this component. - -| Name | Type | Default | Description | -| ---- | ---- | ------- | --------------------------------------------------- | -| `—` | `—` | `—` | No dedicated interfaces in this component contract. | - -## Types - -Exported utility and union types. - -| Name | Values | -| --------------------- | -------------------------------- | -| `VfDropdownPlacement` | `'bottom-start' \| 'bottom-end'` | diff --git a/docs/core/components/dropdown/features.md b/docs/core/components/dropdown/features.md deleted file mode 100644 index a269c9f0..00000000 --- a/docs/core/components/dropdown/features.md +++ /dev/null @@ -1,87 +0,0 @@ -# Features - -Menu dropdown with keyboard navigation and floating positioning. - -## Import - -Import statement for this component. - -```ts -import { VfDropdown } from '@codemonster-ru/vueforge-core'; -``` - -## Basic - -Basic usage example. - -````playground-src -mode: component -framework: vue -height: 280 -entry: /App.vue - -```vue file=/App.vue - - - - - -``` -```` - -## Accessibility - -Accessibility behavior and keyboard interactions. - -### Screen Reader - -The following items are listed in this section: - -- Trigger exposes `aria-haspopup="menu"`, `aria-expanded`, and `aria-controls` so menu state is announced. -- Menu container uses `role="menu"` and should contain interactive children with `role="menuitem"`. -- Keep trigger text explicit so assistive tech can identify what menu is being opened. - -### Keyboard Support - -Keyboard interaction follows native semantics of the rendered element or composite widget. - -| Key | Function | -| ----------- | ------------------------------------------------------------------- | -| `Enter` | Opens the menu from trigger and moves focus to the first menu item. | -| `Space` | Opens the menu from trigger and moves focus to the first menu item. | -| `ArrowDown` | Opens menu from trigger; inside menu moves focus to next item. | -| `ArrowUp` | Inside menu moves focus to previous item. | -| `Home` | Inside menu moves focus to first item. | -| `End` | Inside menu moves focus to last item. | -| `Escape` | Closes menu and restores focus to trigger. | diff --git a/docs/core/components/dropdown/index.md b/docs/core/components/dropdown/index.md deleted file mode 100644 index 6b3d9211..00000000 --- a/docs/core/components/dropdown/index.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: "Dropdown" -description: "Component documentation for Dropdown" -order: 12 ---- - -# Dropdown - -This section provides a quick overview before the detailed subsections below. - - -## Tabs - -The following items are listed in this section: - -- [Features](./features.md) -- [API](./api.md) -- [Theming](./theming.md) diff --git a/docs/core/components/dropdown/theming.md b/docs/core/components/dropdown/theming.md deleted file mode 100644 index 227a3fdd..00000000 --- a/docs/core/components/dropdown/theming.md +++ /dev/null @@ -1,22 +0,0 @@ -# Theming - -Component styling surface: available classes and design tokens. - -## CSS Classes - -Documented CSS classes and their intended usage. - -| Class | Description | -| --- | --- | -| `—` | No documented CSS classes yet. | - -## Design Tokens - -Available design tokens and corresponding CSS variables. - -| Token | CSS Variable | Description | -| --- | --- | --- | -| Dropdown item palette | `--vf-dropdown-item-*` | Base, focus, hover, active, and pills variant item colors. | -| Menu layout | `--vf-menu-padding`, `--vf-menu-gap`, `--vf-menu-min-width` | Shared menu padding, gap, and minimum width. | -| Floating arrow | `--vf-floating-arrow-size`, `--vf-overlay-arrow-overlap-offset-default`, `--vf-overlay-arrow-separated-offset` | Arrow size and attachment offsets. | -| Floating motion | `--vf-overlay-float-enter-shift`, `--vf-overlay-float-enter-scale-default`, `--vf-overlay-float-shadow` | Floating panel transition and shadow defaults. | diff --git a/docs/core/components/field/api.md b/docs/core/components/field/api.md deleted file mode 100644 index 4bfbaec9..00000000 --- a/docs/core/components/field/api.md +++ /dev/null @@ -1,60 +0,0 @@ -# API - -Public component contract: props, events, slots, and related types. - -## Props - -Component props and their default values. - -| Name | Type | Default | Description | -| --- | --- | --- | --- | -| `label?` | `string` | — | Visible field label rendered above the control. | -| `description?` | `string` | — | Helper text rendered below the control. | -| `error?` | `string` | — | Error text rendered below the control. | -| `invalid?` | `boolean` | `false` | Forces invalid styling/state even when `error` is absent. | -| `required?` | `boolean` | `false` | Shows a visual required marker next to the label and exposes required state to the default slot; does not set native `required` on the wrapped control. | -| `labelPlacement?` | `'top' \| 'floating'` | `'top'` | Chooses between the default stacked label and floating label layout for supported text-like controls. | -| `floatingVariant?` | `'in' \| 'on' \| 'over'` | `'in'` | Adjusts the visual resting position of the floating label when `labelPlacement` is set to `floating`. | - -## Emits - -Emitted component events and their payload shapes. - -| Name | Parameters | ReturnType | Description | -| --- | --- | --- | --- | -| `—` | `—` | `void` | No component events are emitted. | - -## Slots - -Available slots and their slot props. - -| Name | Parameters | ReturnType | Description | -| --- | --- | --- | --- | -| `default` | `[scope: { controlId: string; describedBy?: string; invalid: boolean; required: boolean }]` | `void` | Wraps the control and exposes a11y metadata to bind onto it. | -| `label` | `—` | `void` | Custom label content. | -| `description` | `—` | `void` | Custom helper text content. | -| `error` | `—` | `void` | Custom error content. | - -## Events - -Native DOM events exposed by the component. - -| Name | Type | Description | -| --- | --- | --- | -| `—` | `—` | No additional native events are documented. | - -## Interfaces - -Exported interfaces related to this component. - -| Name | Type | Default | Description | -| --- | --- | --- | --- | -| `—` | `—` | `—` | No dedicated interfaces in this component contract. | - -## Types - -Exported utility and union types. - -| Name | Values | -| --- | --- | -| `—` | No dedicated public types are exported for this component. | diff --git a/docs/core/components/field/features.md b/docs/core/components/field/features.md deleted file mode 100644 index 4938b43f..00000000 --- a/docs/core/components/field/features.md +++ /dev/null @@ -1,187 +0,0 @@ -# Features - -Reusable form field wrapper for labels, helper text, and errors. - -## Import - -Import statement for this component. - -```ts -import { VfCheckbox, VfField, VfInput } from '@codemonster-ru/vueforge-core'; -``` - -## Basic - -Basic usage example. - -````playground-src -mode: component -framework: vue -height: 320 -entry: /App.vue - -```vue file=/App.vue - - - -``` -```` - -## Floating Label - -Floating label layout for text-like controls. - -````playground-src -mode: component -framework: vue -height: 260 -entry: /App.vue - -```vue file=/App.vue - - - -``` -```` - -## Floating Variants - -Floating labels support three visual variants. - -````playground-src -mode: component -framework: vue -height: 360 -entry: /App.vue - -```vue file=/App.vue - - - -``` -```` - -## Accessibility - -Accessibility behavior and keyboard interactions. - -### Screen Reader - -The following items are listed in this section: - -- Generates a control id so the visible label can associate through `for`. -- Composes helper text and error ids into one `aria-describedby` value. -- Treats `error` as invalid state automatically and also supports explicit `invalid`. -- Renders the `required` marker as visual-only text and exposes `required` to the default slot so the wrapped control can receive native `required` and `aria-required` explicitly. -- `labelPlacement="floating"` is intended for `VfInput`, `VfTextarea`, and `VfSelect`; selection controls continue to use the default stacked label layout. - -### Keyboard Support - -Keyboard interaction is owned by the wrapped control component. diff --git a/docs/core/components/field/index.md b/docs/core/components/field/index.md deleted file mode 100644 index e998cf5f..00000000 --- a/docs/core/components/field/index.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: "Field" -description: "Form field wrapper for labels, helper text, and errors" -order: 11 ---- - -# Field - -This section provides a quick overview before the detailed subsections below. - - -## Tabs - -The following items are listed in this section: - -- [Features](./features.md) -- [API](./api.md) -- [Theming](./theming.md) diff --git a/docs/core/components/field/theming.md b/docs/core/components/field/theming.md deleted file mode 100644 index 1ede59a7..00000000 --- a/docs/core/components/field/theming.md +++ /dev/null @@ -1,38 +0,0 @@ -# Theming - -Component styling surface: available classes and design tokens. - -## CSS Classes - -Documented CSS classes and their intended usage. - -| Class | Description | -| ---------------------------- | -------------------------------------------------------------- | -| `.vf-field` | Root field wrapper with vertical spacing. | -| `.vf-field--floating` | Floating label layout active for supported text-like controls. | -| `.vf-field__label` | Visible field label. | -| `.vf-field__label--floating` | Floating label rendered inside the control area. | -| `.vf-field__required-mark` | Visual required marker rendered next to the label. | -| `.vf-field__description` | Helper text below the control. | -| `.vf-field__error` | Error text below the control. | - -## Design Tokens - -Available design tokens and corresponding CSS variables. - -| Token | CSS Variable | Description | -| ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | -| Field label typography | `--vf-field-label-font-size`, `--vf-text-label-font-weight`, `--vf-text-label-line-height` | Label font size, weight, and line height. | -| Field helper typography | `--vf-text-caption-*` | Description and error text typography. | -| Field spacing | `--vf-surface-gap-compact` | Vertical gap between field parts. | -| Required marker spacing | `--vf-surface-gap-compact` | Inline gap between label text and the required marker. | -| Helper text color | `--vf-color-text-muted` | Neutral helper text tone. | -| Error text color | `--vf-color-status-danger-solid-background` | Error text tone. | -| Floating label base position | `--vf-field-floating-label-offset-block-default`, `--vf-field-floating-label-translate-y-default` | Default resting vertical position for floating labels. | -| Floating label resting offsets | `--vf-field-floating-label-resting-offset-block-sm-default`, `--vf-field-floating-label-resting-offset-block-md-default`, `--vf-field-floating-label-resting-offset-block-lg-default` | Resting offsets by control size. | -| Floating label active position | `--vf-field-floating-label-active-offset-block-default`, `--vf-field-floating-label-active-translate-y-default` | Default active position used when the field is focused or filled. | -| Floating `in` variant | `--vf-field-floating-in-*` | Padding and active label defaults for the `in` floating variant. | -| Floating `on` variant | `--vf-field-floating-on-*` | Padding, label offset, and active label inset defaults for the `on` floating variant. | -| Floating `over` variant | `--vf-field-floating-over-*` | Padding, label offset, and label background defaults for the `over` floating variant. | -| Floating control offsets | `--vf-field-floating-control-offset-inline-*`, `--vf-field-floating-input-offset-inline-*` | Inline label offsets for text-like controls and input wrappers. | -| Floating textarea offsets | `--vf-field-floating-textarea-*` | Textarea-specific resting offsets and label translation. | diff --git a/docs/core/components/fieldset/api.md b/docs/core/components/fieldset/api.md deleted file mode 100644 index e6d5b516..00000000 --- a/docs/core/components/fieldset/api.md +++ /dev/null @@ -1,57 +0,0 @@ -# API - -Public component contract: props, events, slots, and related types. - -## Props - -Component props and their default values. - -| Name | Type | Default | Description | -| --- | --- | --- | --- | -| `label?` | `string` | — | Visible legend rendered above the grouped controls. | -| `description?` | `string` | — | Helper text rendered below the grouped controls. | -| `error?` | `string` | — | Error text rendered below the grouped controls. | -| `invalid?` | `boolean` | `false` | Forces invalid styling/state even when `error` is absent. | - -## Emits - -Emitted component events and their payload shapes. - -| Name | Parameters | ReturnType | Description | -| --- | --- | --- | --- | -| `—` | `—` | `void` | No component events are emitted. | - -## Slots - -Available slots and their slot props. - -| Name | Parameters | ReturnType | Description | -| --- | --- | --- | --- | -| `default` | `[scope: { describedBy?: string; invalid: boolean }]` | `void` | Wraps grouped controls and exposes shared a11y metadata. | -| `label` | `—` | `void` | Custom legend content. | -| `description` | `—` | `void` | Custom helper text content. | -| `error` | `—` | `void` | Custom error content. | - -## Events - -Native DOM events exposed by the component. - -| Name | Type | Description | -| --- | --- | --- | -| `—` | `—` | No additional native events are documented. | - -## Interfaces - -Exported interfaces related to this component. - -| Name | Type | Default | Description | -| --- | --- | --- | --- | -| `—` | `—` | `—` | No dedicated interfaces in this component contract. | - -## Types - -Exported utility and union types. - -| Name | Values | -| --- | --- | -| `—` | No dedicated public types are exported for this component. | diff --git a/docs/core/components/fieldset/features.md b/docs/core/components/fieldset/features.md deleted file mode 100644 index 045cb522..00000000 --- a/docs/core/components/fieldset/features.md +++ /dev/null @@ -1,71 +0,0 @@ -# Features - -Reusable grouped field wrapper for `fieldset` / `legend`, helper text, and errors. - -## Import - -Import statement for this component. - -```ts -import { VfCheckbox, VfFieldset, VfRadio } from '@codemonster-ru/vueforge-core'; -``` - -## Basic - -Basic usage example. - -````playground-src -mode: component -framework: vue -height: 340 -entry: /App.vue - -```vue file=/App.vue - - - -``` -```` - -## Accessibility - -Accessibility behavior and keyboard interactions. - -### Screen Reader - -The following items are listed in this section: - -- Uses native `fieldset` / `legend` semantics for grouped controls. -- Composes helper text and error ids into one `aria-describedby` value on the root fieldset. -- Treats `error` as invalid state automatically and also supports explicit `invalid`. - -### Keyboard Support - -Keyboard interaction is owned by the grouped controls rendered inside the default slot. diff --git a/docs/core/components/fieldset/index.md b/docs/core/components/fieldset/index.md deleted file mode 100644 index b605b417..00000000 --- a/docs/core/components/fieldset/index.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: "Fieldset" -description: "Grouped form field wrapper for legends, helper text, and errors" -order: 12 ---- - -# Fieldset - -This section provides a quick overview before the detailed subsections below. - - -## Tabs - -The following items are listed in this section: - -- [Features](./features.md) -- [API](./api.md) -- [Theming](./theming.md) diff --git a/docs/core/components/fieldset/theming.md b/docs/core/components/fieldset/theming.md deleted file mode 100644 index c03d45b4..00000000 --- a/docs/core/components/fieldset/theming.md +++ /dev/null @@ -1,27 +0,0 @@ -# Theming - -Component styling surface: available classes and design tokens. - -## CSS Classes - -Documented CSS classes and their intended usage. - -| Class | Description | -| --------------------------- | ------------------------------------------------- | -| `.vf-fieldset` | Root grouped field wrapper with vertical spacing. | -| `.vf-fieldset__legend` | Visible group legend. | -| `.vf-fieldset__description` | Helper text below the grouped controls. | -| `.vf-fieldset__error` | Error text below the grouped controls. | - -## Design Tokens - -Available design tokens and corresponding CSS variables. - -| Token | CSS Variable | Description | -| -------------------------- | --------------------------------- | ------------------------------------------ | -| Fieldset legend typography | `--vf-text-label-*` | Legend font size, weight, and line height. | -| Fieldset helper typography | `--vf-text-caption-*` | Description and error text typography. | -| Fieldset spacing | `--vf-surface-gap-compact` | Vertical gap between fieldset parts. | -| Fieldset legend color | `--vf-fieldset-legend-color` | Legend text color. | -| Helper text color | `--vf-fieldset-description-color` | Neutral helper text tone. | -| Error text color | `--vf-fieldset-error-color` | Error text tone. | diff --git a/docs/core/components/form-layout/api.md b/docs/core/components/form-layout/api.md deleted file mode 100644 index bc45ba5d..00000000 --- a/docs/core/components/form-layout/api.md +++ /dev/null @@ -1,20 +0,0 @@ -# API - -## Props - -| Name | Type | Default | Description | -| ------------- | ------------------------------------------- | -------------------- | ------------------------------- | -| `mode?` | `'stacked' \| 'horizontal' \| 'responsive'` | `'stacked'` | Field arrangement. | -| `labelWidth?` | `string` | `minmax(10rem, 25%)` | CSS grid track used for labels. | - -## Slots - -| Name | Parameters | ReturnType | Description | -| --------- | ---------- | ---------- | ------------------------ | -| `default` | `[]` | `void` | Form fields and content. | - -Native attributes are forwarded to the root element. - -## Types - -`VfFormLayoutMode` is exported from the package root. diff --git a/docs/core/components/form-layout/features.md b/docs/core/components/form-layout/features.md deleted file mode 100644 index 385e6ffa..00000000 --- a/docs/core/components/form-layout/features.md +++ /dev/null @@ -1,22 +0,0 @@ -# Features - -## Import - -```ts -import { VfFormLayout } from '@codemonster-ru/vueforge-core/form-layout'; -``` - -Use `mode="responsive"` to stack fields in narrow containers and place labels beside controls once -the layout container reaches `48rem`. - -```vue - - - - - -``` - -Only direct `VfField` children participate in the horizontal grid. diff --git a/docs/core/components/form-layout/index.md b/docs/core/components/form-layout/index.md deleted file mode 100644 index 03645e64..00000000 --- a/docs/core/components/form-layout/index.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: 'Form Layout' -description: 'Stacked and horizontal form field layout' -order: 17 ---- - -# Form Layout - -`VfFormLayout` arranges direct `VfField` children consistently across forms. - -## Tabs - -- [Features](./features.md) -- [API](./api.md) -- [Theming](./theming.md) diff --git a/docs/core/components/form-layout/theming.md b/docs/core/components/form-layout/theming.md deleted file mode 100644 index b50cf2f2..00000000 --- a/docs/core/components/form-layout/theming.md +++ /dev/null @@ -1,4 +0,0 @@ -# Theming - -The root exposes `--vf-form-layout-label-width`. Layout spacing uses `--vf-section-gap`; direct -fields retain their normal `VfField` tokens and states. diff --git a/docs/core/components/group-box/api.md b/docs/core/components/group-box/api.md deleted file mode 100644 index 82f3ebf2..00000000 --- a/docs/core/components/group-box/api.md +++ /dev/null @@ -1,40 +0,0 @@ -# API - -Public component contract: props, events, slots, and related types. - -## Props - -| Name | Type | Default | Description | -| ------------------- | --------- | ------- | -------------------------------------------------------------------------- | -| `title?` | `string` | — | Text rendered in the legend on the container border. | -| `collapsible?` | `boolean` | `false` | Allows the content to be expanded and collapsed. | -| `collapsed?` | `boolean` | — | Controlled collapsed state. | -| `defaultCollapsed?` | `boolean` | `false` | Initial collapsed state when uncontrolled. | -| `disabled?` | `boolean` | `false` | Disables the collapse trigger without disabling controls inside the group. | - -## Emits - -| Name | Parameters | ReturnType | Description | -| ------------------ | ------------------ | ---------- | ------------------------------------------------- | -| `update:collapsed` | `[value: boolean]` | `void` | Emitted with the requested collapsed state. | -| `collapsedChange` | `[value: boolean]` | `void` | Emitted when the trigger requests a state change. | - -## Slots - -| Name | Parameters | ReturnType | Description | -| ------------- | --------------------------------- | ---------- | ------------------------------------------ | -| `default` | `[scope: { collapsed: boolean }]` | `void` | Group content and current collapsed state. | -| `title` | `[scope: { collapsed: boolean }]` | `void` | Custom legend content. | -| `toggle-icon` | `[scope: { collapsed: boolean }]` | `void` | Custom disclosure indicator. | - -## Events - -Native DOM events and attributes are forwarded to the root `fieldset`. - -## Interfaces - -No dedicated public interfaces are exported. - -## Types - -No dedicated public utility types are exported. diff --git a/docs/core/components/group-box/features.md b/docs/core/components/group-box/features.md deleted file mode 100644 index b23ba180..00000000 --- a/docs/core/components/group-box/features.md +++ /dev/null @@ -1,62 +0,0 @@ -# Features - -Outlined content group with a title embedded in its border and optional disclosure behavior. - -## Import - -```ts -import { VfGroupBox } from '@codemonster-ru/vueforge-core'; -``` - -The standalone entry automatically includes the component styles: - -```ts -import { VfGroupBox } from '@codemonster-ru/vueforge-core/group-box'; -``` - -## Basic - -````playground-src -mode: component -framework: vue -height: 240 -entry: /App.vue - -```vue file=/App.vue - - - -``` -```` - -## Collapsible - -Use `collapsible` with `v-model:collapsed` when users should be able to hide the content. - -```vue - - - -``` - -Use `defaultCollapsed` instead for an initially collapsed uncontrolled component. - -## Accessibility - -- The root uses native `fieldset` semantics and the title uses `legend`. -- In collapsible mode, the legend contains a native button with `aria-expanded` and `aria-controls`. -- Expanded content is exposed as a named region. -- `Enter` and `Space` toggle the content through native button behavior. diff --git a/docs/core/components/group-box/index.md b/docs/core/components/group-box/index.md deleted file mode 100644 index ee3d701e..00000000 --- a/docs/core/components/group-box/index.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: 'Group Box' -description: 'Component documentation for Group Box' -order: 30 ---- - -# Group Box - -`VfGroupBox` groups related content inside an outlined container whose title sits on the border. - -## Tabs - -- [Features](./features.md) -- [API](./api.md) -- [Theming](./theming.md) diff --git a/docs/core/components/group-box/theming.md b/docs/core/components/group-box/theming.md deleted file mode 100644 index 7f958b8f..00000000 --- a/docs/core/components/group-box/theming.md +++ /dev/null @@ -1,28 +0,0 @@ -# Theming - -Component styling surface: available classes and design tokens. - -## CSS Classes - -| Class | Description | -| ---------------------------- | ------------------------------------------------- | -| `.vf-group-box` | Root outlined group. | -| `.vf-group-box--titled` | Group with a legend and adjusted top spacing. | -| `.vf-group-box--collapsible` | Group with disclosure behavior enabled. | -| `.vf-group-box--collapsed` | Collapsed group state. | -| `.vf-group-box__legend` | Title container placed on the border. | -| `.vf-group-box__trigger` | Disclosure button inside the legend. | -| `.vf-group-box__title` | Legend text. | -| `.vf-group-box__icon` | Default or custom disclosure indicator container. | -| `.vf-group-box__content` | Expanded content container. | - -## Design Tokens - -| Token | CSS Variable | Description | -| ------------- | ----------------------------- | ---------------------------- | -| Border color | `--vf-group-box-border-color` | Outline color. | -| Background | `--vf-group-box-background` | Group and legend background. | -| Content color | `--vf-group-box-color` | Default content color. | -| Title color | `--vf-group-box-title-color` | Legend text and icon color. | - -The collapsible trigger uses the `VfButton` medium ghost appearance and its button design tokens. diff --git a/docs/core/components/icon-button/api.md b/docs/core/components/icon-button/api.md deleted file mode 100644 index e38e2ac1..00000000 --- a/docs/core/components/icon-button/api.md +++ /dev/null @@ -1,56 +0,0 @@ -# API - -Public component contract: props, events, slots, and related types. - -## Props - -Component props and their default values. - -| Name | Type | Default | Description | -| --- | --- | --- | --- | -| `icon` | `IconName \| string` | — | Icon name or custom icon identifier. | -| `variant?` | `VfButtonVariant` | `ghost` | Visual variant for component appearance. | -| `size?` | `VfControlSize` | `md` | Size token for spacing and dimensions. | -| `type?` | `'button' \| 'submit' \| 'reset'` | `button` | Native HTML `type` forwarded to underlying control. | - -## Emits - -Emitted component events and their payload shapes. - -| Name | Parameters | ReturnType | Description | -| --- | --- | --- | --- | -| `—` | `—` | `void` | No custom emits. | - -## Slots - -Available slots and their slot props. - -| Name | Parameters | ReturnType | Description | -| --- | --- | --- | --- | -| `—` | `—` | `void` | No public slots. | - -## Events - -Native DOM events exposed by the component. - -| Name | Type | Description | -| --- | --- | --- | -| `—` | `—` | No additional native events are documented. | - -## Interfaces - -Exported interfaces related to this component. - -| Name | Type | Default | Description | -| --- | --- | --- | --- | -| `—` | `—` | `—` | No dedicated interfaces in this component contract. | - -## Types - -Exported utility and union types. - -| Name | Values | -| --- | --- | -| `IconName` | `Union of generated icon names.` | -| `VfButtonVariant` | `'primary' \| 'secondary' \| 'success' \| 'info' \| 'warn' \| 'help' \| 'danger' \| 'contrast' \| 'ghost'` | -| `VfControlSize` | `'sm' \| 'md' \| 'lg'` | diff --git a/docs/core/components/icon-button/features.md b/docs/core/components/icon-button/features.md deleted file mode 100644 index 0c710b94..00000000 --- a/docs/core/components/icon-button/features.md +++ /dev/null @@ -1,58 +0,0 @@ -# Features - -Icon-only button for compact actions in toolbars and controls. - -## Import - -Import statement for this component. - -```ts -import { VfIconButton } from '@codemonster-ru/vueforge-core'; -``` - -## Basic - -Basic usage example. - -````playground-src -mode: component -framework: vue -height: 220 -entry: /App.vue - -```vue file=/App.vue - - - -``` -```` - -## Accessibility - -Accessibility behavior and keyboard interactions. - -### Screen Reader - -The following items are listed in this section: - -- Uses native ` -
- -
-
-
- -
-
- - -
- - Disabled dropdown link -
- - - -`; - -const stateMatrixSnapshotExpression = `(() => { - const selectors = ${JSON.stringify(stateMatrixSelectors)}; - const root = document.documentElement; - const fixture = document.querySelector('#vf-phase2-state-matrix'); - if (!fixture) throw new Error('Phase 2 state-matrix fixture is unavailable.'); - - const elementFor = (key) => { - const element = document.querySelector(selectors[key]); - if (!element) throw new Error('Phase 2 state-matrix node is unavailable: ' + key); - return element; - }; - const material = (element) => { - const style = getComputedStyle(element); - return { - color: style.color, - backgroundColor: style.backgroundColor, - borderColor: style.borderColor, - boxShadow: style.boxShadow, - cursor: style.cursor, - focus: element.matches(':focus'), - focusVisible: element.matches(':focus-visible'), - hover: element.matches(':hover'), - active: element.matches(':active'), - }; - }; - const tokenColor = (token) => { - const probe = document.createElement('span'); - probe.style.color = 'var(' + token + ')'; - fixture.append(probe); - const value = getComputedStyle(probe).color; - probe.remove(); - return value; - }; - const focusShadow = () => { - const probe = document.createElement('span'); - probe.style.boxShadow = '0 0 0 var(--vf-focus-ring-width) var(--vf-color-focus-ring)'; - fixture.append(probe); - const value = getComputedStyle(probe).boxShadow; - probe.remove(); - return value; - }; - const elements = Object.fromEntries( - Object.keys(selectors).map((key) => [key, material(elementFor(key))]), - ); - const disabledExpected = { - color: tokenColor('--vf-color-text-disabled'), - backgroundColor: tokenColor('--vf-color-background-surface-disabled'), - borderColor: tokenColor('--vf-color-border-disabled'), - }; - - return { - elements, - expected: { - invalidBorder: { - input: tokenColor('--vf-input-invalid-border-color'), - textarea: tokenColor('--vf-textarea-invalid-border-color'), - select: tokenColor('--vf-select-invalid-border-color'), - }, - focusShadow: { - input: focusShadow(), - textarea: focusShadow(), - select: focusShadow(), - }, - selectOptionDisabledColor: tokenColor('--vf-select-option-disabled-color'), - selectedTab: { - base: tokenColor('--vf-tabs-tab-active-background'), - hover: tokenColor('--vf-tabs-tab-active-background'), - active: tokenColor('--vf-tabs-tab-active-background'), - }, - secondaryControlBorder: tokenColor('--vf-color-border-interactive'), - disabledNavigation: disabledExpected, - rawTokens: { - focusRing: getComputedStyle(root).getPropertyValue('--vf-color-focus-ring').trim(), - selectedHover: getComputedStyle(root) - .getPropertyValue('--vf-color-background-surface-selected-hover') - .trim(), - selectedActive: getComputedStyle(root) - .getPropertyValue('--vf-color-background-surface-selected-active') - .trim(), - }, - }, - }; -})()`; - -function validateComputedStateMatrix(mode, matrix) { - for (const key of ['input', 'textarea', 'select']) { - const actual = matrix.forcedFocus.elements[key]; - assert( - actual.borderColor === matrix.expected.invalidBorder[key], - `${mode} state matrix: ${key} invalid border lost to focus/open cascade (${actual.borderColor} !== ${matrix.expected.invalidBorder[key]})`, - ); - assert( - actual.boxShadow === matrix.expected.focusShadow[key], - `${mode} state matrix: ${key} focus material is missing (${actual.boxShadow} !== ${matrix.expected.focusShadow[key]}; :focus=${actual.focus}; :focus-visible=${actual.focusVisible})`, - ); - } - - const disabledOption = matrix.forcedHover.elements.selectOption; - assert( - disabledOption.color === matrix.expected.selectOptionDisabledColor, - `${mode} state matrix: disabled Select option lost its disabled foreground on hover`, - ); - assert( - disabledOption.backgroundColor === matrix.baseline.elements.selectOption.backgroundColor, - `${mode} state matrix: disabled Select option acquired a hover background`, - ); - - for (const key of ['secondaryButton', 'secondaryIconButton']) { - assert( - matrix.baseline.elements[key].borderColor === matrix.expected.secondaryControlBorder, - `${mode} state matrix: ${key} lost the interactive control boundary`, - ); - } - - assert( - matrix.baseline.elements.selectedTab.backgroundColor === matrix.expected.selectedTab.base, - `${mode} state matrix: selected tab base material drifted`, - ); - assert( - matrix.forcedHover.elements.selectedTab.backgroundColor === matrix.expected.selectedTab.hover, - `${mode} state matrix: selected + hover material drifted`, - ); - assert( - matrix.forcedActive.elements.selectedTab.backgroundColor === matrix.expected.selectedTab.active, - `${mode} state matrix: selected + active material drifted`, - ); - - for (const key of ['dropdownNative', 'dropdownLink', 'navNative', 'navLink', 'menuNative', 'menuLink']) { - const baseline = matrix.baseline.elements[key]; - const forced = matrix.forcedHover.elements[key]; - for (const property of ['color', 'backgroundColor', 'borderColor']) { - assert( - forced[property] === matrix.expected.disabledNavigation[property], - `${mode} state matrix: ${key} ${property} escaped the disabled material`, - ); - assert( - forced[property] === baseline[property], - `${mode} state matrix: ${key} ${property} changed under forced hover + active`, - ); - } - assert(forced.cursor === 'not-allowed', `${mode} state matrix: ${key} disabled cursor drifted`); - } -} - -async function runComputedStateMatrix(mode) { - await evaluate(`(() => { - document.querySelector('#vf-phase2-state-matrix')?.remove(); - const host = document.createElement('div'); - host.innerHTML = ${JSON.stringify(stateMatrixMarkup)}; - document.body.append(host.firstElementChild); - return true; - })()`); - - const forcedSelectors = [ - stateMatrixSelectors.input, - stateMatrixSelectors.textarea, - stateMatrixSelectors.select, - stateMatrixSelectors.selectOption, - stateMatrixSelectors.selectedTab, - stateMatrixSelectors.dropdownNative, - stateMatrixSelectors.dropdownLink, - stateMatrixSelectors.navNative, - stateMatrixSelectors.navLink, - stateMatrixSelectors.menuNative, - stateMatrixSelectors.menuLink, - ]; - const { root } = await send('DOM.getDocument', { depth: 0 }); - const forcedNodeIds = new Map(); - for (const selector of forcedSelectors) { - const { nodeId } = await send('DOM.querySelector', { nodeId: root.nodeId, selector }); - assert(nodeId, `State-matrix fixture node is missing: ${selector}`); - forcedNodeIds.set(selector, nodeId); - } - - try { - const baseline = await evaluate(stateMatrixSnapshotExpression); - - for (const selector of [stateMatrixSelectors.input, stateMatrixSelectors.textarea, stateMatrixSelectors.select]) { - await forcePseudoState(forcedNodeIds.get(selector), selector, ['focus', 'focus-visible']); - } - await forcePseudoState(forcedNodeIds.get(stateMatrixSelectors.selectOption), stateMatrixSelectors.selectOption, [ - 'hover', - ]); - await forcePseudoState(forcedNodeIds.get(stateMatrixSelectors.selectedTab), stateMatrixSelectors.selectedTab, [ - 'hover', - ]); - for (const selector of [ - stateMatrixSelectors.dropdownNative, - stateMatrixSelectors.dropdownLink, - stateMatrixSelectors.navNative, - stateMatrixSelectors.navLink, - stateMatrixSelectors.menuNative, - stateMatrixSelectors.menuLink, - ]) { - await forcePseudoState(forcedNodeIds.get(selector), selector, ['hover', 'active']); - } - const forcedHover = await evaluate(stateMatrixSnapshotExpression); - await forcePseudoState(forcedNodeIds.get(stateMatrixSelectors.selectedTab), stateMatrixSelectors.selectedTab, [ - 'active', - ]); - const forcedActive = await evaluate(stateMatrixSnapshotExpression); - - const matrix = { - source: 'synthetic fixtures using the current page stylesheet', - driver: 'Chrome DevTools Protocol CSS.forcePseudoState', - baseline, - forcedFocus: forcedHover, - forcedHover, - forcedActive, - expected: forcedHover.expected, - }; - validateComputedStateMatrix(mode, matrix); - return matrix; - } finally { - for (const selector of forcedSelectors) { - try { - await forcePseudoState(forcedNodeIds.get(selector), selector, []); - } catch { - // Fixture cleanup is best-effort after a failed assertion or navigation. - } - } - await evaluate(`document.querySelector('#vf-phase2-state-matrix')?.remove(); true`); - } -} - -async function capture(name) { - const result = await send('Page.captureScreenshot', { format: 'png', fromSurface: true }); - const contents = Buffer.from(result.data, 'base64'); - const filename = `${name}.png`; - const outputPath = resolve(outputDirectory, filename); - - if (baselineDirectory) { - const baselinePath = resolve(baselineDirectory, filename); - assert(existsSync(baselinePath), `Missing visual baseline: ${baselinePath}`); - assert(contents.equals(readFileSync(baselinePath)), `Visual baseline differs: ${filename}`); - } - - writeFileSync(outputPath, contents); - - return { - filename, - bytes: contents.length, - sha256: createHash('sha256').update(contents).digest('hex'), - }; -} - -const validationExpressions = { - colors: `(() => { - const panels = [...document.querySelectorAll('.color-system__theme')]; - const primitives = document.querySelectorAll('.color-system__primitive'); - const codeBlocks = [...document.querySelectorAll('.color-system__theme .vf-codeblock')]; - const buttons = [...document.querySelectorAll('.color-system__theme .vf-button')]; - buttons[0]?.focus(); - buttons[0]?.scrollIntoView({ block: 'center' }); - return { - primitiveCount: primitives.length, - panelCount: panels.length, - alertCount: document.querySelectorAll('.color-system__theme .vf-alert').length, - semanticSwatchCount: document.querySelectorAll('.color-system__semantic').length, - codeBlockCount: codeBlocks.length, - highlightedTokenCount: document.querySelectorAll('.color-system__theme .vf-codeblock__shiki-token').length, - panelModes: panels.map((panel) => panel.getAttribute('data-vf-theme')), - panelBackgrounds: panels.map((panel) => getComputedStyle(panel).backgroundColor), - codeBlockModes: codeBlocks.map((block) => block.getAttribute('data-vf-resolved-theme')), - alertIconCount: document.querySelectorAll('.color-system__theme .vf-alert__icon').length, - checkboxMarkCount: document.querySelectorAll('.color-system__theme .vf-checkbox__mark').length, - documentOverflow: document.documentElement.scrollWidth > document.documentElement.clientWidth, - focused: document.activeElement?.classList.contains('vf-button') ?? false, - }; - })()`, - core: `(() => { - const root = document.documentElement; - const button = [...document.querySelectorAll('.vf-button')].find((element) => { - const rect = element.getBoundingClientRect(); - return rect.width > 0 && rect.height > 0 && !element.disabled; - }); - button?.focus(); - button?.scrollIntoView({ block: 'center' }); - return { - componentCount: document.querySelectorAll('[class^="vf-"], [class*=" vf-"]').length, - focusRing: getComputedStyle(root).getPropertyValue('--vf-color-focus-ring').trim(), - interactiveBorder: getComputedStyle(root).getPropertyValue('--vf-color-border-interactive').trim(), - invalidStateCount: document.querySelectorAll('[class*="--invalid"]').length, - focused: document.activeElement === button, - buttonBackground: button ? getComputedStyle(button).backgroundColor : '', - }; - })()`, - codeblock: `(() => { - const block = [...document.querySelectorAll('.vf-codeblock')].find((element) => { - const rect = element.getBoundingClientRect(); - return rect.width > 0 && rect.height > 0; - }); - const pre = block?.querySelector('.vf-codeblock__pre'); - const copy = block?.querySelector('.vf-codeblock__copy:not(:disabled)'); - copy?.focus(); - block?.scrollIntoView({ block: 'center' }); - return { - visible: Boolean(block && block.getBoundingClientRect().width > 0 && block.getBoundingClientRect().height > 0), - resolvedTheme: block?.getAttribute('data-vf-resolved-theme'), - highlightedTokenCount: block?.querySelectorAll('.vf-codeblock__shiki-token').length ?? 0, - background: block ? getComputedStyle(block).backgroundColor : '', - codeBackground: pre ? getComputedStyle(pre).backgroundColor : '', - syntaxBackground: block ? getComputedStyle(block).getPropertyValue('--vf-codeblock-syntax-background').trim() : '', - copyFocused: document.activeElement === copy, - copyOutline: copy ? getComputedStyle(copy).outlineStyle : '', - }; - })()`, - playground: `(() => { - const playground = [...document.querySelectorAll('.vf-playground')].find((element) => { - const rect = element.getBoundingClientRect(); - return rect.width > 0 && rect.height > 0; - }); - playground?.scrollIntoView({ block: 'center' }); - return { - visible: Boolean(playground && playground.getBoundingClientRect().width > 0 && playground.getBoundingClientRect().height > 0), - resolvedTheme: playground?.getAttribute('data-vf-resolved-theme'), - background: playground ? getComputedStyle(playground).backgroundColor : '', - border: playground ? getComputedStyle(playground).borderColor : '', - codeBlockCount: playground?.querySelectorAll('.vf-codeblock').length ?? 0, - iframeCount: document.querySelectorAll('.vf-playground__iframe').length, - }; - })()`, -}; - -function validateSnapshot(route, mode, snapshot) { - if (route === 'colors') { - assert(snapshot.primitiveCount === 66, `${mode} colors: expected 66 primitives`); - assert(snapshot.panelCount === 2, `${mode} colors: scoped light/dark panels are missing`); - assert(snapshot.alertCount === 10, `${mode} colors: status examples are incomplete`); - assert(snapshot.semanticSwatchCount === 170, `${mode} colors: semantic token matrix is incomplete`); - assert(snapshot.codeBlockCount === 2, `${mode} colors: scoped CodeBlocks are missing`); - assert(snapshot.highlightedTokenCount > 0, `${mode} colors: syntax highlighting did not finish`); - assert(snapshot.panelModes.join(',') === 'light,dark', `${mode} colors: scoped mode order drifted`); - assert(snapshot.codeBlockModes.join(',') === 'light,dark', `${mode} colors: CodeBlock scope drifted`); - assert(snapshot.panelBackgrounds[0] !== snapshot.panelBackgrounds[1], `${mode} colors: mode surfaces collapsed`); - assert(snapshot.alertIconCount === 10, `${mode} colors: status icon cues are incomplete`); - assert(snapshot.checkboxMarkCount === 2, `${mode} colors: selected shape cues are incomplete`); - assert(!snapshot.documentOverflow, `${mode} colors: document has horizontal overflow`); - assert(snapshot.focused, `${mode} colors: a control could not receive focus`); - } else if (route === 'core') { - assert(snapshot.componentCount > 100, `${mode} core: showcase did not render`); - assert(snapshot.focusRing, `${mode} core: focus token is missing`); - assert(snapshot.interactiveBorder, `${mode} core: control boundary token is missing`); - assert(snapshot.invalidStateCount > 0, `${mode} core: invalid states are absent`); - assert(snapshot.focused, `${mode} core: a control could not receive focus`); - assert(snapshot.buttonBackground !== 'rgba(0, 0, 0, 0)', `${mode} core: primary control is transparent`); - } else if (route === 'codeblock') { - assert(snapshot.visible, `${mode} CodeBlock: component is not visible`); - assert(snapshot.resolvedTheme === mode, `${mode} CodeBlock: inherited mode drifted`); - assert(snapshot.highlightedTokenCount > 0, `${mode} CodeBlock: Shiki tokens are absent`); - assert(snapshot.background === snapshot.codeBackground, `${mode} CodeBlock: editor backgrounds diverged`); - assert(snapshot.syntaxBackground, `${mode} CodeBlock: syntax background is missing`); - assert(snapshot.copyFocused, `${mode} CodeBlock: copy action could not receive focus`); - assert(snapshot.copyOutline !== 'none', `${mode} CodeBlock: copy focus indicator is absent`); - } else if (route === 'playground') { - assert(snapshot.visible, `${mode} Playground: component is not visible`); - assert(snapshot.resolvedTheme === mode, `${mode} Playground: inherited mode drifted`); - assert(snapshot.background !== 'rgba(0, 0, 0, 0)', `${mode} Playground: surface is transparent`); - assert(snapshot.border, `${mode} Playground: border is missing`); - assert(snapshot.codeBlockCount > 0 || snapshot.iframeCount > 0, `${mode} Playground: no content surface rendered`); - } -} - -await send('Page.enable'); -await send('Runtime.enable'); -await send('DOM.enable'); -await send('CSS.enable'); -await send('Log.enable'); -await send('Network.enable'); - -const report = { - origin: showcaseOrigin, - baselineDirectory, - snapshots: [], - screenshots: [], - cvdScreenshots: [], - browserErrors, - networkErrors, -}; - -try { - for (const viewport of viewports) { - await send('Emulation.setDeviceMetricsOverride', { - width: viewport.width, - height: viewport.height, - deviceScaleFactor: 1, - mobile: viewport.mobile, - }); - - for (const route of routes) { - await navigate(route.pathname, route.readySelector); - for (const mode of ['light', 'dark']) { - await setMode(mode, route.readySelector); - if (route.name === 'codeblock') { - await forceSelectorPseudoState('.vf-codeblock__copy:not(:disabled)', ['focus', 'focus-visible']); - } - const snapshot = await evaluate(validationExpressions[route.name]); - if (route.name === 'core') { - snapshot.computedStateMatrix = await runComputedStateMatrix(mode); - } - validateSnapshot(route.name, mode, snapshot); - await sleep(250); - - const id = `${viewport.name}-${mode}-${route.name}`; - report.snapshots.push({ id, ...snapshot }); - report.screenshots.push(await capture(`vueforge-phase2-${id}`)); - } - } - } - - await send('Emulation.setDeviceMetricsOverride', { - width: viewports[0].width, - height: viewports[0].height, - deviceScaleFactor: 1, - mobile: false, - }); - await navigate('/colors', '.color-system__theme-grid'); - for (const deficiency of ['protanopia', 'deuteranopia', 'tritanopia', 'achromatopsia']) { - for (const mode of ['light', 'dark']) { - await setMode(mode, '.color-system__theme-grid'); - const cvdSnapshot = await evaluate(`(() => { - const panel = [...document.querySelectorAll('.color-system__theme')].find( - (candidate) => candidate.getAttribute('data-vf-theme') === ${JSON.stringify(mode)}, - ); - const statuses = panel?.querySelector('.color-system__statuses'); - const invalidInput = panel?.querySelector('[data-phase2-state="invalid-input"]'); - invalidInput?.focus(); - statuses?.scrollIntoView({ block: 'center' }); - return { - panelMode: panel?.getAttribute('data-vf-theme') ?? '', - statusCount: statuses?.querySelectorAll('.vf-alert').length ?? 0, - invalidInputFocused: document.activeElement === invalidInput, - scrollY: window.scrollY, - }; - })()`); - assert(cvdSnapshot.panelMode === mode, `${mode} CVD: matching scoped panel is missing`); - assert(cvdSnapshot.statusCount === 5, `${mode} CVD: status cues are incomplete`); - assert(cvdSnapshot.invalidInputFocused, `${mode} CVD: invalid focus cue is unavailable`); - await sleep(100); - await send('Emulation.setEmulatedVisionDeficiency', { type: deficiency }); - report.cvdScreenshots.push({ - deficiency, - mode, - ...cvdSnapshot, - ...(await capture(`vueforge-phase2-desktop-${mode}-colors-${deficiency}`)), - }); - } - } - await send('Emulation.setEmulatedVisionDeficiency', { type: 'none' }); - - assert(browserErrors.length === 0, `Browser errors: ${browserErrors.join(' | ')}`); - assert(networkErrors.length === 0, `Showcase network errors: ${networkErrors.join(' | ')}`); - writeFileSync(resolve(outputDirectory, 'manifest.json'), `${JSON.stringify(report, null, 2)}\n`); - console.log(`Phase 2 visual smoke passed. Artifacts: ${outputDirectory}`); -} finally { - socket.close(); -} diff --git a/scripts/visual/reference-baseline.test.mjs b/scripts/visual/reference-baseline.test.mjs deleted file mode 100644 index 2997152c..00000000 --- a/scripts/visual/reference-baseline.test.mjs +++ /dev/null @@ -1,81 +0,0 @@ -import assert from 'node:assert/strict'; -import { readFileSync } from 'node:fs'; -import { resolve } from 'node:path'; -import test from 'node:test'; - -const read = (path) => readFileSync(resolve(import.meta.dirname, path), 'utf8'); - -test('captures the showcase and state baselines from the frozen reference commit', () => { - const workflow = read('../../.github/workflows/refresh-visual-baselines.yml'); - - // A baseline captured from the working tree would compare the product against itself and - // silently hide every difference from the reviewed VueForge reference. - assert.match(workflow, /fetch-depth: 0/u); - assert.match(workflow, /require\('\.\/contracts\/visual\.config\.json'\)\.reference\.commit/u); - assert.match(workflow, /git worktree add --detach "\$\{RUNNER_TEMP\}\/vueforge-reference" "\$\{reference_commit\}"/u); - assert.match( - workflow, - /\(cd "\$\{RUNNER_TEMP\}\/vueforge-reference" && npm run dev -w @codemonster-ru\/vueforge-playground-example -- --host 127\.0\.0\.1 --port 5175\)/u, - ); - - // Every baseline must come from the reference checkout. The adapters capture stays a Vue-against- - // Razor check; promoting it to a baseline would compare the product against itself. - assert.doesNotMatch(workflow, /cp -R "\$\{cross_platform_capture\}/u); - assert.match(workflow, /--reference="\$\{RUNNER_TEMP\}\/vueforge-reference"/u); - assert.match(workflow, /visual:cross-platform:reference:capture/u); - assert.match(workflow, /cp -R "\$\{cross_platform_reference\}\/\." visual-baselines\/vueforge-cross-platform\//u); - - const captureLines = workflow - .split('\n') - .filter((line) => line.includes('capture-showcase.mjs') || line.includes('states:capture')); - assert.equal(captureLines.length, 2); - for (const line of captureLines) { - assert.match(line, /--origin=http:\/\/127\.0\.0\.1:5175/u); - } - - // The reference names Inter in its tokens and never shipped it. A capture taken without the - // faces records a system fallback, which then reads as the whole product having changed. - const referenceCaptures = workflow - .split('\n') - .filter((line) => /--label=vueforge-(reference|state-reference|cross-platform-reference-vue)/u.test(line)); - assert.equal(referenceCaptures.length, 3); - for (const line of referenceCaptures) { - assert.match(line, /--font=inject/u); - } -}); - -test('probes showcase readiness in a way both application shells satisfy', () => { - const capture = read('capture-showcase.mjs'); - - // The reference commit renders VfAppShell; the current showcase renders a native shell. Probing - // the application root instead of route content lets a short page height drop trailing tiles. - assert.match(capture, /const showcaseContentReady =\s/u); - assert.match(capture, /document\.querySelector\("\.demo-page"\)\?\.children\.length > 0/u); - assert.doesNotMatch(capture, /querySelector\("\.showcase-shell__content-body"\)/u); - assert.match(capture, /\[data-showcase-loading-content=ready\] \.vf-codeblock, \.vf-codeblock/u); - assert.match(capture, /\[data-showcase-loading-content=ready\] \.vf-playground, \.vf-playground/u); -}); - -test('mounts the reference components for the cross-platform baseline', () => { - const fixture = read('cross-platform-reference-fixture/main.ts'); - const server = read('serve-cross-platform-reference.mjs'); - const style = read('cross-platform-reference-fixture/fixture.css'); - - // The baseline must render the reference package, not this repository's adapters. - assert.match(fixture, /import \* as VueForgeCore from '@codemonster-ru\/vueforge-core';/u); - assert.match(fixture, /`Vf\$\{componentSlug/u); - assert.match(fixture, /vueforge-fd-mounted/u); - assert.doesNotMatch(fixture, /@codemonster-ru\/ui-vue/u); - - // Both fixtures must resolve one Vue instance, and from the reference checkout. - assert.match(server, /find: \/\^@codemonster-ru\\\/vueforge-core\$\/u, replacement: referenceCore/u); - assert.match(server, /dedupe: \['vue'\]/u); - - // The reference ships no document typography, so the fixture reproduces the frame its own - // application establishes. Falling back to the browser default drifts every text measurement, - // and stating more than that application does drifts the glyphs by a subpixel. - assert.match(style, /font-family: var\(--vf-font-family-base\)/u); - assert.match(style, /margin: 0;/u); - assert.doesNotMatch(style, /text-rendering/u); - assert.doesNotMatch(style, /font-synthesis/u); -}); diff --git a/scripts/visual/serve-cross-platform-reference.mjs b/scripts/visual/serve-cross-platform-reference.mjs deleted file mode 100644 index d26f000d..00000000 --- a/scripts/visual/serve-cross-platform-reference.mjs +++ /dev/null @@ -1,70 +0,0 @@ -import { existsSync, readFileSync } from 'node:fs'; -import { resolve } from 'node:path'; -import { createServer } from 'vite'; - -const options = Object.fromEntries( - process.argv.slice(2).map((argument) => { - const [name, ...value] = argument.replace(/^--/u, '').split('='); - return [name, value.join('=')]; - }), -); -const referenceRoot = options.reference ? resolve(options.reference) : null; -const port = Number(options.port ?? 5177); - -if (!referenceRoot || !existsSync(referenceRoot)) { - throw new Error('A checkout of the reference commit is required: --reference=DIR.'); -} -if (!Number.isInteger(port) || port < 1 || port > 65_535) { - throw new Error('Reference fixture port must be an integer between 1 and 65535.'); -} - -const config = JSON.parse(readFileSync(resolve(import.meta.dirname, '../../contracts/visual.config.json'), 'utf8')); -const referenceCore = resolve(referenceRoot, 'packages/core'); -const referenceVue = resolve(referenceRoot, 'node_modules/vue'); -for (const [label, path] of [ - ['reference component package', referenceCore], - ['reference Vue runtime', referenceVue], -]) { - if (!existsSync(path)) throw new Error(`Missing ${label} at ${path}. Install and build the reference checkout first.`); -} - -const corePackage = JSON.parse(readFileSync(resolve(referenceCore, 'package.json'), 'utf8')); -if (corePackage.name !== '@codemonster-ru/vueforge-core') { - throw new Error(`Expected @codemonster-ru/vueforge-core at ${referenceCore}, found ${corePackage.name}.`); -} - -// The fixture and the reference components must share one Vue instance, so both resolve through the -// reference checkout rather than this repository's own dependency tree. -const server = await createServer({ - configFile: false, - root: resolve(import.meta.dirname, 'cross-platform-reference-fixture'), - // Vite's dependency optimizer rewrites bare imports before the aliases apply, which silently - // resolved Vue to this repository's copy and left the reference components with a second Vue - // instance that never mounted. - optimizeDeps: { exclude: ['vue', '@codemonster-ru/vueforge-core'] }, - resolve: { - alias: [ - { find: /^@codemonster-ru\/vueforge-core$/u, replacement: referenceCore }, - { find: /^vue$/u, replacement: referenceVue }, - ], - dedupe: ['vue'], - }, - server: { - host: '127.0.0.1', - port, - strictPort: true, - fs: { allow: [resolve(import.meta.dirname, '../..'), referenceRoot] }, - }, -}); - -await server.listen(); -console.log( - `VueForge reference fixtures ready at http://127.0.0.1:${port} from ${referenceRoot} (${config.reference.commit}).`, -); - -await new Promise((resolvePromise) => { - const close = () => resolvePromise(); - process.once('SIGINT', close); - process.once('SIGTERM', close); -}); -await server.close(); diff --git a/scripts/visual/showcase-state-cases.mjs b/scripts/visual/showcase-state-cases.mjs deleted file mode 100644 index 12081fbd..00000000 --- a/scripts/visual/showcase-state-cases.mjs +++ /dev/null @@ -1,89 +0,0 @@ -import { readFileSync } from 'node:fs'; - -const identifierPattern = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/u; -const supportedPseudoClasses = new Set(['active', 'focus', 'focus-visible', 'hover']); -const supportedMedia = new Set(['no-preference', 'reduce']); - -export function readShowcaseStateConfig(filePath) { - return JSON.parse(readFileSync(filePath, 'utf8')); -} - -export function validateShowcaseStateConfig(config, routes = []) { - const errors = []; - if (!config || typeof config !== 'object' || Array.isArray(config)) { - return ['Showcase state configuration must be an object.']; - } - if (config.schemaVersion !== 1) { - errors.push('Showcase state schemaVersion must be 1.'); - } - if (!Array.isArray(config.states) || config.states.length === 0) { - errors.push('Showcase state configuration requires at least one state.'); - return errors; - } - - const knownRoutes = new Set(routes); - const ids = new Set(); - for (const state of config.states) { - if (!state || typeof state !== 'object' || Array.isArray(state)) { - errors.push('Each showcase state must be an object.'); - continue; - } - if (!identifierPattern.test(state.id)) { - errors.push('Each showcase state requires a kebab-case id.'); - } else if (ids.has(state.id)) { - errors.push(`Duplicate showcase state id: ${state.id}.`); - } - ids.add(state.id); - if (!knownRoutes.has(state.route)) { - errors.push(`Showcase state ${state.id} uses unknown route: ${state.route}.`); - } - if (typeof state.selector !== 'string' || state.selector.trim() === '') { - errors.push(`Showcase state ${state.id} requires a non-empty selector.`); - } - if (state.index !== undefined && (!Number.isInteger(state.index) || state.index < 0)) { - errors.push(`Showcase state ${state.id} index must be a non-negative integer.`); - } - if (state.padding !== undefined && (!Number.isInteger(state.padding) || state.padding < 0 || state.padding > 256)) { - errors.push(`Showcase state ${state.id} padding must be an integer between 0 and 256.`); - } - if ( - state.pseudoClasses !== undefined && - (!Array.isArray(state.pseudoClasses) || - state.pseudoClasses.length === 0 || - state.pseudoClasses.some((pseudoClass) => !supportedPseudoClasses.has(pseudoClass))) - ) { - errors.push(`Showcase state ${state.id} uses unsupported pseudo-classes.`); - } - if (state.media !== undefined && !supportedMedia.has(state.media)) { - errors.push(`Showcase state ${state.id} uses unsupported reduced-motion media value.`); - } - if (state.assertReducedMotion !== undefined && typeof state.assertReducedMotion !== 'boolean') { - errors.push(`Showcase state ${state.id} assertReducedMotion must be boolean.`); - } - if (state.assertReducedMotion && state.media !== 'reduce') { - errors.push(`Showcase state ${state.id} can assert reduced motion only with reduce media.`); - } - } - return errors; -} - -export function createShowcaseStateMatrix(stateConfig, visualConfig) { - const errors = validateShowcaseStateConfig(stateConfig, visualConfig.reference.routes); - if (errors.length > 0) { - throw new Error(`Invalid showcase state configuration:\n${errors.join('\n')}`); - } - - return visualConfig.viewports.flatMap((viewport) => - visualConfig.themes.flatMap((theme) => - stateConfig.states.map((state) => ({ - ...state, - filename: `state--${state.id}--${theme.name}--${viewport.name}.png`, - index: state.index ?? 0, - media: state.media ?? 'reduce', - padding: state.padding ?? 24, - theme, - viewport, - })), - ), - ); -} diff --git a/scripts/visual/showcase-state-cases.test.mjs b/scripts/visual/showcase-state-cases.test.mjs deleted file mode 100644 index 6dd71a66..00000000 --- a/scripts/visual/showcase-state-cases.test.mjs +++ /dev/null @@ -1,76 +0,0 @@ -import assert from 'node:assert/strict'; -import test from 'node:test'; -import { createShowcaseStateMatrix, validateShowcaseStateConfig } from './showcase-state-cases.mjs'; - -const visualConfig = { - reference: { routes: ['core'] }, - themes: [ - { name: 'light', attribute: 'light' }, - { name: 'dark', attribute: 'dark' }, - ], - viewports: [ - { name: 'mobile', width: 390, height: 844 }, - { name: 'desktop', width: 1280, height: 800 }, - ], -}; - -test('creates a deterministic state, theme, and viewport matrix', () => { - const matrix = createShowcaseStateMatrix( - { - schemaVersion: 1, - states: [ - { id: 'hover', route: 'core', selector: '.cm-button', pseudoClasses: ['hover'] }, - { id: 'reduced-motion', route: 'core', selector: '.cm-skeleton', media: 'reduce' }, - ], - }, - visualConfig, - ); - - assert.equal(matrix.length, 8); - assert.deepEqual( - matrix.map(({ filename }) => filename), - [ - 'state--hover--light--mobile.png', - 'state--reduced-motion--light--mobile.png', - 'state--hover--dark--mobile.png', - 'state--reduced-motion--dark--mobile.png', - 'state--hover--light--desktop.png', - 'state--reduced-motion--light--desktop.png', - 'state--hover--dark--desktop.png', - 'state--reduced-motion--dark--desktop.png', - ], - ); - assert.equal(matrix[0].media, 'reduce'); - assert.equal(matrix[0].index, 0); - assert.equal(matrix[0].padding, 24); -}); - -test('rejects ambiguous state definitions before browser capture', () => { - const errors = validateShowcaseStateConfig( - { - schemaVersion: 1, - states: [ - { id: 'hover', route: 'missing', selector: '', pseudoClasses: ['visited'] }, - { - id: 'hover', - route: 'core', - selector: '.cm-button', - index: -1, - media: 'sometimes', - padding: 300, - assertReducedMotion: true, - }, - ], - }, - ['core'], - ); - - assert.ok(errors.includes('Duplicate showcase state id: hover.')); - assert.ok(errors.includes('Showcase state hover uses unknown route: missing.')); - assert.ok(errors.includes('Showcase state hover requires a non-empty selector.')); - assert.ok(errors.includes('Showcase state hover uses unsupported pseudo-classes.')); - assert.ok(errors.includes('Showcase state hover index must be a non-negative integer.')); - assert.ok(errors.includes('Showcase state hover padding must be an integer between 0 and 256.')); - assert.ok(errors.includes('Showcase state hover uses unsupported reduced-motion media value.')); - assert.ok(errors.includes('Showcase state hover can assert reduced motion only with reduce media.')); -}); diff --git a/visual-baselines/README.md b/visual-baselines/README.md index b12e7f59..feafd775 100644 --- a/visual-baselines/README.md +++ b/visual-baselines/README.md @@ -1,28 +1,31 @@ # Visual baselines -`vueforge-showcase` is the immutable browser reference captured from commit -`fd793696f50d3be0fcd3788f0f8f751c63869963`. It contains the Core, Colors, Layouts, Icons, -CodeBlock, and Playground routes in light and dark themes at the mobile and desktop viewport sizes -declared in `contracts/visual.config.json`. +`vueforge-cross-platform` holds the approved rendering of each cross-platform contract case in +`contracts/cross-platform-visual-baselines.json`, in light and dark themes at the mobile and +desktop viewport sizes declared in `contracts/visual.config.json`. Both the Vue and the Annabel +Razor adapter are compared against it, which is what proves the two platforms render the same +component identically rather than merely producing the same DOM. -The capture disables animation and transition rendering. The two randomized progress examples are -normalized to 50% by `scripts/visual/capture-showcase.mjs`; application source is not modified. -Comparison allows at most two levels per color channel by default (`--threshold=2`) to absorb -non-deterministic browser anti-aliasing. Any larger channel difference is a visual regression; the -M12 gate does not allow a changed-pixel ratio above zero after that threshold is applied. +The capture disables animation and transition rendering. Comparison allows at most four levels per +color channel by default (`--threshold=4`) to absorb non-deterministic browser anti-aliasing. Any +larger channel difference is a visual regression. -Capture a running candidate and compare it with the reference: +Capture a running candidate and compare it with the baseline: ```sh -npm run visual:showcase:capture -- \ - --origin=http://127.0.0.1:5175 \ - --output=/tmp/codemonster-showcase \ +npm run visual:cross-platform:razor-render -- --output=/tmp/codemonster-razor-fixtures.json +npm run visual:cross-platform:serve -- --razor-fixtures=/tmp/codemonster-razor-fixtures.json --port=5176 + +npm run visual:cross-platform:capture -- \ + --origin=http://127.0.0.1:5176 \ + --output=/tmp/codemonster-cross-platform \ --label=codemonster-current -npm run visual:showcase:compare -- \ - --baseline=visual-baselines/vueforge-showcase \ - --current=/tmp/codemonster-showcase \ - --diff=/tmp/codemonster-showcase-diff +node scripts/visual/compare-showcase.mjs \ + --baseline=visual-baselines/vueforge-cross-platform \ + --current=/tmp/codemonster-cross-platform/vue \ + --diff=/tmp/codemonster-cross-platform-diff \ + --threshold=4 ``` Chrome must already be running with remote debugging enabled. The endpoint defaults to @@ -30,13 +33,17 @@ Chrome must already be running with remote debugging enabled. The endpoint defau Start that browser fresh for each comparison you intend to trust. Captures are deterministic within one browser session, but a long-lived one drifts: a session left running through many captures -shifted sub-pixel text rendering on six Core frames, worth roughly seven hundred pixels, with no -change to the page or its computed styles. Restarting Chrome reproduced the earlier images exactly. -CI is unaffected because it launches the browser per run, so this only bites during local work, and -it makes any local difference below about a thousand pixels unsafe to read as a real change. +shifted sub-pixel text rendering on six frames, worth roughly seven hundred pixels, with no change +to the page or its computed styles. Restarting Chrome reproduced the earlier images exactly. CI is +unaffected because it launches the browser per run, so this only bites during local work, and it +makes any local difference below about a thousand pixels unsafe to read as a real change. -Restart the Vite dev servers on the same schedule. A server carried through a long editing session +Restart the Vite dev server on the same schedule. A server carried through a long editing session serves module state that no longer matches the working tree: after one such session a capture reported eight hundred pixels of change across frames the edit could not reach, and the difference -vanished on a restarted server. The frozen reference server is not exempt, though its capture has -been byte-identical across restarts because nothing edits it. +vanished on a restarted server. + +The baseline's `manifest.json` records `fd793696f50d3be0fcd3788f0f8f751c63869963` as the commit its +pixels were originally captured from, back when this comparison proved the migration from VueForge +reproduced it exactly. That provenance stays accurate and is kept for the record; the comparison +itself no longer depends on that commit or on anything being checked out from it. diff --git a/visual-baselines/vueforge-showcase-states/manifest.json b/visual-baselines/vueforge-showcase-states/manifest.json deleted file mode 100644 index 3d3f41a7..00000000 --- a/visual-baselines/vueforge-showcase-states/manifest.json +++ /dev/null @@ -1,749 +0,0 @@ -{ - "label": "vueforge-state-reference", - "referenceCommit": "fd793696f50d3be0fcd3788f0f8f751c63869963", - "routes": ["core"], - "screenshots": [ - { - "filename": "state--hover--light--mobile.png", - "clip": { - "height": 77, - "width": 117, - "x": 9, - "y": 6074 - }, - "media": "reduce", - "route": "core", - "scrollTop": 5690, - "state": "hover", - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "state--active--light--mobile.png", - "clip": { - "height": 77, - "width": 117, - "x": 9, - "y": 6074 - }, - "media": "reduce", - "route": "core", - "scrollTop": 5690, - "state": "active", - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "state--focus-visible--light--mobile.png", - "clip": { - "height": 77, - "width": 117, - "x": 9, - "y": 6074 - }, - "media": "reduce", - "route": "core", - "scrollTop": 5690, - "state": "focus-visible", - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "state--disabled--light--mobile.png", - "clip": { - "height": 77, - "width": 123, - "x": 80, - "y": 6162 - }, - "media": "reduce", - "route": "core", - "scrollTop": 5778, - "state": "disabled", - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "state--invalid--light--mobile.png", - "clip": { - "height": 76, - "width": 372, - "x": 9, - "y": 24494 - }, - "media": "reduce", - "route": "core", - "scrollTop": 24110, - "state": "invalid", - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "state--selected--light--mobile.png", - "clip": { - "height": 84, - "width": 145, - "x": 9, - "y": 34989 - }, - "media": "reduce", - "route": "core", - "scrollTop": 34609, - "state": "selected", - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "state--open--light--mobile.png", - "clip": { - "height": 357, - "width": 516, - "x": 0, - "y": 35676 - }, - "media": "reduce", - "route": "core", - "scrollTop": 35432, - "state": "open", - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "state--closed--light--mobile.png", - "clip": { - "height": 197, - "width": 436, - "x": 0, - "y": 35706 - }, - "media": "reduce", - "route": "core", - "scrollTop": 35382, - "state": "closed", - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "state--loading--light--mobile.png", - "clip": { - "height": 76, - "width": 139, - "x": 9, - "y": 6729 - }, - "media": "reduce", - "route": "core", - "scrollTop": 6345, - "state": "loading", - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "state--indeterminate--light--mobile.png", - "clip": { - "height": 56, - "width": 372, - "x": 9, - "y": 20047 - }, - "media": "reduce", - "route": "core", - "scrollTop": 19653, - "state": "indeterminate", - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "state--reduced-motion--light--mobile.png", - "clip": { - "height": 64, - "width": 372, - "x": 9, - "y": 19991 - }, - "media": "reduce", - "route": "core", - "reducedMotionVerified": true, - "scrollTop": 19601, - "state": "reduced-motion", - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "state--hover--dark--mobile.png", - "clip": { - "height": 77, - "width": 117, - "x": 9, - "y": 6074 - }, - "media": "reduce", - "route": "core", - "scrollTop": 5690, - "state": "hover", - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "state--active--dark--mobile.png", - "clip": { - "height": 77, - "width": 117, - "x": 9, - "y": 6074 - }, - "media": "reduce", - "route": "core", - "scrollTop": 5690, - "state": "active", - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "state--focus-visible--dark--mobile.png", - "clip": { - "height": 77, - "width": 117, - "x": 9, - "y": 6074 - }, - "media": "reduce", - "route": "core", - "scrollTop": 5690, - "state": "focus-visible", - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "state--disabled--dark--mobile.png", - "clip": { - "height": 77, - "width": 123, - "x": 80, - "y": 6162 - }, - "media": "reduce", - "route": "core", - "scrollTop": 5778, - "state": "disabled", - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "state--invalid--dark--mobile.png", - "clip": { - "height": 76, - "width": 372, - "x": 9, - "y": 24494 - }, - "media": "reduce", - "route": "core", - "scrollTop": 24110, - "state": "invalid", - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "state--selected--dark--mobile.png", - "clip": { - "height": 84, - "width": 145, - "x": 9, - "y": 34989 - }, - "media": "reduce", - "route": "core", - "scrollTop": 34609, - "state": "selected", - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "state--open--dark--mobile.png", - "clip": { - "height": 357, - "width": 516, - "x": 0, - "y": 35676 - }, - "media": "reduce", - "route": "core", - "scrollTop": 35432, - "state": "open", - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "state--closed--dark--mobile.png", - "clip": { - "height": 197, - "width": 436, - "x": 0, - "y": 35706 - }, - "media": "reduce", - "route": "core", - "scrollTop": 35382, - "state": "closed", - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "state--loading--dark--mobile.png", - "clip": { - "height": 76, - "width": 139, - "x": 9, - "y": 6729 - }, - "media": "reduce", - "route": "core", - "scrollTop": 6345, - "state": "loading", - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "state--indeterminate--dark--mobile.png", - "clip": { - "height": 56, - "width": 372, - "x": 9, - "y": 20047 - }, - "media": "reduce", - "route": "core", - "scrollTop": 19653, - "state": "indeterminate", - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "state--reduced-motion--dark--mobile.png", - "clip": { - "height": 64, - "width": 372, - "x": 9, - "y": 19991 - }, - "media": "reduce", - "route": "core", - "reducedMotionVerified": true, - "scrollTop": 19601, - "state": "reduced-motion", - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "state--hover--light--desktop.png", - "clip": { - "height": 77, - "width": 117, - "x": 9, - "y": 4657 - }, - "media": "reduce", - "route": "core", - "scrollTop": 4295, - "state": "hover", - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "state--active--light--desktop.png", - "clip": { - "height": 77, - "width": 117, - "x": 9, - "y": 4657 - }, - "media": "reduce", - "route": "core", - "scrollTop": 4295, - "state": "active", - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "state--focus-visible--light--desktop.png", - "clip": { - "height": 77, - "width": 117, - "x": 9, - "y": 4657 - }, - "media": "reduce", - "route": "core", - "scrollTop": 4295, - "state": "focus-visible", - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "state--disabled--light--desktop.png", - "clip": { - "height": 77, - "width": 122, - "x": 312, - "y": 4701 - }, - "media": "reduce", - "route": "core", - "scrollTop": 4339, - "state": "disabled", - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "state--invalid--light--desktop.png", - "clip": { - "height": 77, - "width": 442, - "x": 9, - "y": 14848 - }, - "media": "reduce", - "route": "core", - "scrollTop": 14486, - "state": "invalid", - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "state--selected--light--desktop.png", - "clip": { - "height": 85, - "width": 145, - "x": 9, - "y": 19129 - }, - "media": "reduce", - "route": "core", - "scrollTop": 18771, - "state": "selected", - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "state--open--light--desktop.png", - "clip": { - "height": 356, - "width": 917, - "x": 489, - "y": 19283 - }, - "media": "reduce", - "route": "core", - "scrollTop": 19061, - "state": "open", - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "state--closed--light--desktop.png", - "clip": { - "height": 196, - "width": 757, - "x": 569, - "y": 19313 - }, - "media": "reduce", - "route": "core", - "scrollTop": 19011, - "state": "closed", - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "state--loading--light--desktop.png", - "clip": { - "height": 76, - "width": 139, - "x": 9, - "y": 4905 - }, - "media": "reduce", - "route": "core", - "scrollTop": 4543, - "state": "loading", - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "state--indeterminate--light--desktop.png", - "clip": { - "height": 57, - "width": 647, - "x": 9, - "y": 12416 - }, - "media": "reduce", - "route": "core", - "scrollTop": 12044, - "state": "indeterminate", - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "state--reduced-motion--light--desktop.png", - "clip": { - "height": 65, - "width": 647, - "x": 9, - "y": 12360 - }, - "media": "reduce", - "route": "core", - "reducedMotionVerified": true, - "scrollTop": 11992, - "state": "reduced-motion", - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "state--hover--dark--desktop.png", - "clip": { - "height": 77, - "width": 117, - "x": 9, - "y": 4657 - }, - "media": "reduce", - "route": "core", - "scrollTop": 4295, - "state": "hover", - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "state--active--dark--desktop.png", - "clip": { - "height": 77, - "width": 117, - "x": 9, - "y": 4657 - }, - "media": "reduce", - "route": "core", - "scrollTop": 4295, - "state": "active", - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "state--focus-visible--dark--desktop.png", - "clip": { - "height": 77, - "width": 117, - "x": 9, - "y": 4657 - }, - "media": "reduce", - "route": "core", - "scrollTop": 4295, - "state": "focus-visible", - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "state--disabled--dark--desktop.png", - "clip": { - "height": 77, - "width": 122, - "x": 312, - "y": 4701 - }, - "media": "reduce", - "route": "core", - "scrollTop": 4339, - "state": "disabled", - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "state--invalid--dark--desktop.png", - "clip": { - "height": 77, - "width": 442, - "x": 9, - "y": 14848 - }, - "media": "reduce", - "route": "core", - "scrollTop": 14486, - "state": "invalid", - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "state--selected--dark--desktop.png", - "clip": { - "height": 85, - "width": 145, - "x": 9, - "y": 19129 - }, - "media": "reduce", - "route": "core", - "scrollTop": 18771, - "state": "selected", - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "state--open--dark--desktop.png", - "clip": { - "height": 356, - "width": 917, - "x": 489, - "y": 19283 - }, - "media": "reduce", - "route": "core", - "scrollTop": 19061, - "state": "open", - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "state--closed--dark--desktop.png", - "clip": { - "height": 196, - "width": 757, - "x": 569, - "y": 19313 - }, - "media": "reduce", - "route": "core", - "scrollTop": 19011, - "state": "closed", - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "state--loading--dark--desktop.png", - "clip": { - "height": 76, - "width": 139, - "x": 9, - "y": 4905 - }, - "media": "reduce", - "route": "core", - "scrollTop": 4543, - "state": "loading", - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "state--indeterminate--dark--desktop.png", - "clip": { - "height": 57, - "width": 647, - "x": 9, - "y": 12416 - }, - "media": "reduce", - "route": "core", - "scrollTop": 12044, - "state": "indeterminate", - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "state--reduced-motion--dark--desktop.png", - "clip": { - "height": 65, - "width": 647, - "x": 9, - "y": 12360 - }, - "media": "reduce", - "route": "core", - "reducedMotionVerified": true, - "scrollTop": 11992, - "state": "reduced-motion", - "theme": "dark", - "viewport": "desktop" - } - ], - "stateCases": [ - { - "id": "hover", - "route": "core", - "selector": "[data-test=\"action-geometry-matrix\"] :is(.vf-button, .cm-button):not(:disabled)", - "pseudoClasses": ["hover"] - }, - { - "id": "active", - "route": "core", - "selector": "[data-test=\"action-geometry-matrix\"] :is(.vf-button, .cm-button):not(:disabled)", - "pseudoClasses": ["active"] - }, - { - "id": "focus-visible", - "route": "core", - "selector": "[data-test=\"action-geometry-matrix\"] :is(.vf-button, .cm-button):not(:disabled)", - "pseudoClasses": ["focus", "focus-visible"] - }, - { - "id": "disabled", - "route": "core", - "selector": "[data-test=\"action-geometry-matrix\"] :is(.vf-button, .cm-button):disabled" - }, - { - "id": "invalid", - "route": "core", - "selector": "[data-test=\"form-geometry-matrix\"] [aria-invalid=\"true\"]" - }, - { - "id": "selected", - "route": "core", - "selector": "[role=\"tab\"][aria-selected=\"true\"]" - }, - { - "id": "open", - "route": "core", - "selector": "[data-test=\"navigation-geometry-matrix\"] :is(.vf-accordion__trigger, .cm-accordion__trigger)[aria-expanded=\"true\"]", - "padding": 160 - }, - { - "id": "closed", - "route": "core", - "selector": "[data-test=\"navigation-geometry-matrix\"] :is(.vf-accordion__trigger, .cm-accordion__trigger)[aria-expanded=\"false\"]", - "padding": 80 - }, - { - "id": "loading", - "route": "core", - "selector": "[data-test=\"action-geometry-matrix\"] [aria-busy=\"true\"]" - }, - { - "id": "indeterminate", - "route": "core", - "selector": "[role=\"progressbar\"][aria-label=\"Background sync progress\"]" - }, - { - "id": "reduced-motion", - "route": "core", - "selector": ":is(.vf-progress-bar--animated, .cm-progress-bar--animated)", - "media": "reduce", - "assertReducedMotion": true - } - ], - "suite": "states", - "themes": ["light", "dark"], - "viewports": [ - { - "name": "mobile", - "width": 390, - "height": 844 - }, - { - "name": "desktop", - "width": 1280, - "height": 800 - } - ] -} diff --git a/visual-baselines/vueforge-showcase-states/state--active--dark--desktop.png b/visual-baselines/vueforge-showcase-states/state--active--dark--desktop.png deleted file mode 100644 index b5f2258d..00000000 Binary files a/visual-baselines/vueforge-showcase-states/state--active--dark--desktop.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase-states/state--active--dark--mobile.png b/visual-baselines/vueforge-showcase-states/state--active--dark--mobile.png deleted file mode 100644 index 5e1f36fa..00000000 Binary files a/visual-baselines/vueforge-showcase-states/state--active--dark--mobile.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase-states/state--active--light--desktop.png b/visual-baselines/vueforge-showcase-states/state--active--light--desktop.png deleted file mode 100644 index bb45d322..00000000 Binary files a/visual-baselines/vueforge-showcase-states/state--active--light--desktop.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase-states/state--active--light--mobile.png b/visual-baselines/vueforge-showcase-states/state--active--light--mobile.png deleted file mode 100644 index bbc241a3..00000000 Binary files a/visual-baselines/vueforge-showcase-states/state--active--light--mobile.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase-states/state--closed--dark--desktop.png b/visual-baselines/vueforge-showcase-states/state--closed--dark--desktop.png deleted file mode 100644 index d49cccc4..00000000 Binary files a/visual-baselines/vueforge-showcase-states/state--closed--dark--desktop.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase-states/state--closed--dark--mobile.png b/visual-baselines/vueforge-showcase-states/state--closed--dark--mobile.png deleted file mode 100644 index 7d5de880..00000000 Binary files a/visual-baselines/vueforge-showcase-states/state--closed--dark--mobile.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase-states/state--closed--light--desktop.png b/visual-baselines/vueforge-showcase-states/state--closed--light--desktop.png deleted file mode 100644 index 131bb7d5..00000000 Binary files a/visual-baselines/vueforge-showcase-states/state--closed--light--desktop.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase-states/state--closed--light--mobile.png b/visual-baselines/vueforge-showcase-states/state--closed--light--mobile.png deleted file mode 100644 index 919029f2..00000000 Binary files a/visual-baselines/vueforge-showcase-states/state--closed--light--mobile.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase-states/state--disabled--dark--desktop.png b/visual-baselines/vueforge-showcase-states/state--disabled--dark--desktop.png deleted file mode 100644 index ffdde9fd..00000000 Binary files a/visual-baselines/vueforge-showcase-states/state--disabled--dark--desktop.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase-states/state--disabled--dark--mobile.png b/visual-baselines/vueforge-showcase-states/state--disabled--dark--mobile.png deleted file mode 100644 index 2356c900..00000000 Binary files a/visual-baselines/vueforge-showcase-states/state--disabled--dark--mobile.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase-states/state--disabled--light--desktop.png b/visual-baselines/vueforge-showcase-states/state--disabled--light--desktop.png deleted file mode 100644 index 93248db6..00000000 Binary files a/visual-baselines/vueforge-showcase-states/state--disabled--light--desktop.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase-states/state--disabled--light--mobile.png b/visual-baselines/vueforge-showcase-states/state--disabled--light--mobile.png deleted file mode 100644 index acf26ce0..00000000 Binary files a/visual-baselines/vueforge-showcase-states/state--disabled--light--mobile.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase-states/state--focus-visible--dark--desktop.png b/visual-baselines/vueforge-showcase-states/state--focus-visible--dark--desktop.png deleted file mode 100644 index 217765c6..00000000 Binary files a/visual-baselines/vueforge-showcase-states/state--focus-visible--dark--desktop.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase-states/state--focus-visible--dark--mobile.png b/visual-baselines/vueforge-showcase-states/state--focus-visible--dark--mobile.png deleted file mode 100644 index 38e44c3b..00000000 Binary files a/visual-baselines/vueforge-showcase-states/state--focus-visible--dark--mobile.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase-states/state--focus-visible--light--desktop.png b/visual-baselines/vueforge-showcase-states/state--focus-visible--light--desktop.png deleted file mode 100644 index 15e3e1f1..00000000 Binary files a/visual-baselines/vueforge-showcase-states/state--focus-visible--light--desktop.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase-states/state--focus-visible--light--mobile.png b/visual-baselines/vueforge-showcase-states/state--focus-visible--light--mobile.png deleted file mode 100644 index 371ce777..00000000 Binary files a/visual-baselines/vueforge-showcase-states/state--focus-visible--light--mobile.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase-states/state--hover--dark--desktop.png b/visual-baselines/vueforge-showcase-states/state--hover--dark--desktop.png deleted file mode 100644 index 7387a981..00000000 Binary files a/visual-baselines/vueforge-showcase-states/state--hover--dark--desktop.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase-states/state--hover--dark--mobile.png b/visual-baselines/vueforge-showcase-states/state--hover--dark--mobile.png deleted file mode 100644 index b212615c..00000000 Binary files a/visual-baselines/vueforge-showcase-states/state--hover--dark--mobile.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase-states/state--hover--light--desktop.png b/visual-baselines/vueforge-showcase-states/state--hover--light--desktop.png deleted file mode 100644 index 6a2ddb61..00000000 Binary files a/visual-baselines/vueforge-showcase-states/state--hover--light--desktop.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase-states/state--hover--light--mobile.png b/visual-baselines/vueforge-showcase-states/state--hover--light--mobile.png deleted file mode 100644 index 44d73abc..00000000 Binary files a/visual-baselines/vueforge-showcase-states/state--hover--light--mobile.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase-states/state--indeterminate--dark--desktop.png b/visual-baselines/vueforge-showcase-states/state--indeterminate--dark--desktop.png deleted file mode 100644 index 6c563d00..00000000 Binary files a/visual-baselines/vueforge-showcase-states/state--indeterminate--dark--desktop.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase-states/state--indeterminate--dark--mobile.png b/visual-baselines/vueforge-showcase-states/state--indeterminate--dark--mobile.png deleted file mode 100644 index d265843e..00000000 Binary files a/visual-baselines/vueforge-showcase-states/state--indeterminate--dark--mobile.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase-states/state--indeterminate--light--desktop.png b/visual-baselines/vueforge-showcase-states/state--indeterminate--light--desktop.png deleted file mode 100644 index bb82fe18..00000000 Binary files a/visual-baselines/vueforge-showcase-states/state--indeterminate--light--desktop.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase-states/state--indeterminate--light--mobile.png b/visual-baselines/vueforge-showcase-states/state--indeterminate--light--mobile.png deleted file mode 100644 index c0a34975..00000000 Binary files a/visual-baselines/vueforge-showcase-states/state--indeterminate--light--mobile.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase-states/state--invalid--dark--desktop.png b/visual-baselines/vueforge-showcase-states/state--invalid--dark--desktop.png deleted file mode 100644 index d33680bc..00000000 Binary files a/visual-baselines/vueforge-showcase-states/state--invalid--dark--desktop.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase-states/state--invalid--dark--mobile.png b/visual-baselines/vueforge-showcase-states/state--invalid--dark--mobile.png deleted file mode 100644 index 29af5d72..00000000 Binary files a/visual-baselines/vueforge-showcase-states/state--invalid--dark--mobile.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase-states/state--invalid--light--desktop.png b/visual-baselines/vueforge-showcase-states/state--invalid--light--desktop.png deleted file mode 100644 index 06d1912f..00000000 Binary files a/visual-baselines/vueforge-showcase-states/state--invalid--light--desktop.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase-states/state--invalid--light--mobile.png b/visual-baselines/vueforge-showcase-states/state--invalid--light--mobile.png deleted file mode 100644 index 708e3900..00000000 Binary files a/visual-baselines/vueforge-showcase-states/state--invalid--light--mobile.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase-states/state--loading--dark--desktop.png b/visual-baselines/vueforge-showcase-states/state--loading--dark--desktop.png deleted file mode 100644 index 0d97d0ec..00000000 Binary files a/visual-baselines/vueforge-showcase-states/state--loading--dark--desktop.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase-states/state--loading--dark--mobile.png b/visual-baselines/vueforge-showcase-states/state--loading--dark--mobile.png deleted file mode 100644 index c56df259..00000000 Binary files a/visual-baselines/vueforge-showcase-states/state--loading--dark--mobile.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase-states/state--loading--light--desktop.png b/visual-baselines/vueforge-showcase-states/state--loading--light--desktop.png deleted file mode 100644 index 1a4e9751..00000000 Binary files a/visual-baselines/vueforge-showcase-states/state--loading--light--desktop.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase-states/state--loading--light--mobile.png b/visual-baselines/vueforge-showcase-states/state--loading--light--mobile.png deleted file mode 100644 index a054bc7a..00000000 Binary files a/visual-baselines/vueforge-showcase-states/state--loading--light--mobile.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase-states/state--open--dark--desktop.png b/visual-baselines/vueforge-showcase-states/state--open--dark--desktop.png deleted file mode 100644 index 1c53fe2b..00000000 Binary files a/visual-baselines/vueforge-showcase-states/state--open--dark--desktop.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase-states/state--open--dark--mobile.png b/visual-baselines/vueforge-showcase-states/state--open--dark--mobile.png deleted file mode 100644 index ae23cab5..00000000 Binary files a/visual-baselines/vueforge-showcase-states/state--open--dark--mobile.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase-states/state--open--light--desktop.png b/visual-baselines/vueforge-showcase-states/state--open--light--desktop.png deleted file mode 100644 index 0d8d9d97..00000000 Binary files a/visual-baselines/vueforge-showcase-states/state--open--light--desktop.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase-states/state--open--light--mobile.png b/visual-baselines/vueforge-showcase-states/state--open--light--mobile.png deleted file mode 100644 index 37ee3e8d..00000000 Binary files a/visual-baselines/vueforge-showcase-states/state--open--light--mobile.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase-states/state--reduced-motion--dark--desktop.png b/visual-baselines/vueforge-showcase-states/state--reduced-motion--dark--desktop.png deleted file mode 100644 index aa68661f..00000000 Binary files a/visual-baselines/vueforge-showcase-states/state--reduced-motion--dark--desktop.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase-states/state--reduced-motion--dark--mobile.png b/visual-baselines/vueforge-showcase-states/state--reduced-motion--dark--mobile.png deleted file mode 100644 index e3057e49..00000000 Binary files a/visual-baselines/vueforge-showcase-states/state--reduced-motion--dark--mobile.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase-states/state--reduced-motion--light--desktop.png b/visual-baselines/vueforge-showcase-states/state--reduced-motion--light--desktop.png deleted file mode 100644 index 8cb01b87..00000000 Binary files a/visual-baselines/vueforge-showcase-states/state--reduced-motion--light--desktop.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase-states/state--reduced-motion--light--mobile.png b/visual-baselines/vueforge-showcase-states/state--reduced-motion--light--mobile.png deleted file mode 100644 index ff0b0e17..00000000 Binary files a/visual-baselines/vueforge-showcase-states/state--reduced-motion--light--mobile.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase-states/state--selected--dark--desktop.png b/visual-baselines/vueforge-showcase-states/state--selected--dark--desktop.png deleted file mode 100644 index 2f1e7577..00000000 Binary files a/visual-baselines/vueforge-showcase-states/state--selected--dark--desktop.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase-states/state--selected--dark--mobile.png b/visual-baselines/vueforge-showcase-states/state--selected--dark--mobile.png deleted file mode 100644 index d4927293..00000000 Binary files a/visual-baselines/vueforge-showcase-states/state--selected--dark--mobile.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase-states/state--selected--light--desktop.png b/visual-baselines/vueforge-showcase-states/state--selected--light--desktop.png deleted file mode 100644 index a70815d8..00000000 Binary files a/visual-baselines/vueforge-showcase-states/state--selected--light--desktop.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase-states/state--selected--light--mobile.png b/visual-baselines/vueforge-showcase-states/state--selected--light--mobile.png deleted file mode 100644 index 254b9804..00000000 Binary files a/visual-baselines/vueforge-showcase-states/state--selected--light--mobile.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/codeblock--dark--desktop--01.png b/visual-baselines/vueforge-showcase/codeblock--dark--desktop--01.png deleted file mode 100644 index c775821a..00000000 Binary files a/visual-baselines/vueforge-showcase/codeblock--dark--desktop--01.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/codeblock--dark--desktop--02.png b/visual-baselines/vueforge-showcase/codeblock--dark--desktop--02.png deleted file mode 100644 index cb294441..00000000 Binary files a/visual-baselines/vueforge-showcase/codeblock--dark--desktop--02.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/codeblock--dark--desktop--03.png b/visual-baselines/vueforge-showcase/codeblock--dark--desktop--03.png deleted file mode 100644 index 12d463cc..00000000 Binary files a/visual-baselines/vueforge-showcase/codeblock--dark--desktop--03.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/codeblock--dark--desktop--04.png b/visual-baselines/vueforge-showcase/codeblock--dark--desktop--04.png deleted file mode 100644 index d3f993e1..00000000 Binary files a/visual-baselines/vueforge-showcase/codeblock--dark--desktop--04.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/codeblock--dark--mobile--01.png b/visual-baselines/vueforge-showcase/codeblock--dark--mobile--01.png deleted file mode 100644 index d82002c9..00000000 Binary files a/visual-baselines/vueforge-showcase/codeblock--dark--mobile--01.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/codeblock--dark--mobile--02.png b/visual-baselines/vueforge-showcase/codeblock--dark--mobile--02.png deleted file mode 100644 index b9a7ad2e..00000000 Binary files a/visual-baselines/vueforge-showcase/codeblock--dark--mobile--02.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/codeblock--dark--mobile--03.png b/visual-baselines/vueforge-showcase/codeblock--dark--mobile--03.png deleted file mode 100644 index 59180044..00000000 Binary files a/visual-baselines/vueforge-showcase/codeblock--dark--mobile--03.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/codeblock--dark--mobile--04.png b/visual-baselines/vueforge-showcase/codeblock--dark--mobile--04.png deleted file mode 100644 index 8b4f5c14..00000000 Binary files a/visual-baselines/vueforge-showcase/codeblock--dark--mobile--04.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/codeblock--dark--mobile--05.png b/visual-baselines/vueforge-showcase/codeblock--dark--mobile--05.png deleted file mode 100644 index 83398705..00000000 Binary files a/visual-baselines/vueforge-showcase/codeblock--dark--mobile--05.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/codeblock--dark--mobile--06.png b/visual-baselines/vueforge-showcase/codeblock--dark--mobile--06.png deleted file mode 100644 index 86ee8cfa..00000000 Binary files a/visual-baselines/vueforge-showcase/codeblock--dark--mobile--06.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/codeblock--light--desktop--01.png b/visual-baselines/vueforge-showcase/codeblock--light--desktop--01.png deleted file mode 100644 index 812940bb..00000000 Binary files a/visual-baselines/vueforge-showcase/codeblock--light--desktop--01.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/codeblock--light--desktop--02.png b/visual-baselines/vueforge-showcase/codeblock--light--desktop--02.png deleted file mode 100644 index ad336dcf..00000000 Binary files a/visual-baselines/vueforge-showcase/codeblock--light--desktop--02.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/codeblock--light--desktop--03.png b/visual-baselines/vueforge-showcase/codeblock--light--desktop--03.png deleted file mode 100644 index 69d93f99..00000000 Binary files a/visual-baselines/vueforge-showcase/codeblock--light--desktop--03.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/codeblock--light--desktop--04.png b/visual-baselines/vueforge-showcase/codeblock--light--desktop--04.png deleted file mode 100644 index 9f546c69..00000000 Binary files a/visual-baselines/vueforge-showcase/codeblock--light--desktop--04.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/codeblock--light--mobile--01.png b/visual-baselines/vueforge-showcase/codeblock--light--mobile--01.png deleted file mode 100644 index 484bb06a..00000000 Binary files a/visual-baselines/vueforge-showcase/codeblock--light--mobile--01.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/codeblock--light--mobile--02.png b/visual-baselines/vueforge-showcase/codeblock--light--mobile--02.png deleted file mode 100644 index 5dbd00f7..00000000 Binary files a/visual-baselines/vueforge-showcase/codeblock--light--mobile--02.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/codeblock--light--mobile--03.png b/visual-baselines/vueforge-showcase/codeblock--light--mobile--03.png deleted file mode 100644 index 7eb72bf3..00000000 Binary files a/visual-baselines/vueforge-showcase/codeblock--light--mobile--03.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/codeblock--light--mobile--04.png b/visual-baselines/vueforge-showcase/codeblock--light--mobile--04.png deleted file mode 100644 index ea5888b2..00000000 Binary files a/visual-baselines/vueforge-showcase/codeblock--light--mobile--04.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/codeblock--light--mobile--05.png b/visual-baselines/vueforge-showcase/codeblock--light--mobile--05.png deleted file mode 100644 index 8a1b6dc1..00000000 Binary files a/visual-baselines/vueforge-showcase/codeblock--light--mobile--05.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/codeblock--light--mobile--06.png b/visual-baselines/vueforge-showcase/codeblock--light--mobile--06.png deleted file mode 100644 index 8fd66bbd..00000000 Binary files a/visual-baselines/vueforge-showcase/codeblock--light--mobile--06.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--desktop--01.png b/visual-baselines/vueforge-showcase/core--dark--desktop--01.png deleted file mode 100644 index 95e5ed30..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--desktop--01.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--desktop--02.png b/visual-baselines/vueforge-showcase/core--dark--desktop--02.png deleted file mode 100644 index 01865d27..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--desktop--02.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--desktop--03.png b/visual-baselines/vueforge-showcase/core--dark--desktop--03.png deleted file mode 100644 index bf95f556..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--desktop--03.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--desktop--04.png b/visual-baselines/vueforge-showcase/core--dark--desktop--04.png deleted file mode 100644 index 5734d4df..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--desktop--04.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--desktop--05.png b/visual-baselines/vueforge-showcase/core--dark--desktop--05.png deleted file mode 100644 index 2b4f62a3..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--desktop--05.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--desktop--06.png b/visual-baselines/vueforge-showcase/core--dark--desktop--06.png deleted file mode 100644 index 6e4ac82a..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--desktop--06.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--desktop--07.png b/visual-baselines/vueforge-showcase/core--dark--desktop--07.png deleted file mode 100644 index cdcf6d9a..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--desktop--07.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--desktop--08.png b/visual-baselines/vueforge-showcase/core--dark--desktop--08.png deleted file mode 100644 index 577b8c02..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--desktop--08.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--desktop--09.png b/visual-baselines/vueforge-showcase/core--dark--desktop--09.png deleted file mode 100644 index a5624842..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--desktop--09.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--desktop--10.png b/visual-baselines/vueforge-showcase/core--dark--desktop--10.png deleted file mode 100644 index 29da20af..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--desktop--10.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--desktop--11.png b/visual-baselines/vueforge-showcase/core--dark--desktop--11.png deleted file mode 100644 index 86e5dd33..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--desktop--11.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--desktop--12.png b/visual-baselines/vueforge-showcase/core--dark--desktop--12.png deleted file mode 100644 index 1e4028cf..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--desktop--12.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--desktop--13.png b/visual-baselines/vueforge-showcase/core--dark--desktop--13.png deleted file mode 100644 index 0ad5ead9..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--desktop--13.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--desktop--14.png b/visual-baselines/vueforge-showcase/core--dark--desktop--14.png deleted file mode 100644 index 43b1ff79..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--desktop--14.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--desktop--15.png b/visual-baselines/vueforge-showcase/core--dark--desktop--15.png deleted file mode 100644 index 0d063c0d..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--desktop--15.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--desktop--16.png b/visual-baselines/vueforge-showcase/core--dark--desktop--16.png deleted file mode 100644 index aff1bf34..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--desktop--16.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--desktop--17.png b/visual-baselines/vueforge-showcase/core--dark--desktop--17.png deleted file mode 100644 index 2e875611..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--desktop--17.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--desktop--18.png b/visual-baselines/vueforge-showcase/core--dark--desktop--18.png deleted file mode 100644 index 055f7f78..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--desktop--18.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--desktop--19.png b/visual-baselines/vueforge-showcase/core--dark--desktop--19.png deleted file mode 100644 index e38c9d89..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--desktop--19.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--desktop--20.png b/visual-baselines/vueforge-showcase/core--dark--desktop--20.png deleted file mode 100644 index e55b3e9c..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--desktop--20.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--desktop--21.png b/visual-baselines/vueforge-showcase/core--dark--desktop--21.png deleted file mode 100644 index 3be8b75e..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--desktop--21.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--desktop--22.png b/visual-baselines/vueforge-showcase/core--dark--desktop--22.png deleted file mode 100644 index 89a46a10..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--desktop--22.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--desktop--23.png b/visual-baselines/vueforge-showcase/core--dark--desktop--23.png deleted file mode 100644 index 4ec221cd..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--desktop--23.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--desktop--24.png b/visual-baselines/vueforge-showcase/core--dark--desktop--24.png deleted file mode 100644 index 533c2f55..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--desktop--24.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--desktop--25.png b/visual-baselines/vueforge-showcase/core--dark--desktop--25.png deleted file mode 100644 index 3010b6d8..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--desktop--25.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--desktop--26.png b/visual-baselines/vueforge-showcase/core--dark--desktop--26.png deleted file mode 100644 index e32b628d..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--desktop--26.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--desktop--27.png b/visual-baselines/vueforge-showcase/core--dark--desktop--27.png deleted file mode 100644 index 14d501a8..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--desktop--27.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--mobile--01.png b/visual-baselines/vueforge-showcase/core--dark--mobile--01.png deleted file mode 100644 index d1fbfb09..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--mobile--01.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--mobile--02.png b/visual-baselines/vueforge-showcase/core--dark--mobile--02.png deleted file mode 100644 index 7847eb83..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--mobile--02.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--mobile--03.png b/visual-baselines/vueforge-showcase/core--dark--mobile--03.png deleted file mode 100644 index b7cea0f3..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--mobile--03.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--mobile--04.png b/visual-baselines/vueforge-showcase/core--dark--mobile--04.png deleted file mode 100644 index 40bf39ff..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--mobile--04.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--mobile--05.png b/visual-baselines/vueforge-showcase/core--dark--mobile--05.png deleted file mode 100644 index ae5568ad..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--mobile--05.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--mobile--06.png b/visual-baselines/vueforge-showcase/core--dark--mobile--06.png deleted file mode 100644 index 644b2a51..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--mobile--06.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--mobile--07.png b/visual-baselines/vueforge-showcase/core--dark--mobile--07.png deleted file mode 100644 index d2e203a7..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--mobile--07.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--mobile--08.png b/visual-baselines/vueforge-showcase/core--dark--mobile--08.png deleted file mode 100644 index 5e45cead..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--mobile--08.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--mobile--09.png b/visual-baselines/vueforge-showcase/core--dark--mobile--09.png deleted file mode 100644 index 7f8571e6..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--mobile--09.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--mobile--10.png b/visual-baselines/vueforge-showcase/core--dark--mobile--10.png deleted file mode 100644 index a13ee1f0..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--mobile--10.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--mobile--11.png b/visual-baselines/vueforge-showcase/core--dark--mobile--11.png deleted file mode 100644 index f6deb614..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--mobile--11.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--mobile--12.png b/visual-baselines/vueforge-showcase/core--dark--mobile--12.png deleted file mode 100644 index 2e349338..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--mobile--12.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--mobile--13.png b/visual-baselines/vueforge-showcase/core--dark--mobile--13.png deleted file mode 100644 index 9c4562be..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--mobile--13.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--mobile--14.png b/visual-baselines/vueforge-showcase/core--dark--mobile--14.png deleted file mode 100644 index 0a1fa543..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--mobile--14.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--mobile--15.png b/visual-baselines/vueforge-showcase/core--dark--mobile--15.png deleted file mode 100644 index f7a8f98f..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--mobile--15.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--mobile--16.png b/visual-baselines/vueforge-showcase/core--dark--mobile--16.png deleted file mode 100644 index 7f8b77ac..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--mobile--16.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--mobile--17.png b/visual-baselines/vueforge-showcase/core--dark--mobile--17.png deleted file mode 100644 index 41c2a5b5..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--mobile--17.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--mobile--18.png b/visual-baselines/vueforge-showcase/core--dark--mobile--18.png deleted file mode 100644 index 7037636b..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--mobile--18.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--mobile--19.png b/visual-baselines/vueforge-showcase/core--dark--mobile--19.png deleted file mode 100644 index 6b5ce6a0..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--mobile--19.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--mobile--20.png b/visual-baselines/vueforge-showcase/core--dark--mobile--20.png deleted file mode 100644 index 0fef7ae9..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--mobile--20.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--mobile--21.png b/visual-baselines/vueforge-showcase/core--dark--mobile--21.png deleted file mode 100644 index 46fb2066..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--mobile--21.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--mobile--22.png b/visual-baselines/vueforge-showcase/core--dark--mobile--22.png deleted file mode 100644 index af19eb01..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--mobile--22.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--mobile--23.png b/visual-baselines/vueforge-showcase/core--dark--mobile--23.png deleted file mode 100644 index dec9d80b..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--mobile--23.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--mobile--24.png b/visual-baselines/vueforge-showcase/core--dark--mobile--24.png deleted file mode 100644 index 123568fa..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--mobile--24.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--mobile--25.png b/visual-baselines/vueforge-showcase/core--dark--mobile--25.png deleted file mode 100644 index f2a28c84..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--mobile--25.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--mobile--26.png b/visual-baselines/vueforge-showcase/core--dark--mobile--26.png deleted file mode 100644 index 66534300..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--mobile--26.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--mobile--27.png b/visual-baselines/vueforge-showcase/core--dark--mobile--27.png deleted file mode 100644 index c7cbc9db..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--mobile--27.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--mobile--28.png b/visual-baselines/vueforge-showcase/core--dark--mobile--28.png deleted file mode 100644 index 233a872f..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--mobile--28.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--mobile--29.png b/visual-baselines/vueforge-showcase/core--dark--mobile--29.png deleted file mode 100644 index 2356a596..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--mobile--29.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--mobile--30.png b/visual-baselines/vueforge-showcase/core--dark--mobile--30.png deleted file mode 100644 index c1fd2729..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--mobile--30.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--mobile--31.png b/visual-baselines/vueforge-showcase/core--dark--mobile--31.png deleted file mode 100644 index 889d4b9d..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--mobile--31.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--mobile--32.png b/visual-baselines/vueforge-showcase/core--dark--mobile--32.png deleted file mode 100644 index 7bf7a163..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--mobile--32.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--mobile--33.png b/visual-baselines/vueforge-showcase/core--dark--mobile--33.png deleted file mode 100644 index a765e61d..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--mobile--33.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--mobile--34.png b/visual-baselines/vueforge-showcase/core--dark--mobile--34.png deleted file mode 100644 index 95ada30b..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--mobile--34.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--mobile--35.png b/visual-baselines/vueforge-showcase/core--dark--mobile--35.png deleted file mode 100644 index eb9769f4..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--mobile--35.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--mobile--36.png b/visual-baselines/vueforge-showcase/core--dark--mobile--36.png deleted file mode 100644 index 2079b7b6..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--mobile--36.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--mobile--37.png b/visual-baselines/vueforge-showcase/core--dark--mobile--37.png deleted file mode 100644 index cd588100..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--mobile--37.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--mobile--38.png b/visual-baselines/vueforge-showcase/core--dark--mobile--38.png deleted file mode 100644 index 21dcff56..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--mobile--38.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--mobile--39.png b/visual-baselines/vueforge-showcase/core--dark--mobile--39.png deleted file mode 100644 index ccfcb981..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--mobile--39.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--mobile--40.png b/visual-baselines/vueforge-showcase/core--dark--mobile--40.png deleted file mode 100644 index 938c65e6..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--mobile--40.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--mobile--41.png b/visual-baselines/vueforge-showcase/core--dark--mobile--41.png deleted file mode 100644 index 75d72bad..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--mobile--41.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--mobile--42.png b/visual-baselines/vueforge-showcase/core--dark--mobile--42.png deleted file mode 100644 index 53c28316..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--mobile--42.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--mobile--43.png b/visual-baselines/vueforge-showcase/core--dark--mobile--43.png deleted file mode 100644 index 8fe3a37a..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--mobile--43.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--mobile--44.png b/visual-baselines/vueforge-showcase/core--dark--mobile--44.png deleted file mode 100644 index f12fae67..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--mobile--44.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--mobile--45.png b/visual-baselines/vueforge-showcase/core--dark--mobile--45.png deleted file mode 100644 index 59c21dd9..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--mobile--45.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--dark--mobile--46.png b/visual-baselines/vueforge-showcase/core--dark--mobile--46.png deleted file mode 100644 index 85feaf6b..00000000 Binary files a/visual-baselines/vueforge-showcase/core--dark--mobile--46.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--desktop--01.png b/visual-baselines/vueforge-showcase/core--light--desktop--01.png deleted file mode 100644 index b30361ca..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--desktop--01.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--desktop--02.png b/visual-baselines/vueforge-showcase/core--light--desktop--02.png deleted file mode 100644 index 97781507..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--desktop--02.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--desktop--03.png b/visual-baselines/vueforge-showcase/core--light--desktop--03.png deleted file mode 100644 index 3710b614..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--desktop--03.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--desktop--04.png b/visual-baselines/vueforge-showcase/core--light--desktop--04.png deleted file mode 100644 index 43040d79..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--desktop--04.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--desktop--05.png b/visual-baselines/vueforge-showcase/core--light--desktop--05.png deleted file mode 100644 index c4878986..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--desktop--05.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--desktop--06.png b/visual-baselines/vueforge-showcase/core--light--desktop--06.png deleted file mode 100644 index b3a2c3de..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--desktop--06.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--desktop--07.png b/visual-baselines/vueforge-showcase/core--light--desktop--07.png deleted file mode 100644 index e3ffb630..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--desktop--07.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--desktop--08.png b/visual-baselines/vueforge-showcase/core--light--desktop--08.png deleted file mode 100644 index 95fc933a..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--desktop--08.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--desktop--09.png b/visual-baselines/vueforge-showcase/core--light--desktop--09.png deleted file mode 100644 index c5fff7fe..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--desktop--09.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--desktop--10.png b/visual-baselines/vueforge-showcase/core--light--desktop--10.png deleted file mode 100644 index 694b35cf..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--desktop--10.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--desktop--11.png b/visual-baselines/vueforge-showcase/core--light--desktop--11.png deleted file mode 100644 index fb67ceac..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--desktop--11.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--desktop--12.png b/visual-baselines/vueforge-showcase/core--light--desktop--12.png deleted file mode 100644 index 491f0639..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--desktop--12.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--desktop--13.png b/visual-baselines/vueforge-showcase/core--light--desktop--13.png deleted file mode 100644 index 3862fc51..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--desktop--13.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--desktop--14.png b/visual-baselines/vueforge-showcase/core--light--desktop--14.png deleted file mode 100644 index bc21c653..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--desktop--14.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--desktop--15.png b/visual-baselines/vueforge-showcase/core--light--desktop--15.png deleted file mode 100644 index 26e59513..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--desktop--15.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--desktop--16.png b/visual-baselines/vueforge-showcase/core--light--desktop--16.png deleted file mode 100644 index d69d2672..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--desktop--16.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--desktop--17.png b/visual-baselines/vueforge-showcase/core--light--desktop--17.png deleted file mode 100644 index 38267a87..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--desktop--17.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--desktop--18.png b/visual-baselines/vueforge-showcase/core--light--desktop--18.png deleted file mode 100644 index d4caa032..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--desktop--18.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--desktop--19.png b/visual-baselines/vueforge-showcase/core--light--desktop--19.png deleted file mode 100644 index baef9974..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--desktop--19.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--desktop--20.png b/visual-baselines/vueforge-showcase/core--light--desktop--20.png deleted file mode 100644 index 24886214..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--desktop--20.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--desktop--21.png b/visual-baselines/vueforge-showcase/core--light--desktop--21.png deleted file mode 100644 index 20c68fa0..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--desktop--21.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--desktop--22.png b/visual-baselines/vueforge-showcase/core--light--desktop--22.png deleted file mode 100644 index fbeda66b..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--desktop--22.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--desktop--23.png b/visual-baselines/vueforge-showcase/core--light--desktop--23.png deleted file mode 100644 index f887f1f0..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--desktop--23.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--desktop--24.png b/visual-baselines/vueforge-showcase/core--light--desktop--24.png deleted file mode 100644 index 3c2a4fe0..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--desktop--24.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--desktop--25.png b/visual-baselines/vueforge-showcase/core--light--desktop--25.png deleted file mode 100644 index 63dc5757..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--desktop--25.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--desktop--26.png b/visual-baselines/vueforge-showcase/core--light--desktop--26.png deleted file mode 100644 index aa51c91b..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--desktop--26.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--desktop--27.png b/visual-baselines/vueforge-showcase/core--light--desktop--27.png deleted file mode 100644 index d8bbbe21..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--desktop--27.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--mobile--01.png b/visual-baselines/vueforge-showcase/core--light--mobile--01.png deleted file mode 100644 index 97de2b6b..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--mobile--01.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--mobile--02.png b/visual-baselines/vueforge-showcase/core--light--mobile--02.png deleted file mode 100644 index da7214a2..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--mobile--02.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--mobile--03.png b/visual-baselines/vueforge-showcase/core--light--mobile--03.png deleted file mode 100644 index 354eaf04..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--mobile--03.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--mobile--04.png b/visual-baselines/vueforge-showcase/core--light--mobile--04.png deleted file mode 100644 index e90bc536..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--mobile--04.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--mobile--05.png b/visual-baselines/vueforge-showcase/core--light--mobile--05.png deleted file mode 100644 index 52366ed6..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--mobile--05.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--mobile--06.png b/visual-baselines/vueforge-showcase/core--light--mobile--06.png deleted file mode 100644 index 82750b85..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--mobile--06.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--mobile--07.png b/visual-baselines/vueforge-showcase/core--light--mobile--07.png deleted file mode 100644 index 2949b106..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--mobile--07.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--mobile--08.png b/visual-baselines/vueforge-showcase/core--light--mobile--08.png deleted file mode 100644 index 5214400a..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--mobile--08.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--mobile--09.png b/visual-baselines/vueforge-showcase/core--light--mobile--09.png deleted file mode 100644 index 4ec4d6f6..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--mobile--09.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--mobile--10.png b/visual-baselines/vueforge-showcase/core--light--mobile--10.png deleted file mode 100644 index 325cd39f..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--mobile--10.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--mobile--11.png b/visual-baselines/vueforge-showcase/core--light--mobile--11.png deleted file mode 100644 index f9a21eba..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--mobile--11.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--mobile--12.png b/visual-baselines/vueforge-showcase/core--light--mobile--12.png deleted file mode 100644 index 8d4e2034..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--mobile--12.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--mobile--13.png b/visual-baselines/vueforge-showcase/core--light--mobile--13.png deleted file mode 100644 index 6bf7c4ed..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--mobile--13.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--mobile--14.png b/visual-baselines/vueforge-showcase/core--light--mobile--14.png deleted file mode 100644 index b3d80266..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--mobile--14.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--mobile--15.png b/visual-baselines/vueforge-showcase/core--light--mobile--15.png deleted file mode 100644 index b9da75f0..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--mobile--15.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--mobile--16.png b/visual-baselines/vueforge-showcase/core--light--mobile--16.png deleted file mode 100644 index 303d3b4e..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--mobile--16.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--mobile--17.png b/visual-baselines/vueforge-showcase/core--light--mobile--17.png deleted file mode 100644 index 034ce12c..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--mobile--17.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--mobile--18.png b/visual-baselines/vueforge-showcase/core--light--mobile--18.png deleted file mode 100644 index b75e1eb1..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--mobile--18.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--mobile--19.png b/visual-baselines/vueforge-showcase/core--light--mobile--19.png deleted file mode 100644 index 811a6c68..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--mobile--19.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--mobile--20.png b/visual-baselines/vueforge-showcase/core--light--mobile--20.png deleted file mode 100644 index a38c9753..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--mobile--20.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--mobile--21.png b/visual-baselines/vueforge-showcase/core--light--mobile--21.png deleted file mode 100644 index a5b46128..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--mobile--21.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--mobile--22.png b/visual-baselines/vueforge-showcase/core--light--mobile--22.png deleted file mode 100644 index 929f19c8..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--mobile--22.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--mobile--23.png b/visual-baselines/vueforge-showcase/core--light--mobile--23.png deleted file mode 100644 index 1387e232..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--mobile--23.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--mobile--24.png b/visual-baselines/vueforge-showcase/core--light--mobile--24.png deleted file mode 100644 index 0b1a0788..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--mobile--24.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--mobile--25.png b/visual-baselines/vueforge-showcase/core--light--mobile--25.png deleted file mode 100644 index 618a964b..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--mobile--25.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--mobile--26.png b/visual-baselines/vueforge-showcase/core--light--mobile--26.png deleted file mode 100644 index ef7bb7f8..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--mobile--26.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--mobile--27.png b/visual-baselines/vueforge-showcase/core--light--mobile--27.png deleted file mode 100644 index 71918d29..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--mobile--27.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--mobile--28.png b/visual-baselines/vueforge-showcase/core--light--mobile--28.png deleted file mode 100644 index 482ea5df..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--mobile--28.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--mobile--29.png b/visual-baselines/vueforge-showcase/core--light--mobile--29.png deleted file mode 100644 index d6e98170..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--mobile--29.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--mobile--30.png b/visual-baselines/vueforge-showcase/core--light--mobile--30.png deleted file mode 100644 index 75a0476a..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--mobile--30.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--mobile--31.png b/visual-baselines/vueforge-showcase/core--light--mobile--31.png deleted file mode 100644 index dbccbad6..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--mobile--31.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--mobile--32.png b/visual-baselines/vueforge-showcase/core--light--mobile--32.png deleted file mode 100644 index 63138f5e..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--mobile--32.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--mobile--33.png b/visual-baselines/vueforge-showcase/core--light--mobile--33.png deleted file mode 100644 index 5a57d432..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--mobile--33.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--mobile--34.png b/visual-baselines/vueforge-showcase/core--light--mobile--34.png deleted file mode 100644 index 1003c731..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--mobile--34.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--mobile--35.png b/visual-baselines/vueforge-showcase/core--light--mobile--35.png deleted file mode 100644 index 49fb1aae..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--mobile--35.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--mobile--36.png b/visual-baselines/vueforge-showcase/core--light--mobile--36.png deleted file mode 100644 index d0a98f33..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--mobile--36.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--mobile--37.png b/visual-baselines/vueforge-showcase/core--light--mobile--37.png deleted file mode 100644 index 83425fac..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--mobile--37.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--mobile--38.png b/visual-baselines/vueforge-showcase/core--light--mobile--38.png deleted file mode 100644 index 2b32da5f..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--mobile--38.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--mobile--39.png b/visual-baselines/vueforge-showcase/core--light--mobile--39.png deleted file mode 100644 index 622212d8..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--mobile--39.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--mobile--40.png b/visual-baselines/vueforge-showcase/core--light--mobile--40.png deleted file mode 100644 index b5faa69e..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--mobile--40.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--mobile--41.png b/visual-baselines/vueforge-showcase/core--light--mobile--41.png deleted file mode 100644 index d7ee293e..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--mobile--41.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--mobile--42.png b/visual-baselines/vueforge-showcase/core--light--mobile--42.png deleted file mode 100644 index 58d40d4d..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--mobile--42.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--mobile--43.png b/visual-baselines/vueforge-showcase/core--light--mobile--43.png deleted file mode 100644 index b94855fe..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--mobile--43.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--mobile--44.png b/visual-baselines/vueforge-showcase/core--light--mobile--44.png deleted file mode 100644 index f575372e..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--mobile--44.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--mobile--45.png b/visual-baselines/vueforge-showcase/core--light--mobile--45.png deleted file mode 100644 index 9bab864c..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--mobile--45.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/core--light--mobile--46.png b/visual-baselines/vueforge-showcase/core--light--mobile--46.png deleted file mode 100644 index b3e20d48..00000000 Binary files a/visual-baselines/vueforge-showcase/core--light--mobile--46.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/icons--dark--desktop--01.png b/visual-baselines/vueforge-showcase/icons--dark--desktop--01.png deleted file mode 100644 index 76e5b93d..00000000 Binary files a/visual-baselines/vueforge-showcase/icons--dark--desktop--01.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/icons--dark--desktop--02.png b/visual-baselines/vueforge-showcase/icons--dark--desktop--02.png deleted file mode 100644 index a0c95dd3..00000000 Binary files a/visual-baselines/vueforge-showcase/icons--dark--desktop--02.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/icons--dark--desktop--03.png b/visual-baselines/vueforge-showcase/icons--dark--desktop--03.png deleted file mode 100644 index 094c40a3..00000000 Binary files a/visual-baselines/vueforge-showcase/icons--dark--desktop--03.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/icons--dark--desktop--04.png b/visual-baselines/vueforge-showcase/icons--dark--desktop--04.png deleted file mode 100644 index f2dcd619..00000000 Binary files a/visual-baselines/vueforge-showcase/icons--dark--desktop--04.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/icons--dark--desktop--05.png b/visual-baselines/vueforge-showcase/icons--dark--desktop--05.png deleted file mode 100644 index 4a203bc3..00000000 Binary files a/visual-baselines/vueforge-showcase/icons--dark--desktop--05.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/icons--dark--desktop--06.png b/visual-baselines/vueforge-showcase/icons--dark--desktop--06.png deleted file mode 100644 index b9f9cc8a..00000000 Binary files a/visual-baselines/vueforge-showcase/icons--dark--desktop--06.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/icons--dark--desktop--07.png b/visual-baselines/vueforge-showcase/icons--dark--desktop--07.png deleted file mode 100644 index 4cfed044..00000000 Binary files a/visual-baselines/vueforge-showcase/icons--dark--desktop--07.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/icons--dark--desktop--08.png b/visual-baselines/vueforge-showcase/icons--dark--desktop--08.png deleted file mode 100644 index 65b956e5..00000000 Binary files a/visual-baselines/vueforge-showcase/icons--dark--desktop--08.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/icons--dark--desktop--09.png b/visual-baselines/vueforge-showcase/icons--dark--desktop--09.png deleted file mode 100644 index e6557c6f..00000000 Binary files a/visual-baselines/vueforge-showcase/icons--dark--desktop--09.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/icons--dark--desktop--10.png b/visual-baselines/vueforge-showcase/icons--dark--desktop--10.png deleted file mode 100644 index f24e9986..00000000 Binary files a/visual-baselines/vueforge-showcase/icons--dark--desktop--10.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/icons--dark--mobile--01.png b/visual-baselines/vueforge-showcase/icons--dark--mobile--01.png deleted file mode 100644 index f2670e8b..00000000 Binary files a/visual-baselines/vueforge-showcase/icons--dark--mobile--01.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/icons--dark--mobile--02.png b/visual-baselines/vueforge-showcase/icons--dark--mobile--02.png deleted file mode 100644 index 00269682..00000000 Binary files a/visual-baselines/vueforge-showcase/icons--dark--mobile--02.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/icons--dark--mobile--03.png b/visual-baselines/vueforge-showcase/icons--dark--mobile--03.png deleted file mode 100644 index d46b1f22..00000000 Binary files a/visual-baselines/vueforge-showcase/icons--dark--mobile--03.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/icons--dark--mobile--04.png b/visual-baselines/vueforge-showcase/icons--dark--mobile--04.png deleted file mode 100644 index dd968370..00000000 Binary files a/visual-baselines/vueforge-showcase/icons--dark--mobile--04.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/icons--dark--mobile--05.png b/visual-baselines/vueforge-showcase/icons--dark--mobile--05.png deleted file mode 100644 index f4a9a10f..00000000 Binary files a/visual-baselines/vueforge-showcase/icons--dark--mobile--05.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/icons--dark--mobile--06.png b/visual-baselines/vueforge-showcase/icons--dark--mobile--06.png deleted file mode 100644 index 4e4f85af..00000000 Binary files a/visual-baselines/vueforge-showcase/icons--dark--mobile--06.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/icons--dark--mobile--07.png b/visual-baselines/vueforge-showcase/icons--dark--mobile--07.png deleted file mode 100644 index 7e00416a..00000000 Binary files a/visual-baselines/vueforge-showcase/icons--dark--mobile--07.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/icons--dark--mobile--08.png b/visual-baselines/vueforge-showcase/icons--dark--mobile--08.png deleted file mode 100644 index 9cd1ecf3..00000000 Binary files a/visual-baselines/vueforge-showcase/icons--dark--mobile--08.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/icons--dark--mobile--09.png b/visual-baselines/vueforge-showcase/icons--dark--mobile--09.png deleted file mode 100644 index 0f49b750..00000000 Binary files a/visual-baselines/vueforge-showcase/icons--dark--mobile--09.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/icons--dark--mobile--10.png b/visual-baselines/vueforge-showcase/icons--dark--mobile--10.png deleted file mode 100644 index ab718d22..00000000 Binary files a/visual-baselines/vueforge-showcase/icons--dark--mobile--10.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/icons--light--desktop--01.png b/visual-baselines/vueforge-showcase/icons--light--desktop--01.png deleted file mode 100644 index 70264224..00000000 Binary files a/visual-baselines/vueforge-showcase/icons--light--desktop--01.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/icons--light--desktop--02.png b/visual-baselines/vueforge-showcase/icons--light--desktop--02.png deleted file mode 100644 index 8eb5d437..00000000 Binary files a/visual-baselines/vueforge-showcase/icons--light--desktop--02.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/icons--light--desktop--03.png b/visual-baselines/vueforge-showcase/icons--light--desktop--03.png deleted file mode 100644 index bd39d1be..00000000 Binary files a/visual-baselines/vueforge-showcase/icons--light--desktop--03.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/icons--light--desktop--04.png b/visual-baselines/vueforge-showcase/icons--light--desktop--04.png deleted file mode 100644 index 26203f3a..00000000 Binary files a/visual-baselines/vueforge-showcase/icons--light--desktop--04.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/icons--light--desktop--05.png b/visual-baselines/vueforge-showcase/icons--light--desktop--05.png deleted file mode 100644 index d2ac9b7e..00000000 Binary files a/visual-baselines/vueforge-showcase/icons--light--desktop--05.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/icons--light--desktop--06.png b/visual-baselines/vueforge-showcase/icons--light--desktop--06.png deleted file mode 100644 index 2b5bde7c..00000000 Binary files a/visual-baselines/vueforge-showcase/icons--light--desktop--06.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/icons--light--desktop--07.png b/visual-baselines/vueforge-showcase/icons--light--desktop--07.png deleted file mode 100644 index 8dd17e4a..00000000 Binary files a/visual-baselines/vueforge-showcase/icons--light--desktop--07.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/icons--light--desktop--08.png b/visual-baselines/vueforge-showcase/icons--light--desktop--08.png deleted file mode 100644 index 75cbb19f..00000000 Binary files a/visual-baselines/vueforge-showcase/icons--light--desktop--08.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/icons--light--desktop--09.png b/visual-baselines/vueforge-showcase/icons--light--desktop--09.png deleted file mode 100644 index e98e40fe..00000000 Binary files a/visual-baselines/vueforge-showcase/icons--light--desktop--09.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/icons--light--desktop--10.png b/visual-baselines/vueforge-showcase/icons--light--desktop--10.png deleted file mode 100644 index e1dd20fc..00000000 Binary files a/visual-baselines/vueforge-showcase/icons--light--desktop--10.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/icons--light--mobile--01.png b/visual-baselines/vueforge-showcase/icons--light--mobile--01.png deleted file mode 100644 index 3a875180..00000000 Binary files a/visual-baselines/vueforge-showcase/icons--light--mobile--01.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/icons--light--mobile--02.png b/visual-baselines/vueforge-showcase/icons--light--mobile--02.png deleted file mode 100644 index 9f1e9efd..00000000 Binary files a/visual-baselines/vueforge-showcase/icons--light--mobile--02.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/icons--light--mobile--03.png b/visual-baselines/vueforge-showcase/icons--light--mobile--03.png deleted file mode 100644 index 3c2f43aa..00000000 Binary files a/visual-baselines/vueforge-showcase/icons--light--mobile--03.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/icons--light--mobile--04.png b/visual-baselines/vueforge-showcase/icons--light--mobile--04.png deleted file mode 100644 index ff105103..00000000 Binary files a/visual-baselines/vueforge-showcase/icons--light--mobile--04.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/icons--light--mobile--05.png b/visual-baselines/vueforge-showcase/icons--light--mobile--05.png deleted file mode 100644 index 17b72a65..00000000 Binary files a/visual-baselines/vueforge-showcase/icons--light--mobile--05.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/icons--light--mobile--06.png b/visual-baselines/vueforge-showcase/icons--light--mobile--06.png deleted file mode 100644 index 2dcf81e6..00000000 Binary files a/visual-baselines/vueforge-showcase/icons--light--mobile--06.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/icons--light--mobile--07.png b/visual-baselines/vueforge-showcase/icons--light--mobile--07.png deleted file mode 100644 index f2e1c7bb..00000000 Binary files a/visual-baselines/vueforge-showcase/icons--light--mobile--07.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/icons--light--mobile--08.png b/visual-baselines/vueforge-showcase/icons--light--mobile--08.png deleted file mode 100644 index 380ba897..00000000 Binary files a/visual-baselines/vueforge-showcase/icons--light--mobile--08.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/icons--light--mobile--09.png b/visual-baselines/vueforge-showcase/icons--light--mobile--09.png deleted file mode 100644 index 2b1a5fd7..00000000 Binary files a/visual-baselines/vueforge-showcase/icons--light--mobile--09.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/icons--light--mobile--10.png b/visual-baselines/vueforge-showcase/icons--light--mobile--10.png deleted file mode 100644 index 12005bce..00000000 Binary files a/visual-baselines/vueforge-showcase/icons--light--mobile--10.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/layouts--dark--desktop--01.png b/visual-baselines/vueforge-showcase/layouts--dark--desktop--01.png deleted file mode 100644 index 5b9a5b05..00000000 Binary files a/visual-baselines/vueforge-showcase/layouts--dark--desktop--01.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/layouts--dark--desktop--02.png b/visual-baselines/vueforge-showcase/layouts--dark--desktop--02.png deleted file mode 100644 index af2c244a..00000000 Binary files a/visual-baselines/vueforge-showcase/layouts--dark--desktop--02.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/layouts--dark--desktop--03.png b/visual-baselines/vueforge-showcase/layouts--dark--desktop--03.png deleted file mode 100644 index 9dfed41b..00000000 Binary files a/visual-baselines/vueforge-showcase/layouts--dark--desktop--03.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/layouts--dark--desktop--04.png b/visual-baselines/vueforge-showcase/layouts--dark--desktop--04.png deleted file mode 100644 index f6b076cd..00000000 Binary files a/visual-baselines/vueforge-showcase/layouts--dark--desktop--04.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/layouts--dark--desktop--05.png b/visual-baselines/vueforge-showcase/layouts--dark--desktop--05.png deleted file mode 100644 index 706ef713..00000000 Binary files a/visual-baselines/vueforge-showcase/layouts--dark--desktop--05.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/layouts--dark--desktop--06.png b/visual-baselines/vueforge-showcase/layouts--dark--desktop--06.png deleted file mode 100644 index c2509650..00000000 Binary files a/visual-baselines/vueforge-showcase/layouts--dark--desktop--06.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/layouts--dark--desktop--07.png b/visual-baselines/vueforge-showcase/layouts--dark--desktop--07.png deleted file mode 100644 index 4d51c530..00000000 Binary files a/visual-baselines/vueforge-showcase/layouts--dark--desktop--07.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/layouts--dark--desktop--08.png b/visual-baselines/vueforge-showcase/layouts--dark--desktop--08.png deleted file mode 100644 index b5d16ec1..00000000 Binary files a/visual-baselines/vueforge-showcase/layouts--dark--desktop--08.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/layouts--dark--desktop--09.png b/visual-baselines/vueforge-showcase/layouts--dark--desktop--09.png deleted file mode 100644 index e3bc5ee4..00000000 Binary files a/visual-baselines/vueforge-showcase/layouts--dark--desktop--09.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/layouts--dark--desktop--10.png b/visual-baselines/vueforge-showcase/layouts--dark--desktop--10.png deleted file mode 100644 index 8cb9a79e..00000000 Binary files a/visual-baselines/vueforge-showcase/layouts--dark--desktop--10.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/layouts--dark--desktop--11.png b/visual-baselines/vueforge-showcase/layouts--dark--desktop--11.png deleted file mode 100644 index bd7aaede..00000000 Binary files a/visual-baselines/vueforge-showcase/layouts--dark--desktop--11.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/layouts--dark--mobile--01.png b/visual-baselines/vueforge-showcase/layouts--dark--mobile--01.png deleted file mode 100644 index f34ce8e4..00000000 Binary files a/visual-baselines/vueforge-showcase/layouts--dark--mobile--01.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/layouts--dark--mobile--02.png b/visual-baselines/vueforge-showcase/layouts--dark--mobile--02.png deleted file mode 100644 index bc157d7e..00000000 Binary files a/visual-baselines/vueforge-showcase/layouts--dark--mobile--02.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/layouts--dark--mobile--03.png b/visual-baselines/vueforge-showcase/layouts--dark--mobile--03.png deleted file mode 100644 index 5bf7a7d1..00000000 Binary files a/visual-baselines/vueforge-showcase/layouts--dark--mobile--03.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/layouts--dark--mobile--04.png b/visual-baselines/vueforge-showcase/layouts--dark--mobile--04.png deleted file mode 100644 index 345ee997..00000000 Binary files a/visual-baselines/vueforge-showcase/layouts--dark--mobile--04.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/layouts--dark--mobile--05.png b/visual-baselines/vueforge-showcase/layouts--dark--mobile--05.png deleted file mode 100644 index a6c0853c..00000000 Binary files a/visual-baselines/vueforge-showcase/layouts--dark--mobile--05.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/layouts--dark--mobile--06.png b/visual-baselines/vueforge-showcase/layouts--dark--mobile--06.png deleted file mode 100644 index bb2af1b3..00000000 Binary files a/visual-baselines/vueforge-showcase/layouts--dark--mobile--06.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/layouts--dark--mobile--07.png b/visual-baselines/vueforge-showcase/layouts--dark--mobile--07.png deleted file mode 100644 index 3cd2ff1d..00000000 Binary files a/visual-baselines/vueforge-showcase/layouts--dark--mobile--07.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/layouts--dark--mobile--08.png b/visual-baselines/vueforge-showcase/layouts--dark--mobile--08.png deleted file mode 100644 index 165f400b..00000000 Binary files a/visual-baselines/vueforge-showcase/layouts--dark--mobile--08.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/layouts--light--desktop--01.png b/visual-baselines/vueforge-showcase/layouts--light--desktop--01.png deleted file mode 100644 index d9ea9368..00000000 Binary files a/visual-baselines/vueforge-showcase/layouts--light--desktop--01.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/layouts--light--desktop--02.png b/visual-baselines/vueforge-showcase/layouts--light--desktop--02.png deleted file mode 100644 index 0d022a46..00000000 Binary files a/visual-baselines/vueforge-showcase/layouts--light--desktop--02.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/layouts--light--desktop--03.png b/visual-baselines/vueforge-showcase/layouts--light--desktop--03.png deleted file mode 100644 index d0fe72d9..00000000 Binary files a/visual-baselines/vueforge-showcase/layouts--light--desktop--03.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/layouts--light--desktop--04.png b/visual-baselines/vueforge-showcase/layouts--light--desktop--04.png deleted file mode 100644 index 702d618a..00000000 Binary files a/visual-baselines/vueforge-showcase/layouts--light--desktop--04.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/layouts--light--desktop--05.png b/visual-baselines/vueforge-showcase/layouts--light--desktop--05.png deleted file mode 100644 index b7b1a11b..00000000 Binary files a/visual-baselines/vueforge-showcase/layouts--light--desktop--05.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/layouts--light--desktop--06.png b/visual-baselines/vueforge-showcase/layouts--light--desktop--06.png deleted file mode 100644 index abca6a63..00000000 Binary files a/visual-baselines/vueforge-showcase/layouts--light--desktop--06.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/layouts--light--desktop--07.png b/visual-baselines/vueforge-showcase/layouts--light--desktop--07.png deleted file mode 100644 index 08f610e7..00000000 Binary files a/visual-baselines/vueforge-showcase/layouts--light--desktop--07.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/layouts--light--desktop--08.png b/visual-baselines/vueforge-showcase/layouts--light--desktop--08.png deleted file mode 100644 index d421ca89..00000000 Binary files a/visual-baselines/vueforge-showcase/layouts--light--desktop--08.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/layouts--light--desktop--09.png b/visual-baselines/vueforge-showcase/layouts--light--desktop--09.png deleted file mode 100644 index 7a2bfadb..00000000 Binary files a/visual-baselines/vueforge-showcase/layouts--light--desktop--09.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/layouts--light--desktop--10.png b/visual-baselines/vueforge-showcase/layouts--light--desktop--10.png deleted file mode 100644 index c993d749..00000000 Binary files a/visual-baselines/vueforge-showcase/layouts--light--desktop--10.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/layouts--light--desktop--11.png b/visual-baselines/vueforge-showcase/layouts--light--desktop--11.png deleted file mode 100644 index 5adffc25..00000000 Binary files a/visual-baselines/vueforge-showcase/layouts--light--desktop--11.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/layouts--light--mobile--01.png b/visual-baselines/vueforge-showcase/layouts--light--mobile--01.png deleted file mode 100644 index c502a386..00000000 Binary files a/visual-baselines/vueforge-showcase/layouts--light--mobile--01.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/layouts--light--mobile--02.png b/visual-baselines/vueforge-showcase/layouts--light--mobile--02.png deleted file mode 100644 index 3ad63357..00000000 Binary files a/visual-baselines/vueforge-showcase/layouts--light--mobile--02.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/layouts--light--mobile--03.png b/visual-baselines/vueforge-showcase/layouts--light--mobile--03.png deleted file mode 100644 index cd740a59..00000000 Binary files a/visual-baselines/vueforge-showcase/layouts--light--mobile--03.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/layouts--light--mobile--04.png b/visual-baselines/vueforge-showcase/layouts--light--mobile--04.png deleted file mode 100644 index c061fae0..00000000 Binary files a/visual-baselines/vueforge-showcase/layouts--light--mobile--04.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/layouts--light--mobile--05.png b/visual-baselines/vueforge-showcase/layouts--light--mobile--05.png deleted file mode 100644 index c6426800..00000000 Binary files a/visual-baselines/vueforge-showcase/layouts--light--mobile--05.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/layouts--light--mobile--06.png b/visual-baselines/vueforge-showcase/layouts--light--mobile--06.png deleted file mode 100644 index 0f365e64..00000000 Binary files a/visual-baselines/vueforge-showcase/layouts--light--mobile--06.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/layouts--light--mobile--07.png b/visual-baselines/vueforge-showcase/layouts--light--mobile--07.png deleted file mode 100644 index 520cdcf3..00000000 Binary files a/visual-baselines/vueforge-showcase/layouts--light--mobile--07.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/layouts--light--mobile--08.png b/visual-baselines/vueforge-showcase/layouts--light--mobile--08.png deleted file mode 100644 index 54b3c71c..00000000 Binary files a/visual-baselines/vueforge-showcase/layouts--light--mobile--08.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/manifest.json b/visual-baselines/vueforge-showcase/manifest.json deleted file mode 100644 index a929cf92..00000000 --- a/visual-baselines/vueforge-showcase/manifest.json +++ /dev/null @@ -1,2132 +0,0 @@ -{ - "label": "vueforge-reference", - "referenceCommit": "fd793696f50d3be0fcd3788f0f8f751c63869963", - "routes": ["core", "layouts", "icons", "codeblock", "playground"], - "screenshots": [ - { - "filename": "core--light--mobile--01.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 0, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "core--light--mobile--02.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 844, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "core--light--mobile--03.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 1688, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "core--light--mobile--04.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 2532, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "core--light--mobile--05.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 3376, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "core--light--mobile--06.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 4220, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "core--light--mobile--07.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 5064, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "core--light--mobile--08.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 5908, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "core--light--mobile--09.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 6752, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "core--light--mobile--10.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 7596, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "core--light--mobile--11.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 8440, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "core--light--mobile--12.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 9284, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "core--light--mobile--13.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 10128, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "core--light--mobile--14.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 10972, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "core--light--mobile--15.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 11816, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "core--light--mobile--16.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 12660, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "core--light--mobile--17.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 13504, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "core--light--mobile--18.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 14348, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "core--light--mobile--19.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 15192, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "core--light--mobile--20.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 16036, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "core--light--mobile--21.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 16880, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "core--light--mobile--22.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 17724, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "core--light--mobile--23.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 18568, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "core--light--mobile--24.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 19412, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "core--light--mobile--25.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 20256, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "core--light--mobile--26.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 21100, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "core--light--mobile--27.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 21944, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "core--light--mobile--28.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 22788, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "core--light--mobile--29.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 23632, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "core--light--mobile--30.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 24476, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "core--light--mobile--31.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 25320, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "core--light--mobile--32.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 26164, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "core--light--mobile--33.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 27008, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "core--light--mobile--34.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 27852, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "core--light--mobile--35.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 28696, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "core--light--mobile--36.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 29540, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "core--light--mobile--37.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 30384, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "core--light--mobile--38.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 31228, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "core--light--mobile--39.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 32072, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "core--light--mobile--40.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 32916, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "core--light--mobile--41.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 33760, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "core--light--mobile--42.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 34604, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "core--light--mobile--43.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 35448, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "core--light--mobile--44.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 36292, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "core--light--mobile--45.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 37136, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "core--light--mobile--46.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 37894, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "layouts--light--mobile--01.png", - "pageHeight": 6048, - "route": "layouts", - "scrollTop": 0, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "layouts--light--mobile--02.png", - "pageHeight": 6048, - "route": "layouts", - "scrollTop": 844, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "layouts--light--mobile--03.png", - "pageHeight": 6048, - "route": "layouts", - "scrollTop": 1688, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "layouts--light--mobile--04.png", - "pageHeight": 6048, - "route": "layouts", - "scrollTop": 2532, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "layouts--light--mobile--05.png", - "pageHeight": 6048, - "route": "layouts", - "scrollTop": 3376, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "layouts--light--mobile--06.png", - "pageHeight": 6048, - "route": "layouts", - "scrollTop": 4220, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "layouts--light--mobile--07.png", - "pageHeight": 6048, - "route": "layouts", - "scrollTop": 5064, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "layouts--light--mobile--08.png", - "pageHeight": 6048, - "route": "layouts", - "scrollTop": 5204, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "icons--light--mobile--01.png", - "pageHeight": 8319, - "route": "icons", - "scrollTop": 0, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "icons--light--mobile--02.png", - "pageHeight": 8319, - "route": "icons", - "scrollTop": 844, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "icons--light--mobile--03.png", - "pageHeight": 8319, - "route": "icons", - "scrollTop": 1688, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "icons--light--mobile--04.png", - "pageHeight": 8319, - "route": "icons", - "scrollTop": 2532, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "icons--light--mobile--05.png", - "pageHeight": 8319, - "route": "icons", - "scrollTop": 3376, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "icons--light--mobile--06.png", - "pageHeight": 8319, - "route": "icons", - "scrollTop": 4220, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "icons--light--mobile--07.png", - "pageHeight": 8319, - "route": "icons", - "scrollTop": 5064, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "icons--light--mobile--08.png", - "pageHeight": 8319, - "route": "icons", - "scrollTop": 5908, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "icons--light--mobile--09.png", - "pageHeight": 8319, - "route": "icons", - "scrollTop": 6752, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "icons--light--mobile--10.png", - "pageHeight": 8319, - "route": "icons", - "scrollTop": 7475, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "codeblock--light--mobile--01.png", - "pageHeight": 5042, - "route": "codeblock", - "scrollTop": 0, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "codeblock--light--mobile--02.png", - "pageHeight": 5042, - "route": "codeblock", - "scrollTop": 844, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "codeblock--light--mobile--03.png", - "pageHeight": 5042, - "route": "codeblock", - "scrollTop": 1688, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "codeblock--light--mobile--04.png", - "pageHeight": 5042, - "route": "codeblock", - "scrollTop": 2532, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "codeblock--light--mobile--05.png", - "pageHeight": 5042, - "route": "codeblock", - "scrollTop": 3376, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "codeblock--light--mobile--06.png", - "pageHeight": 5042, - "route": "codeblock", - "scrollTop": 4198, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "playground--light--mobile--01.png", - "pageHeight": 3823, - "route": "playground", - "scrollTop": 0, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "playground--light--mobile--02.png", - "pageHeight": 3823, - "route": "playground", - "scrollTop": 844, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "playground--light--mobile--03.png", - "pageHeight": 3823, - "route": "playground", - "scrollTop": 1688, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "playground--light--mobile--04.png", - "pageHeight": 3823, - "route": "playground", - "scrollTop": 2532, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "playground--light--mobile--05.png", - "pageHeight": 3823, - "route": "playground", - "scrollTop": 2979, - "theme": "light", - "viewport": "mobile" - }, - { - "filename": "core--dark--mobile--01.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 0, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "core--dark--mobile--02.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 844, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "core--dark--mobile--03.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 1688, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "core--dark--mobile--04.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 2532, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "core--dark--mobile--05.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 3376, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "core--dark--mobile--06.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 4220, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "core--dark--mobile--07.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 5064, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "core--dark--mobile--08.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 5908, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "core--dark--mobile--09.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 6752, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "core--dark--mobile--10.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 7596, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "core--dark--mobile--11.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 8440, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "core--dark--mobile--12.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 9284, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "core--dark--mobile--13.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 10128, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "core--dark--mobile--14.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 10972, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "core--dark--mobile--15.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 11816, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "core--dark--mobile--16.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 12660, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "core--dark--mobile--17.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 13504, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "core--dark--mobile--18.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 14348, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "core--dark--mobile--19.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 15192, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "core--dark--mobile--20.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 16036, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "core--dark--mobile--21.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 16880, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "core--dark--mobile--22.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 17724, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "core--dark--mobile--23.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 18568, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "core--dark--mobile--24.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 19412, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "core--dark--mobile--25.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 20256, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "core--dark--mobile--26.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 21100, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "core--dark--mobile--27.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 21944, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "core--dark--mobile--28.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 22788, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "core--dark--mobile--29.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 23632, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "core--dark--mobile--30.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 24476, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "core--dark--mobile--31.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 25320, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "core--dark--mobile--32.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 26164, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "core--dark--mobile--33.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 27008, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "core--dark--mobile--34.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 27852, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "core--dark--mobile--35.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 28696, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "core--dark--mobile--36.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 29540, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "core--dark--mobile--37.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 30384, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "core--dark--mobile--38.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 31228, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "core--dark--mobile--39.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 32072, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "core--dark--mobile--40.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 32916, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "core--dark--mobile--41.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 33760, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "core--dark--mobile--42.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 34604, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "core--dark--mobile--43.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 35448, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "core--dark--mobile--44.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 36292, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "core--dark--mobile--45.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 37136, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "core--dark--mobile--46.png", - "pageHeight": 38738, - "route": "core", - "scrollTop": 37894, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "layouts--dark--mobile--01.png", - "pageHeight": 6048, - "route": "layouts", - "scrollTop": 0, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "layouts--dark--mobile--02.png", - "pageHeight": 6048, - "route": "layouts", - "scrollTop": 844, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "layouts--dark--mobile--03.png", - "pageHeight": 6048, - "route": "layouts", - "scrollTop": 1688, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "layouts--dark--mobile--04.png", - "pageHeight": 6048, - "route": "layouts", - "scrollTop": 2532, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "layouts--dark--mobile--05.png", - "pageHeight": 6048, - "route": "layouts", - "scrollTop": 3376, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "layouts--dark--mobile--06.png", - "pageHeight": 6048, - "route": "layouts", - "scrollTop": 4220, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "layouts--dark--mobile--07.png", - "pageHeight": 6048, - "route": "layouts", - "scrollTop": 5064, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "layouts--dark--mobile--08.png", - "pageHeight": 6048, - "route": "layouts", - "scrollTop": 5204, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "icons--dark--mobile--01.png", - "pageHeight": 8319, - "route": "icons", - "scrollTop": 0, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "icons--dark--mobile--02.png", - "pageHeight": 8319, - "route": "icons", - "scrollTop": 844, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "icons--dark--mobile--03.png", - "pageHeight": 8319, - "route": "icons", - "scrollTop": 1688, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "icons--dark--mobile--04.png", - "pageHeight": 8319, - "route": "icons", - "scrollTop": 2532, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "icons--dark--mobile--05.png", - "pageHeight": 8319, - "route": "icons", - "scrollTop": 3376, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "icons--dark--mobile--06.png", - "pageHeight": 8319, - "route": "icons", - "scrollTop": 4220, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "icons--dark--mobile--07.png", - "pageHeight": 8319, - "route": "icons", - "scrollTop": 5064, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "icons--dark--mobile--08.png", - "pageHeight": 8319, - "route": "icons", - "scrollTop": 5908, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "icons--dark--mobile--09.png", - "pageHeight": 8319, - "route": "icons", - "scrollTop": 6752, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "icons--dark--mobile--10.png", - "pageHeight": 8319, - "route": "icons", - "scrollTop": 7475, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "codeblock--dark--mobile--01.png", - "pageHeight": 5042, - "route": "codeblock", - "scrollTop": 0, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "codeblock--dark--mobile--02.png", - "pageHeight": 5042, - "route": "codeblock", - "scrollTop": 844, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "codeblock--dark--mobile--03.png", - "pageHeight": 5042, - "route": "codeblock", - "scrollTop": 1688, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "codeblock--dark--mobile--04.png", - "pageHeight": 5042, - "route": "codeblock", - "scrollTop": 2532, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "codeblock--dark--mobile--05.png", - "pageHeight": 5042, - "route": "codeblock", - "scrollTop": 3376, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "codeblock--dark--mobile--06.png", - "pageHeight": 5042, - "route": "codeblock", - "scrollTop": 4198, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "playground--dark--mobile--01.png", - "pageHeight": 3823, - "route": "playground", - "scrollTop": 0, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "playground--dark--mobile--02.png", - "pageHeight": 3823, - "route": "playground", - "scrollTop": 844, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "playground--dark--mobile--03.png", - "pageHeight": 3823, - "route": "playground", - "scrollTop": 1688, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "playground--dark--mobile--04.png", - "pageHeight": 3823, - "route": "playground", - "scrollTop": 2532, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "playground--dark--mobile--05.png", - "pageHeight": 3823, - "route": "playground", - "scrollTop": 2979, - "theme": "dark", - "viewport": "mobile" - }, - { - "filename": "core--light--desktop--01.png", - "pageHeight": 21467, - "route": "core", - "scrollTop": 0, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "core--light--desktop--02.png", - "pageHeight": 21467, - "route": "core", - "scrollTop": 800, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "core--light--desktop--03.png", - "pageHeight": 21467, - "route": "core", - "scrollTop": 1600, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "core--light--desktop--04.png", - "pageHeight": 21467, - "route": "core", - "scrollTop": 2400, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "core--light--desktop--05.png", - "pageHeight": 21467, - "route": "core", - "scrollTop": 3200, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "core--light--desktop--06.png", - "pageHeight": 21467, - "route": "core", - "scrollTop": 4000, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "core--light--desktop--07.png", - "pageHeight": 21467, - "route": "core", - "scrollTop": 4800, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "core--light--desktop--08.png", - "pageHeight": 21467, - "route": "core", - "scrollTop": 5600, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "core--light--desktop--09.png", - "pageHeight": 21467, - "route": "core", - "scrollTop": 6400, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "core--light--desktop--10.png", - "pageHeight": 21467, - "route": "core", - "scrollTop": 7200, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "core--light--desktop--11.png", - "pageHeight": 21467, - "route": "core", - "scrollTop": 8000, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "core--light--desktop--12.png", - "pageHeight": 21467, - "route": "core", - "scrollTop": 8800, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "core--light--desktop--13.png", - "pageHeight": 21467, - "route": "core", - "scrollTop": 9600, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "core--light--desktop--14.png", - "pageHeight": 21467, - "route": "core", - "scrollTop": 10400, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "core--light--desktop--15.png", - "pageHeight": 21467, - "route": "core", - "scrollTop": 11200, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "core--light--desktop--16.png", - "pageHeight": 21467, - "route": "core", - "scrollTop": 12000, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "core--light--desktop--17.png", - "pageHeight": 21467, - "route": "core", - "scrollTop": 12800, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "core--light--desktop--18.png", - "pageHeight": 21467, - "route": "core", - "scrollTop": 13600, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "core--light--desktop--19.png", - "pageHeight": 21467, - "route": "core", - "scrollTop": 14400, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "core--light--desktop--20.png", - "pageHeight": 21467, - "route": "core", - "scrollTop": 15200, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "core--light--desktop--21.png", - "pageHeight": 21467, - "route": "core", - "scrollTop": 16000, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "core--light--desktop--22.png", - "pageHeight": 21467, - "route": "core", - "scrollTop": 16800, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "core--light--desktop--23.png", - "pageHeight": 21467, - "route": "core", - "scrollTop": 17600, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "core--light--desktop--24.png", - "pageHeight": 21467, - "route": "core", - "scrollTop": 18400, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "core--light--desktop--25.png", - "pageHeight": 21467, - "route": "core", - "scrollTop": 19200, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "core--light--desktop--26.png", - "pageHeight": 21467, - "route": "core", - "scrollTop": 20000, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "core--light--desktop--27.png", - "pageHeight": 21467, - "route": "core", - "scrollTop": 20667, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "layouts--light--desktop--01.png", - "pageHeight": 8309, - "route": "layouts", - "scrollTop": 0, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "layouts--light--desktop--02.png", - "pageHeight": 8309, - "route": "layouts", - "scrollTop": 800, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "layouts--light--desktop--03.png", - "pageHeight": 8309, - "route": "layouts", - "scrollTop": 1600, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "layouts--light--desktop--04.png", - "pageHeight": 8309, - "route": "layouts", - "scrollTop": 2400, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "layouts--light--desktop--05.png", - "pageHeight": 8309, - "route": "layouts", - "scrollTop": 3200, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "layouts--light--desktop--06.png", - "pageHeight": 8309, - "route": "layouts", - "scrollTop": 4000, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "layouts--light--desktop--07.png", - "pageHeight": 8309, - "route": "layouts", - "scrollTop": 4800, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "layouts--light--desktop--08.png", - "pageHeight": 8309, - "route": "layouts", - "scrollTop": 5600, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "layouts--light--desktop--09.png", - "pageHeight": 8309, - "route": "layouts", - "scrollTop": 6400, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "layouts--light--desktop--10.png", - "pageHeight": 8309, - "route": "layouts", - "scrollTop": 7200, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "layouts--light--desktop--11.png", - "pageHeight": 8309, - "route": "layouts", - "scrollTop": 7509, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "icons--light--desktop--01.png", - "pageHeight": 7634, - "route": "icons", - "scrollTop": 0, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "icons--light--desktop--02.png", - "pageHeight": 7634, - "route": "icons", - "scrollTop": 800, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "icons--light--desktop--03.png", - "pageHeight": 7634, - "route": "icons", - "scrollTop": 1600, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "icons--light--desktop--04.png", - "pageHeight": 7634, - "route": "icons", - "scrollTop": 2400, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "icons--light--desktop--05.png", - "pageHeight": 7634, - "route": "icons", - "scrollTop": 3200, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "icons--light--desktop--06.png", - "pageHeight": 7634, - "route": "icons", - "scrollTop": 4000, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "icons--light--desktop--07.png", - "pageHeight": 7634, - "route": "icons", - "scrollTop": 4800, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "icons--light--desktop--08.png", - "pageHeight": 7634, - "route": "icons", - "scrollTop": 5600, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "icons--light--desktop--09.png", - "pageHeight": 7634, - "route": "icons", - "scrollTop": 6400, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "icons--light--desktop--10.png", - "pageHeight": 7634, - "route": "icons", - "scrollTop": 6834, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "codeblock--light--desktop--01.png", - "pageHeight": 2894, - "route": "codeblock", - "scrollTop": 0, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "codeblock--light--desktop--02.png", - "pageHeight": 2894, - "route": "codeblock", - "scrollTop": 800, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "codeblock--light--desktop--03.png", - "pageHeight": 2894, - "route": "codeblock", - "scrollTop": 1600, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "codeblock--light--desktop--04.png", - "pageHeight": 2894, - "route": "codeblock", - "scrollTop": 2094, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "playground--light--desktop--01.png", - "pageHeight": 3487, - "route": "playground", - "scrollTop": 0, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "playground--light--desktop--02.png", - "pageHeight": 3487, - "route": "playground", - "scrollTop": 800, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "playground--light--desktop--03.png", - "pageHeight": 3487, - "route": "playground", - "scrollTop": 1600, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "playground--light--desktop--04.png", - "pageHeight": 3487, - "route": "playground", - "scrollTop": 2400, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "playground--light--desktop--05.png", - "pageHeight": 3487, - "route": "playground", - "scrollTop": 2687, - "theme": "light", - "viewport": "desktop" - }, - { - "filename": "core--dark--desktop--01.png", - "pageHeight": 21467, - "route": "core", - "scrollTop": 0, - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "core--dark--desktop--02.png", - "pageHeight": 21467, - "route": "core", - "scrollTop": 800, - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "core--dark--desktop--03.png", - "pageHeight": 21467, - "route": "core", - "scrollTop": 1600, - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "core--dark--desktop--04.png", - "pageHeight": 21467, - "route": "core", - "scrollTop": 2400, - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "core--dark--desktop--05.png", - "pageHeight": 21467, - "route": "core", - "scrollTop": 3200, - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "core--dark--desktop--06.png", - "pageHeight": 21467, - "route": "core", - "scrollTop": 4000, - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "core--dark--desktop--07.png", - "pageHeight": 21467, - "route": "core", - "scrollTop": 4800, - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "core--dark--desktop--08.png", - "pageHeight": 21467, - "route": "core", - "scrollTop": 5600, - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "core--dark--desktop--09.png", - "pageHeight": 21467, - "route": "core", - "scrollTop": 6400, - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "core--dark--desktop--10.png", - "pageHeight": 21467, - "route": "core", - "scrollTop": 7200, - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "core--dark--desktop--11.png", - "pageHeight": 21467, - "route": "core", - "scrollTop": 8000, - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "core--dark--desktop--12.png", - "pageHeight": 21467, - "route": "core", - "scrollTop": 8800, - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "core--dark--desktop--13.png", - "pageHeight": 21467, - "route": "core", - "scrollTop": 9600, - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "core--dark--desktop--14.png", - "pageHeight": 21467, - "route": "core", - "scrollTop": 10400, - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "core--dark--desktop--15.png", - "pageHeight": 21467, - "route": "core", - "scrollTop": 11200, - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "core--dark--desktop--16.png", - "pageHeight": 21467, - "route": "core", - "scrollTop": 12000, - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "core--dark--desktop--17.png", - "pageHeight": 21467, - "route": "core", - "scrollTop": 12800, - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "core--dark--desktop--18.png", - "pageHeight": 21467, - "route": "core", - "scrollTop": 13600, - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "core--dark--desktop--19.png", - "pageHeight": 21467, - "route": "core", - "scrollTop": 14400, - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "core--dark--desktop--20.png", - "pageHeight": 21467, - "route": "core", - "scrollTop": 15200, - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "core--dark--desktop--21.png", - "pageHeight": 21467, - "route": "core", - "scrollTop": 16000, - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "core--dark--desktop--22.png", - "pageHeight": 21467, - "route": "core", - "scrollTop": 16800, - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "core--dark--desktop--23.png", - "pageHeight": 21467, - "route": "core", - "scrollTop": 17600, - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "core--dark--desktop--24.png", - "pageHeight": 21467, - "route": "core", - "scrollTop": 18400, - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "core--dark--desktop--25.png", - "pageHeight": 21467, - "route": "core", - "scrollTop": 19200, - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "core--dark--desktop--26.png", - "pageHeight": 21467, - "route": "core", - "scrollTop": 20000, - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "core--dark--desktop--27.png", - "pageHeight": 21467, - "route": "core", - "scrollTop": 20667, - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "layouts--dark--desktop--01.png", - "pageHeight": 8309, - "route": "layouts", - "scrollTop": 0, - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "layouts--dark--desktop--02.png", - "pageHeight": 8309, - "route": "layouts", - "scrollTop": 800, - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "layouts--dark--desktop--03.png", - "pageHeight": 8309, - "route": "layouts", - "scrollTop": 1600, - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "layouts--dark--desktop--04.png", - "pageHeight": 8309, - "route": "layouts", - "scrollTop": 2400, - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "layouts--dark--desktop--05.png", - "pageHeight": 8309, - "route": "layouts", - "scrollTop": 3200, - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "layouts--dark--desktop--06.png", - "pageHeight": 8309, - "route": "layouts", - "scrollTop": 4000, - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "layouts--dark--desktop--07.png", - "pageHeight": 8309, - "route": "layouts", - "scrollTop": 4800, - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "layouts--dark--desktop--08.png", - "pageHeight": 8309, - "route": "layouts", - "scrollTop": 5600, - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "layouts--dark--desktop--09.png", - "pageHeight": 8309, - "route": "layouts", - "scrollTop": 6400, - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "layouts--dark--desktop--10.png", - "pageHeight": 8309, - "route": "layouts", - "scrollTop": 7200, - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "layouts--dark--desktop--11.png", - "pageHeight": 8309, - "route": "layouts", - "scrollTop": 7509, - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "icons--dark--desktop--01.png", - "pageHeight": 7634, - "route": "icons", - "scrollTop": 0, - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "icons--dark--desktop--02.png", - "pageHeight": 7634, - "route": "icons", - "scrollTop": 800, - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "icons--dark--desktop--03.png", - "pageHeight": 7634, - "route": "icons", - "scrollTop": 1600, - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "icons--dark--desktop--04.png", - "pageHeight": 7634, - "route": "icons", - "scrollTop": 2400, - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "icons--dark--desktop--05.png", - "pageHeight": 7634, - "route": "icons", - "scrollTop": 3200, - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "icons--dark--desktop--06.png", - "pageHeight": 7634, - "route": "icons", - "scrollTop": 4000, - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "icons--dark--desktop--07.png", - "pageHeight": 7634, - "route": "icons", - "scrollTop": 4800, - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "icons--dark--desktop--08.png", - "pageHeight": 7634, - "route": "icons", - "scrollTop": 5600, - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "icons--dark--desktop--09.png", - "pageHeight": 7634, - "route": "icons", - "scrollTop": 6400, - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "icons--dark--desktop--10.png", - "pageHeight": 7634, - "route": "icons", - "scrollTop": 6834, - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "codeblock--dark--desktop--01.png", - "pageHeight": 2894, - "route": "codeblock", - "scrollTop": 0, - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "codeblock--dark--desktop--02.png", - "pageHeight": 2894, - "route": "codeblock", - "scrollTop": 800, - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "codeblock--dark--desktop--03.png", - "pageHeight": 2894, - "route": "codeblock", - "scrollTop": 1600, - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "codeblock--dark--desktop--04.png", - "pageHeight": 2894, - "route": "codeblock", - "scrollTop": 2094, - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "playground--dark--desktop--01.png", - "pageHeight": 3487, - "route": "playground", - "scrollTop": 0, - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "playground--dark--desktop--02.png", - "pageHeight": 3487, - "route": "playground", - "scrollTop": 800, - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "playground--dark--desktop--03.png", - "pageHeight": 3487, - "route": "playground", - "scrollTop": 1600, - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "playground--dark--desktop--04.png", - "pageHeight": 3487, - "route": "playground", - "scrollTop": 2400, - "theme": "dark", - "viewport": "desktop" - }, - { - "filename": "playground--dark--desktop--05.png", - "pageHeight": 3487, - "route": "playground", - "scrollTop": 2687, - "theme": "dark", - "viewport": "desktop" - } - ], - "themes": ["light", "dark"], - "viewports": [ - { - "name": "mobile", - "width": 390, - "height": 844 - }, - { - "name": "desktop", - "width": 1280, - "height": 800 - } - ] -} diff --git a/visual-baselines/vueforge-showcase/playground--dark--desktop--01.png b/visual-baselines/vueforge-showcase/playground--dark--desktop--01.png deleted file mode 100644 index 3c7a4bb6..00000000 Binary files a/visual-baselines/vueforge-showcase/playground--dark--desktop--01.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/playground--dark--desktop--02.png b/visual-baselines/vueforge-showcase/playground--dark--desktop--02.png deleted file mode 100644 index 3a731575..00000000 Binary files a/visual-baselines/vueforge-showcase/playground--dark--desktop--02.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/playground--dark--desktop--03.png b/visual-baselines/vueforge-showcase/playground--dark--desktop--03.png deleted file mode 100644 index 3dccf32f..00000000 Binary files a/visual-baselines/vueforge-showcase/playground--dark--desktop--03.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/playground--dark--desktop--04.png b/visual-baselines/vueforge-showcase/playground--dark--desktop--04.png deleted file mode 100644 index 7ed048e1..00000000 Binary files a/visual-baselines/vueforge-showcase/playground--dark--desktop--04.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/playground--dark--desktop--05.png b/visual-baselines/vueforge-showcase/playground--dark--desktop--05.png deleted file mode 100644 index def2d1ff..00000000 Binary files a/visual-baselines/vueforge-showcase/playground--dark--desktop--05.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/playground--dark--mobile--01.png b/visual-baselines/vueforge-showcase/playground--dark--mobile--01.png deleted file mode 100644 index 5d50f450..00000000 Binary files a/visual-baselines/vueforge-showcase/playground--dark--mobile--01.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/playground--dark--mobile--02.png b/visual-baselines/vueforge-showcase/playground--dark--mobile--02.png deleted file mode 100644 index a26fdd44..00000000 Binary files a/visual-baselines/vueforge-showcase/playground--dark--mobile--02.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/playground--dark--mobile--03.png b/visual-baselines/vueforge-showcase/playground--dark--mobile--03.png deleted file mode 100644 index 50f38f01..00000000 Binary files a/visual-baselines/vueforge-showcase/playground--dark--mobile--03.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/playground--dark--mobile--04.png b/visual-baselines/vueforge-showcase/playground--dark--mobile--04.png deleted file mode 100644 index fa12a5c2..00000000 Binary files a/visual-baselines/vueforge-showcase/playground--dark--mobile--04.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/playground--dark--mobile--05.png b/visual-baselines/vueforge-showcase/playground--dark--mobile--05.png deleted file mode 100644 index 457d0633..00000000 Binary files a/visual-baselines/vueforge-showcase/playground--dark--mobile--05.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/playground--light--desktop--01.png b/visual-baselines/vueforge-showcase/playground--light--desktop--01.png deleted file mode 100644 index 3e31ea6e..00000000 Binary files a/visual-baselines/vueforge-showcase/playground--light--desktop--01.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/playground--light--desktop--02.png b/visual-baselines/vueforge-showcase/playground--light--desktop--02.png deleted file mode 100644 index 23560e58..00000000 Binary files a/visual-baselines/vueforge-showcase/playground--light--desktop--02.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/playground--light--desktop--03.png b/visual-baselines/vueforge-showcase/playground--light--desktop--03.png deleted file mode 100644 index a7eef9ed..00000000 Binary files a/visual-baselines/vueforge-showcase/playground--light--desktop--03.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/playground--light--desktop--04.png b/visual-baselines/vueforge-showcase/playground--light--desktop--04.png deleted file mode 100644 index 04ec80bd..00000000 Binary files a/visual-baselines/vueforge-showcase/playground--light--desktop--04.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/playground--light--desktop--05.png b/visual-baselines/vueforge-showcase/playground--light--desktop--05.png deleted file mode 100644 index a2c42433..00000000 Binary files a/visual-baselines/vueforge-showcase/playground--light--desktop--05.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/playground--light--mobile--01.png b/visual-baselines/vueforge-showcase/playground--light--mobile--01.png deleted file mode 100644 index 9e7bf5c4..00000000 Binary files a/visual-baselines/vueforge-showcase/playground--light--mobile--01.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/playground--light--mobile--02.png b/visual-baselines/vueforge-showcase/playground--light--mobile--02.png deleted file mode 100644 index 1fa062da..00000000 Binary files a/visual-baselines/vueforge-showcase/playground--light--mobile--02.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/playground--light--mobile--03.png b/visual-baselines/vueforge-showcase/playground--light--mobile--03.png deleted file mode 100644 index e315669f..00000000 Binary files a/visual-baselines/vueforge-showcase/playground--light--mobile--03.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/playground--light--mobile--04.png b/visual-baselines/vueforge-showcase/playground--light--mobile--04.png deleted file mode 100644 index 9bc34f79..00000000 Binary files a/visual-baselines/vueforge-showcase/playground--light--mobile--04.png and /dev/null differ diff --git a/visual-baselines/vueforge-showcase/playground--light--mobile--05.png b/visual-baselines/vueforge-showcase/playground--light--mobile--05.png deleted file mode 100644 index 0a8bc075..00000000 Binary files a/visual-baselines/vueforge-showcase/playground--light--mobile--05.png and /dev/null differ