diff --git a/.claude/hooks/README.md b/.claude/hooks/README.md index da050e5cc..a387935a6 100644 --- a/.claude/hooks/README.md +++ b/.claude/hooks/README.md @@ -59,6 +59,10 @@ PostToolUse hook on `Write|Edit|MultiEdit` of the same `.vue` paths. Re-reads th Bypassed for legacy components (same whitelist). Shared parser library: [`_lib/spec.mjs`](./_lib/spec.mjs). +### [`enforce-test-exists.mjs`](./enforce-test-exists.mjs) + +PostToolUse hook on `Write` of a **root** component `.vue` (`packages/webkit/src/components///.vue` — file name equals its folder). Warns (exit 2, surfaced to the agent) when the co-located `.test.ts` is missing, so every component ships the browser-mode functional suite mandated by [`../rules/testing.md`](../rules/testing.md). PostToolUse (not Pre) so it never deadlocks `/component-create`, which writes the `.vue` before a test can exist. Composition sub-components are skipped (tested through their root). Bypassed for legacy components (same whitelist). + ## Adding a new hook 1. Create `.mjs` in this directory. diff --git a/.claude/hooks/enforce-test-exists.mjs b/.claude/hooks/enforce-test-exists.mjs new file mode 100644 index 000000000..e0f926b4e --- /dev/null +++ b/.claude/hooks/enforce-test-exists.mjs @@ -0,0 +1,76 @@ +#!/usr/bin/env node +// PostToolUse hook: after a webkit-layer ROOT component .vue is written, warns +// when the co-located .test.ts is missing. Every component ships a +// browser-mode functional suite next to its .vue (.claude/rules/testing.md). +// +// Why PostToolUse (not Pre): /component-create writes the .vue before any test +// can exist, so a Pre block would deadlock the pipeline. Post surfaces the +// reminder without undoing the write — same wiring as validate-spec-compliance. +// +// Only the ROOT .vue is checked (basename === folder name). Composition +// sub-components are tested through their root (testing.md), and resolveSpec… +// already returns null for sub-components nested in their own folder. +// +// Bypassed for components on the legacy whitelist +// (.claude/hooks/_lib/legacy-components.json). + +import { existsSync } from 'node:fs' +import { basename, dirname, relative, resolve } from 'node:path' +import { isLegacyComponent, resolveSpecForComponentPath } from './_lib/spec.mjs' + +const ROOT = process.cwd() + +function readStdin() { + return new Promise((res) => { + let data = '' + process.stdin.on('data', (chunk) => (data += chunk)) + process.stdin.on('end', () => res(data)) + }) +} + +async function main() { + const raw = await readStdin() + let input + try { + input = JSON.parse(raw) + } catch { + process.exit(0) + } + + if (input.tool_name !== 'Write') process.exit(0) + const filePath = input.tool_input?.file_path + if (!filePath) process.exit(0) + + const abs = resolve(filePath) + const info = resolveSpecForComponentPath(abs, ROOT) + if (!info) process.exit(0) + + // Root component only: //.vue. Composition sub-components + // (-part.vue) are tested through their root, so skip them. + if (basename(abs, '.vue') !== info.name) process.exit(0) + + // Legacy components bypass. + if (isLegacyComponent(info.category, info.name, ROOT)) process.exit(0) + + const testPath = resolve(dirname(abs), `${info.name}.test.ts`) + if (existsSync(testPath)) process.exit(0) + + process.stderr.write( + `enforce-test-exists: ${info.category}/${info.name} has no co-located ${info.name}.test.ts\n\n` + + `Every webkit component ships a browser-mode functional suite next to its .vue\n` + + `(.claude/rules/testing.md). Missing:\n` + + ` ${relative(ROOT, testPath)}\n\n` + + `Reuse the story via composeStories, assert the functional surface (render,\n` + + `props -> data-*, events, disabled/loading suppression, v-model, ARIA, and\n` + + `a11y via expectNoA11yViolations), and run it in Vitest browser mode (never\n` + + `jsdom). If this is a legacy component, add\n` + + ` { "category": "${info.category}", "name": "${info.name}" }\n` + + `to .claude/hooks/_lib/legacy-components.json.\n` + ) + process.exit(2) +} + +main().catch((err) => { + process.stderr.write(`enforce-test-exists hook error: ${err?.message ?? err}\n`) + process.exit(0) // fail open +}) diff --git a/.claude/rules/testing.md b/.claude/rules/testing.md new file mode 100644 index 000000000..a7e1b3702 --- /dev/null +++ b/.claude/rules/testing.md @@ -0,0 +1,77 @@ +# Rule: testing — every component ships a functional browser-mode suite + +Every webkit component ships a co-located `*.test.ts` that proves it **works**, exercised in a **real browser**. The spec-compliance hooks prove a `.vue` *declares* what its `.specs/.md` promises; they do not prove a prop is read, an event is emitted, a focus ring is reachable, or an overlay closes on `Escape`. This rule closes that gap with the smallest per-component cost, and fixes the **floor** (not the ceiling) every component must clear. + +## The rule + +> Every component under `packages/webkit/src/components///` ships one `.test.ts` next to the `.vue`. It runs in **Vitest browser mode** (Playwright Chromium — never jsdom), reuses the component's Storybook story as the fixture via `composeStories`, asserts the functional surface below, and runs `axe-core` against the rendered tree. Composition sub-components are tested **through their root**; only the root gets a `.test.ts` (unless the spec promises behavior the root test cannot reach). + +## Why browser mode, never jsdom + +jsdom returns no-ops for `focus`, `document.activeElement`, layout/`getBoundingClientRect`, and does not surface ``d content — so a test that "passes" there is a false positive for exactly the behaviors that break in production (keyboard, focus trap, overlays, positioning, contrast). We run in real Chromium so those are real. + +- **No mocks for layout / positioning / focus / ``.** If a test "needs" one of those mocks, the test is wrong. Real browser makes them real. +- Teleported overlay content escapes the render container — query it from `document.body`, not the `render()` result. + +## The stack (already wired — do not reinvent) + +- `packages/webkit/vitest.config.ts` — `@vitejs/plugin-vue`, `browser: { provider: 'playwright', instances: [{ browser: 'chromium' }], headless: true }`, `define: { 'process.env.NODE_ENV': ... }` (so `@testing-library/vue`'s `fireEvent` runs in the browser), `resolve.alias['@aziontech/webkit'] = '@aziontech/webkit.dev'` (self-reference so story imports resolve), `retry: process.env.CI ? 2 : 0`. +- `packages/webkit/src/test/setup.ts` — imports `@aziontech/theme/globals.css` (styled DOM ⇒ axe contrast is real) + `cleanup()`. +- `packages/webkit/src/test/axe.ts` — `expectNoA11yViolations(container)`. +- `.github/workflows/test.yml` — sharded (×4) + retry, runs only when webkit/storybook changes. +- Publish-safety: `packages/webkit/package.json#files` negates `*.test.ts` and `src/test/**` (verified with `pnpm --filter webkit pack:dry`). Test files never ship to npm. + +## Conventions + +- **Location:** `packages/webkit/src/components///.test.ts` (sibling of the `.vue` / `index.ts`). +- **Imports:** `describe`/`it`/`expect` from `vitest` (explicit — no `globals`); `render`/`fireEvent`/`screen` from `@testing-library/vue`; `userEvent` from `@storybook/test` for realistic keyboard/pointer; `composeStories` from `@storybook/vue3`; `expectNoA11yViolations` from the relative `test/axe`; the component via relative `./...`. +- **Story import is a RELATIVE path**, never a `@stories` alias — `validate-references.mjs` cannot resolve a vite alias and will block the write. If a component has no story, test it directly with `render(Component, { props })`. +- **Local runs** (when node_modules is symlinked into a worktree) set `PNPM_CONFIG_VERIFY_DEPS_BEFORE_RUN=false CI=` so pnpm's deps check doesn't abort against symlinks. + +## What every `.test.ts` must cover + +| # | Surface | Assertion | +|---|---|---| +| 1 | Render | mounts without throwing; the `data-testid` fallback is present; consumer `data-testid` override wins | +| 2 | Props / variants | each variant prop (`kind`, `size`, …) maps to its `data-*` / attribute / rendered state | +| 3 | Events | every event in the spec's Events table fires with the right payload on the real user action | +| 4 | Suppression | when `disabled` / `loading` / `readonly`, the action is **not** emitted | +| 5 | v-model | drive the input, assert `update:modelValue` (and `update:open` / `update:*`) with the exact value | +| 6 | ARIA | `role`, `aria-expanded`, `aria-busy`, `aria-disabled`, `aria-selected`… as the template declares | +| 7 | a11y | `expectNoA11yViolations(container)` on the default render + any variant whose semantics differ | +| 8 | Composition | a context-aware sub-component reflects/drives the root's `provide`/`inject` state with no manual wiring | +| 9 | Overlay | open/close (trigger + second click), `Escape` closes and returns focus, panel Teleports to `body`, scroll-lock while open | +| 10 | Recursive | nested instances ≥2 levels deep render and propagate context (active item, open submenu, orientation) | + +A tiny `it.each` smoke over enum variants ("mounts without throwing") is a **floor**, never the substance. + +## The functional bar — no false positives, no filler + +- Assert **only what you read** in the source. Never invent props/events/testids/aria/sub-components. +- **Forbidden:** assertions on Tailwind/class strings, pixel positions, animation timing, or internal component state. +- **If a test only passes when the implementation is written one specific way, delete it.** It traps refactors and adds no signal. +- If a test reveals a real component defect you cannot satisfy without changing the `.vue`, **`it.skip` it with a one-line reason** — never fake a pass or weaken an assertion into meaninglessness. Record the gap in the PR. + +## Composition, overlay, recursive — how to reach them + +- **Composition:** import the compound root (default export of `index.ts`) and its sub-components; render a realistic composed tree; assert dot-notation resolves (`Root.Sub`), `provide`/`inject` delivers state, events fire, `v-model` round-trips. Data-driven roots (`data` + `columns`) render via props and assert rows/cells render through the sub-components. +- **Overlay** (`data-state="open|closed"` + `` + trigger): use `userEvent`; query the panel from `document.body`; assert `role`/`aria-*`, `Escape` + focus restoration, backdrop/close-button dismissal, scroll-lock. +- **Recursive** (`navigation-menu`, `breadcrumb`): build a ≥2-level tree; assert nested render + context propagation; exercise keyboard where supported. + +## Hard prohibitions + +- No jsdom; no mocking layout/positioning/focus/``. +- No `@stories` alias in a test import — use a relative path (the reference hook blocks the alias). +- No class-string / pixel / animation-timing / internal-state assertions. +- No test file outside the co-located `.test.ts` convention; sub-components do not get their own test unless the root cannot reach the behavior. +- Do not edit a `.vue` to make a test pass — fix the test, or `it.skip` + document. + +## Enforcement + +- `.github/workflows/test.yml` runs `pnpm webkit:test` (sharded browser mode) on every PR/push touching webkit. +- `validate-references.mjs` blocks a test whose imports don't resolve (including a mistaken `@stories` alias). +- `pnpm --filter webkit pack:dry` must list **no** `*.test.ts` — the `files` negation keeps tests out of the published package. + +## Why this rule exists + +A prop can be declared and never read; an event typed and never emitted; a focus ring rendered and never reached by `Tab`; an overlay that never closes on `Escape`. Lint, types and the Storybook build catch none of these. A real-browser functional suite, reusing the story as its fixture, catches all of them at one file per component — and refuses to pass on the jsdom no-ops that would otherwise give false confidence. diff --git a/.claude/settings.json b/.claude/settings.json index 3c70922d3..cc4221124 100644 --- a/.claude/settings.json +++ b/.claude/settings.json @@ -75,6 +75,10 @@ { "type": "command", "command": "node .claude/hooks/validate-spec-compliance.mjs" + }, + { + "type": "command", + "command": "node .claude/hooks/enforce-test-exists.mjs" } ] } diff --git a/.claude/skills/component-scaffold/SKILL.md b/.claude/skills/component-scaffold/SKILL.md index 2ced1a228..ceae9681f 100644 --- a/.claude/skills/component-scaffold/SKILL.md +++ b/.claude/skills/component-scaffold/SKILL.md @@ -11,10 +11,10 @@ last_updated: 2026-05-27 Convert an approved `.specs/.md` into: -- `packages/webkit/src/components/webkit///.vue` (TypeScript, JSDoc on every public prop). +- `packages/webkit/src/components///.vue` (TypeScript, JSDoc on every public prop). - (Composition only) **One folder per sub-component** under the root component directory — `/-/-.vue`. The full file name is preserved (`dialog-trigger.vue`, not `index.vue`) so error traces and editor breadcrumbs are unambiguous. -- (Composition only) `packages/webkit/src/components/webkit///injection-key.ts` at the root level (shared by every sub-component). -- (Composition only) `packages/webkit/src/components/webkit///index.ts` — the **compound API** that attaches every sub-component to the root (``) via `Object.assign`; because it is a `.ts` file, `vue-tsc` generates the adjacent `index.d.ts` (do not hand-write it — `.d.ts` is gitignored). See [`.claude/rules/compound-api.md`](../../rules/compound-api.md). +- (Composition only) `packages/webkit/src/components///injection-key.ts` at the root level (shared by every sub-component). +- (Composition only) `packages/webkit/src/components///index.ts` — the **compound API** that attaches every sub-component to the root (``) via `Object.assign`; because it is a `.ts` file, `vue-tsc` generates the adjacent `index.d.ts` (do not hand-write it — `.d.ts` is gitignored). See [`.claude/rules/compound-api.md`](../../rules/compound-api.md). - New entry/entries in `packages/webkit/package.json#exports` — one per public component (root + each public sub-component). The public path keeps the short, flat form (`./overlay/dialog-trigger`) regardless of the folder nesting. For composition, the **root** export points at `index.ts` (the compound), **plus** a standalone `./-root` export pointing at the root `.vue` for tree-shaking — see [`.claude/rules/compound-api.md`](../../rules/compound-api.md). Nothing else. The story, the Code Connect file, and the validation pass live in other skills. @@ -22,7 +22,7 @@ Nothing else. The story, the Code Connect file, and the validation pass live in **Folder layout — composition pattern (canonical, one folder per part):** ``` -packages/webkit/src/components/webkit/overlay/dialog/ +packages/webkit/src/components/overlay/dialog/ ├── dialog.vue # root ├── index.ts # compound (Object.assign → Dialog.Trigger, ...); vue-tsc emits index.d.ts at publish ├── injection-key.ts # shared InjectionKey @@ -45,7 +45,7 @@ packages/webkit/src/components/webkit/overlay/dialog/ **Folder layout — monolithic (unchanged):** ``` -packages/webkit/src/components/webkit/actions/button/ +packages/webkit/src/components/actions/button/ └── button.vue ``` @@ -61,9 +61,9 @@ packages/webkit/src/components/webkit/actions/button/ - The Constraints block (verbatim). - [`.claude/rules/no-invention.md`](../../rules/no-invention.md), [`.claude/rules/compound-api.md`](../../rules/compound-api.md) (composition only), [`.claude/docs/COMPONENT_REQUIREMENTS.md`](../../docs/COMPONENT_REQUIREMENTS.md), [`.claude/docs/DESIGN.md`](../../docs/DESIGN.md). - The canonical files for cross-reference (read-only): - - `packages/webkit/src/components/webkit/actions/button/button.vue` - - `packages/webkit/src/components/webkit/actions/icon-button/icon-button.vue` - - `packages/webkit/src/components/webkit/content/card-pricing/card-pricing.vue` + - `packages/webkit/src/components/actions/button/button.vue` + - `packages/webkit/src/components/actions/icon-button/icon-button.vue` + - `packages/webkit/src/components/content/card-pricing/card-pricing.vue` ## Workflow @@ -156,7 +156,7 @@ packages/webkit/src/components/webkit/actions/button/ 3. **(Composition only) Write each sub-component into its own folder.** For each sub-component `-` listed in the spec's Sub-components section, create: - - `packages/webkit/src/components/webkit///-/-.vue` + - `packages/webkit/src/components///-/-.vue` Inside the `.vue`: - `defineOptions({ name: '', inheritAttrs: false })`. @@ -167,7 +167,7 @@ packages/webkit/src/components/webkit/actions/button/ 4. **(Composition only) Write `injection-key.ts`** at the **root** level of the component (sibling of `.vue`, **not** inside any sub-component folder). Replace `Dialog` with the PascalCase name of your component: ```ts - // packages/webkit/src/components/webkit///injection-key.ts + // packages/webkit/src/components///injection-key.ts import type { InjectionKey, Ref } from 'vue' export interface DialogContext { @@ -202,26 +202,63 @@ packages/webkit/src/components/webkit/actions/button/ The **composition root** points at `index.ts` (the compound); monolithic roots point at `.vue`. Composition also gets a **standalone `./-root`** key pointing straight at the root `.vue` — the tree-shaking path, since the compound `index.ts` retains every sub-component through `Object.assign` (see [`.claude/rules/compound-api.md`](../../rules/compound-api.md)): ```json - "./": "./src/components/webkit///index.ts", - "./-root": "./src/components/webkit///.vue", - "./-trigger": "./src/components/webkit///-trigger/-trigger.vue", - "./-content": "./src/components/webkit///-content/-content.vue" + "./": "./src/components///index.ts", + "./-root": "./src/components///.vue", + "./-trigger": "./src/components///-trigger/-trigger.vue", + "./-content": "./src/components///-content/-content.vue" ``` Concrete example for a new `popover` composition component: ```json - "./overlay/popover": "./src/components/webkit/overlay/popover/index.ts", - "./overlay/popover-root": "./src/components/webkit/overlay/popover/popover.vue", - "./overlay/popover-trigger": "./src/components/webkit/overlay/popover/popover-trigger/popover-trigger.vue", - "./overlay/popover-content": "./src/components/webkit/overlay/popover/popover-content/popover-content.vue" + "./overlay/popover": "./src/components/overlay/popover/index.ts", + "./overlay/popover-root": "./src/components/overlay/popover/popover.vue", + "./overlay/popover-trigger": "./src/components/overlay/popover/popover-trigger/popover-trigger.vue", + "./overlay/popover-content": "./src/components/overlay/popover/popover-content/popover-content.vue" ``` -6. **Stop.** Do not write the story file. Do not write the `.figma.ts`. Do not run any pnpm command. +6. **Write the starter test** `.test.ts` next to the root `.vue`, using the template below. Fill the root's **required** props (spec Props with no default) so the render doesn't throw. This is a **FLOOR** — render + `data-testid` fallback + consumer override + axe. It uses `render(Component)` directly (**not** `composeStories`) because the story is written later by [`storybook-write`](../storybook-write/SKILL.md); the author expands it (every event with payload, `disabled`/`loading` suppression, `v-model`, ARIA/`data-state`, keyboard, and `composeStories`) per [`.claude/rules/testing.md`](../../rules/testing.md). [`enforce-test-exists.mjs`](../../hooks/enforce-test-exists.mjs) surfaces a reminder if this file is missing. + + ```ts + // packages/webkit/src/components///.test.ts + import { render } from '@testing-library/vue' + import { describe, expect, it } from 'vitest' + + import { expectNoA11yViolations } from '../../../test/axe' + import from './.vue' + + // Starter suite emitted by the scaffold — a FLOOR, not the ceiling. Expand per + // .claude/rules/testing.md: reuse the Storybook story via composeStories, then + // assert every event with its payload, disabled/loading suppression, v-model + // round-trip, ARIA / data-state, and keyboard interaction. + describe('', () => { + it('renders and exposes the fallback data-testid', () => { + const { getByTestId } = render(, { props: { /* required spec props */ } }) + expect(getByTestId('-')).toBeTruthy() + }) + + it('lets a consumer override data-testid', () => { + const { getByTestId } = render(, { + props: { /* required spec props */ }, + attrs: { 'data-testid': 'custom-testid' } + }) + expect(getByTestId('custom-testid')).toBeTruthy() + }) + + it('has no axe violations on the default render', async () => { + const { container } = render(, { props: { /* required spec props */ } }) + await expectNoA11yViolations(container) + }) + }) + ``` + + For a **composition** root, expand the starter to render a realistic composed tree (root + its sub-components) instead of the bare root, since the root alone may render empty. Still a floor — the author fills events / `provide`-`inject` / `v-model`. + +7. **Stop.** Do not write the story file. Do not write the `.figma.ts`. Do not run any pnpm command. ## Outputs -- The files listed above. No prose, no commentary, no edits to other paths. +- The files listed above, **plus** the starter `.test.ts` (step 6). No prose, no commentary, no edits to other paths. ## Rules @@ -273,4 +310,5 @@ packages/webkit/src/components/webkit/actions/button/ - [ ] No HEX / Tailwind palette / raw typography / `any` / `@ts-ignore`. - [ ] `defineOptions.name` is PascalCase and matches the directory. - [ ] `data-testid` fallback equals `'-'` on the root and `'-__'` on each sub-component. +- [ ] Starter `.test.ts` written next to the root `.vue` (render + `data-testid` fallback + consumer override + axe; required props filled from the spec) — satisfies `enforce-test-exists.mjs`. - [ ] No story file written, no `.figma.ts` written, no pnpm command run. diff --git a/.github/workflows/.disabled/package-webkit-dev.yml b/.github/workflows/.disabled/package-webkit-dev.yml deleted file mode 100644 index f80b81f72..000000000 --- a/.github/workflows/.disabled/package-webkit-dev.yml +++ /dev/null @@ -1,47 +0,0 @@ -name: Publish @aziontech/webkit.dev to NPM - -# on: -# push: -# branches: -# - dev -# paths: -# - 'packages/webkit/**' - -jobs: - release: - name: Semantic Release - runs-on: ubuntu-latest - if: "!contains(github.event.head_commit.message, '[skip ci]')" - - permissions: - contents: write - issues: write - pull-requests: write - id-token: write - - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - token: ${{ secrets.GIT_PKG }} - - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: 'lts/*' - registry-url: 'https://registry.npmjs.org' - - - name: Setup pnpm - uses: pnpm/action-setup@v4 - - - - name: Install workspace dependencies - run: pnpm install --frozen-lockfile - - - name: Run Semantic Release - working-directory: packages/webkit - run: npx semantic-release - env: - GITHUB_TOKEN: ${{ secrets.GIT_PKG }} - NPM_CONFIG_PROVENANCE: true diff --git a/.github/workflows/app-storybook-generate-baseline.yml b/.github/workflows/app-storybook-generate-baseline.yml new file mode 100644 index 000000000..fba47aad7 --- /dev/null +++ b/.github/workflows/app-storybook-generate-baseline.yml @@ -0,0 +1,82 @@ +name: Storybook Regenerate Baseline + +# Baseline tool for the visual layer. The PR/push CHECK lives in the ordered +# governance pipeline (governance.yml → job "visual", gated by the Governance +# Gate); this workflow is dispatch-only and exists to regenerate the committed +# linux baselines in apps/storybook/.storybook/test-visual/__image_snapshots__/linux/. +# +# Baselines are platform-specific, so ONLY this workflow (or a linux container) +# may generate them. To bootstrap or intentionally update: run it with +# update_baselines=true, download the "visual-baselines-linux" artifact and +# commit its contents. Dispatching with the default (false) runs a one-off +# comparison against the committed baselines, outside any PR. + +on: + workflow_dispatch: + inputs: + update_baselines: + description: 'Regenerate linux baselines and upload them as an artifact (commit manually)' + type: boolean + default: false + +permissions: + contents: read + +concurrency: + group: visual-${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + visual: + name: Storybook Generate Baseline + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - uses: actions/checkout@v4 + + - name: Setup pnpm + uses: pnpm/action-setup@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 'lts/*' + cache: 'pnpm' + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Cache Playwright browsers + uses: actions/cache@v4 + with: + path: ~/.cache/ms-playwright + key: playwright-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }} + restore-keys: playwright-${{ runner.os }}- + + - name: Install Playwright Chromium + run: pnpm exec playwright install --with-deps chromium + working-directory: apps/storybook + + - name: Build Storybook + run: pnpm run storybook:build + + - name: Regenerate baselines + if: ${{ github.event.inputs.update_baselines == 'true' }} + run: pnpm --filter storybook run test:visual:update + + - name: Upload regenerated baselines + if: ${{ github.event.inputs.update_baselines == 'true' }} + uses: actions/upload-artifact@v4 + with: + name: visual-baselines-linux + path: apps/storybook/.storybook/test-visual/__image_snapshots__/linux/ + retention-days: 7 + + - name: Upload diff output on failure + if: failure() + uses: actions/upload-artifact@v4 + with: + name: visual-diff-output + path: apps/storybook/.storybook/test-visual/__diff_output__/ + retention-days: 7 + if-no-files-found: ignore diff --git a/.github/workflows/governance.yml b/.github/workflows/governance.yml index 59f155208..5d8746325 100644 --- a/.github/workflows/governance.yml +++ b/.github/workflows/governance.yml @@ -18,6 +18,8 @@ jobs: runs-on: ubuntu-latest outputs: webkit: ${{ steps.filter.outputs.webkit }} + tests: ${{ steps.filter.outputs.tests }} + visual: ${{ steps.filter.outputs.visual }} steps: - uses: actions/checkout@v4 @@ -27,6 +29,17 @@ jobs: filters: | webkit: - 'packages/webkit/**' + # Stories are fixtures of the unit suite (composeStories), so + # storybook changes retrigger the tests too. + tests: + - 'packages/webkit/**' + - 'apps/storybook/**' + # Pixels react to any styled layer: components, tokens, icons, stories. + visual: + - 'packages/webkit/**' + - 'packages/theme/**' + - 'packages/icons/**' + - 'apps/storybook/**' # Security Scanning (parallel, fast) security: @@ -153,6 +166,10 @@ jobs: run: pnpm pack:dry working-directory: packages/webkit + - name: Assert no test files leak into the tarball + run: pnpm pack:check + working-directory: packages/webkit + # Storybook Smoke Test storybook: name: Storybook Build @@ -181,11 +198,106 @@ jobs: - name: Verify Storybook output run: test -d apps/storybook/dist && echo "Storybook built successfully" + # Vitest browser mode (real Chromium), sharded by 4 — behavior/structure/ARIA + # on an unstyled DOM. Ordered after lint + types (same tier as build/storybook). + # `!contains(needs.*.result, 'failure')` keeps it runnable when upstream jobs + # were cleanly skipped (e.g. a storybook-only PR skips the webkit-scoped lint). + tests: + name: Vitest browser (shard ${{ matrix.shard }}/4) + runs-on: ubuntu-latest + needs: [changes, lint, types] + if: ${{ !cancelled() && !contains(needs.*.result, 'failure') && needs.changes.outputs.tests == 'true' }} + strategy: + fail-fast: false + matrix: + shard: [1, 2, 3, 4] + steps: + - uses: actions/checkout@v4 + + - name: Setup pnpm + uses: pnpm/action-setup@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 'lts/*' + cache: 'pnpm' + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Cache Playwright browsers + uses: actions/cache@v4 + with: + path: ~/.cache/ms-playwright + key: playwright-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }} + restore-keys: playwright-${{ runner.os }}- + + - name: Install Playwright Chromium + run: pnpm exec playwright install --with-deps chromium + working-directory: packages/webkit + + - name: Run tests (shard ${{ matrix.shard }}) + run: pnpm exec vitest run --shard=${{ matrix.shard }}/4 + working-directory: packages/webkit + + # Visual regression — the styled layer: every story screenshotted via + # @storybook/test-runner and compared against the committed linux baselines + # (test:visual:ci fails on any missing baseline). Last link of the chain: + # pixels only run once behavior (tests) and both builds are green. Baseline + # regeneration lives in app-storybook-test-visual-regression.yml (dispatch). + visual: + name: Storybook visual tests + runs-on: ubuntu-latest + needs: [changes, security, lint, types, build, storybook, tests] + if: ${{ !cancelled() && !contains(needs.*.result, 'failure') && needs.changes.outputs.visual == 'true' }} + timeout-minutes: 30 + steps: + - uses: actions/checkout@v4 + + - name: Setup pnpm + uses: pnpm/action-setup@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 'lts/*' + cache: 'pnpm' + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Cache Playwright browsers + uses: actions/cache@v4 + with: + path: ~/.cache/ms-playwright + key: playwright-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }} + restore-keys: playwright-${{ runner.os }}- + + - name: Install Playwright Chromium + run: pnpm exec playwright install --with-deps chromium + working-directory: apps/storybook + + - name: Build Storybook + run: pnpm run storybook:build + + - name: Run visual tests + run: pnpm --filter storybook run test:visual:ci + + - name: Upload diff output on failure + if: failure() + uses: actions/upload-artifact@v4 + with: + name: visual-diff-output + path: apps/storybook/.storybook/test-visual/__diff_output__/ + retention-days: 7 + if-no-files-found: ignore + # Summary Gate — passes when every upstream job is success or cleanly skipped. governance-check: name: Governance Gate runs-on: ubuntu-latest - needs: [changes, security, lint, types, build, storybook] + needs: [changes, security, lint, types, build, storybook, tests, visual] if: always() steps: - name: Check all jobs passed or skipped @@ -196,6 +308,8 @@ jobs: [types]="${{ needs.types.result }}" [build]="${{ needs.build.result }}" [storybook]="${{ needs.storybook.result }}" + [tests]="${{ needs.tests.result }}" + [visual]="${{ needs.visual.result }}" ) failed=0 for job in "${!results[@]}"; do diff --git a/.gitignore b/.gitignore index 2beea8260..4a3455469 100644 --- a/.gitignore +++ b/.gitignore @@ -78,3 +78,15 @@ CLAUDE.md packages/icons/tmp/ tmp .tmp + +# Vitest browser-mode failure screenshots (regenerated on demand) +**/__screenshots__/ +# Vitest browser-mode attachments (failure artifacts, same nature as __screenshots__) +packages/webkit/.vitest-attachments/ + +# Visual regression (Storybook test-runner) — linux baselines are the CI +# contract and ARE committed; other platforms and diff output are local-only. +apps/storybook/.storybook/test-visual/__diff_output__/ +apps/storybook/.storybook/test-visual/__image_snapshots__/* +!apps/storybook/.storybook/test-visual/__image_snapshots__/linux/ +apps/storybook/.storybook/test-visual/__image_snapshots__/darwin/ diff --git a/.stylelintrc.json b/.stylelintrc.json index c1e6809b7..2ae68964e 100644 --- a/.stylelintrc.json +++ b/.stylelintrc.json @@ -4,13 +4,13 @@ "rules": { "at-rule-no-unknown": null, "selector-class-pattern": "^[a-z][a-z0-9]*(-[a-z0-9]+)*$", - "no-descending-specificity": [true, { "severity": "warn" }], + "no-descending-specificity": [true, { "severity": "warning" }], "declaration-block-no-duplicate-properties": true, "no-duplicate-selectors": true, "order/properties-alphabetical-order": true, - "property-no-vendor-prefix": [true, { "severity": "warn" }], - "value-no-vendor-prefix": [true, { "severity": "warn" }], + "property-no-vendor-prefix": [true, { "severity": "warning" }], + "value-no-vendor-prefix": [true, { "severity": "warning" }], "selector-max-id": 0 }, - "ignoreFiles": ["dist/**/*", "node_modules/**/*"] + "ignoreFiles": ["**/dist/**", "**/node_modules/**", "**/coverage/**"] } diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 828897288..f5fcd0bbd 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -59,6 +59,40 @@ pnpm governance # lint + type-check + format:check + security:audit The `governance` workflow runs on every push to `main` — its status is the badge at the top of the README. +## Testing + +Webkit ships a co-located `*.test.ts` per component, run in **Vitest browser mode** (real Chromium — never jsdom). See [`.claude/rules/testing.md`](./.claude/rules/testing.md). + +```bash +pnpm webkit:test # whole suite (headless Chromium) +pnpm --filter @aziontech/webkit test:ui # interactive UI (headed browser) +pnpm --filter @aziontech/webkit test:coverage # v8 coverage report +``` + +The first run installs the browser: `pnpm --filter @aziontech/webkit exec playwright install chromium`. + +If pnpm aborts with a deps-verify error (common when `node_modules` is symlinked, e.g. a git worktree), prefix the command: + +```bash +PNPM_CONFIG_VERIFY_DEPS_BEFORE_RUN=false pnpm webkit:test +``` + +Tests never ship to npm — `packages/webkit/package.json#files` excludes them, asserted in CI by `pnpm pack:check`. + +### Visual regression (Storybook test-runner) + +The unit suite above runs on an **unstyled** DOM (no Tailwind) and owns behavior/structure/ARIA. Pixels are owned by the visual layer: `@storybook/test-runner` visits every story in the built Storybook, screenshots `#storybook-root` and compares against committed baselines (`jest-image-snapshot`). Config: [`apps/storybook/.storybook/test-runner.js`](./apps/storybook/.storybook/test-runner.js). + +```bash +pnpm storybook:test:visual # build + serve dist + compare (one-shot) +pnpm --filter storybook run test:visual # compare against a running `storybook:dev` +pnpm --filter storybook run test:visual:update# regenerate LOCAL baselines +``` + +Baselines are **per-platform** (font rasterization differs): `apps/storybook/.storybook/test-visual/__image_snapshots__/linux/` is the CI contract and is committed; `darwin/` is local-only and gitignored. To bootstrap or intentionally update the committed baselines, run the **Visual Regression @ Storybook** workflow manually with `update_baselines=true`, download the `visual-baselines-linux` artifact and commit its contents — never commit baselines generated on macOS. Failed comparisons write annotated diffs to `test-visual/__diff_output__/` (uploaded as a CI artifact). + +Opt a story out of the snapshot (it is still visited for render errors) with `parameters: { visual: false }`. + ## Commit convention We use [Conventional Commits](https://www.conventionalcommits.org/). `semantic-release` parses commit messages to compute version bumps and changelogs, so the scope and type matter. diff --git a/PLANEJAMENTO-TESTES.md b/PLANEJAMENTO-TESTES.md new file mode 100644 index 000000000..7ec240dcf --- /dev/null +++ b/PLANEJAMENTO-TESTES.md @@ -0,0 +1,93 @@ +# Planejamento: Cobertura de testes funcionais do webkit + +> Artefato de planejamento (rascunho pra revisão). A versão canônica fica em +> `~/.claude/plans/twinkly-moseying-zebra.md`. Docs que forem pro repo webkit +> (`testing.md`, `TESTING_STRATEGY.md`) permanecem **em inglês** (regra do projeto). + +## Status atual da execução (Fase 0 em andamento) + +- [x] `packages/webkit/vitest.config.ts` — Vitest **browser mode** (Playwright Chromium), alias `@aziontech/webkit` + `@stories`. +- [x] `packages/webkit/src/test/setup.ts` — importa `@aziontech/theme/globals.css` (DOM **estilizado** → axe confiável) + cleanup. +- [x] `packages/webkit/package.json` — deps (`vitest`, `@vitest/browser`, `@testing-library/vue`, `@storybook/vue3`, `axe-core`, `playwright`, `@vitejs/plugin-vue`), scripts `test`/`test:watch`, e `files` com negação (`!src/**/*.test.{ts,js}`, `!src/test/**`) pra **não vazar teste no publish**. +- [x] root `package.json` — `webkit:test` / `webkit:test:watch`. +- [x] `eslint.config.js` — globals de DOM pros testes. +- [x] `pnpm install` (40 pacotes) + `playwright install chromium` (binário baixado). +- [ ] `packages/webkit/src/test/axe.ts` — helper `expectNoA11yViolations`. +- [ ] `.github/workflows/test.yml` — job com **sharding por categoria + retry**. +- [ ] smoke test provando que o browser-mode roda + `pack:dry` sem arquivo de teste. + +> ⚠️ **Achado**: o filtro `pnpm --filter webkit` **não casa** nada no pnpm 11 (o nome do pacote é `@aziontech/webkit.dev`) — os scripts `webkit:*` existentes dependem desse filtro quebrado. Vou usar `-C packages/webkit` / `--filter @aziontech/webkit.dev` pra garantir que rode. (Vale corrigir os scripts existentes num PR à parte.) +> +> ⚠️ **Branch**: estamos na `dev` (tree limpa). O Calendar rico (sub-componentes + `format.ts`/`parse-period.ts`) está só na `feat/ENG-46317-calendar`, **não na dev** — por isso os exemplares da Fase 1 foram adaptados pra componentes que existem na dev (Dialog, navigation-menu, Select). O Calendar ganha testes quando a branch dele mergear. + +--- + +## Sobre a PR #704 (sugestão de outro autor — NÃO é a fonte da verdade) + +Estudei a fundo. A **ideia central é boa e adotamos**; o resto avaliamos e corrigimos. + +### O que NÃO está bom na #704 (não copiar como está) + +1. **Testes vazam no publish** — `*.test.ts` em `src/` + `files: ["src"]` inalterado → vão no tarball do npm. +2. **Import de story com caminho relativo de 6 níveis** (`../../../../../../apps/storybook/...`) — frágil, acopla ao layout do storybook. +3. **a11y em DOM sem estilo** — `setup.ts` não carrega CSS de tema → `color-contrast` do axe não-confiável (falso negativo). +4. **Módulos de lógica pura de fora** — a regra "todo teste importa `composeStories`" não cobre `format.ts`/`parse-period.ts` (sem story). +5. **"Monta sem erro" (`it.each` smoke) como substância** — teste bobo, passa sempre, não pega regressão. Só serve de piso. +6. **Só provou o Button — o caso trivial** — sem overlay, composição ou recursão. A estratégia não foi validada onde estressa. +7. **Sem pensar em escala/CI** — 157 componentes × Chromium num job só = lento e flaky; falta sharding/retry. +8. **Skew de versão** — vitest 2.1.9 na #704 vs 4.1 no icons-gallery. +9. **axe ≠ a11y de verdade** — axe pega violação estática, não a11y comportamental (foco, Tab, Escape). A a11y real está na Camada 2 (`play()`), que a #704 só exercitou no Button. + +### O que aproveitar (a ideia boa) + +- **Vitest browser mode (Chromium real) em vez de jsdom** — decisão acertada; elimina falsos positivos de foco/`Teleport`/layout. +- **Story como fixture única (`composeStories`)** — uma fonte pra doc + interaction + unit. +- **Hook de governança** + whitelist de legados + scaffold que emite `.test.ts`. +- **A régua anti-bobo já escrita**: sem assert em string de classe; apagar teste que só passa pra uma implementação; asserir role/ARIA/`data-`/foco, nunca estado interno; proibido mockar layout. + +--- + +## Contexto + +`packages/webkit` tem **157 componentes / 77 stories / 76 specs / zero testes**. A CI roda lint + type-check + storybook:build; os hooks provam que o `.vue` *declara* o que o spec promete, mas não que **funciona**. Objetivo: cobertura **funcional** da biblioteca — componentes, UX, eventos, recursão — **sem teste trivial, sem falso positivo.** + +Camadas (versão corrigida da ideia da #704): +- **C1 Unit** — Vitest browser mode + `@testing-library/vue` + `composeStories`: props, eventos, slots, ARIA, `disabled`/`loading`. **+ módulos puros por import direto** (corrige #4). +- **C2 Integração** — `play()` nas stories (`userEvent`/`expect`), na CI via `Story.run()`: Escape fecha overlay, focus trap, Enter/Space, scroll lock. **A a11y de verdade mora aqui.** +- **C3 a11y estática** — `axe-core` no browser mode, **com CSS de tema carregado** (corrige #3); complemento, não "a camada de a11y". +- **C4 Governança** — hook + whitelist + scaffold. + +--- + +## Plano de execução + +### Fase 0 — Fundação endurecida (na `dev`, sem commit até você pedir) +Infra browser-mode já corrigindo as lacunas: `files` com negação (#1), `setup.ts` com CSS de tema (#3), alias de story no vitest (#2), versão reconciliada (#8), carve-out de módulo puro no `testing.md` (#4), régua "smoke é piso" (#5), `test.yml` com sharding + retry (#7). + +### Fase 1 — Provar os exemplares DIFÍCEIS (asserts comportamentais, não smoke) +- **Dialog** (overlay) — abrir/fechar, **Escape**, **focus trap + restauração**, **scroll lock**, `Teleport`. +- **navigation-menu / breadcrumb** (recursivo) — aninhamento ≥2 níveis + propagação de contexto. +- **Select / Table** (composição) — provide/inject, eventos, `v-model`. +- **Calendar rico** — quando a branch `feat/ENG-46317-calendar` mergear (composição + popover + grid + `format`/`parse-period`). + +### Fase 2 — Rollout funcional em waves (157 componentes) +Por categoria, paralelizável com agentes em worktree. Wave final ativa o hook + vira o axe pra hard-fail. + +**Régua funcional por componente — o contrato "sem bobo":** +- **Obrigatório:** todo evento da tabela de Events dispara com payload certo na ação real; `disabled`/`loading`/`readonly` **suprimem** a ação; `v-model` faz round-trip; ARIA/`data-state` reflete estado; interativo ganha `play()` com teclado + foco. +- **Permitido mas insuficiente:** smoke `it.each(variants)` "monta sem erro" (piso). +- **Proibido (falso positivo):** assert em string de classe/Tailwind, pixel/animação, estado interno, mock de layout/posicionamento, ou assert que só passa pra uma implementação. + +Ordem: actions(6) · content(8) · feedback(7) · inputs-simples(~18) · inputs-compostos(select, multi-select) · data(table, paginator) · layout(5) · navigation(breadcrumb, link, menu-item, tab-view, dropdown, navigation-menu) · overlay(dialog, drawer, panel, tooltip) · templates(4) · misc/utils(spinner, svg/*, `cn`/`use-controllable`, `use-focus-trap`/`use-placement`). + +--- + +## Verificação +1. `pnpm -C packages/webkit test` → verde no Chromium headless. +2. `pnpm -C packages/webkit pack:dry` → **nenhum `*.test.ts` no tarball**. +3. axe passa contra DOM **estilizado** (contraste real). +4. `test.yml` verde em PR de webkit; job pula limpo em PR não-webkit. +5. Painel Interactions do Storybook com os `play()` verdes. + +## Higiene de commit +Branches/PRs via `/create-branch` + `/open-pr`, base `dev` nunca `main`; **sem `Co-Authored-By` / "Generated with Claude"**; nunca `--no-verify`; commitar só quando você pedir. Docs/regras (`testing.md`, `TESTING_STRATEGY.md`, em inglês) em PR própria. diff --git a/apps/icons-gallery/package.json b/apps/icons-gallery/package.json index 6fd065f21..3577aa544 100644 --- a/apps/icons-gallery/package.json +++ b/apps/icons-gallery/package.json @@ -29,10 +29,10 @@ "autoprefixer": "^10.4.19", "eslint": "^9.18.0", "eslint-plugin-vue": "^9.32.0", - "prettier": "^3.8.1", + "happy-dom": "^20.8.9", + "prettier": "^3.9.4", "tailwindcss": "^3.4.4", "vite": "^6.4.3", - "vitest": "^4.1.0", - "happy-dom": "^20.8.9" + "vitest": "^4.1.8" } } diff --git a/apps/storybook/.storybook/main.js b/apps/storybook/.storybook/main.js index 5210c6bec..380ec8222 100644 --- a/apps/storybook/.storybook/main.js +++ b/apps/storybook/.storybook/main.js @@ -21,11 +21,6 @@ const config = { disableTelemetry: true }, refs: { - // 'webkit-v3': { - // title: 'Webkit V3', - // url: 'https://webkit.azion.app/', - // expanded: true - // } }, viteFinal: async (config) => { // @vitejs/plugin-vue compiles the monorepo SFCs under packages/webkit (the framework only @@ -49,8 +44,7 @@ const config = { // workspace package '@aziontech/webkit.dev/*' so no story file needs to change. config.resolve = config.resolve || {} config.resolve.alias = { - ...(config.resolve.alias || {}), - '@aziontech/webkit': '@aziontech/webkit.dev' + ...(config.resolve.alias || {}) } // Enable dependency pre-bundling for faster rebuilds diff --git a/apps/storybook/.storybook/test-runner.js b/apps/storybook/.storybook/test-runner.js new file mode 100644 index 000000000..b84772223 --- /dev/null +++ b/apps/storybook/.storybook/test-runner.js @@ -0,0 +1,81 @@ +/** + * Storybook test-runner — visual regression over every story. + * + * Each story is visited in real Chromium (Playwright), screenshotted at the + * `#storybook-root` element and compared against a committed baseline with + * jest-image-snapshot. This is the styled layer of the test architecture: + * units (packages/webkit, Vitest browser mode) own behavior/structure/ARIA on + * an unstyled DOM; THIS layer owns pixels. See docs/TESTING_AUDIT_2026-07-02.md §2.0. + * + * Baselines are per-platform (font rasterization differs across OSes): + * test-visual/__image_snapshots__/linux/ → the CI contract, committed + * test-visual/__image_snapshots__/darwin/ → local-only, gitignored + * Update linux baselines via the app-storybook-visual workflow (dispatch with + * update_baselines) or a Linux container — never commit darwin baselines. + * + * Opt a story out of the snapshot (still visited for render errors) with + * `parameters: { visual: false }`. + */ +import { getStoryContext, waitForPageReady } from '@storybook/test-runner' +import { toMatchImageSnapshot } from 'jest-image-snapshot' + +const TEST_VISUAL_DIR = `${__dirname}/test-visual` +const DIFF_DIR = `${TEST_VISUAL_DIR}/__diff_output__` +const SNAPSHOT_DIR = `${TEST_VISUAL_DIR}/__image_snapshots__/${process.platform}` + +/** @type {import('@storybook/test-runner').TestRunnerConfig} */ +module.exports = { + setup() { + expect.extend({ toMatchImageSnapshot }) + }, + + async preVisit(page) { + await page.setViewportSize({ width: 1280, height: 720 }) + + // Park the real pointer: the worker page is reused across stories, so a + // pointer left over an element would leak hover state (hover-open menus, + // tooltips) into the next story's render and screenshot. + await page.mouse.move(0, 0) + + // Near-zero durations instead of `animation: none` / reducedMotion: + // components that wait for animationend/transitionend to settle state + // (use-transition-status) would hang forever with animations removed — + // 1ms keeps the events firing while making motion invisible to the + // screenshot. Idempotent: story switches reuse the worker page. + await page.evaluate(() => { + if (document.getElementById('visual-test-freeze')) return + + const style = document.createElement('style') + style.id = 'visual-test-freeze' + style.textContent = `*, *::before, *::after { + animation-duration: 1ms !important; + animation-delay: 0ms !important; + transition-duration: 1ms !important; + transition-delay: 0ms !important; + caret-color: transparent !important; + }` + + document.head.appendChild(style) + }) + }, + + async postVisit(page, context) { + const storyContext = await getStoryContext(page, context) + + if (storyContext.parameters?.visual === false) return + + await waitForPageReady(page) + await page.evaluate(() => document.fonts.ready) + + const image = await page.locator('#storybook-root').screenshot({ animations: 'disabled' }) + expect(image).toMatchImageSnapshot({ + customSnapshotsDir: SNAPSHOT_DIR, + customSnapshotIdentifier: context.id, + customDiffDir: DIFF_DIR, + // Absorb sub-pixel antialiasing noise; a real change moves far more + // than 0.01% of the element's pixels. + failureThreshold: 0.01, + failureThresholdType: 'percent' + }) + } +} diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-button--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-button--default.png new file mode 100644 index 000000000..67f2612c4 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-button--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-button--disabled.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-button--disabled.png new file mode 100644 index 000000000..63f212a7e Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-button--disabled.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-button--icon.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-button--icon.png new file mode 100644 index 000000000..c0ac43d55 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-button--icon.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-button--loading.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-button--loading.png new file mode 100644 index 000000000..fa6637aa8 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-button--loading.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-button--sizes.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-button--sizes.png new file mode 100644 index 000000000..5b3a6b1dc Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-button--sizes.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-button--types.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-button--types.png new file mode 100644 index 000000000..73935931d Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-button--types.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-buttonhighlight--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-buttonhighlight--default.png new file mode 100644 index 000000000..9cc561588 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-buttonhighlight--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-buttonhighlight--disabled.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-buttonhighlight--disabled.png new file mode 100644 index 000000000..75e4b573e Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-buttonhighlight--disabled.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-buttonhighlight--icon.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-buttonhighlight--icon.png new file mode 100644 index 000000000..850ffa86d Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-buttonhighlight--icon.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-buttonhighlight--loading.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-buttonhighlight--loading.png new file mode 100644 index 000000000..a760931f5 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-buttonhighlight--loading.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-buttonhighlight--sizes.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-buttonhighlight--sizes.png new file mode 100644 index 000000000..9992970d0 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-buttonhighlight--sizes.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-copybutton--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-copybutton--default.png new file mode 100644 index 000000000..55ef1640e Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-copybutton--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-copybutton--disabled.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-copybutton--disabled.png new file mode 100644 index 000000000..910b6b387 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-copybutton--disabled.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-iconbutton--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-iconbutton--default.png new file mode 100644 index 000000000..be723d23a Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-iconbutton--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-iconbutton--disabled.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-iconbutton--disabled.png new file mode 100644 index 000000000..62409ca88 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-iconbutton--disabled.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-iconbutton--loading.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-iconbutton--loading.png new file mode 100644 index 000000000..38ee1e82f Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-iconbutton--loading.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-iconbutton--sizes.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-iconbutton--sizes.png new file mode 100644 index 000000000..af36666b6 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-iconbutton--sizes.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-iconbutton--types.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-iconbutton--types.png new file mode 100644 index 000000000..6e61c1bec Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-iconbutton--types.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-minibutton--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-minibutton--default.png new file mode 100644 index 000000000..6ec1ccfcb Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-minibutton--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-minibutton--sizes.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-minibutton--sizes.png new file mode 100644 index 000000000..9cdbb8349 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-minibutton--sizes.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-segmentedbutton--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-segmentedbutton--default.png new file mode 100644 index 000000000..6a679cc8e Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-segmentedbutton--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-segmentedbutton--with-disabled-option.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-segmentedbutton--with-disabled-option.png new file mode 100644 index 000000000..d1dcb9110 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-segmentedbutton--with-disabled-option.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-splitbutton--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-splitbutton--default.png new file mode 100644 index 000000000..548bbed27 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-splitbutton--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-splitbutton--disabled.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-splitbutton--disabled.png new file mode 100644 index 000000000..0f624fb51 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-splitbutton--disabled.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-splitbutton--loading.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-splitbutton--loading.png new file mode 100644 index 000000000..f8e35fe58 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-splitbutton--loading.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-splitbutton--sizes.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-splitbutton--sizes.png new file mode 100644 index 000000000..6d5b61c7b Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-splitbutton--sizes.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-splitbutton--types.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-splitbutton--types.png new file mode 100644 index 000000000..6dd0ae114 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-splitbutton--types.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-splitbutton--update-label-on-select.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-splitbutton--update-label-on-select.png new file mode 100644 index 000000000..548bbed27 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-actions-splitbutton--update-label-on-select.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-code-codeblock--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-code-codeblock--default.png new file mode 100644 index 000000000..0bf231cbe Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-code-codeblock--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-code-codeblock--with-animated-lines.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-code-codeblock--with-animated-lines.png new file mode 100644 index 000000000..6c790dc29 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-code-codeblock--with-animated-lines.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-code-codeblock--with-diff.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-code-codeblock--with-diff.png new file mode 100644 index 000000000..9fac9a1f8 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-code-codeblock--with-diff.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-code-codeblock--with-file-name.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-code-codeblock--with-file-name.png new file mode 100644 index 000000000..b8a8d1616 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-code-codeblock--with-file-name.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-code-codeblock--with-highlighted-line.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-code-codeblock--with-highlighted-line.png new file mode 100644 index 000000000..224c8f577 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-code-codeblock--with-highlighted-line.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-code-codeblock--without-line-numbers.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-code-codeblock--without-line-numbers.png new file mode 100644 index 000000000..76e5e1f2a Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-code-codeblock--without-line-numbers.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-code-logview--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-code-logview--default.png new file mode 100644 index 000000000..f3b4fefd5 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-code-logview--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-code-logview--loading.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-code-logview--loading.png new file mode 100644 index 000000000..b59f6acf3 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-code-logview--loading.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-accordion--arrow-position.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-accordion--arrow-position.png new file mode 100644 index 000000000..0549fa459 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-accordion--arrow-position.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-accordion--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-accordion--default.png new file mode 100644 index 000000000..2b53b42cf Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-accordion--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-accordion--disabled.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-accordion--disabled.png new file mode 100644 index 000000000..ffaea2e70 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-accordion--disabled.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-accordion--multiple.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-accordion--multiple.png new file mode 100644 index 000000000..4b5f1976a Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-accordion--multiple.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-accordion--sizes.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-accordion--sizes.png new file mode 100644 index 000000000..46a57d612 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-accordion--sizes.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-accordion--with-log-view.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-accordion--with-log-view.png new file mode 100644 index 000000000..bd2b15c94 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-accordion--with-log-view.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-avatar--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-avatar--default.png new file mode 100644 index 000000000..d434a17ea Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-avatar--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-avatar--fallbacks.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-avatar--fallbacks.png new file mode 100644 index 000000000..437361172 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-avatar--fallbacks.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-avatar--sizes.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-avatar--sizes.png new file mode 100644 index 000000000..67a5d3479 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-avatar--sizes.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-avatar--types.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-avatar--types.png new file mode 100644 index 000000000..905333883 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-avatar--types.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-avatar--variant-grid.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-avatar--variant-grid.png new file mode 100644 index 000000000..a04a40a71 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-avatar--variant-grid.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-azionlogo--default-logo.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-azionlogo--default-logo.png new file mode 100644 index 000000000..b0f30fe10 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-azionlogo--default-logo.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-azionlogo--illustrations.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-azionlogo--illustrations.png new file mode 100644 index 000000000..c507c5771 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-azionlogo--illustrations.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-azionlogo--variants.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-azionlogo--variants.png new file mode 100644 index 000000000..b97c76906 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-azionlogo--variants.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-badge--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-badge--default.png new file mode 100644 index 000000000..eacb75941 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-badge--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-badge--sizes.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-badge--sizes.png new file mode 100644 index 000000000..3587042b0 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-badge--sizes.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-badge--types.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-badge--types.png new file mode 100644 index 000000000..ee5bedc16 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-badge--types.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-cardbox--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-cardbox--default.png new file mode 100644 index 000000000..a49d777a9 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-cardbox--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-cardbox--flush.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-cardbox--flush.png new file mode 100644 index 000000000..659b5eb56 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-cardbox--flush.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-cardpricing--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-cardpricing--default.png new file mode 100644 index 000000000..da0ca78a1 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-cardpricing--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-cardpricing--slots.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-cardpricing--slots.png new file mode 100644 index 000000000..261ecfb27 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-cardpricing--slots.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-cardpricing--variants.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-cardpricing--variants.png new file mode 100644 index 000000000..7cea15bd2 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-cardpricing--variants.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-cardpricing--with-tag.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-cardpricing--with-tag.png new file mode 100644 index 000000000..f40d48d3e Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-cardpricing--with-tag.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-currency--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-currency--default.png new file mode 100644 index 000000000..0e2958f73 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-currency--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-currency--sizes.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-currency--sizes.png new file mode 100644 index 000000000..08e9389a8 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-currency--sizes.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-item--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-item--default.png new file mode 100644 index 000000000..97cb60964 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-item--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-item--inline.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-item--inline.png new file mode 100644 index 000000000..4886d1f54 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-item--inline.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-item--muted.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-item--muted.png new file mode 100644 index 000000000..6d704653f Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-item--muted.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-item--outline.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-item--outline.png new file mode 100644 index 000000000..2c4d7123e Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-item--outline.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-item--small.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-item--small.png new file mode 100644 index 000000000..a8a5fdaff Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-item--small.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-item--with-as-child.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-item--with-as-child.png new file mode 100644 index 000000000..8df84e2bf Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-item--with-as-child.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-item--with-avatar.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-item--with-avatar.png new file mode 100644 index 000000000..cfabc23cd Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-item--with-avatar.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-item--with-group.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-item--with-group.png new file mode 100644 index 000000000..185ab2850 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-item--with-group.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-item--with-icon-media.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-item--with-icon-media.png new file mode 100644 index 000000000..5b2773dc2 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-item--with-icon-media.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-item--with-image-media.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-item--with-image-media.png new file mode 100644 index 000000000..9b885eca6 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-item--with-image-media.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-item--with-list-as-child.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-item--with-list-as-child.png new file mode 100644 index 000000000..0061e044f Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-item--with-list-as-child.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-item--with-list.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-item--with-list.png new file mode 100644 index 000000000..7156e9129 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-item--with-list.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-overline--cursor.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-overline--cursor.png new file mode 100644 index 000000000..eaa6d9efa Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-overline--cursor.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-overline--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-overline--default.png new file mode 100644 index 000000000..51276b296 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-overline--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-overline--prefixes.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-overline--prefixes.png new file mode 100644 index 000000000..f7c91ff8f Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-overline--prefixes.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-tag--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-tag--default.png new file mode 100644 index 000000000..9426430ca Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-tag--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-tag--sizes.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-tag--sizes.png new file mode 100644 index 000000000..427fbdbb8 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-tag--sizes.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-tag--types.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-tag--types.png new file mode 100644 index 000000000..33e99f022 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-tag--types.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-tag--with-icon.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-tag--with-icon.png new file mode 100644 index 000000000..e3ed7c0fb Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-content-tag--with-icon.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-flow--anchored-node.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-flow--anchored-node.png new file mode 100644 index 000000000..a42eb7fbd Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-flow--anchored-node.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-flow--branches.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-flow--branches.png new file mode 100644 index 000000000..a26e9336c Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-flow--branches.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-flow--custom-nodes.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-flow--custom-nodes.png new file mode 100644 index 000000000..a989ef8fd Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-flow--custom-nodes.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-flow--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-flow--default.png new file mode 100644 index 000000000..203635bc2 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-flow--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-flow--disabled.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-flow--disabled.png new file mode 100644 index 000000000..967cb98b4 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-flow--disabled.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-flow--parallel.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-flow--parallel.png new file mode 100644 index 000000000..a45c40371 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-flow--parallel.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-paginator--buttons.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-paginator--buttons.png new file mode 100644 index 000000000..a7a8f2034 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-paginator--buttons.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-paginator--data-driven.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-paginator--data-driven.png new file mode 100644 index 000000000..2b8207063 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-paginator--data-driven.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-paginator--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-paginator--default.png new file mode 100644 index 000000000..1a5e76468 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-paginator--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-picklist--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-picklist--default.png new file mode 100644 index 000000000..f821386a5 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-picklist--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-picklist--disabled.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-picklist--disabled.png new file mode 100644 index 000000000..7d8c522bd Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-picklist--disabled.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-picklist--loading.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-picklist--loading.png new file mode 100644 index 000000000..a1c32143a Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-picklist--loading.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-table--compact-header-with-sticky-column.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-table--compact-header-with-sticky-column.png new file mode 100644 index 000000000..393dd853a Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-table--compact-header-with-sticky-column.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-table--compact-header.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-table--compact-header.png new file mode 100644 index 000000000..e19cbf750 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-table--compact-header.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-table--composition.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-table--composition.png new file mode 100644 index 000000000..9f2a134ed Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-table--composition.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-table--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-table--default.png new file mode 100644 index 000000000..0f6a9f9b9 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-table--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-table--empty.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-table--empty.png new file mode 100644 index 000000000..d68bccbe1 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-table--empty.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-table--fixed-layout-with-column-sizes.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-table--fixed-layout-with-column-sizes.png new file mode 100644 index 000000000..ef0102bff Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-table--fixed-layout-with-column-sizes.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-table--resizable-columns.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-table--resizable-columns.png new file mode 100644 index 000000000..837037012 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-table--resizable-columns.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-table--selected-row.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-table--selected-row.png new file mode 100644 index 000000000..8d4e2c397 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-table--selected-row.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-table--sticky-column.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-table--sticky-column.png new file mode 100644 index 000000000..5fb5b36ff Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-table--sticky-column.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-table--with-checkboxes.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-table--with-checkboxes.png new file mode 100644 index 000000000..928512b41 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-data-table--with-checkboxes.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-emptystate--bordered.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-emptystate--bordered.png new file mode 100644 index 000000000..0e0244da5 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-emptystate--bordered.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-emptystate--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-emptystate--default.png new file mode 100644 index 000000000..0bc1930e4 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-emptystate--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-emptystate--sizes.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-emptystate--sizes.png new file mode 100644 index 000000000..21668d994 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-emptystate--sizes.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-message--auto-dismiss.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-message--auto-dismiss.png new file mode 100644 index 000000000..f4eaaf621 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-message--auto-dismiss.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-message--closable.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-message--closable.png new file mode 100644 index 000000000..1b23840ba Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-message--closable.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-message--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-message--default.png new file mode 100644 index 000000000..db0911d15 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-message--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-message--types.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-message--types.png new file mode 100644 index 000000000..a784b83b0 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-message--types.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-progressbar--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-progressbar--default.png new file mode 100644 index 000000000..6b775977b Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-progressbar--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-progressbar--indeterminate.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-progressbar--indeterminate.png new file mode 100644 index 000000000..64fe1d7ab Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-progressbar--indeterminate.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-progressbar--shapes.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-progressbar--shapes.png new file mode 100644 index 000000000..16078d1d9 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-progressbar--shapes.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-progressbar--simulation.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-progressbar--simulation.png new file mode 100644 index 000000000..949618999 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-progressbar--simulation.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-progressbar--sizes.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-progressbar--sizes.png new file mode 100644 index 000000000..4943f801e Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-progressbar--sizes.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-skeleton--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-skeleton--default.png new file mode 100644 index 000000000..4ca7a41c5 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-skeleton--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-skeleton--static.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-skeleton--static.png new file mode 100644 index 000000000..c755ab2c5 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-skeleton--static.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-skeleton--types.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-skeleton--types.png new file mode 100644 index 000000000..1135144bf Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-skeleton--types.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-statusindicator--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-statusindicator--default.png new file mode 100644 index 000000000..796553279 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-statusindicator--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-statusindicator--loading.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-statusindicator--loading.png new file mode 100644 index 000000000..b70f20045 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-statusindicator--loading.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-statusindicator--status.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-statusindicator--status.png new file mode 100644 index 000000000..76eb12a6a Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-statusindicator--status.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-toast--closable.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-toast--closable.png new file mode 100644 index 000000000..11a1273a7 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-toast--closable.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-toast--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-toast--default.png new file mode 100644 index 000000000..11a1273a7 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-toast--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-toast--positions.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-toast--positions.png new file mode 100644 index 000000000..8129bf44e Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-toast--positions.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-toast--types.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-toast--types.png new file mode 100644 index 000000000..6e8a86f64 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-toast--types.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-toast--with-action.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-toast--with-action.png new file mode 100644 index 000000000..11a1273a7 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-toast--with-action.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-toast--with-description.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-toast--with-description.png new file mode 100644 index 000000000..11a1273a7 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-feedback-toast--with-description.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-boxgridselection--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-boxgridselection--default.png new file mode 100644 index 000000000..34a27e465 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-boxgridselection--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-boxgridselection--disabled.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-boxgridselection--disabled.png new file mode 100644 index 000000000..fda3f03b7 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-boxgridselection--disabled.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-boxgridselection--with-tag.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-boxgridselection--with-tag.png new file mode 100644 index 000000000..3786ebeab Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-boxgridselection--with-tag.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-calendar--clearable.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-calendar--clearable.png new file mode 100644 index 000000000..37731c75c Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-calendar--clearable.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-calendar--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-calendar--default.png new file mode 100644 index 000000000..06f798dd5 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-calendar--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-calendar--horizontal.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-calendar--horizontal.png new file mode 100644 index 000000000..06f798dd5 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-calendar--horizontal.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-calendar--min-max.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-calendar--min-max.png new file mode 100644 index 000000000..06f798dd5 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-calendar--min-max.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-calendar--select-period.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-calendar--select-period.png new file mode 100644 index 000000000..61c30f604 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-calendar--select-period.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-calendar--single.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-calendar--single.png new file mode 100644 index 000000000..b21e3388a Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-calendar--single.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-calendar--sizes.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-calendar--sizes.png new file mode 100644 index 000000000..a9c3f291e Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-calendar--sizes.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-calendar--with-presets.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-calendar--with-presets.png new file mode 100644 index 000000000..d2bc2d329 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-calendar--with-presets.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-calendar--with-time.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-calendar--with-time.png new file mode 100644 index 000000000..35febb22f Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-calendar--with-time.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-calendar--with-timezone.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-calendar--with-timezone.png new file mode 100644 index 000000000..35febb22f Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-calendar--with-timezone.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-checkbox--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-checkbox--default.png new file mode 100644 index 000000000..83c4ade7c Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-checkbox--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-checkbox--disabled.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-checkbox--disabled.png new file mode 100644 index 000000000..877b83117 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-checkbox--disabled.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-checkbox--indeterminate.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-checkbox--indeterminate.png new file mode 100644 index 000000000..aab590960 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-checkbox--indeterminate.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-chip--clickable.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-chip--clickable.png new file mode 100644 index 000000000..1794d9598 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-chip--clickable.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-chip--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-chip--default.png new file mode 100644 index 000000000..1794d9598 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-chip--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-chip--removable.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-chip--removable.png new file mode 100644 index 000000000..c80da3731 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-chip--removable.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-chip--sizes.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-chip--sizes.png new file mode 100644 index 000000000..4ee4a7a26 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-chip--sizes.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldcheckbox--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldcheckbox--default.png new file mode 100644 index 000000000..8a6f6d371 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldcheckbox--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldcheckbox--disabled.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldcheckbox--disabled.png new file mode 100644 index 000000000..b23bb7bac Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldcheckbox--disabled.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldcheckbox--required.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldcheckbox--required.png new file mode 100644 index 000000000..125c3443b Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldcheckbox--required.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldcheckboxblock--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldcheckboxblock--default.png new file mode 100644 index 000000000..f0207549f Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldcheckboxblock--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldcheckboxblock--disabled.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldcheckboxblock--disabled.png new file mode 100644 index 000000000..96ac914a5 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldcheckboxblock--disabled.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldinputgroup--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldinputgroup--default.png new file mode 100644 index 000000000..66cbc82fd Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldinputgroup--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldinputgroup--disabled.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldinputgroup--disabled.png new file mode 100644 index 000000000..f5f297409 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldinputgroup--disabled.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldinputgroup--icons.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldinputgroup--icons.png new file mode 100644 index 000000000..5d8f1c52a Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldinputgroup--icons.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldinputgroup--invalid.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldinputgroup--invalid.png new file mode 100644 index 000000000..aca441149 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldinputgroup--invalid.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldinputgroup--required.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldinputgroup--required.png new file mode 100644 index 000000000..f7d03f25d Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldinputgroup--required.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldinputgroup--with-slots.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldinputgroup--with-slots.png new file mode 100644 index 000000000..439b1a5ff Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldinputgroup--with-slots.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldpassword--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldpassword--default.png new file mode 100644 index 000000000..580b84ca4 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldpassword--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldpassword--disabled.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldpassword--disabled.png new file mode 100644 index 000000000..cd070f99b Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldpassword--disabled.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldpassword--icons.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldpassword--icons.png new file mode 100644 index 000000000..5f259bd49 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldpassword--icons.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldpassword--invalid.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldpassword--invalid.png new file mode 100644 index 000000000..88a8b04fa Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldpassword--invalid.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldpassword--required.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldpassword--required.png new file mode 100644 index 000000000..50e11adff Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldpassword--required.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldpassword--toggle.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldpassword--toggle.png new file mode 100644 index 000000000..bc0122c76 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldpassword--toggle.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldphonenumber--countries.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldphonenumber--countries.png new file mode 100644 index 000000000..a1895b18f Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldphonenumber--countries.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldphonenumber--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldphonenumber--default.png new file mode 100644 index 000000000..fdd42afc1 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldphonenumber--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldphonenumber--disabled.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldphonenumber--disabled.png new file mode 100644 index 000000000..51607ec49 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldphonenumber--disabled.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldphonenumber--invalid.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldphonenumber--invalid.png new file mode 100644 index 000000000..081d6bc82 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldphonenumber--invalid.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldphonenumber--readonly.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldphonenumber--readonly.png new file mode 100644 index 000000000..a1bb3e008 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldphonenumber--readonly.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldphonenumber--required.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldphonenumber--required.png new file mode 100644 index 000000000..d17d0356d Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldphonenumber--required.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldradio--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldradio--default.png new file mode 100644 index 000000000..98d0de8bf Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldradio--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldradio--disabled.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldradio--disabled.png new file mode 100644 index 000000000..0fad8df21 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldradio--disabled.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldradioblock--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldradioblock--default.png new file mode 100644 index 000000000..87eefdf2d Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldradioblock--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldradioblock--disabled.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldradioblock--disabled.png new file mode 100644 index 000000000..0f0e1b3c5 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldradioblock--disabled.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldswitch--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldswitch--default.png new file mode 100644 index 000000000..f445db9b2 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldswitch--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldswitch--disabled.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldswitch--disabled.png new file mode 100644 index 000000000..ba96c3802 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldswitch--disabled.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldswitch--required.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldswitch--required.png new file mode 100644 index 000000000..961cb395f Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldswitch--required.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldswitch--states.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldswitch--states.png new file mode 100644 index 000000000..68bf6c772 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldswitch--states.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldswitchblock--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldswitchblock--default.png new file mode 100644 index 000000000..94e8778eb Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldswitchblock--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldswitchblock--disabled.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldswitchblock--disabled.png new file mode 100644 index 000000000..339d8d02a Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldswitchblock--disabled.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldtext--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldtext--default.png new file mode 100644 index 000000000..abcae1d71 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldtext--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldtext--disabled.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldtext--disabled.png new file mode 100644 index 000000000..c91c125a2 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldtext--disabled.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldtext--icons.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldtext--icons.png new file mode 100644 index 000000000..dad872c88 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldtext--icons.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldtext--invalid.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldtext--invalid.png new file mode 100644 index 000000000..c6072bfb7 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldtext--invalid.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldtext--required.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldtext--required.png new file mode 100644 index 000000000..70c2157df Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldtext--required.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldtext--sizes.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldtext--sizes.png new file mode 100644 index 000000000..522e1e283 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldtext--sizes.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldtextarea--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldtextarea--default.png new file mode 100644 index 000000000..fe9ea9a13 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldtextarea--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldtextarea--disabled.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldtextarea--disabled.png new file mode 100644 index 000000000..97c7a46ad Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldtextarea--disabled.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldtextarea--invalid.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldtextarea--invalid.png new file mode 100644 index 000000000..7cbfd018e Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldtextarea--invalid.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldtextarea--required.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldtextarea--required.png new file mode 100644 index 000000000..ddabfe88f Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldtextarea--required.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldtextswitch--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldtextswitch--default.png new file mode 100644 index 000000000..7c70ea9b8 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldtextswitch--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldtextswitch--disabled.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldtextswitch--disabled.png new file mode 100644 index 000000000..1166b08e2 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldtextswitch--disabled.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldtextswitch--invalid.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldtextswitch--invalid.png new file mode 100644 index 000000000..cb71c0322 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldtextswitch--invalid.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldtextswitch--required.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldtextswitch--required.png new file mode 100644 index 000000000..2a83114fb Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldtextswitch--required.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldtextswitch--switch-off.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldtextswitch--switch-off.png new file mode 100644 index 000000000..0a204bc19 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-fieldtextswitch--switch-off.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-helpertext--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-helpertext--default.png new file mode 100644 index 000000000..fbcfaff90 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-helpertext--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-helpertext--types.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-helpertext--types.png new file mode 100644 index 000000000..cbd56edbb Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-helpertext--types.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputgroup--both-addons.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputgroup--both-addons.png new file mode 100644 index 000000000..0f905d45d Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputgroup--both-addons.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputgroup--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputgroup--default.png new file mode 100644 index 000000000..9749f67bf Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputgroup--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputgroup--disabled.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputgroup--disabled.png new file mode 100644 index 000000000..132b69242 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputgroup--disabled.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputgroup--invalid.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputgroup--invalid.png new file mode 100644 index 000000000..2490defc1 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputgroup--invalid.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputgroup--required.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputgroup--required.png new file mode 100644 index 000000000..3fee17e90 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputgroup--required.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputgroup--with-addon-left.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputgroup--with-addon-left.png new file mode 100644 index 000000000..d0281d1af Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputgroup--with-addon-left.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputgroup--with-addon-right.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputgroup--with-addon-right.png new file mode 100644 index 000000000..0ea4188a9 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputgroup--with-addon-right.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputgroup--with-all.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputgroup--with-all.png new file mode 100644 index 000000000..7edcfd0ec Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputgroup--with-all.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputgroup--with-button.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputgroup--with-button.png new file mode 100644 index 000000000..345927010 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputgroup--with-button.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputgroup--with-select.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputgroup--with-select.png new file mode 100644 index 000000000..ef2678f9b Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputgroup--with-select.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputnumber--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputnumber--default.png new file mode 100644 index 000000000..edaf19ee8 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputnumber--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputnumber--disabled.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputnumber--disabled.png new file mode 100644 index 000000000..333b07574 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputnumber--disabled.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputnumber--invalid.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputnumber--invalid.png new file mode 100644 index 000000000..687b488c5 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputnumber--invalid.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputnumber--sizes.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputnumber--sizes.png new file mode 100644 index 000000000..641abdbc9 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputnumber--sizes.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputpassword--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputpassword--default.png new file mode 100644 index 000000000..68e2be224 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputpassword--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputpassword--disabled.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputpassword--disabled.png new file mode 100644 index 000000000..10a95e0a7 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputpassword--disabled.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputpassword--filled.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputpassword--filled.png new file mode 100644 index 000000000..860e4c9da Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputpassword--filled.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputpassword--icon-left.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputpassword--icon-left.png new file mode 100644 index 000000000..d667a22fe Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputpassword--icon-left.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputpassword--invalid.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputpassword--invalid.png new file mode 100644 index 000000000..68b14bc52 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputpassword--invalid.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputpassword--max-length.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputpassword--max-length.png new file mode 100644 index 000000000..fba1be594 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputpassword--max-length.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputpassword--toggle.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputpassword--toggle.png new file mode 100644 index 000000000..dc49de811 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputpassword--toggle.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputtext--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputtext--default.png new file mode 100644 index 000000000..fe1ca5250 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputtext--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputtext--disabled.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputtext--disabled.png new file mode 100644 index 000000000..dbb4597f1 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputtext--disabled.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputtext--email.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputtext--email.png new file mode 100644 index 000000000..d1ce97b92 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputtext--email.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputtext--filled.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputtext--filled.png new file mode 100644 index 000000000..fa3feac22 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputtext--filled.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputtext--icons.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputtext--icons.png new file mode 100644 index 000000000..7c1544011 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputtext--icons.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputtext--invalid.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputtext--invalid.png new file mode 100644 index 000000000..0d8fa7c62 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputtext--invalid.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputtext--max-length.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputtext--max-length.png new file mode 100644 index 000000000..ca1e0d6a8 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputtext--max-length.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputtext--sizes.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputtext--sizes.png new file mode 100644 index 000000000..6d91bf841 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-inputtext--sizes.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-label--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-label--default.png new file mode 100644 index 000000000..31c0481b9 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-label--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-label--required.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-label--required.png new file mode 100644 index 000000000..cd0e643ac Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-label--required.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-multiselect--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-multiselect--default.png new file mode 100644 index 000000000..72c30994e Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-multiselect--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-multiselect--disabled.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-multiselect--disabled.png new file mode 100644 index 000000000..15c243f70 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-multiselect--disabled.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-multiselect--filled.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-multiselect--filled.png new file mode 100644 index 000000000..97a035394 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-multiselect--filled.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-multiselect--invalid.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-multiselect--invalid.png new file mode 100644 index 000000000..df7d442d3 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-multiselect--invalid.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-multiselect--long-list.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-multiselect--long-list.png new file mode 100644 index 000000000..bf5846a41 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-multiselect--long-list.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-multiselect--sizes.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-multiselect--sizes.png new file mode 100644 index 000000000..46189f53e Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-multiselect--sizes.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-multiselect--with-groups.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-multiselect--with-groups.png new file mode 100644 index 000000000..b6e2f7a5f Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-multiselect--with-groups.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-multiselect--with-option-extras.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-multiselect--with-option-extras.png new file mode 100644 index 000000000..b6e2f7a5f Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-multiselect--with-option-extras.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-multiselect--with-search-and-footer.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-multiselect--with-search-and-footer.png new file mode 100644 index 000000000..b6e2f7a5f Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-multiselect--with-search-and-footer.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-radiobutton--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-radiobutton--default.png new file mode 100644 index 000000000..79067269b Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-radiobutton--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-radiobutton--disabled.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-radiobutton--disabled.png new file mode 100644 index 000000000..57be7f336 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-radiobutton--disabled.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-select--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-select--default.png new file mode 100644 index 000000000..0e807cff2 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-select--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-select--disabled.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-select--disabled.png new file mode 100644 index 000000000..7411ca70e Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-select--disabled.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-select--filled.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-select--filled.png new file mode 100644 index 000000000..72c30994e Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-select--filled.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-select--invalid.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-select--invalid.png new file mode 100644 index 000000000..e5fe117ce Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-select--invalid.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-select--long-list.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-select--long-list.png new file mode 100644 index 000000000..29be8e566 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-select--long-list.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-select--multiple.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-select--multiple.png new file mode 100644 index 000000000..ca2a0fd59 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-select--multiple.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-select--sizes.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-select--sizes.png new file mode 100644 index 000000000..46189f53e Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-select--sizes.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-select--with-groups.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-select--with-groups.png new file mode 100644 index 000000000..ca2a0fd59 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-select--with-groups.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-select--with-option-extras.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-select--with-option-extras.png new file mode 100644 index 000000000..ca2a0fd59 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-select--with-option-extras.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-select--with-search-and-footer.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-select--with-search-and-footer.png new file mode 100644 index 000000000..ca2a0fd59 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-select--with-search-and-footer.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-switch--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-switch--default.png new file mode 100644 index 000000000..b29c91ecc Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-switch--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-switch--types.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-switch--types.png new file mode 100644 index 000000000..b0fb7559a Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-switch--types.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-textarea--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-textarea--default.png new file mode 100644 index 000000000..a6c6fa09b Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-textarea--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-textarea--disabled.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-textarea--disabled.png new file mode 100644 index 000000000..e53bfe20b Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-textarea--disabled.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-textarea--invalid.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-textarea--invalid.png new file mode 100644 index 000000000..492de3bac Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-textarea--invalid.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-textarea--required.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-textarea--required.png new file mode 100644 index 000000000..4d17de5a4 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-textarea--required.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-textarea--resizable.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-textarea--resizable.png new file mode 100644 index 000000000..f6d5d31ad Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-inputs-textarea--resizable.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-layout-divider--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-layout-divider--default.png new file mode 100644 index 000000000..7661a5fe5 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-layout-divider--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-layout-divider--orientations.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-layout-divider--orientations.png new file mode 100644 index 000000000..193f49d6b Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-layout-divider--orientations.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-layout-divider--with-label.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-layout-divider--with-label.png new file mode 100644 index 000000000..2f01791cb Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-layout-divider--with-label.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-layout-globalheader--default-header.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-layout-globalheader--default-header.png new file mode 100644 index 000000000..cfed235e7 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-layout-globalheader--default-header.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-layout-scrollarea--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-layout-scrollarea--default.png new file mode 100644 index 000000000..cd084adfa Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-layout-scrollarea--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-layout-scrollarea--orientations.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-layout-scrollarea--orientations.png new file mode 100644 index 000000000..fcf5d38a4 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-layout-scrollarea--orientations.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-layout-sidebar--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-layout-sidebar--default.png new file mode 100644 index 000000000..c7d48095a Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-layout-sidebar--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-layout-sidebar--with-header-and-profile-footer.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-layout-sidebar--with-header-and-profile-footer.png new file mode 100644 index 000000000..a34dda6a7 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-layout-sidebar--with-header-and-profile-footer.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-layout-sidebar--with-header-search.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-layout-sidebar--with-header-search.png new file mode 100644 index 000000000..437aab561 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-layout-sidebar--with-header-search.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-breadcrumb--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-breadcrumb--default.png new file mode 100644 index 000000000..87c7589a0 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-breadcrumb--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-breadcrumb--depths.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-breadcrumb--depths.png new file mode 100644 index 000000000..e169d8c9c Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-breadcrumb--depths.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-breadcrumb--responsive-collapsed.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-breadcrumb--responsive-collapsed.png new file mode 100644 index 000000000..87c7589a0 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-breadcrumb--responsive-collapsed.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-breadcrumbitem--current.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-breadcrumbitem--current.png new file mode 100644 index 000000000..f5bc44d18 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-breadcrumbitem--current.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-breadcrumbitem--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-breadcrumbitem--default.png new file mode 100644 index 000000000..385b55160 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-breadcrumbitem--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-breadcrumbitem--disabled.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-breadcrumbitem--disabled.png new file mode 100644 index 000000000..d5517258d Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-breadcrumbitem--disabled.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-breadcrumbitem--with-icon.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-breadcrumbitem--with-icon.png new file mode 100644 index 000000000..11bbca0d2 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-breadcrumbitem--with-icon.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-dropdown--auto-placement.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-dropdown--auto-placement.png new file mode 100644 index 000000000..9d8920820 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-dropdown--auto-placement.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-dropdown--custom-triggers.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-dropdown--custom-triggers.png new file mode 100644 index 000000000..ee9fec443 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-dropdown--custom-triggers.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-dropdown--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-dropdown--default.png new file mode 100644 index 000000000..acc8e5b56 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-dropdown--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-dropdown--groups-with-top-and-bottom-slots.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-dropdown--groups-with-top-and-bottom-slots.png new file mode 100644 index 000000000..d9522aa17 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-dropdown--groups-with-top-and-bottom-slots.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-dropdown--groups.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-dropdown--groups.png new file mode 100644 index 000000000..acc8e5b56 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-dropdown--groups.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-dropdown--option-affordances.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-dropdown--option-affordances.png new file mode 100644 index 000000000..deff4cb1f Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-dropdown--option-affordances.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-dropdown--placements.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-dropdown--placements.png new file mode 100644 index 000000000..db1c6a214 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-dropdown--placements.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-dropdown--states.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-dropdown--states.png new file mode 100644 index 000000000..deff4cb1f Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-dropdown--states.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-dropdown--with-top-and-bottom-slots.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-dropdown--with-top-and-bottom-slots.png new file mode 100644 index 000000000..7de9101d6 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-dropdown--with-top-and-bottom-slots.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-link--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-link--default.png new file mode 100644 index 000000000..311b9f8be Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-link--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-link--disabled.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-link--disabled.png new file mode 100644 index 000000000..3275c932c Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-link--disabled.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-link--sizes.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-link--sizes.png new file mode 100644 index 000000000..906f112d9 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-link--sizes.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-menuitem--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-menuitem--default.png new file mode 100644 index 000000000..b3e53b210 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-menuitem--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-menuitem--group.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-menuitem--group.png new file mode 100644 index 000000000..0f4b6f4f7 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-menuitem--group.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-menuitem--states.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-menuitem--states.png new file mode 100644 index 000000000..a64a86386 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-menuitem--states.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-menuitem--with-tag.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-menuitem--with-tag.png new file mode 100644 index 000000000..42204f49c Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-menuitem--with-tag.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-navigationmenu--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-navigationmenu--default.png new file mode 100644 index 000000000..8a7b68f8a Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-navigationmenu--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-tabview--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-tabview--default.png new file mode 100644 index 000000000..23eb1a902 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-navigation-tabview--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-overlay-dialog--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-overlay-dialog--default.png new file mode 100644 index 000000000..ae234fc6a Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-overlay-dialog--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-overlay-drawer--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-overlay-drawer--default.png new file mode 100644 index 000000000..a76e25bf9 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-overlay-drawer--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-overlay-drawer--scroll-content.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-overlay-drawer--scroll-content.png new file mode 100644 index 000000000..afde90c65 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-overlay-drawer--scroll-content.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-overlay-drawer--sizes.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-overlay-drawer--sizes.png new file mode 100644 index 000000000..d184b67fb Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-overlay-drawer--sizes.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-overlay-popover--anatomy.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-overlay-popover--anatomy.png new file mode 100644 index 000000000..918f4ea2c Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-overlay-popover--anatomy.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-overlay-popover--auto-placement.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-overlay-popover--auto-placement.png new file mode 100644 index 000000000..29fa5b9a4 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-overlay-popover--auto-placement.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-overlay-popover--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-overlay-popover--default.png new file mode 100644 index 000000000..69f333588 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-overlay-popover--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-overlay-popover--filter-example.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-overlay-popover--filter-example.png new file mode 100644 index 000000000..fbb2de72a Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-overlay-popover--filter-example.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-overlay-popover--placements.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-overlay-popover--placements.png new file mode 100644 index 000000000..0f7902d51 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-overlay-popover--placements.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-overlay-popover--widths.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-overlay-popover--widths.png new file mode 100644 index 000000000..43a091412 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-overlay-popover--widths.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-overlay-tooltip--auto-placement.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-overlay-tooltip--auto-placement.png new file mode 100644 index 000000000..fa9d19b3e Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-overlay-tooltip--auto-placement.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-overlay-tooltip--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-overlay-tooltip--default.png new file mode 100644 index 000000000..440a9656f Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-overlay-tooltip--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-overlay-tooltip--disabled.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-overlay-tooltip--disabled.png new file mode 100644 index 000000000..440a9656f Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-overlay-tooltip--disabled.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-overlay-tooltip--long-content.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-overlay-tooltip--long-content.png new file mode 100644 index 000000000..68d95242a Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-overlay-tooltip--long-content.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-overlay-tooltip--placements.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-overlay-tooltip--placements.png new file mode 100644 index 000000000..c73e05e79 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/components-overlay-tooltip--placements.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/foundations-colors--overview.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/foundations-colors--overview.png new file mode 100644 index 000000000..c2d433fc3 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/foundations-colors--overview.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/foundations-icons--overview.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/foundations-icons--overview.png new file mode 100644 index 000000000..96e2071a7 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/foundations-icons--overview.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/foundations-typography--overview.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/foundations-typography--overview.png new file mode 100644 index 000000000..18bd7ccf8 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/foundations-typography--overview.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/utils-spinner--default.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/utils-spinner--default.png new file mode 100644 index 000000000..0d9ceaa03 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/utils-spinner--default.png differ diff --git a/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/utils-spinner--sizes.png b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/utils-spinner--sizes.png new file mode 100644 index 000000000..8c78ec488 Binary files /dev/null and b/apps/storybook/.storybook/test-visual/__image_snapshots__/linux/utils-spinner--sizes.png differ diff --git a/apps/storybook/package.json b/apps/storybook/package.json index 964979d4c..a39506274 100644 --- a/apps/storybook/package.json +++ b/apps/storybook/package.json @@ -2,18 +2,22 @@ "name": "storybook", "version": "0.1.0", "private": true, - "description": "Storybook documentation for @aziontech/webkit.dev component library", + "description": "Storybook documentation for @aziontech/webkit component library", "license": "MIT", "type": "module", "scripts": { "dev": "storybook dev -p 6006", "build": "storybook build -o dist", - "preview": "npx http-server dist -p 6007" + "preview": "npx http-server dist -p 6007", + "test:visual": "test-storybook --url http://127.0.0.1:6006", + "test:visual:static": "concurrently -k -s first -n SB,TEST \"http-server dist -p 6007 --silent\" \"wait-on tcp:127.0.0.1:6007 && test-storybook --url http://127.0.0.1:6007\"", + "test:visual:ci": "concurrently -k -s first -n SB,TEST \"http-server dist -p 6007 --silent\" \"wait-on tcp:127.0.0.1:6007 && test-storybook --ci --url http://127.0.0.1:6007\"", + "test:visual:update": "concurrently -k -s first -n SB,TEST \"http-server dist -p 6007 --silent\" \"wait-on tcp:127.0.0.1:6007 && test-storybook -u --url http://127.0.0.1:6007\"" }, "dependencies": { "@aziontech/icons": "workspace:*", "@aziontech/theme": "workspace:*", - "@aziontech/webkit.dev": "workspace:*", + "@aziontech/webkit": "workspace:*", "@storybook/manager-api": "^8.6.14", "@tailwindcss/typography": "^0.5.10", "@whitespace/storybook-addon-html": "^7.0.0", @@ -28,14 +32,19 @@ "@storybook/addon-links": "^8.6.0", "@storybook/addon-themes": "^8.6.0", "@storybook/test": "^8.6.15", + "@storybook/test-runner": "^0.22.1", "@storybook/vue3": "^8.6.0", "@storybook/vue3-vite": "^8.6.0", "@vitejs/plugin-vue": "^5.2.4", "autoprefixer": "^10.4.27", + "concurrently": "^9.2.3", "http-server": "^14.1.1", + "jest-image-snapshot": "^6.5.2", + "playwright": "^1.61.1", "sass": "^1.86.0", "storybook": "^8.6.0", - "vite": "^6.4.3" + "vite": "^6.4.3", + "wait-on": "^8.0.5" }, "engines": { "node": ">=22.18.0", diff --git a/apps/storybook/src/stories/components/templates/deploy-success/DeploySuccess.stories.js b/apps/storybook/src/stories/templates/DeploySuccess.stories.js similarity index 97% rename from apps/storybook/src/stories/components/templates/deploy-success/DeploySuccess.stories.js rename to apps/storybook/src/stories/templates/DeploySuccess.stories.js index e169b31a8..76603489c 100644 --- a/apps/storybook/src/stories/components/templates/deploy-success/DeploySuccess.stories.js +++ b/apps/storybook/src/stories/templates/DeploySuccess.stories.js @@ -1,7 +1,7 @@ import DeploySuccess from '@aziontech/webkit/deploy-success' -import { toSfc } from '../../../_shared/story-source' -import { completeDeployLog } from '../../code/log-view/complete-deploy-log.js' +import { toSfc } from '../_shared/story-source.js' +import { completeDeployLog } from '../components/code/log-view/complete-deploy-log.js' const defaultSteps = [ { @@ -37,7 +37,7 @@ const IMPORT = [ ] const meta = { - title: 'Components/Templates/DeploySuccess', + title: 'Templates/DeploySuccess', component: DeploySuccess, tags: ['autodocs'], parameters: { diff --git a/apps/storybook/test-runner-jest.config.js b/apps/storybook/test-runner-jest.config.js new file mode 100644 index 000000000..70702bf32 --- /dev/null +++ b/apps/storybook/test-runner-jest.config.js @@ -0,0 +1,20 @@ +const { getJestConfig } = require('@storybook/test-runner') + +const defaultConfig = getJestConfig() + +/** + * Jest layer of the visual test runner (test-storybook picks this file up + * automatically from the package root). + * + * Templates are slated for deletion and are excluded from the visual layer + * entirely: their story files are never collected, so they are neither + * visited (render smoke) nor screenshotted — and `test:visual:update` + * generates no baselines for them. + */ +module.exports = { + ...defaultConfig, + testPathIgnorePatterns: [ + ...(defaultConfig.testPathIgnorePatterns ?? []), + '/src/stories/templates/' + ] +} diff --git a/docs/OVERVIEW_LINT.md b/docs/OVERVIEW_LINT.md new file mode 100644 index 000000000..c2dd9fd52 --- /dev/null +++ b/docs/OVERVIEW_LINT.md @@ -0,0 +1,335 @@ +# Lint & Static Quality — Overview + +> **@aziontech/webkit monorepo** · snapshot of July 2026 +> Companion doc: [`OVERVIEW_TESTS.md`](./OVERVIEW_TESTS.md) (runtime test layers) + +## TL;DR + +Code quality is enforced in **four layers of defense**, from the moment code is written to the moment a PR merges. The same tools run at every layer — what changes is *when* they fire and *how much* they check: + +| Layer | When | What runs | +|---|---|---| +| **0 — Write time** | as files are written (AI-assisted dev) | 7 Claude Code guardrail hooks (tokens, imports, specs, story shape, test existence) | +| **1 — Scripts / editor** | on demand | ESLint (zero warnings) · Stylelint · Prettier · `vue-tsc` · type-coverage ≥95% | +| **2 — Git hooks** | `git commit` | husky → lint-staged (auto-fix staged files) + commitlint (message contract) | +| **3 — CI** | PR / push to `main`, `dev` | `governance.yml`: lint + types + security + build + Storybook smoke, behind one gate | + +Philosophy: **ESLint owns correctness, Prettier owns formatting, Stylelint owns CSS, vue-tsc owns types, commitlint owns release semantics** — no tool overlaps another's job, and warnings don't exist (`--max-warnings 0`: an issue is either an error or not a rule). + +--- + +## 1. The four layers + +```mermaid +flowchart TB + subgraph L0["Layer 0 — Write time (.claude/hooks, AI-assisted dev)"] + direction LR + H1["validate-tokens"] --- H2["validate-references"] --- H3["validate-story-source"] --- H4["spec hooks ×3"] + end + + subgraph L1["Layer 1 — Scripts / editor (on demand)"] + direction LR + E1["ESLint
--max-warnings 0"] --- E2["Stylelint"] --- E3["Prettier"] --- E4["vue-tsc"] --- E5["type-coverage ≥95%"] + end + + subgraph L2["Layer 2 — Git hooks (husky)"] + direction LR + G1["pre-commit → lint-staged
(eslint --fix · stylelint --fix · prettier --write)"] --- G2["commit-msg → commitlint"] + end + + subgraph L3["Layer 3 — CI (governance.yml)"] + direction LR + C1["lint"] --- C2["types"] --- C3["security"] --- C4["build"] --- C5["storybook"] + end + + L0 --> L1 --> L2 --> L3 --> GATE["Governance Gate → PR mergeable"] +``` + +Each layer catches what the previous one missed: hooks stop AI-generated drift at the source, lint-staged guarantees no unformatted commit ever lands, and CI re-runs everything from a clean checkout so "works on my machine" can't merge. + +--- + +## 2. ESLint — correctness linting + +**Config:** single **flat config** (ESLint 9) at the repo root, [`eslint.config.js`](../eslint.config.js). `packages/webkit/eslint.config.js` just re-exports it — one ruleset, no per-package drift. + +### 2.1 Parser chain + +Vue SFCs need two parsers stacked — one for the template, one for the script: + +```mermaid +flowchart LR + F[".vue / .ts / .js files"] --> VP["vue-eslint-parser
parses SFC + template"] + VP --> TP["@typescript-eslint/parser
parses script blocks"] + TP --> RULES["rule sets:
base JS · Vue · a11y · TS · imports · clean code"] +``` + +### 2.2 The plugins, and what each one is for + +| Plugin | Job | +|---|---| +| `@eslint/js` (recommended) | the ESLint core baseline — syntax errors, unreachable code, `no-undef`, etc. | +| `eslint-plugin-vue` | Vue 3 SFC correctness: template mistakes, props/emits contracts, computed purity | +| `@typescript-eslint` | TypeScript-aware rules replacing the JS equivalents (`no-unused-vars`, `no-explicit-any`) | +| `eslint-plugin-vuejs-accessibility` | WCAG checks inside Vue templates (the static complement to axe-core in the test suite) | +| `eslint-plugin-import` | import hygiene — position, duplicates; resolves paths through `tsconfig.json` | +| `eslint-plugin-simple-import-sort` | deterministic, auto-fixable import/export ordering — kills "import shuffle" diff noise | +| `eslint-plugin-unused-imports` | registered in the config, **no rule currently enabled** (see §10 Observations) | + +### 2.3 The rules that shape the codebase + +**Vue — API and template discipline** + +| Rule | Effect | +|---|---| +| `vue/component-definition-name-casing: PascalCase` · `vue/component-name-in-template-casing: PascalCase` | one naming convention on both sides — matches the repo-wide "one name, everywhere" rule (``, never ``) | +| `vue/component-tags-order: script[setup] → template → style` | every SFC reads in the same order | +| `vue/require-default-prop` | every optional prop declares its default — the spec's Props table made executable | +| `vue/require-explicit-emits` | no undeclared events; the emit surface is always visible in the component's contract | +| `vue/no-mutating-props` (`shallowOnly: false`) | props are read-only all the way down — state flows via `v-model` / events | +| `vue/no-v-html` | security: no raw HTML injection path | +| `vue/no-side-effects-in-computed-properties` · `vue/no-async-in-computed-properties` · `vue/no-arrow-functions-in-watch` · `vue/no-ref-as-operand` | reactivity correctness — computed stays pure, refs are used as refs | +| `vue/no-dupe-keys` · `no-dupe-v-else-if` · `no-duplicate-attributes` · `no-child-content` · `v-if-else-key` · `no-reserved-props` (Vue 3) · `no-export-in-script-setup` · `no-empty-component-block` · `no-unused-vars` | template/SFC bug class eliminated at lint time | +| `vue/multi-word-component-names: off` | deliberate: the design system has single-word components (`Button`, `Table`, `Chip`) | + +**Accessibility (static)** + +| Rule | Effect | +|---|---| +| `vuejs-accessibility/alt-text` | images must carry alternative text | +| `vuejs-accessibility/aria-props` / `aria-role` | only valid ARIA attributes and roles | +| `vuejs-accessibility/click-events-have-key-events` | anything clickable is keyboard-operable | + +These run at write time on the template; the runtime counterpart (axe-core on the rendered tree) lives in the test suite — two passes over the same concern. + +**TypeScript** + +| Rule | Effect | +|---|---| +| `@typescript-eslint/no-explicit-any` | `any` is an error — pairs with the 95% type-coverage gate (§5) | +| `@typescript-eslint/no-unused-vars` (`argsIgnorePattern: '^_'`) | dead code flagged; intentional unused args spelled `_arg` (core `no-unused-vars` is off in favor of this TS-aware version) | + +**Imports & clean code** + +| Rule | Effect | +|---|---| +| `simple-import-sort/imports` + `/exports` | canonical, auto-fixable ordering | +| `import/first` · `import/newline-after-import` · `import/no-duplicates` | imports at the top, one blank line after, one statement per module | +| `no-console` (`allow: warn, error`) | no stray `console.log` in library code | +| `no-debugger` · `prefer-const` | no leftover debug stops; immutability by default | + +### 2.4 Zero-warnings policy + +Every ESLint invocation — script, lint-staged, CI — runs with **`--max-warnings 0`**. There is no "warning debt" category: a rule either blocks or doesn't exist. + +--- + +## 3. Prettier — formatting + +**Config:** [`.prettierrc.json`](../.prettierrc.json). Formatting is Prettier's job alone — ESLint has no stylistic rules to fight it, so no `eslint-config-prettier` shim is wired into the flat config. + +| Option | Value | Meaning | +|---|---|---| +| `semi` | `false` | no semicolons | +| `singleQuote` | `true` | `'single'` quotes | +| `tabWidth` | `2` | 2-space indent | +| `printWidth` | `100` | wrap at 100 columns | +| `trailingComma` | `"none"` | no trailing commas | +| `singleAttributePerLine` | `true` | one attribute per line in templates — long `data-[kind=…]` class/attribute stacks stay readable and diff line-by-line | +| `vueIndentScriptAndStyle` | `true` | `