@motion-proto/live-tokens 0.76.0 → 0.78.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/skills/live-tokens-check-compliance/SKILL.md +2 -0
- package/.claude/skills/live-tokens-create-component/SKILL.md +3 -3
- package/.claude/skills/live-tokens-create-component/references/contract-tests.md +99 -3
- package/.claude/skills/live-tokens-create-page/SKILL.md +5 -4
- package/.claude/skills/live-tokens-fix-findings/SKILL.md +7 -0
- package/CHANGELOG.md +90 -0
- package/bin/check-component.mjs +2 -0
- package/bin/check-page.mjs +131 -9
- package/bin/cli.mjs +25 -3
- package/bin/contractRunner.mjs +349 -30
- package/bin/lib/pageRoutes.mjs +309 -0
- package/package.json +5 -3
- package/src/editor/overlay/ColumnsOverlay.svelte +1 -1
- package/src/editor/overlay/LiveEditorOverlay.svelte +1 -0
- package/src/editor/overlay/LiveTokensRouter.svelte +1 -0
- package/src/editor/skill-atlas/skillSources.generated.ts +5 -5
- package/src/editor/skill-atlas/trees/check-compliance.ts +18 -18
- package/src/editor/skill-atlas/trees/create-component.ts +8 -3
- package/src/editor/skill-atlas/trees/create-page.ts +26 -26
- package/src/editor/skill-atlas/trees/fix-findings.ts +46 -11
- package/src/testing-js/{chunk-LXR3MN6N.js → chunk-4JQX6WWL.js} +1 -1
- package/src/testing-js/chunk-4JQX6WWL.js.map +1 -0
- package/src/testing-js/{chunk-AO7EZHYV.js → chunk-GNIUPIU2.js} +3 -3
- package/src/testing-js/{chunk-ZMSX6CXR.js → chunk-NB3NZRBM.js} +13 -2
- package/src/testing-js/chunk-NB3NZRBM.js.map +1 -0
- package/src/testing-js/{chunk-L73N4NSO.js → chunk-WIZ6W7UT.js} +2 -2
- package/src/testing-js/component-alias.contract.js +2 -2
- package/src/testing-js/component-editor.contract.js +21 -5
- package/src/testing-js/component-editor.contract.js.map +1 -1
- package/src/testing-js/component-render.contract.js +4 -4
- package/src/testing-js/index.d.ts +9 -3
- package/src/testing-js/index.js +20 -12
- package/src/testing-js/index.js.map +1 -1
- package/src/testing-js/page-compliance.contract.js +829 -0
- package/src/testing-js/page-compliance.contract.js.map +1 -0
- package/src/testing-js/{vitest-BE6uGF31.d.ts → vitest-C-wNWcoA.d.ts} +21 -1
- package/src/testing-js/vitest.d.ts +1 -1
- package/src/testing-js/vitest.js +1 -1
- package/template/README.md +17 -5
- package/template/live-tokens.testing.ts +6 -0
- package/template/package.json +5 -2
- package/template/src/main.ts +1 -0
- package/template/src/pages/Home.svelte +13 -0
- package/template/src/registerComponents.ts +4 -0
- package/template/tests/contracts.ts +3 -0
- package/template/tsconfig.json +1 -1
- package/src/testing-js/chunk-LXR3MN6N.js.map +0 -1
- package/src/testing-js/chunk-ZMSX6CXR.js.map +0 -1
- /package/src/testing-js/{chunk-AO7EZHYV.js.map → chunk-GNIUPIU2.js.map} +0 -0
- /package/src/testing-js/{chunk-L73N4NSO.js.map → chunk-WIZ6W7UT.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../testing/componentContract.ts","../testing/contracts/index.ts","../testing/contracts/badge.ts","../testing/contracts/button.ts","../testing/contracts/callout.ts","../testing/contracts/card.ts","../testing/contracts/codesnippet.ts","../testing/contracts/collapsiblesection.ts","../testing/contracts/cornerbadge.ts","../testing/contracts/dialog.ts","../testing/contracts/iconbutton.ts","../testing/contracts/image.ts","../testing/contracts/imagelightbox.ts","../testing/contracts/inlineeditactions.ts","../testing/contracts/input.ts","../testing/contracts/menuselect.ts","../testing/contracts/notification.ts","../testing/contracts/panel.ts","../testing/contracts/progressbar.ts","../testing/contracts/radiobutton.ts","../testing/contracts/sectiondivider.ts","../testing/contracts/segmentedcontrol.ts","../testing/contracts/sidenavigation.ts","../testing/contracts/slider.ts","../testing/contracts/tabbar.ts","../testing/contracts/table.ts","../testing/contracts/toggle.ts","../testing/contracts/tooltip.ts"],"sourcesContent":["export type ContractRule =\n | 'contract-listed'\n | 'contract-render'\n | 'contract-alias'\n | 'contract-persist'\n | 'contract-theme'\n | 'contract-preview'\n | 'contract-sketch';\n\n/**\n * A failed obligation, carrying the rule id the CLI reports it under. A defect\n * fixture names the rule it expects, and `check-component --tests` maps a\n * reporter error onto a finding.\n */\nexport class ContractViolation extends Error {\n constructor(\n readonly rule: ContractRule,\n readonly component: string,\n message: string,\n ) {\n super(`[${rule}] ${component}: ${message}`);\n this.name = 'ContractViolation';\n }\n}\n\nexport interface Inapplicable {\n applicable: false;\n reason: string;\n}\n\nexport function isInapplicable(value: unknown): value is Inapplicable {\n return typeof value === 'object' && value !== null && (value as Inapplicable).applicable === false;\n}\n\nexport interface PartLocator {\n /** Resolved inside the preview stage unless `portal` is set. */\n selector: string;\n /** Read computed style from this pseudo-element of the part, e.g.\n * `'::after'`. Chromium's `getComputedStyle` only tolerates the bare form\n * (`'after'`) for `::before`/`::after`; use the full `::` syntax so a\n * future pseudo-element (`::placeholder`, `::marker`, ...) works the same\n * way without a silent fallback to the host element's own style. */\n pseudo?: string;\n /** Rendered outside the preview stage. Resolved against the document. */\n portal?: boolean;\n}\n\nexport type PartDeclaration = string | PartLocator;\n\n/**\n * An editor control the preview is gated behind: a canvas-toolbar checkbox, an\n * optional-content switch. `check` sets a checkbox to a state and is safe to\n * repeat; `value` picks a select option; neither clicks once.\n */\nexport interface ControlStep {\n kind: 'control';\n /** Selector inside the visible variant group. */\n selector: string;\n check?: boolean;\n value?: string;\n}\n\nexport type SetupStep = InteractionAction | ControlStep;\n\n/** Which VariantGroup, which state tab, and what has to happen first. */\nexport interface View {\n /** Variant tab label. Omitted when the editor renders one variant. */\n variant?: string;\n /** State tab label. Omitted when the editor renders no state strip. */\n state?: string;\n /** Run after the tabs are selected. Portaled and toolbar-gated parts exist\n * only once these have run. */\n setup?: SetupStep[];\n}\n\n/** Part key -> CSS property -> the design token that must drive it. */\nexport type PaintMap = Record<string, Record<string, string>>;\n\nexport interface PropertyExpectation extends View {\n paints: PaintMap;\n}\n\nexport interface StateExpectation extends View {\n state: string;\n /** Class the root part carries while the editor previews this state. */\n forceClass?: string;\n /** Part key -> attributes it must carry. A null value requires the absence. */\n attributes?: Record<string, Record<string, string | null>>;\n /** What the state repaints, as computed-value equality against its token. */\n paints?: PaintMap;\n}\n\n/**\n * `token` and `opacity` drive the token selector for `variable`. `gradient`\n * drives the gradient editor for `variable`. `literal` drives `control` and\n * reads `variable` back off the root, which is where an intrinsic lands: the\n * editors write those into the alias bucket. `config` drives `control` and\n * reads `configKey` out of the config bucket, which holds editor metadata that\n * never reaches `:root`.\n */\nexport type PersistenceShape = 'token' | 'literal' | 'opacity' | 'gradient' | 'config';\n\nexport interface PersistenceCase extends View {\n shape: PersistenceShape;\n /** The alias the value is read back from. Omitted for `config`. */\n variable?: string;\n /** Selector inside the visible variant group, for `literal` and `config`. */\n control?: string;\n /** The config-bucket key, for `config`. */\n configKey?: string;\n /** Where the persisted value must land once the page has reloaded. */\n observe: { part: string; css: string };\n}\n\nexport interface PersistenceExpectation {\n cases: PersistenceCase[];\n /** The alias Reset must return to the value the server holds for it. It has\n * to be one a case above moves, so the saved value and the value the\n * component booted with are different and Reset can be seen to choose. */\n resetVariable: string;\n}\n\nexport interface ThemeExpectation extends View {\n /** Theme slug shown in the Theme Picker, e.g. `ocean`. */\n theme: string;\n /** Variables whose root value the theme must move. */\n changed: string[];\n /**\n * Variables the theme must leave exactly as they were. Two theme JSON files\n * can name the identical design token (e.g. both `--border-neutral`) and\n * still resolve to different rendered colors, because many color primitives\n * are computed per theme from a palette/seed even when the alias string is\n * unchanged — comparing the two files' alias *names* does not establish\n * invariance. Pick `unchanged` candidates from token families a theme never\n * recolors: `--shadow-*`, `--icon-size-*`, `--font-size-*`,\n * `--line-height-*`, `--font-family`/`--font-mono`, and the spacing/radius/\n * border-width scale steps (`--space-*`, `--radius-*`, `--border-width-*`)\n * are all fixed constants, not palette-derived — verify a candidate's\n * *resolved* value is identical between the two theme files before trusting\n * it, not just that the alias name matches.\n */\n unchanged: string[];\n /** Variables the theme's own component config aliases, and the design token\n * each must resolve to under it. */\n aliasedTo: Record<string, string>;\n /** Where the theme's value must land in the rendered preview. */\n observe: { part: string; css: string; variable: string };\n}\n\nexport type InteractionAction =\n | { kind: 'press'; part: string; key: string }\n | { kind: 'click'; part: string }\n | { kind: 'type'; part: string; text: string }\n | { kind: 'dragTo'; part: string; along: string; fraction: number };\n\nexport type InteractionOutcome =\n | { kind: 'attribute'; part: string; name: string; value: string }\n | { kind: 'valueMoves'; part: string; direction: 'up' | 'down' }\n | { kind: 'valueBecomes'; part: string; value: string }\n | { kind: 'valueChanges'; part: string }\n | { kind: 'valueHolds'; part: string }\n /** Whether the part takes focus. The only outcome a button with no state\n * attribute has: a disabled one refuses it and an enabled one takes it. */\n | { kind: 'focused'; part: string; value: boolean };\n\nexport interface InteractionCase extends View {\n name: string;\n action: InteractionAction;\n expect: InteractionOutcome;\n}\n\nexport interface InteractionExpectation {\n /** The part carrying the interactive role. */\n part: string;\n role: string;\n cases: InteractionCase[];\n}\n\nexport interface SketchPartExpectation {\n part: string;\n /** The design token `--sketch-fill` must resolve to on this part. */\n fill?: string;\n /** The design token `--sketch-stroke` must resolve to on this part. */\n stroke?: string;\n}\n\nexport interface SketchExpectation extends View {\n /** Sketchstyle id the paint is asserted under. */\n style: string;\n parts: SketchPartExpectation[];\n}\n\nexport interface ComponentContract {\n id: string;\n origin: 'system' | 'custom';\n parts: Record<string, PartDeclaration>;\n /** Part key of the component's own root element in the preview. */\n root: string;\n /** The view every obligation opens with. */\n view?: View;\n states: StateExpectation[] | Inapplicable;\n properties: PropertyExpectation[];\n /**\n * Aliases no paint map can pin, each with the reason. A token consumed\n * inside `calc()` or handed to a gradient function never appears verbatim in\n * a computed style, so the probe cannot read it back — that is the only\n * class this belongs to. A token a sibling alias merely happens to carry\n * the same rendered value through (a base padding token behind four\n * per-side overrides, say) is not in this class: the per-side entries pin\n * their own aliases, not the base one, and a paint map that drives the base\n * token directly and observes the per-side CSS property can pin it too. Put\n * that here and Wave 4's coverage JSON records the base token as covered\n * when nothing asserts the link between it and what actually painted.\n */\n uncovered?: Record<string, string>;\n persistence: PersistenceExpectation;\n theme: ThemeExpectation;\n interaction: InteractionExpectation | Inapplicable;\n sketch: SketchExpectation | Inapplicable;\n}\n\n/** Roles whose components must declare interaction cases. */\nconst INTERACTIVE_ROLES = new Set([\n 'button', 'switch', 'checkbox', 'radio', 'slider', 'spinbutton', 'textbox',\n 'combobox', 'listbox', 'menuitem', 'tab', 'link', 'searchbox', 'option',\n]);\n\nexport function requiresInteraction(role: string | null): boolean {\n return role !== null && INTERACTIVE_ROLES.has(role);\n}\n\nexport function partLocator(contract: ComponentContract, key: string): PartLocator {\n const declared = contract.parts[key];\n if (declared === undefined) {\n throw new ContractViolation('contract-render', contract.id, `no part named \"${key}\" is declared`);\n }\n return typeof declared === 'string' ? { selector: declared } : declared;\n}\n","import path from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport type { ComponentContract } from '../componentContract';\nimport { badgeContract } from './badge';\nimport { buttonContract } from './button';\nimport { calloutContract } from './callout';\nimport { cardContract } from './card';\nimport { codeSnippetContract } from './codesnippet';\nimport { collapsibleSectionContract } from './collapsiblesection';\nimport { cornerBadgeContract } from './cornerbadge';\nimport { dialogContract } from './dialog';\nimport { iconButtonContract } from './iconbutton';\nimport { imageContract } from './image';\nimport { imageLightboxContract } from './imagelightbox';\nimport { inlineEditActionsContract } from './inlineeditactions';\nimport { inputContract } from './input';\nimport { menuSelectContract } from './menuselect';\nimport { notificationContract } from './notification';\nimport { panelContract } from './panel';\nimport { progressBarContract } from './progressbar';\nimport { radioButtonContract } from './radiobutton';\nimport { sectionDividerContract } from './sectiondivider';\nimport { segmentedControlContract } from './segmentedcontrol';\nimport { sideNavigationContract } from './sidenavigation';\nimport { sliderContract } from './slider';\nimport { tabBarContract } from './tabbar';\nimport { tableContract } from './table';\nimport { toggleContract } from './toggle';\nimport { tooltipContract } from './tooltip';\n\nexport const shippedContracts: ComponentContract[] = [\n badgeContract,\n buttonContract,\n calloutContract,\n cardContract,\n codeSnippetContract,\n collapsibleSectionContract,\n cornerBadgeContract,\n dialogContract,\n iconButtonContract,\n imageContract,\n imageLightboxContract,\n inlineEditActionsContract,\n inputContract,\n menuSelectContract,\n notificationContract,\n panelContract,\n progressBarContract,\n radioButtonContract,\n sectionDividerContract,\n segmentedControlContract,\n sideNavigationContract,\n sliderContract,\n tabBarContract,\n tableContract,\n toggleContract,\n tooltipContract,\n];\n\n/** Names the module `selectedContracts` loads a custom component's\n * `ComponentContract[]` from. The suite files are static Playwright entry\n * points with no argument to receive one through, so an env var plus a\n * dynamic import is the only route in. */\nexport const CONTRACTS_MODULE_ENV = 'LIVE_TOKENS_CONTRACTS_MODULE';\n\nasync function loadCustomContracts(): Promise<ComponentContract[]> {\n const modulePath = process.env[CONTRACTS_MODULE_ENV];\n if (!modulePath) return [];\n const mod = await import(pathToFileURL(path.resolve(modulePath)).href);\n const value = mod.default ?? mod.contracts;\n if (!Array.isArray(value)) {\n throw new Error(\n `${CONTRACTS_MODULE_ENV}=${modulePath} does not export a contracts array `\n + '(default export or a named \"contracts\" export)',\n );\n }\n return value as ComponentContract[];\n}\n\n/** The shipped list plus whatever `LIVE_TOKENS_CONTRACTS_MODULE` names,\n * unfiltered — what a \"no contract for this id\" error lists as declared. */\nexport async function allContracts(\n contracts: ComponentContract[] = shippedContracts,\n): Promise<ComponentContract[]> {\n const custom = await loadCustomContracts();\n return custom.length > 0 ? [...contracts, ...custom] : contracts;\n}\n\n/** The contracts a run covers, narrowed by `LIVE_TOKENS_COMPONENT`. */\nexport async function selectedContracts(\n contracts: ComponentContract[] = shippedContracts,\n): Promise<ComponentContract[]> {\n const all = await allContracts(contracts);\n const requested = process.env.LIVE_TOKENS_COMPONENT;\n return requested ? all.filter((contract) => contract.id === requested) : all;\n}\n\nexport {\n badgeContract,\n buttonContract,\n calloutContract,\n cardContract,\n codeSnippetContract,\n collapsibleSectionContract,\n cornerBadgeContract,\n dialogContract,\n iconButtonContract,\n imageContract,\n imageLightboxContract,\n inlineEditActionsContract,\n inputContract,\n menuSelectContract,\n notificationContract,\n panelContract,\n progressBarContract,\n radioButtonContract,\n sectionDividerContract,\n segmentedControlContract,\n sideNavigationContract,\n sliderContract,\n tabBarContract,\n tableContract,\n toggleContract,\n tooltipContract,\n};\n","import type { ComponentContract, PaintMap } from '../componentContract';\n\ntype Variant =\n | 'primary' | 'accent' | 'neutral' | 'alternate' | 'canvas'\n | 'special' | 'success' | 'warning' | 'danger' | 'info';\n\nconst variants: Variant[] = [\n 'primary', 'accent', 'neutral', 'alternate', 'canvas',\n 'special', 'success', 'warning', 'danger', 'info',\n];\n\nfunction basePaints(v: Variant): PaintMap {\n return {\n root: {\n paddingTop: `--badge-${v}-padding`,\n borderRadius: `--badge-${v}-radius`,\n borderTopWidth: `--badge-${v}-border-width`,\n boxShadow: `--badge-${v}-shadow`,\n fontFamily: `--badge-${v}-text-font-family`,\n fontSize: `--badge-${v}-text-font-size`,\n fontWeight: `--badge-${v}-text-font-weight`,\n lineHeight: `--badge-${v}-text-line-height`,\n },\n icon: { fontSize: `--badge-${v}-icon-size` },\n };\n}\n\nfunction colorPaints(v: Variant): PaintMap {\n return {\n root: {\n backgroundColor: `--badge-${v}-surface`,\n borderTopColor: `--badge-${v}-border`,\n color: `--badge-${v}-text`,\n },\n };\n}\n\nexport const badgeContract: ComponentContract = {\n id: 'badge',\n origin: 'system',\n view: { variant: 'Primary' },\n root: 'root',\n parts: {\n root: '.badge',\n icon: '.icon',\n },\n properties: [\n { variant: 'Primary', state: 'base', paints: basePaints('primary') },\n { variant: 'Primary', state: 'colors', paints: colorPaints('primary') },\n ...variants.filter((v) => v !== 'primary').flatMap((v) => [\n { variant: v.charAt(0).toUpperCase() + v.slice(1), state: 'base', paints: basePaints(v) },\n { variant: v.charAt(0).toUpperCase() + v.slice(1), state: 'colors', paints: colorPaints(v) },\n ]),\n ],\n states: [{ state: 'base' }, { state: 'colors' }],\n uncovered: {\n '--badge-primary-blur': 'consumed via backdrop-filter: blur(), which no probe covers',\n '--badge-accent-blur': 'consumed via backdrop-filter: blur(), which no probe covers',\n '--badge-neutral-blur': 'consumed via backdrop-filter: blur(), which no probe covers',\n '--badge-alternate-blur': 'consumed via backdrop-filter: blur(), which no probe covers',\n '--badge-canvas-blur': 'consumed via backdrop-filter: blur(), which no probe covers',\n '--badge-special-blur': 'consumed via backdrop-filter: blur(), which no probe covers',\n '--badge-success-blur': 'consumed via backdrop-filter: blur(), which no probe covers',\n '--badge-warning-blur': 'consumed via backdrop-filter: blur(), which no probe covers',\n '--badge-danger-blur': 'consumed via backdrop-filter: blur(), which no probe covers',\n '--badge-info-blur': 'consumed via backdrop-filter: blur(), which no probe covers',\n },\n persistence: {\n cases: [\n {\n shape: 'token',\n variant: 'Primary',\n state: 'base',\n variable: '--badge-primary-border-width',\n observe: { part: 'root', css: 'borderTopWidth' },\n },\n ],\n resetVariable: '--badge-primary-border-width',\n },\n theme: {\n theme: 'halloween',\n changed: ['--badge-primary-border-width', '--badge-primary-radius', '--badge-primary-padding'],\n unchanged: ['--badge-primary-shadow', '--badge-primary-icon-size'],\n aliasedTo: {\n '--badge-primary-border-width': '--border-width-3',\n '--badge-primary-radius': '--radius-none',\n },\n observe: { part: 'root', css: 'borderTopWidth', variable: '--badge-primary-border-width' },\n },\n interaction: {\n applicable: false,\n reason: 'a badge is a static label with no interactive role',\n },\n sketch: {\n style: 'pencil',\n parts: [{ part: 'root', fill: '--badge-primary-surface', stroke: '--badge-primary-border' }],\n },\n};\n","import type { ComponentContract, PaintMap, PropertyExpectation } from '../componentContract';\n\ntype Variant = 'primary' | 'secondary' | 'outline' | 'success' | 'danger' | 'warning';\nconst variants: Variant[] = ['primary', 'secondary', 'outline', 'success', 'danger', 'warning'];\nconst cap = (v: string) => v.charAt(0).toUpperCase() + v.slice(1);\n\nfunction basePaints(v: Variant): PaintMap {\n return {\n root: {\n paddingTop: `--button-${v}-padding`,\n borderRadius: `--button-${v}-radius`,\n borderTopWidth: `--button-${v}-border-width`,\n fontFamily: `--button-${v}-text-font-family`,\n fontSize: `--button-${v}-text-font-size`,\n fontWeight: `--button-${v}-text-font-weight`,\n lineHeight: `--button-${v}-text-line-height`,\n },\n icon: { fontSize: `--button-${v}-icon-size` },\n };\n}\n\nfunction statePaints(v: Variant, s: 'default' | 'hover' | 'disabled'): PaintMap {\n const prefix = s === 'default' ? `--button-${v}` : `--button-${v}-${s}`;\n const textVar = s === 'default' ? `--button-${v}-text` : `--button-${v}-${s}-text`;\n return {\n root: {\n backgroundColor: `${prefix}-surface`,\n borderTopColor: `${prefix}-border`,\n color: textVar,\n },\n };\n}\n\nconst otherVariantProperties: PropertyExpectation[] = variants\n .filter((v) => v !== 'primary')\n .flatMap((v) => [\n { variant: cap(v), state: 'base', paints: basePaints(v) },\n { variant: cap(v), state: 'default', paints: statePaints(v, 'default') },\n { variant: cap(v), state: 'hover', paints: statePaints(v, 'hover') },\n { variant: cap(v), state: 'disabled', paints: statePaints(v, 'disabled') },\n ]);\n\nexport const buttonContract: ComponentContract = {\n id: 'button',\n origin: 'system',\n view: { variant: 'Primary' },\n root: 'root',\n parts: {\n root: '.button',\n icon: '.button i',\n },\n properties: [\n { variant: 'Primary', state: 'base', paints: basePaints('primary') },\n ...otherVariantProperties,\n { variant: 'Outline', state: 'active', paints: { root: { backgroundColor: '--button-outline-active-surface' } } },\n {\n setup: [{ kind: 'control', selector: '.preview-actions select', value: 'small' }],\n paints: {\n root: {\n paddingTop: '--button-small-padding',\n fontSize: '--button-small-text-font-size',\n fontWeight: '--button-small-text-font-weight',\n lineHeight: '--button-small-text-line-height',\n },\n icon: { fontSize: '--button-small-icon-size' },\n },\n },\n ],\n states: [\n { state: 'base' },\n { state: 'default', paints: statePaints('primary', 'default') },\n { state: 'hover', forceClass: 'force-hover', paints: statePaints('primary', 'hover') },\n {\n state: 'disabled',\n attributes: { root: { disabled: '' } },\n paints: statePaints('primary', 'disabled'),\n },\n ],\n uncovered: {\n '--button-shimmer': 'gates the ::before sweep with a display toggle, which no probe covers',\n '--button-hover-tint': 'consumed inside a background-image tint wash, never appearing verbatim in a computed style',\n '--button-hover-tint-enabled': 'the gate for the tint wash above, same limitation',\n },\n persistence: {\n cases: [\n {\n shape: 'token',\n variant: 'Primary',\n state: 'base',\n variable: '--button-primary-border-width',\n observe: { part: 'root', css: 'borderTopWidth' },\n },\n ],\n resetVariable: '--button-primary-border-width',\n },\n theme: {\n theme: 'halloween',\n changed: ['--button-primary-border-width', '--button-primary-radius', '--button-primary-padding'],\n unchanged: ['--button-primary-icon-size'],\n aliasedTo: {\n '--button-primary-border-width': '--border-width-3',\n '--button-primary-radius': '--radius-none',\n },\n observe: { part: 'root', css: 'borderTopWidth', variable: '--button-primary-border-width' },\n },\n interaction: {\n part: 'root',\n role: 'button',\n cases: [\n {\n name: 'clicking a button focuses it',\n action: { kind: 'click', part: 'root' },\n expect: { kind: 'focused', part: 'root', value: true },\n },\n {\n name: 'a disabled button refuses focus',\n state: 'disabled',\n action: { kind: 'click', part: 'root' },\n expect: { kind: 'focused', part: 'root', value: false },\n },\n ],\n },\n sketch: {\n style: 'pencil',\n parts: [{ part: 'root', fill: '--button-primary-surface', stroke: '--button-primary-border' }],\n },\n};\n","import type { ComponentContract, PaintMap } from '../componentContract';\n\ntype Variant = 'info' | 'success' | 'warning' | 'danger';\nconst variants: Variant[] = ['info', 'success', 'warning', 'danger'];\n\nfunction paintsFor(v: Variant): PaintMap {\n return {\n root: {\n backgroundColor: `--callout-${v}-surface`,\n borderTopColor: `--callout-${v}-border`,\n borderTopWidth: `--callout-${v}-border-width`,\n borderLeftWidth: `--callout-${v}-accent-width`,\n borderRadius: `--callout-${v}-radius`,\n paddingTop: `--callout-${v}-padding`,\n },\n label: {\n color: `--callout-${v}-label`,\n fontFamily: `--callout-${v}-label-font-family`,\n fontSize: `--callout-${v}-label-font-size`,\n fontWeight: `--callout-${v}-label-font-weight`,\n lineHeight: `--callout-${v}-label-line-height`,\n },\n message: {\n color: `--callout-${v}-text`,\n fontFamily: `--callout-${v}-text-font-family`,\n fontSize: `--callout-${v}-text-font-size`,\n fontWeight: `--callout-${v}-text-font-weight`,\n lineHeight: `--callout-${v}-text-line-height`,\n },\n };\n}\n\nexport const calloutContract: ComponentContract = {\n id: 'callout',\n origin: 'system',\n view: { variant: 'Info' },\n root: 'root',\n parts: {\n root: '.callout',\n label: '.callout-label',\n message: '.callout-message',\n },\n properties: variants.map((v) => ({ variant: v.charAt(0).toUpperCase() + v.slice(1), paints: paintsFor(v) })),\n states: {\n applicable: false,\n reason: 'each variant is one full preset with one state, so the editor renders no state strip',\n },\n persistence: {\n cases: [\n {\n shape: 'token',\n variable: '--callout-info-border-width',\n observe: { part: 'root', css: 'borderTopWidth' },\n },\n ],\n resetVariable: '--callout-info-border-width',\n },\n theme: {\n theme: 'halloween',\n changed: ['--callout-info-border-width', '--callout-info-radius', '--callout-info-padding'],\n unchanged: ['--callout-info-label-font-size', '--callout-info-text-font-size'],\n aliasedTo: {\n '--callout-info-border-width': '--border-width-3',\n '--callout-info-radius': '--radius-none',\n },\n observe: { part: 'root', css: 'borderTopWidth', variable: '--callout-info-border-width' },\n },\n interaction: {\n applicable: false,\n reason: 'a callout is a static box with no interactive role',\n },\n sketch: {\n style: 'pencil',\n parts: [{ part: 'root', fill: '--callout-info-surface', stroke: '--callout-info-border' }],\n },\n};\n","import type { ComponentContract } from '../componentContract';\n\nexport const cardContract: ComponentContract = {\n id: 'card',\n origin: 'system',\n root: 'root',\n parts: {\n root: '.card',\n header: '.card-header',\n icon: '.card-icon',\n title: '.card-title',\n body: '.card-body',\n },\n properties: [\n {\n paints: {\n root: {\n backgroundColor: '--card-default-surface',\n borderTopColor: '--card-default-border',\n borderTopWidth: '--card-default-border-width',\n borderRadius: '--card-default-radius',\n boxShadow: '--card-default-shadow',\n },\n header: {\n backgroundColor: '--card-default-header-surface',\n columnGap: '--card-default-header-gap',\n paddingTop: '--card-default-header-padding-top',\n paddingRight: '--card-default-header-padding-right',\n paddingBottom: '--card-default-header-padding-bottom',\n paddingLeft: '--card-default-header-padding-left',\n },\n icon: { fontSize: '--card-default-icon-size' },\n title: {\n color: '--card-default-title',\n fontFamily: '--card-default-title-font-family',\n fontSize: '--card-default-title-font-size',\n fontWeight: '--card-default-title-font-weight',\n lineHeight: '--card-default-title-line-height',\n },\n body: {\n color: '--card-default-body',\n fontFamily: '--card-default-body-font-family',\n fontSize: '--card-default-body-font-size',\n fontWeight: '--card-default-body-font-weight',\n lineHeight: '--card-default-body-line-height',\n paddingTop: '--card-default-body-padding-top',\n paddingRight: '--card-default-body-padding-right',\n paddingBottom: '--card-default-body-padding-bottom',\n paddingLeft: '--card-default-body-padding-left',\n },\n },\n },\n // `click({force:true})` leaves the pointer resting on `root`, so the\n // browser's real `.card:hover` rule applies afterward, no InteractionCase\n // needed. The editor's `.force-hover` reads these same gated tokens, so\n // the state entry below and this one have to agree.\n {\n setup: [{ kind: 'click', part: 'root' }],\n paints: {\n root: { borderTopColor: '--card-hover-border-enabled', boxShadow: '--card-hover-shadow-enabled' },\n },\n },\n // The per-side entry above drives `-padding-top` directly, which passes\n // regardless of what it's aliased to. This drives the base token instead,\n // proving the `-padding-top: var(--card-default-*-padding)` link itself.\n {\n paints: {\n header: { paddingTop: '--card-default-header-padding' },\n body: { paddingTop: '--card-default-body-padding' },\n },\n },\n ],\n states: [\n { state: 'default' },\n // The gate is off by default, so the hover tab has to show the resting\n // card. Naming the gated tokens is what pins that: `--card-hover-border`\n // resolves to `--border-neutral-strong` and would not match.\n {\n state: 'hover',\n forceClass: 'force-hover',\n paints: {\n root: { borderTopColor: '--card-hover-border-enabled', boxShadow: '--card-hover-shadow-enabled' },\n },\n },\n ],\n uncovered: {\n '--card-default-blur': 'consumed via backdrop-filter: blur(), which no probe covers',\n // `--card-hover-border-enabled` is an alias the editor repoints, so the\n // chain is not live and driving these two moves nothing. The runtime reads\n // them only through the per-instance `hover` prop (Card.svelte:47), which\n // the standardized preview never sets. Before force-hover honoured the\n // gate it read `--card-hover-border` directly and the hover state pinned\n // it; that path was the bug.\n '--card-hover-border': 'reachable only through the per-instance hover prop, which the preview does not set',\n '--card-hover-shadow': 'reachable only through the per-instance hover prop, which the preview does not set',\n },\n persistence: {\n cases: [\n {\n shape: 'token',\n variable: '--card-default-border-width',\n observe: { part: 'root', css: 'borderTopWidth' },\n },\n ],\n resetVariable: '--card-default-border-width',\n },\n theme: {\n theme: 'halloween',\n changed: ['--card-default-border-width', '--card-default-radius'],\n unchanged: ['--card-default-icon-size'],\n aliasedTo: {\n '--card-default-border-width': '--border-width-3',\n '--card-default-radius': '--radius-none',\n },\n observe: { part: 'root', css: 'borderTopWidth', variable: '--card-default-border-width' },\n },\n interaction: {\n applicable: false,\n reason: 'a card is a static container with no interactive role',\n },\n sketch: {\n style: 'pencil',\n parts: [\n { part: 'root', fill: '--card-default-surface', stroke: '--card-default-border' },\n { part: 'header', fill: '--card-default-header-surface' },\n ],\n },\n};\n","import type { ComponentContract } from '../componentContract';\n\nexport const codeSnippetContract: ComponentContract = {\n id: 'codesnippet',\n origin: 'system',\n root: 'root',\n parts: {\n root: '.codesnippet',\n code: '.code',\n copy: '.copy',\n },\n properties: [\n {\n paints: {\n root: {\n columnGap: '--codesnippet-gap',\n paddingTop: '--codesnippet-padding',\n backgroundColor: '--codesnippet-surface',\n borderTopColor: '--codesnippet-border',\n borderTopWidth: '--codesnippet-border-width',\n borderRadius: '--codesnippet-radius',\n },\n code: {\n color: '--codesnippet-code-text',\n fontFamily: '--codesnippet-code-font-family',\n fontSize: '--codesnippet-code-font-size',\n fontWeight: '--codesnippet-code-font-weight',\n lineHeight: '--codesnippet-code-line-height',\n },\n copy: {\n color: '--codesnippet-icon',\n fontSize: '--codesnippet-icon-size',\n },\n },\n },\n ],\n states: [\n { state: 'default' },\n {\n state: 'hover',\n forceClass: 'force-hover',\n paints: { copy: { color: '--codesnippet-hover-icon' } },\n },\n ],\n uncovered: {\n '--codesnippet-scrollbar-thumb': 'drawn via the ::-webkit-scrollbar-thumb pseudo-element and the scrollbar-color property, neither of which a probe can pin to one part',\n '--codesnippet-scrollbar-border-width': 'drives ::-webkit-scrollbar height, which a probe cannot read back verbatim',\n },\n persistence: {\n cases: [\n {\n shape: 'token',\n variable: '--codesnippet-border-width',\n observe: { part: 'root', css: 'borderTopWidth' },\n },\n ],\n resetVariable: '--codesnippet-border-width',\n },\n theme: {\n theme: 'halloween',\n changed: ['--codesnippet-border-width', '--codesnippet-radius', '--codesnippet-padding', '--codesnippet-scrollbar-border-width'],\n unchanged: ['--codesnippet-icon-size'],\n aliasedTo: {\n '--codesnippet-border-width': '--border-width-3',\n '--codesnippet-radius': '--radius-none',\n },\n observe: { part: 'root', css: 'borderTopWidth', variable: '--codesnippet-border-width' },\n },\n interaction: {\n part: 'copy',\n role: 'button',\n cases: [\n {\n name: 'clicking copy focuses the button',\n action: { kind: 'click', part: 'copy' },\n expect: { kind: 'focused', part: 'copy', value: true },\n },\n ],\n },\n sketch: {\n style: 'pencil',\n parts: [{ part: 'root', fill: '--codesnippet-surface', stroke: '--codesnippet-border' }],\n },\n};\n","import type { ComponentContract, PaintMap, SetupStep } from '../componentContract';\n\nfunction clickHover(): SetupStep[] {\n return [{ kind: 'control', selector: '.tabs-selectors.substrip .state-tab-btn:has-text(\"Hover\")' }];\n}\n\nfunction headerPaints(v: string, s: 'default' | 'hover'): PaintMap {\n const p = `--collapsiblesection-${v}-${s}`;\n const header: PaintMap[string] = {\n backgroundColor: `${p}-surface`,\n paddingTop: `${p}-padding`,\n };\n if (v === 'divider') {\n header.borderBottomColor = `${p}-hairline-color`;\n header.borderBottomWidth = `${p}-hairline-thickness`;\n }\n return {\n header,\n label: {\n color: `${p}-label`,\n fontFamily: `${p}-label-font-family`,\n fontSize: `${p}-label-font-size`,\n fontWeight: `${p}-label-font-weight`,\n lineHeight: `${p}-label-line-height`,\n },\n icon: { color: `${p}-icon`, fontSize: `${p}-icon-size` },\n };\n}\n\nexport const collapsibleSectionContract: ComponentContract = {\n id: 'collapsiblesection',\n origin: 'system',\n view: { variant: 'Container', state: 'Body' },\n root: 'root',\n parts: {\n root: '.es-root',\n header: '.section-header',\n label: '.section-label',\n icon: '.toggle-icon',\n body: '.section-content',\n toggleButton: '.section-toggle-button',\n },\n properties: [\n {\n variant: 'Container',\n state: 'Container',\n paints: {\n root: {\n borderTopColor: '--collapsiblesection-container-frame-border',\n borderTopWidth: '--collapsiblesection-container-frame-border-width',\n borderRadius: '--collapsiblesection-container-frame-radius',\n },\n },\n },\n { variant: 'Container', state: 'Header', paints: headerPaints('container', 'default') },\n { variant: 'Container', state: 'Header', setup: clickHover(), paints: headerPaints('container', 'hover') },\n {\n variant: 'Container',\n state: 'Body',\n paints: { body: { backgroundColor: '--collapsiblesection-container-expanded-surface', paddingTop: '--collapsiblesection-container-expanded-padding' } },\n },\n { variant: 'Chromeless', state: 'Header', paints: headerPaints('chromeless', 'default') },\n { variant: 'Chromeless', state: 'Header', setup: clickHover(), paints: headerPaints('chromeless', 'hover') },\n { variant: 'Chromeless', state: 'Body', paints: { body: { paddingTop: '--collapsiblesection-chromeless-expanded-padding' } } },\n { variant: 'With Divider', state: 'Header', paints: headerPaints('divider', 'default') },\n { variant: 'With Divider', state: 'Header', setup: clickHover(), paints: headerPaints('divider', 'hover') },\n { variant: 'With Divider', state: 'Body', paints: { body: { paddingTop: '--collapsiblesection-divider-expanded-padding' } } },\n ],\n states: [{ state: 'Container' }, { state: 'Header' }, { state: 'Body' }],\n persistence: {\n cases: [\n {\n shape: 'token',\n variant: 'Container',\n state: 'Container',\n variable: '--collapsiblesection-container-frame-border-width',\n observe: { part: 'root', css: 'borderTopWidth' },\n },\n ],\n resetVariable: '--collapsiblesection-container-frame-border-width',\n },\n theme: {\n theme: 'halloween',\n changed: ['--collapsiblesection-container-frame-border-width', '--collapsiblesection-container-frame-radius'],\n unchanged: ['--collapsiblesection-container-default-icon-size'],\n aliasedTo: {\n '--collapsiblesection-container-frame-border-width': '--border-width-3',\n '--collapsiblesection-container-frame-radius': '--radius-none',\n },\n observe: { part: 'root', css: 'borderTopWidth', variable: '--collapsiblesection-container-frame-border-width' },\n },\n interaction: {\n part: 'toggleButton',\n role: 'button',\n // No activation case: CollapsibleSectionEditor's preview drives `expanded`\n // off the active state tab and never wires `ontoggle` back to it, so\n // clicking the real button here can't move `aria-expanded` (same\n // constraint documented on ToggleEditor in toggle.ts).\n cases: [\n {\n name: 'clicking the toggle button focuses it',\n action: { kind: 'click', part: 'toggleButton' },\n expect: { kind: 'focused', part: 'toggleButton', value: true },\n },\n ],\n },\n sketch: {\n style: 'pencil',\n parts: [\n { part: 'root', stroke: '--collapsiblesection-container-frame-border' },\n { part: 'header', fill: '--collapsiblesection-container-default-surface' },\n { part: 'body', fill: '--collapsiblesection-container-expanded-surface' },\n ],\n },\n};\n","import type { ComponentContract, PaintMap } from '../componentContract';\n\ntype Variant =\n | 'primary' | 'accent' | 'neutral' | 'alternate' | 'canvas'\n | 'special' | 'success' | 'warning' | 'danger' | 'info';\n\nconst variants: Variant[] = [\n 'primary', 'accent', 'neutral', 'alternate', 'canvas',\n 'special', 'success', 'warning', 'danger', 'info',\n];\n\nfunction colorPaints(v: Variant): PaintMap {\n return {\n badge: {\n backgroundColor: `--corner-badge-${v}-surface`,\n borderTopColor: `--corner-badge-${v}-border`,\n color: `--corner-badge-${v}-text`,\n },\n };\n}\n\n/** Default anchor is bottom-right: TL=inner, TR=v-axis, BR=outer, BL=h-axis. */\nconst basePaints: PaintMap = {\n root: { bottom: '--corner-badge-margin' },\n badge: {\n borderTopLeftRadius: '--corner-badge-inner-radius',\n borderTopRightRadius: '--corner-badge-v-axis-radius',\n borderBottomRightRadius: '--corner-badge-outer-radius',\n borderBottomLeftRadius: '--corner-badge-h-axis-radius',\n paddingTop: '--corner-badge-padding',\n fontFamily: '--corner-badge-text-font-family',\n fontSize: '--corner-badge-text-font-size',\n fontWeight: '--corner-badge-text-font-weight',\n lineHeight: '--corner-badge-text-line-height',\n },\n};\n\nexport const cornerBadgeContract: ComponentContract = {\n id: 'cornerbadge',\n origin: 'system',\n view: { variant: 'Primary' },\n root: 'root',\n parts: {\n root: '.corner-badge',\n badge: '.corner-badge .badge',\n },\n properties: [\n {\n variant: 'Primary',\n paints: {\n root: basePaints.root,\n badge: { ...basePaints.badge, ...colorPaints('primary').badge },\n },\n },\n ...variants.filter((v) => v !== 'primary').map((v) => ({\n variant: v.charAt(0).toUpperCase() + v.slice(1),\n paints: colorPaints(v),\n })),\n ],\n states: [{ state: 'base' }, { state: 'colors' }],\n persistence: {\n cases: [\n {\n shape: 'token',\n variable: '--corner-badge-outer-radius',\n observe: { part: 'badge', css: 'borderBottomRightRadius' },\n },\n ],\n resetVariable: '--corner-badge-outer-radius',\n },\n theme: {\n theme: 'ocean',\n changed: ['--corner-badge-outer-radius', '--corner-badge-inner-radius', '--corner-badge-margin'],\n unchanged: ['--corner-badge-text-font-size'],\n aliasedTo: {\n '--corner-badge-outer-radius': '--radius-md',\n '--corner-badge-inner-radius': '--radius-md',\n },\n observe: { part: 'badge', css: 'borderBottomRightRadius', variable: '--corner-badge-outer-radius' },\n },\n interaction: {\n applicable: false,\n reason: 'a corner badge is a static marker with no interactive role',\n },\n sketch: {\n style: 'pencil',\n parts: [{ part: 'badge', fill: '--corner-badge-primary-surface', stroke: '--corner-badge-primary-border' }],\n },\n};\n","import type { ComponentContract } from '../componentContract';\n\nexport const dialogContract: ComponentContract = {\n id: 'dialog',\n origin: 'system',\n root: 'root',\n parts: {\n backdrop: '.dialog-backdrop',\n root: '.dialog',\n header: '.dialog-header',\n title: '.dialog-title',\n closeButton: '.dialog-close',\n body: '.dialog-body',\n footer: '.dialog-footer',\n confirmButton: '.dialog-footer-buttons button:last-of-type',\n cancelButton: '.dialog-footer-buttons button:first-of-type',\n },\n properties: [\n {\n paints: {\n backdrop: { backgroundColor: '--dialog-scrim-surface' },\n root: {\n backgroundColor: '--dialog-surface',\n borderTopColor: '--dialog-border',\n borderTopWidth: '--dialog-border-width',\n borderRadius: '--dialog-radius',\n boxShadow: '--dialog-shadow',\n },\n header: {\n backgroundColor: '--dialog-header-surface',\n borderBottomColor: '--dialog-header-divider',\n borderBottomWidth: '--dialog-header-divider-width',\n paddingTop: '--dialog-header-padding',\n },\n title: {\n color: '--dialog-title',\n fontFamily: '--dialog-title-font-family',\n fontSize: '--dialog-title-font-size',\n fontWeight: '--dialog-title-font-weight',\n lineHeight: '--dialog-title-line-height',\n },\n closeButton: {\n color: '--dialog-close-icon',\n fontSize: '--dialog-close-icon-size',\n },\n body: {\n paddingTop: '--dialog-body-padding',\n color: '--dialog-body',\n fontFamily: '--dialog-body-font-family',\n fontSize: '--dialog-body-font-size',\n fontWeight: '--dialog-body-font-weight',\n lineHeight: '--dialog-body-line-height',\n },\n footer: {\n borderTopColor: '--dialog-footer-divider',\n borderTopWidth: '--dialog-footer-divider-width',\n paddingTop: '--dialog-footer-padding',\n },\n },\n },\n ],\n states: [\n { state: 'scrim' },\n { state: 'dialog' },\n { state: 'header' },\n { state: 'body' },\n { state: 'footer' },\n ],\n uncovered: {\n '--dialog-blur': 'consumed via backdrop-filter: blur(), which no probe covers',\n },\n persistence: {\n cases: [\n {\n shape: 'token',\n state: 'dialog',\n variable: '--dialog-border-width',\n observe: { part: 'root', css: 'borderTopWidth' },\n },\n {\n shape: 'config',\n state: 'footer',\n control: '.button-variant-row:has(.property-label:text-is(\"right button\")) select',\n configKey: '--dialog-confirm-variant',\n observe: { part: 'confirmButton', css: 'backgroundColor' },\n },\n {\n shape: 'config',\n state: 'footer',\n control: '.button-variant-row:has(.property-label:text-is(\"left button\")) select',\n configKey: '--dialog-cancel-variant',\n observe: { part: 'cancelButton', css: 'backgroundColor' },\n },\n ],\n resetVariable: '--dialog-border-width',\n },\n theme: {\n theme: 'halloween',\n changed: ['--dialog-border-width', '--dialog-radius', '--dialog-header-padding', '--dialog-footer-padding'],\n unchanged: ['--dialog-close-icon-size', '--dialog-title-font-size'],\n aliasedTo: {\n '--dialog-border-width': '--border-width-4',\n '--dialog-radius': '--radius-none',\n },\n observe: { part: 'root', css: 'borderTopWidth', variable: '--dialog-border-width' },\n },\n interaction: {\n part: 'closeButton',\n role: 'button',\n cases: [\n {\n name: 'clicking the close icon focuses it',\n action: { kind: 'click', part: 'closeButton' },\n expect: { kind: 'focused', part: 'closeButton', value: true },\n },\n ],\n },\n sketch: {\n style: 'pencil',\n parts: [\n { part: 'root', fill: '--dialog-surface', stroke: '--dialog-border' },\n { part: 'header', fill: '--dialog-header-surface' },\n ],\n },\n};\n","import type { ComponentContract, PaintMap, PropertyExpectation } from '../componentContract';\n\ntype Variant = 'primary' | 'secondary' | 'outline' | 'success' | 'danger' | 'warning';\nconst variants: Variant[] = ['primary', 'secondary', 'outline', 'success', 'danger', 'warning'];\nconst cap = (v: string) => v.charAt(0).toUpperCase() + v.slice(1);\n\nfunction basePaints(v: Variant): PaintMap {\n return {\n root: {\n paddingTop: `--iconbutton-${v}-padding`,\n borderRadius: `--iconbutton-${v}-radius`,\n borderTopWidth: `--iconbutton-${v}-border-width`,\n },\n icon: { fontSize: `--iconbutton-${v}-icon-size` },\n };\n}\n\nfunction statePaints(v: Variant, s: 'default' | 'hover' | 'disabled'): PaintMap {\n const prefix = s === 'default' ? `--iconbutton-${v}` : `--iconbutton-${v}-${s}`;\n const iconVar = s === 'default' ? `--iconbutton-${v}-icon` : `--iconbutton-${v}-${s}-icon`;\n return {\n root: { backgroundColor: `${prefix}-surface`, borderTopColor: `${prefix}-border` },\n icon: { color: iconVar },\n };\n}\n\nconst otherVariantProperties: PropertyExpectation[] = variants\n .filter((v) => v !== 'primary')\n .flatMap((v) => [\n { variant: cap(v), state: 'base', paints: basePaints(v) },\n { variant: cap(v), state: 'default', paints: statePaints(v, 'default') },\n { variant: cap(v), state: 'hover', paints: statePaints(v, 'hover') },\n { variant: cap(v), state: 'disabled', paints: statePaints(v, 'disabled') },\n ]);\n\nexport const iconButtonContract: ComponentContract = {\n id: 'iconbutton',\n origin: 'system',\n view: { variant: 'Primary' },\n root: 'root',\n parts: {\n root: '.icon-button',\n icon: '.icon-button i',\n },\n properties: [\n { variant: 'Primary', state: 'base', paints: basePaints('primary') },\n ...otherVariantProperties,\n { variant: 'Outline', state: 'active', paints: { root: { backgroundColor: '--iconbutton-outline-active-surface' } } },\n {\n setup: [{ kind: 'control', selector: '.preview-actions select', value: 'small' }],\n paints: {\n root: { paddingTop: '--iconbutton-small-padding' },\n icon: { fontSize: '--iconbutton-small-icon-size' },\n },\n },\n ],\n states: [\n { state: 'base' },\n { state: 'default', paints: statePaints('primary', 'default') },\n { state: 'hover', forceClass: 'force-hover', paints: statePaints('primary', 'hover') },\n {\n state: 'disabled',\n attributes: { root: { disabled: '' } },\n paints: statePaints('primary', 'disabled'),\n },\n ],\n uncovered: {\n '--iconbutton-hover-tint': 'consumed inside a background-image tint wash, never appearing verbatim in a computed style',\n '--iconbutton-hover-tint-enabled': 'the gate for the tint wash above, same limitation',\n },\n persistence: {\n cases: [\n {\n shape: 'token',\n variant: 'Primary',\n state: 'base',\n variable: '--iconbutton-primary-border-width',\n observe: { part: 'root', css: 'borderTopWidth' },\n },\n ],\n resetVariable: '--iconbutton-primary-border-width',\n },\n theme: {\n theme: 'halloween',\n changed: ['--iconbutton-primary-border-width', '--iconbutton-primary-radius', '--iconbutton-primary-padding'],\n unchanged: ['--iconbutton-primary-icon-size'],\n aliasedTo: {\n '--iconbutton-primary-border-width': '--border-width-3',\n '--iconbutton-primary-radius': '--radius-none',\n },\n observe: { part: 'root', css: 'borderTopWidth', variable: '--iconbutton-primary-border-width' },\n },\n interaction: {\n part: 'root',\n role: 'button',\n cases: [\n {\n name: 'clicking an icon button focuses it',\n action: { kind: 'click', part: 'root' },\n expect: { kind: 'focused', part: 'root', value: true },\n },\n ],\n },\n sketch: {\n style: 'pencil',\n parts: [{ part: 'root', fill: '--iconbutton-primary-surface', stroke: '--iconbutton-primary-border' }],\n },\n};\n","import type { ComponentContract } from '../componentContract';\n\nexport const imageContract: ComponentContract = {\n id: 'image',\n origin: 'system',\n root: 'root',\n parts: {\n root: '.image',\n img: '.image img',\n },\n properties: [\n {\n paints: {\n root: {\n borderTopColor: '--image-default-border',\n borderTopWidth: '--image-default-border-width',\n borderRadius: '--image-default-radius',\n boxShadow: '--image-default-shadow',\n },\n },\n },\n ],\n states: {\n applicable: false,\n reason: 'the editor renders one token group (image) with no state strip',\n },\n uncovered: {\n '--image-zoom-scale': 'consumed inside transform: scale(), never appears verbatim in a computed style',\n },\n persistence: {\n cases: [\n {\n shape: 'token',\n variable: '--image-default-border-width',\n observe: { part: 'root', css: 'borderTopWidth' },\n },\n {\n shape: 'literal',\n control: 'label.zoom-enable:has-text(\"Use zoom on hover\") input',\n variable: '--image-zoom-enabled',\n observe: { part: 'img', css: 'transform' },\n },\n ],\n resetVariable: '--image-default-border-width',\n },\n theme: {\n theme: 'halloween',\n changed: ['--image-default-border-width', '--image-default-radius'],\n unchanged: ['--image-default-shadow', '--image-zoom-scale'],\n aliasedTo: {\n '--image-default-border-width': '--border-width-3',\n '--image-default-radius': '--radius-none',\n },\n observe: { part: 'root', css: 'borderTopWidth', variable: '--image-default-border-width' },\n },\n interaction: {\n applicable: false,\n reason: 'a framed picture carries no interactive role; the zoom effect is a hover transform, not an action',\n },\n sketch: {\n style: 'pencil',\n parts: [{ part: 'root', stroke: '--image-default-border' }],\n },\n};\n","import type { ComponentContract } from '../componentContract';\n\nexport const imageLightboxContract: ComponentContract = {\n id: 'imagelightbox',\n origin: 'system',\n view: { setup: [{ kind: 'click', part: 'thumb' }] },\n root: 'root',\n parts: {\n root: '.image-lightbox-wrapper',\n thumb: '.image-lightbox-thumb',\n overlay: { selector: '.image-lightbox-overlay', portal: true },\n stage: { selector: '.image-lightbox-stage', portal: true },\n closeButton: { selector: '.image-lightbox-close', portal: true },\n closeIcon: { selector: '.image-lightbox-close svg', portal: true },\n prevButton: { selector: '.image-lightbox-nav-prev', portal: true },\n nextButton: { selector: '.image-lightbox-nav-next', portal: true },\n counter: { selector: '.image-lightbox-counter', portal: true },\n toolbar: { selector: '.image-lightbox-toolbar', portal: true },\n },\n properties: [\n {\n paints: {\n thumb: {\n backgroundColor: '--imagelightbox-tile-surface',\n borderTopColor: '--imagelightbox-tile-border',\n borderTopWidth: '--imagelightbox-tile-border-width',\n borderRadius: '--imagelightbox-tile-radius',\n boxShadow: '--imagelightbox-tile-shadow',\n },\n overlay: { backgroundColor: '--imagelightbox-overlay-surface' },\n closeButton: {\n backgroundColor: '--imagelightbox-chrome-surface',\n borderTopColor: '--imagelightbox-chrome-border',\n borderTopWidth: '--imagelightbox-chrome-border-width',\n borderRadius: '--imagelightbox-chrome-radius',\n color: '--imagelightbox-chrome-icon',\n },\n closeIcon: { stroke: '--imagelightbox-chrome-icon' },\n },\n },\n // `click({force:true})` leaves the pointer resting on `nextButton`, so the\n // browser's real `.image-lightbox-nav:hover` rule applies afterward.\n // Unlike `closeButton`, clicking it does not close the modal.\n {\n setup: [{ kind: 'click', part: 'nextButton' }],\n paints: { nextButton: { backgroundColor: '--imagelightbox-chrome-hover-surface' } },\n },\n ],\n states: [{ state: 'tile' }, { state: 'overlay' }, { state: 'chrome' }],\n persistence: {\n cases: [\n {\n // No `state` here: \"tile\" is the panel's own default tab, and every\n // `selectView` re-clicks whatever `state` names even when it is\n // already active. While the modal is open, that click's target sits\n // under the overlay's full-viewport hit area, so skipping it avoids\n // an avoidable trip through the same close-on-click behavior `setup`\n // is about to use on purpose. `setup` closes the modal the\n // contract-level view opened so the \"tile\" token control (behind the\n // still-open overlay otherwise) is reachable, by pressing Escape on\n // `root` rather than clicking `closeButton`. `assertPersistence`\n // replays `setup` twice back to back (once directly, once inside\n // `driveControl`). Measured against a live page: `closeLightbox`'s\n // `open = false` write happens inside an animation `onfinish`\n // callback that a `settle()` cycle doesn't durably wait out, so\n // `closeButton` — a portaled element that unmounts once that callback\n // fires — can still be gone, still be there, or about to vanish\n // mid-click, depending on exactly when it lands relative to the\n // harness's round trips. A second `closeButton` click inherits that\n // uncertainty. Leading with a `thumb` click to guarantee a target for\n // the `closeButton` click that follows inherits it from the other\n // side instead: `openLightbox`'s own `if (open) return` reads the\n // same not-yet-written flag, so it can no-op rather than reopen, and\n // nothing then re-drives it — reproduced empirically, a deterministic\n // dead end. Escape on `root` avoids both: `root` is never portaled,\n // so the action always has a target, and replaying it before the\n // first press has finished closing re-enters `closeLightbox` rather\n // than skipping it, so every replay drives the component strictly\n // further toward closed. (Escape also collapses the components\n // editor's own drawer, but nothing else this obligation reads lives\n // there, and `reopen()` between obligations restores it.)\n shape: 'token',\n setup: [{ kind: 'press', part: 'root', key: 'Escape' }],\n variable: '--imagelightbox-tile-border-width',\n observe: { part: 'thumb', css: 'borderTopWidth' },\n },\n ],\n resetVariable: '--imagelightbox-tile-border-width',\n },\n theme: {\n // Closes the modal the contract-level setup opened: the Theme Picker\n // trigger lives in the chrome behind it, and the still-open overlay\n // blocks clicks the same way it does for the persistence case above.\n // Unlike that case, `assertThemeProjection` runs `setup` only once, so\n // the double-replay hazard doesn't apply and a plain `closeButton` click\n // is enough — and it has to be a click, not the Escape this contract's\n // persistence case uses, because Escape also collapses the drawer this\n // obligation's own `.theme-name-trigger` lives in.\n setup: [{ kind: 'click', part: 'closeButton' }],\n theme: 'halloween',\n changed: ['--imagelightbox-tile-border-width', '--imagelightbox-tile-radius', '--imagelightbox-chrome-border-width', '--imagelightbox-chrome-radius'],\n unchanged: ['--imagelightbox-tile-shadow'],\n aliasedTo: {\n '--imagelightbox-tile-border-width': '--border-width-2',\n '--imagelightbox-tile-radius': '--radius-none',\n },\n observe: { part: 'thumb', css: 'borderTopWidth', variable: '--imagelightbox-tile-border-width' },\n },\n interaction: {\n part: 'nextButton',\n role: 'button',\n cases: [\n {\n name: 'clicking the next chevron focuses it',\n action: { kind: 'click', part: 'nextButton' },\n expect: { kind: 'focused', part: 'nextButton', value: true },\n },\n ],\n },\n // `overlay` and `closeButton` are inside `.image-lightbox-modal`, which\n // `use:portal` moves to `document.body`. The standardized preview scopes\n // `data-sketch` to its own `.sketch-scope` wrapper rather than the document\n // root, so a portaled part sits outside the CSS ancestor match this contract\n // can observe, even though PART_SPECS draws it on a real host page (where\n // Sketch mode's scope is the page root). `thumb` never portals, so it is the\n // part this contract can pin.\n sketch: {\n style: 'pencil',\n parts: [\n { part: 'thumb', fill: '--imagelightbox-tile-surface', stroke: '--imagelightbox-tile-border' },\n ],\n },\n};\n","import type { ComponentContract, PaintMap } from '../componentContract';\n\ntype Btn = 'save' | 'cancel';\ntype BtnState = 'default' | 'hover';\n\nfunction statePaints(btn: Btn, s: BtnState): PaintMap {\n const p = `--inlineeditactions-${btn}-${s}`;\n const button = btn === 'save' ? 'saveBtn' : 'cancelBtn';\n return {\n // `-icon-size` lands as `font-size` on the button itself (the icon glyph\n // inherits it), not on a separate icon element — and a declared \"icon\"\n // part here would be the button's own `<i class=\"fas ...\">`, whose native\n // ::before glyph content is never 'none', which reads as \"drawn\" to\n // `assertNoSketchPaint` regardless of sketch mode.\n [button]: {\n backgroundColor: `${p}-surface`,\n borderTopColor: `${p}-border`,\n borderTopWidth: `${p}-border-width`,\n borderRadius: `${p}-radius`,\n paddingTop: `${p}-padding`,\n color: `${p}-text`,\n fontSize: `${p}-icon-size`,\n },\n };\n}\n\nexport const inlineEditActionsContract: ComponentContract = {\n id: 'inlineeditactions',\n origin: 'system',\n view: { variant: 'Save button' },\n root: 'saveBtn',\n parts: {\n saveBtn: '.save-btn',\n cancelBtn: '.cancel-btn',\n },\n // Every entry names its own `state` explicitly. VariantGroup mirrors the\n // last-clicked state tab across sibling variants (for the linked-block\n // chart), so switching variants without repeating `state` would silently\n // carry the previous entry's tab forward.\n properties: [\n { variant: 'Save button', state: 'default', paints: statePaints('save', 'default') },\n { variant: 'Save button', state: 'hover', paints: statePaints('save', 'hover') },\n { variant: 'Cancel button', state: 'default', paints: statePaints('cancel', 'default') },\n { variant: 'Cancel button', state: 'hover', paints: statePaints('cancel', 'hover') },\n ],\n states: [\n { state: 'default' },\n { state: 'hover' },\n ],\n persistence: {\n cases: [\n {\n shape: 'token',\n variable: '--inlineeditactions-save-default-border-width',\n observe: { part: 'saveBtn', css: 'borderTopWidth' },\n },\n ],\n resetVariable: '--inlineeditactions-save-default-border-width',\n },\n theme: {\n theme: 'halloween',\n changed: ['--inlineeditactions-save-default-border-width', '--inlineeditactions-save-default-radius'],\n unchanged: ['--inlineeditactions-save-default-icon-size'],\n aliasedTo: {\n '--inlineeditactions-save-default-border-width': '--border-width-2',\n '--inlineeditactions-save-default-radius': '--radius-none',\n },\n observe: { part: 'saveBtn', css: 'borderTopWidth', variable: '--inlineeditactions-save-default-border-width' },\n },\n interaction: {\n part: 'saveBtn',\n role: 'button',\n cases: [\n {\n name: 'clicking save focuses the button',\n action: { kind: 'click', part: 'saveBtn' },\n expect: { kind: 'focused', part: 'saveBtn', value: true },\n },\n ],\n },\n sketch: {\n style: 'pencil',\n parts: [\n { part: 'saveBtn', fill: '--inlineeditactions-save-default-surface', stroke: '--inlineeditactions-save-default-border' },\n { part: 'cancelBtn', fill: '--inlineeditactions-cancel-default-surface', stroke: '--inlineeditactions-cancel-default-border' },\n ],\n },\n};\n","import type { ComponentContract, SetupStep } from '../componentContract';\n\n// The contract-level setup checks \"Error\" so `errorMsg` resolves at the\n// baseline view. `.invalid` beats `.force-focus` on outline color/width (the\n// error state wins the combination), so any check of the plain focused\n// outline has to undo it explicitly — `setup` replaces, it does not merge.\nconst noError: SetupStep[] = [\n { kind: 'control', selector: '.canvas-toolbar-select', value: 'password' },\n { kind: 'control', selector: '.toolbar-check:has-text(\"Error\") input', check: false },\n];\n\nexport const inputContract: ComponentContract = {\n id: 'input',\n origin: 'system',\n view: {\n setup: [\n { kind: 'control', selector: '.canvas-toolbar-select', value: 'password' },\n { kind: 'control', selector: '.toolbar-check:has-text(\"Error\") input', check: true },\n ],\n },\n root: 'root',\n parts: {\n root: '.input-field',\n field: '.input-control',\n label: '.input-label',\n icon: '.input-icon',\n toggleButton: '.input-icon-button',\n hint: '.input-hint',\n errorMsg: '.input-error',\n placeholder: { selector: '.input-control', pseudo: '::placeholder' },\n },\n properties: [\n {\n paints: {\n root: { rowGap: '--input-gap' },\n field: {\n borderRadius: '--input-radius',\n borderTopWidth: '--input-border-width',\n paddingTop: '--input-padding',\n backgroundColor: '--input-default-surface',\n borderTopColor: '--input-default-border',\n color: '--input-default-text',\n fontFamily: '--input-default-text-font-family',\n fontSize: '--input-default-text-font-size',\n fontWeight: '--input-default-text-font-weight',\n lineHeight: '--input-default-text-line-height',\n },\n icon: {\n color: '--input-default-icon',\n fontSize: '--input-default-icon-size',\n },\n label: {\n color: '--input-label',\n fontFamily: '--input-label-font-family',\n fontSize: '--input-label-font-size',\n fontWeight: '--input-label-font-weight',\n lineHeight: '--input-label-line-height',\n },\n hint: {\n color: '--input-hint',\n fontFamily: '--input-hint-font-family',\n fontSize: '--input-hint-font-size',\n fontWeight: '--input-hint-font-weight',\n lineHeight: '--input-hint-line-height',\n },\n placeholder: { color: '--input-default-placeholder' },\n },\n },\n // `assertPaintsFromToken` (here) drives a controlled pixel probe, so a\n // unitless line-height round-trips fine. `assertPaintMap` (states, below)\n // reads the real, already-resolved value through `normalize()`, which\n // cannot recompute a unitless multiplier outside the field's own\n // font-size context, so these three stay out of `states`.\n {\n state: 'focused',\n setup: noError,\n paints: { field: { lineHeight: '--input-focused-text-line-height' } },\n },\n {\n state: 'disabled',\n setup: noError,\n paints: { field: { lineHeight: '--input-disabled-text-line-height' } },\n },\n {\n state: 'error',\n paints: { errorMsg: { lineHeight: '--input-error-line-height' } },\n },\n ],\n states: [\n { state: 'field' },\n { state: 'default' },\n {\n state: 'focused',\n forceClass: 'force-focus',\n setup: noError,\n paints: {\n field: {\n backgroundColor: '--input-focused-surface',\n outlineColor: '--input-focused-border',\n outlineWidth: '--input-focused-border-width',\n color: '--input-focused-text',\n fontFamily: '--input-focused-text-font-family',\n fontSize: '--input-focused-text-font-size',\n fontWeight: '--input-focused-text-font-weight',\n },\n icon: { color: '--input-focused-icon', fontSize: '--input-focused-icon-size' },\n },\n },\n {\n state: 'disabled',\n attributes: { field: { disabled: '' } },\n paints: {\n field: {\n backgroundColor: '--input-disabled-surface',\n borderTopColor: '--input-disabled-border',\n color: '--input-disabled-text',\n fontFamily: '--input-disabled-text-font-family',\n fontSize: '--input-disabled-text-font-size',\n fontWeight: '--input-disabled-text-font-weight',\n },\n icon: { color: '--input-disabled-icon', fontSize: '--input-disabled-icon-size' },\n },\n },\n { state: 'label' },\n { state: 'hint' },\n {\n state: 'error',\n paints: {\n field: { outlineColor: '--input-error-border', outlineWidth: '--input-error-border-width' },\n errorMsg: {\n color: '--input-error',\n fontFamily: '--input-error-font-family',\n fontSize: '--input-error-font-size',\n fontWeight: '--input-error-font-weight',\n },\n },\n },\n ],\n persistence: {\n cases: [\n {\n shape: 'token',\n variable: '--input-border-width',\n observe: { part: 'field', css: 'borderTopWidth' },\n },\n ],\n resetVariable: '--input-border-width',\n },\n theme: {\n theme: 'halloween',\n changed: ['--input-border-width', '--input-radius', '--input-padding'],\n unchanged: ['--input-label-font-size', '--input-default-icon-size'],\n aliasedTo: {\n '--input-border-width': '--border-width-3',\n '--input-radius': '--radius-none',\n },\n observe: { part: 'field', css: 'borderTopWidth', variable: '--input-border-width' },\n },\n interaction: {\n part: 'field',\n role: 'textbox',\n cases: [\n {\n name: 'typing writes into the field',\n action: { kind: 'type', part: 'field', text: 'probe' },\n expect: { kind: 'valueChanges', part: 'field' },\n },\n {\n name: 'clicking the reveal toggle presses it',\n action: { kind: 'click', part: 'toggleButton' },\n expect: { kind: 'attribute', part: 'toggleButton', name: 'aria-pressed', value: 'true' },\n },\n {\n name: 'a disabled field refuses focus',\n state: 'disabled',\n action: { kind: 'click', part: 'field' },\n expect: { kind: 'focused', part: 'field', value: false },\n },\n ],\n },\n sketch: {\n style: 'pencil',\n parts: [{ part: 'field', fill: '--input-default-surface', stroke: '--input-default-border' }],\n },\n};\n","import type { ComponentContract, PaintMap } from '../componentContract';\n\n/**\n * `full` adds `lineHeight`. `assertPaintsFromToken` (properties) drives a\n * controlled pixel probe, so a unitless line-height round-trips fine there;\n * `assertPaintMap` (states) reads the token's real, already-resolved value\n * through `normalize()`, which cannot recompute a unitless multiplier outside\n * the item's own font-size context. States skip it; properties cover it.\n */\nfunction itemTextPaints(s: string, full: boolean): PaintMap[string] {\n const paints: PaintMap[string] = {\n color: `--menuselect-${s}-text`,\n fontFamily: `--menuselect-${s}-text-font-family`,\n fontSize: `--menuselect-${s}-text-font-size`,\n fontWeight: `--menuselect-${s}-text-font-weight`,\n };\n if (full) paints.lineHeight = `--menuselect-${s}-text-line-height`;\n return paints;\n}\n\nexport const menuSelectContract: ComponentContract = {\n id: 'menuselect',\n origin: 'system',\n view: { state: 'selected item' },\n root: 'root',\n parts: {\n root: '.menuselect',\n item: '.menuselect-item',\n icon: '.menuselect-item .menuselect-icon',\n label: '.menuselect-item .menuselect-label',\n selectedItem: '.menuselect-item.selected',\n selectedIcon: '.menuselect-item.selected .menuselect-icon',\n indicator: '.menuselect-indicator',\n disabledItem: '.menuselect-item:disabled',\n disabledIcon: '.menuselect-item:disabled .menuselect-icon',\n },\n properties: [\n {\n state: 'menu',\n paints: {\n root: {\n backgroundColor: '--menuselect-menu-surface',\n borderTopColor: '--menuselect-menu-border',\n borderTopWidth: '--menuselect-menu-border-width',\n borderRadius: '--menuselect-menu-radius',\n boxShadow: '--menuselect-menu-shadow',\n rowGap: '--menuselect-menu-gap',\n paddingTop: '--menuselect-menu-padding',\n },\n item: {\n borderRadius: '--menuselect-item-radius',\n paddingTop: '--menuselect-item-padding',\n },\n },\n },\n { state: 'default item', paints: { item: itemTextPaints('default', true) } },\n { state: 'hover item', paints: { item: itemTextPaints('hover', true) } },\n { state: 'selected item', paints: { selectedItem: itemTextPaints('selected', true) } },\n { state: 'disabled item', paints: { disabledItem: itemTextPaints('disabled', true) } },\n ],\n states: [\n { state: 'menu' },\n {\n state: 'default item',\n paints: {\n item: { backgroundColor: '--menuselect-default-surface', ...itemTextPaints('default', false) },\n icon: { color: '--menuselect-default-icon', fontSize: '--menuselect-default-icon-size' },\n },\n },\n {\n state: 'hover item',\n paints: {\n item: { backgroundColor: '--menuselect-hover-surface', ...itemTextPaints('hover', false) },\n icon: { color: '--menuselect-hover-icon', fontSize: '--menuselect-hover-icon-size' },\n },\n },\n {\n state: 'selected item',\n paints: {\n selectedItem: { backgroundColor: '--menuselect-selected-surface', ...itemTextPaints('selected', false) },\n selectedIcon: { color: '--menuselect-selected-icon', fontSize: '--menuselect-selected-icon-size' },\n indicator: { color: '--menuselect-selected-indicator' },\n },\n },\n {\n state: 'disabled item',\n attributes: { disabledItem: { disabled: '' } },\n paints: {\n disabledItem: { backgroundColor: '--menuselect-disabled-surface', ...itemTextPaints('disabled', false) },\n disabledIcon: { color: '--menuselect-disabled-icon', fontSize: '--menuselect-disabled-icon-size' },\n },\n },\n ],\n uncovered: {\n '--menuselect-hover-tint': 'consumed inside a background-image tint wash, never appearing verbatim in a computed style',\n '--menuselect-hover-tint-enabled': 'the gate for the tint wash above, same limitation',\n },\n persistence: {\n cases: [\n {\n shape: 'token',\n state: 'menu',\n variable: '--menuselect-menu-border-width',\n observe: { part: 'root', css: 'borderTopWidth' },\n },\n ],\n resetVariable: '--menuselect-menu-border-width',\n },\n theme: {\n theme: 'halloween',\n changed: ['--menuselect-menu-border-width', '--menuselect-menu-radius', '--menuselect-item-padding'],\n unchanged: ['--menuselect-default-icon-size', '--menuselect-default-text-font-size'],\n aliasedTo: {\n '--menuselect-menu-border-width': '--border-width-3',\n '--menuselect-menu-radius': '--radius-none',\n },\n observe: { part: 'root', css: 'borderTopWidth', variable: '--menuselect-menu-border-width' },\n },\n interaction: {\n part: 'item',\n role: 'option',\n cases: [\n {\n name: 'clicking an item selects it',\n action: { kind: 'click', part: 'item' },\n expect: { kind: 'attribute', part: 'item', name: 'aria-selected', value: 'true' },\n },\n ],\n },\n sketch: {\n style: 'pencil',\n parts: [{ part: 'root', fill: '--menuselect-menu-surface', stroke: '--menuselect-menu-border' }],\n },\n};\n","import type { ComponentContract, PaintMap } from '../componentContract';\n\ntype Variant = 'info' | 'success' | 'warning' | 'danger';\nconst variants: Variant[] = ['info', 'success', 'warning', 'danger'];\n\nfunction paintsFor(v: Variant): PaintMap {\n return {\n root: {\n borderTopColor: `--notification-${v}-border`,\n borderTopWidth: `--notification-${v}-border-width`,\n borderRadius: `--notification-${v}-radius`,\n color: `--notification-${v}-text`,\n fontFamily: `--notification-${v}-text-font-family`,\n fontSize: `--notification-${v}-text-font-size`,\n fontWeight: `--notification-${v}-text-font-weight`,\n lineHeight: `--notification-${v}-text-line-height`,\n },\n header: {\n backgroundColor: `--notification-${v}-surface`,\n paddingTop: `--notification-${v}-padding`,\n },\n icon: {\n color: `--notification-${v}-icon`,\n fontSize: `--notification-${v}-icon-size`,\n },\n title: {\n color: `--notification-${v}-title`,\n fontFamily: `--notification-${v}-title-font-family`,\n fontSize: `--notification-${v}-title-font-size`,\n fontWeight: `--notification-${v}-title-font-weight`,\n lineHeight: `--notification-${v}-title-line-height`,\n },\n actionBackdrop: { backgroundColor: `--notification-${v}-action-surface` },\n };\n}\n\nexport const notificationContract: ComponentContract = {\n id: 'notification',\n origin: 'system',\n view: {\n variant: 'Info',\n setup: [{ kind: 'control', selector: '.toolbar-check:has-text(\"Header button\") input', check: true }],\n },\n root: 'root',\n parts: {\n root: '.notification',\n header: '.notification-header',\n icon: '.notification-header i',\n title: '.notification-title',\n actionBackdrop: '.action-button-backdrop',\n actionButton: '.action-button-backdrop button',\n },\n properties: variants.map((v) => ({ variant: v.charAt(0).toUpperCase() + v.slice(1), paints: paintsFor(v) })),\n states: [{ state: 'base' }, { state: 'colors' }],\n persistence: {\n cases: [\n {\n shape: 'token',\n variable: '--notification-info-border-width',\n observe: { part: 'root', css: 'borderTopWidth' },\n },\n ],\n resetVariable: '--notification-info-border-width',\n },\n theme: {\n theme: 'halloween',\n changed: ['--notification-info-border-width', '--notification-info-radius', '--notification-info-padding'],\n unchanged: ['--notification-info-icon-size'],\n aliasedTo: {\n '--notification-info-border-width': '--border-width-3',\n '--notification-info-radius': '--radius-none',\n },\n observe: { part: 'root', css: 'borderTopWidth', variable: '--notification-info-border-width' },\n },\n interaction: {\n part: 'actionButton',\n role: 'button',\n cases: [\n {\n name: 'clicking the header action focuses it',\n action: { kind: 'click', part: 'actionButton' },\n expect: { kind: 'focused', part: 'actionButton', value: true },\n },\n ],\n },\n sketch: {\n style: 'pencil',\n parts: [\n { part: 'root', stroke: '--notification-info-border' },\n { part: 'header', fill: '--notification-info-surface' },\n ],\n },\n};\n","import type { ComponentContract } from '../componentContract';\n\nexport const panelContract: ComponentContract = {\n id: 'panel',\n origin: 'system',\n root: 'root',\n parts: {\n root: '.panel',\n },\n properties: [\n {\n paints: {\n root: {\n borderTopColor: '--panel-frame-border',\n borderTopWidth: '--panel-frame-border-width',\n borderRadius: '--panel-frame-radius',\n backgroundImage: '--panel-stage-surface',\n paddingTop: '--panel-stage-padding',\n paddingLeft: '--panel-stage-inline-padding',\n columnGap: '--panel-stage-gap',\n },\n },\n },\n ],\n states: {\n applicable: false,\n reason: 'the editor renders one token group (default) with no state strip',\n },\n persistence: {\n cases: [\n {\n shape: 'token',\n variable: '--panel-frame-border-width',\n observe: { part: 'root', css: 'borderTopWidth' },\n },\n {\n shape: 'gradient',\n variable: '--panel-stage-surface',\n observe: { part: 'root', css: 'backgroundColor' },\n },\n ],\n resetVariable: '--panel-frame-border-width',\n },\n theme: {\n theme: 'halloween',\n changed: ['--panel-frame-border-width', '--panel-frame-radius', '--panel-stage-inline-padding', '--panel-stage-padding'],\n unchanged: ['--panel-stage-gap'],\n aliasedTo: {\n '--panel-frame-border-width': '--border-width-3',\n '--panel-frame-radius': '--radius-none',\n },\n observe: { part: 'root', css: 'borderTopWidth', variable: '--panel-frame-border-width' },\n },\n interaction: {\n applicable: false,\n reason: 'a framed container carries no interactive role',\n },\n sketch: {\n style: 'pencil',\n parts: [{ part: 'root', fill: '--panel-stage-surface', stroke: '--panel-frame-border' }],\n },\n};\n","import type { ComponentContract } from '../componentContract';\n\nexport const progressBarContract: ComponentContract = {\n id: 'progressbar',\n origin: 'system',\n root: 'root',\n parts: {\n root: '.progress',\n track: '.progress-track',\n fill: '.progress-fill',\n label: '.progress-label > span:not(.progress-value)',\n value: '.progress-value',\n },\n properties: [\n {\n paints: {\n root: { rowGap: '--progressbar-label-gap' },\n track: {\n backgroundColor: '--progressbar-track-surface',\n borderTopColor: '--progressbar-track-border',\n borderTopWidth: '--progressbar-track-border-width',\n borderRadius: '--progressbar-radius',\n height: '--progressbar-track-height',\n },\n fill: { backgroundColor: '--progressbar-fill' },\n label: {\n color: '--progressbar-label',\n fontFamily: '--progressbar-label-font-family',\n fontSize: '--progressbar-label-font-size',\n fontWeight: '--progressbar-label-font-weight',\n lineHeight: '--progressbar-label-line-height',\n },\n value: {\n color: '--progressbar-value',\n fontFamily: '--progressbar-value-font-family',\n fontSize: '--progressbar-value-font-size',\n fontWeight: '--progressbar-value-font-weight',\n lineHeight: '--progressbar-value-line-height',\n },\n },\n },\n ],\n states: {\n applicable: false,\n reason: 'the editor renders one token group (default) with no state strip',\n },\n persistence: {\n cases: [\n {\n shape: 'token',\n variable: '--progressbar-track-border-width',\n observe: { part: 'track', css: 'borderTopWidth' },\n },\n ],\n resetVariable: '--progressbar-track-border-width',\n },\n theme: {\n theme: 'halloween',\n changed: ['--progressbar-radius', '--progressbar-track-border-width'],\n unchanged: ['--progressbar-track-height'],\n aliasedTo: {\n '--progressbar-radius': '--radius-none',\n '--progressbar-track-border-width': '--border-width-3',\n },\n observe: { part: 'track', css: 'borderTopWidth', variable: '--progressbar-track-border-width' },\n },\n interaction: {\n applicable: false,\n reason: 'a progress readout carries no interactive role',\n },\n sketch: {\n style: 'pencil',\n parts: [{ part: 'track', fill: '--progressbar-track-surface', stroke: '--progressbar-track-border' }],\n },\n};\n","import type { ComponentContract, PaintMap } from '../componentContract';\n\n/**\n * `assertPaintsFromToken` (used by `properties`) drives a controlled probe\n * value, so a percentage dot-size or a unitless line-height round-trips fine.\n * `assertPaintMap` (used by `states`) instead reads the token's real, already\n * -resolved value straight through `normalize()`, which cannot recompute a\n * percentage or a unitless multiplier outside the original layout context.\n * States therefore skip `dotFill.width` and `label.lineHeight`.\n */\nfunction statePaints(s: 'default' | 'hover' | 'active', full: boolean): PaintMap {\n const dotFill: PaintMap[string] = { backgroundColor: `--radiobutton-${s}-dot-fill` };\n if (full) dotFill.width = `--radiobutton-${s}-dot-size`;\n const label: PaintMap[string] = {\n color: `--radiobutton-${s}-label`,\n fontFamily: `--radiobutton-${s}-label-font-family`,\n fontSize: `--radiobutton-${s}-label-font-size`,\n fontWeight: `--radiobutton-${s}-label-font-weight`,\n };\n if (full) label.lineHeight = `--radiobutton-${s}-label-line-height`;\n return {\n dot: {\n borderTopColor: `--radiobutton-${s}-dot-border-color`,\n borderTopWidth: `--radiobutton-${s}-dot-border-width`,\n },\n dotFill,\n label,\n };\n}\n\nexport const radioButtonContract: ComponentContract = {\n id: 'radiobutton',\n origin: 'system',\n root: 'root',\n parts: {\n root: '.radio-button',\n dot: '.radio-dot',\n dotFill: { selector: '.radio-dot-fill' },\n label: '.radio-label',\n },\n properties: [\n { paints: statePaints('default', true) },\n { state: 'hover', paints: statePaints('hover', true) },\n { state: 'active', paints: statePaints('active', true) },\n ],\n states: [\n { state: 'default' },\n {\n state: 'hover',\n forceClass: 'force-hover',\n paints: statePaints('hover', false),\n },\n {\n state: 'active',\n forceClass: 'active',\n paints: statePaints('active', false),\n },\n ],\n persistence: {\n cases: [\n {\n shape: 'token',\n variable: '--radiobutton-default-dot-border-width',\n observe: { part: 'dot', css: 'borderTopWidth' },\n },\n ],\n resetVariable: '--radiobutton-default-dot-border-width',\n },\n theme: {\n theme: 'halloween',\n changed: [\n '--radiobutton-default-dot-border-width',\n '--radiobutton-hover-dot-border-width',\n '--radiobutton-active-dot-border-width',\n ],\n unchanged: ['--radiobutton-default-label-font-size'],\n aliasedTo: {\n '--radiobutton-default-dot-border-width': '--border-width-4',\n },\n observe: { part: 'dot', css: 'borderTopWidth', variable: '--radiobutton-default-dot-border-width' },\n },\n interaction: {\n part: 'root',\n role: 'button',\n cases: [\n {\n name: 'clicking a radio option focuses it',\n action: { kind: 'click', part: 'root' },\n expect: { kind: 'focused', part: 'root', value: true },\n },\n ],\n },\n sketch: {\n style: 'pencil',\n parts: [{ part: 'dot', fill: '--radiobutton-default-dot-fill', stroke: '--radiobutton-default-dot-border-color' }],\n },\n};\n","import type { ComponentContract, PaintMap, SetupStep } from '../componentContract';\n\ntype Variant = 'lg' | 'md' | 'sm';\n\n/** Only the large variant ships its eyebrow and description visible; the other\n * two hide them behind the element switches. */\nconst showOptionalContent: SetupStep[] = [\n { kind: 'control', selector: 'label.element-show-toggle:has-text(\"Show description\") input', check: true },\n { kind: 'control', selector: 'label.element-show-toggle:has-text(\"Show eyebrow\") input', check: true },\n];\n\nfunction variantPaints(v: Variant): PaintMap {\n return {\n root: {\n paddingTop: `--sectiondivider-${v}-padding`,\n borderRadius: `--sectiondivider-${v}-radius`,\n borderTopWidth: `--sectiondivider-${v}-border-width`,\n borderTopColor: `--sectiondivider-${v}-border`,\n boxShadow: `--sectiondivider-${v}-shadow`,\n backgroundImage: `--sectiondivider-${v}-background`,\n },\n titleRow: { paddingTop: `--sectiondivider-${v}-title-padding` },\n title: {\n color: `--sectiondivider-${v}-title`,\n fontFamily: `--sectiondivider-${v}-title-font-family`,\n fontSize: `--sectiondivider-${v}-title-font-size`,\n fontWeight: `--sectiondivider-${v}-title-font-weight`,\n lineHeight: `--sectiondivider-${v}-title-line-height`,\n letterSpacing: `--sectiondivider-${v}-title-letter-spacing`,\n },\n descriptionRow: { paddingTop: `--sectiondivider-${v}-description-padding` },\n description: {\n color: `--sectiondivider-${v}-description`,\n fontFamily: `--sectiondivider-${v}-description-font-family`,\n fontSize: `--sectiondivider-${v}-description-font-size`,\n fontWeight: `--sectiondivider-${v}-description-font-weight`,\n lineHeight: `--sectiondivider-${v}-description-line-height`,\n },\n eyebrow: {\n paddingTop: `--sectiondivider-${v}-eyebrow-padding`,\n color: `--sectiondivider-${v}-eyebrow`,\n fontFamily: `--sectiondivider-${v}-eyebrow-font-family`,\n fontSize: `--sectiondivider-${v}-eyebrow-font-size`,\n fontWeight: `--sectiondivider-${v}-eyebrow-font-weight`,\n letterSpacing: `--sectiondivider-${v}-eyebrow-letter-spacing`,\n },\n hairline: {\n backgroundColor: `--sectiondivider-${v}-hairline-color`,\n height: `--sectiondivider-${v}-hairline-thickness`,\n },\n };\n}\n\nexport const sectionDividerContract: ComponentContract = {\n id: 'sectiondivider',\n origin: 'system',\n view: { variant: 'Large', setup: showOptionalContent },\n root: 'root',\n parts: {\n root: '.section-divider',\n titleRow: '.title-row',\n title: '.divider-label',\n descriptionRow: '.description-row',\n description: '.divider-description',\n eyebrow: '.divider-eyebrow',\n hairline: '.sd-hairline',\n },\n properties: [\n { variant: 'Large', setup: showOptionalContent, paints: variantPaints('lg') },\n { variant: 'Medium', setup: showOptionalContent, paints: variantPaints('md') },\n { variant: 'Small', setup: showOptionalContent, paints: variantPaints('sm') },\n ],\n states: {\n applicable: false,\n reason: 'each variant is one full preset with one state, so the editor renders no state strip',\n },\n persistence: {\n cases: [\n {\n shape: 'token',\n variable: '--sectiondivider-lg-hairline-color',\n observe: { part: 'hairline', css: 'backgroundColor' },\n },\n {\n shape: 'gradient',\n variable: '--sectiondivider-lg-background',\n observe: { part: 'root', css: 'backgroundColor' },\n },\n {\n shape: 'literal',\n control: '.sd-intrinsic-row:has(.property-label:text-is(\"alignment\")) select',\n variable: '--sectiondivider-lg-align',\n observe: { part: 'root', css: 'textAlign' },\n },\n ],\n resetVariable: '--sectiondivider-lg-hairline-color',\n },\n theme: {\n theme: 'halloween',\n changed: [\n '--sectiondivider-lg-radius',\n '--sectiondivider-lg-border-width',\n '--sectiondivider-lg-hairline-thickness',\n '--sectiondivider-lg-hairline-color',\n ],\n unchanged: [\n '--sectiondivider-lg-padding',\n '--sectiondivider-lg-shadow',\n '--sectiondivider-lg-title',\n '--sectiondivider-lg-border',\n '--sectiondivider-lg-title-font-size',\n ],\n aliasedTo: {\n '--sectiondivider-lg-radius': '--radius-none',\n '--sectiondivider-lg-border-width': '--border-width-3',\n '--sectiondivider-lg-hairline-thickness': '--border-width-3',\n },\n observe: { part: 'root', css: 'borderRadius', variable: '--sectiondivider-lg-radius' },\n },\n interaction: {\n applicable: false,\n reason: 'a divider is a static banner: no interactive role, nothing focusable, no pointer behaviour',\n },\n sketch: {\n style: 'pencil',\n parts: [{ part: 'hairline', fill: '--sectiondivider-lg-hairline-color' }],\n },\n};\n","import type { ComponentContract } from '../componentContract';\n\nexport const segmentedControlContract: ComponentContract = {\n id: 'segmentedcontrol',\n origin: 'system',\n view: { state: 'selected option' },\n root: 'root',\n parts: {\n root: '.segmented-control',\n segment: '.segment',\n icon: '.segment i',\n selectedSegment: '.segment.selected',\n selectedIcon: '.segment.selected i',\n divider: '.segment-divider',\n },\n properties: [\n {\n state: 'control bar',\n paints: {\n root: {\n backgroundColor: '--segmentedcontrol-bar-surface',\n borderTopColor: '--segmentedcontrol-bar-border',\n borderTopWidth: '--segmentedcontrol-bar-border-width',\n borderRadius: '--segmentedcontrol-bar-radius',\n columnGap: '--segmentedcontrol-bar-gap',\n paddingTop: '--segmentedcontrol-bar-padding',\n },\n divider: {\n backgroundColor: '--segmentedcontrol-divider-color',\n width: '--segmentedcontrol-divider-thickness',\n marginTop: '--segmentedcontrol-divider-inset',\n },\n },\n },\n {\n state: 'option base',\n paints: {\n segment: {\n paddingTop: '--segmentedcontrol-option-padding',\n columnGap: '--segmentedcontrol-option-gap',\n borderRadius: '--segmentedcontrol-selected-radius',\n },\n icon: { fontSize: '--segmentedcontrol-option-icon-size' },\n },\n },\n {\n state: 'default option',\n paints: {\n segment: {\n lineHeight: '--segmentedcontrol-option-text-line-height',\n },\n },\n },\n {\n state: 'selected option',\n paints: { selectedSegment: { lineHeight: '--segmentedcontrol-selected-text-line-height' } },\n },\n {\n state: 'disabled option',\n paints: { segment: { lineHeight: '--segmentedcontrol-disabled-text-line-height' } },\n },\n {\n state: 'hover option',\n paints: { segment: { lineHeight: '--segmentedcontrol-option-hover-text-line-height' } },\n },\n {\n setup: [{ kind: 'control', selector: '.preview-actions select', value: 'small' }],\n paints: {\n root: { borderRadius: '--segmentedcontrol-bar-small-radius', paddingTop: '--segmentedcontrol-bar-small-padding' },\n segment: {\n borderRadius: '--segmentedcontrol-selected-small-radius',\n paddingTop: '--segmentedcontrol-option-small-padding',\n columnGap: '--segmentedcontrol-option-small-gap',\n fontSize: '--segmentedcontrol-option-small-text-font-size',\n lineHeight: '--segmentedcontrol-option-small-text-line-height',\n },\n icon: { fontSize: '--segmentedcontrol-option-small-icon-size' },\n divider: { width: '--segmentedcontrol-small-divider-thickness', marginTop: '--segmentedcontrol-small-divider-inset' },\n },\n },\n ],\n states: [\n { state: 'control bar' },\n { state: 'option base' },\n {\n state: 'default option',\n paints: {\n icon: { color: '--segmentedcontrol-option-icon' },\n segment: {\n color: '--segmentedcontrol-option-text',\n fontFamily: '--segmentedcontrol-option-text-font-family',\n fontSize: '--segmentedcontrol-option-text-font-size',\n fontWeight: '--segmentedcontrol-option-text-font-weight',\n },\n },\n },\n {\n state: 'selected option',\n paints: {\n selectedSegment: {\n backgroundColor: '--segmentedcontrol-selected-surface',\n outlineColor: '--segmentedcontrol-selected-border',\n outlineWidth: '--segmentedcontrol-selected-border-width',\n color: '--segmentedcontrol-selected-text',\n fontFamily: '--segmentedcontrol-selected-text-font-family',\n fontSize: '--segmentedcontrol-selected-text-font-size',\n fontWeight: '--segmentedcontrol-selected-text-font-weight',\n },\n selectedIcon: { color: '--segmentedcontrol-selected-icon' },\n },\n },\n {\n state: 'hover option',\n paints: {\n segment: {\n backgroundColor: '--segmentedcontrol-option-hover-surface',\n color: '--segmentedcontrol-option-hover-text',\n fontFamily: '--segmentedcontrol-option-hover-text-font-family',\n fontSize: '--segmentedcontrol-option-hover-text-font-size',\n fontWeight: '--segmentedcontrol-option-hover-text-font-weight',\n },\n icon: { color: '--segmentedcontrol-option-hover-icon' },\n },\n },\n {\n state: 'disabled option',\n attributes: { segment: { disabled: '' } },\n paints: {\n segment: {\n backgroundColor: '--segmentedcontrol-disabled-surface',\n color: '--segmentedcontrol-disabled-text',\n fontFamily: '--segmentedcontrol-disabled-text-font-family',\n fontSize: '--segmentedcontrol-disabled-text-font-size',\n fontWeight: '--segmentedcontrol-disabled-text-font-weight',\n },\n icon: { color: '--segmentedcontrol-disabled-icon' },\n },\n },\n ],\n uncovered: {\n '--segmentedcontrol-hover-tint': 'consumed inside a background-image tint wash, never appearing verbatim in a computed style',\n '--segmentedcontrol-hover-tint-enabled': 'the gate for the tint wash above, same limitation',\n },\n persistence: {\n cases: [\n {\n shape: 'token',\n state: 'control bar',\n variable: '--segmentedcontrol-bar-border-width',\n observe: { part: 'root', css: 'borderTopWidth' },\n },\n ],\n resetVariable: '--segmentedcontrol-bar-border-width',\n },\n theme: {\n theme: 'halloween',\n changed: ['--segmentedcontrol-bar-border-width', '--segmentedcontrol-bar-radius', '--segmentedcontrol-option-padding'],\n unchanged: ['--segmentedcontrol-option-icon-size'],\n aliasedTo: {\n '--segmentedcontrol-bar-border-width': '--border-width-3',\n '--segmentedcontrol-bar-radius': '--radius-none',\n },\n observe: { part: 'root', css: 'borderTopWidth', variable: '--segmentedcontrol-bar-border-width' },\n },\n interaction: {\n part: 'segment',\n role: 'radio',\n cases: [\n {\n name: 'clicking a segment checks it',\n action: { kind: 'click', part: 'segment' },\n expect: { kind: 'attribute', part: 'segment', name: 'aria-checked', value: 'true' },\n },\n {\n name: 'a disabled control refuses focus',\n state: 'disabled option',\n action: { kind: 'click', part: 'segment' },\n expect: { kind: 'focused', part: 'segment', value: false },\n },\n ],\n },\n sketch: {\n style: 'pencil',\n parts: [\n { part: 'root', fill: '--segmentedcontrol-bar-surface', stroke: '--segmentedcontrol-bar-border' },\n { part: 'selectedSegment', fill: '--segmentedcontrol-selected-surface', stroke: '--segmentedcontrol-selected-border' },\n ],\n },\n};\n","import type { ComponentContract, PaintMap, SetupStep } from '../componentContract';\n\n/** Both the top-level part tab and its sub-state live in one string, joined by\n * \" / \" in the DOM but rendered as two separate strips; reaching a sub-state\n * other than the first needs an extra click into the sub-strip. */\nfunction sub(label: string): SetupStep[] {\n return [{ kind: 'control', selector: `.tabs-selectors.substrip .state-tab-btn:has-text(\"${label}\")` }];\n}\n\nfunction titlePaints(s: 'default' | 'hover' | 'active'): PaintMap {\n return {\n title: {\n backgroundColor: `--sidenavigation-title-${s}-surface`,\n borderTopColor: `--sidenavigation-title-${s}-border`,\n borderTopWidth: `--sidenavigation-title-${s}-border-width`,\n borderLeftColor: `--sidenavigation-title-${s}-accent`,\n borderLeftWidth: `--sidenavigation-title-${s}-accent-width`,\n paddingTop: `--sidenavigation-title-${s}-padding`,\n },\n titleLabel: {\n color: `--sidenavigation-title-${s}-label`,\n fontFamily: `--sidenavigation-title-${s}-label-font-family`,\n fontSize: `--sidenavigation-title-${s}-label-font-size`,\n fontWeight: `--sidenavigation-title-${s}-label-font-weight`,\n lineHeight: `--sidenavigation-title-${s}-label-line-height`,\n },\n };\n}\n\nfunction togglePaints(s: 'default' | 'hover'): PaintMap {\n return {\n toggle: {\n backgroundColor: `--sidenavigation-toggle-${s}-surface`,\n borderTopColor: `--sidenavigation-toggle-${s}-border`,\n borderTopWidth: `--sidenavigation-toggle-${s}-border-width`,\n borderRadius: `--sidenavigation-toggle-${s}-radius`,\n paddingTop: `--sidenavigation-toggle-${s}-padding`,\n color: `--sidenavigation-toggle-${s}-icon`,\n },\n toggleIcon: { fontSize: `--sidenavigation-toggle-${s}-icon-size` },\n };\n}\n\nfunction sectionPaints(part: string, labelPart: string, s: 'default' | 'hover' | 'active'): PaintMap {\n return {\n [part]: {\n backgroundColor: `--sidenavigation-section-${s}-surface`,\n borderLeftColor: `--sidenavigation-section-${s}-accent`,\n borderLeftWidth: `--sidenavigation-section-${s}-accent-width`,\n },\n [labelPart]: {\n color: `--sidenavigation-section-${s}-text`,\n fontFamily: `--sidenavigation-section-${s}-text-font-family`,\n fontSize: `--sidenavigation-section-${s}-text-font-size`,\n fontWeight: `--sidenavigation-section-${s}-text-font-weight`,\n lineHeight: `--sidenavigation-section-${s}-text-line-height`,\n },\n };\n}\n\nfunction itemPaints(part: string, s: 'default' | 'hover' | 'active'): PaintMap {\n return {\n [part]: {\n backgroundColor: `--sidenavigation-item-${s}-surface`,\n borderLeftColor: `--sidenavigation-item-${s}-accent`,\n borderLeftWidth: `--sidenavigation-item-${s}-accent-width`,\n paddingTop: `--sidenavigation-item-${s}-padding`,\n color: `--sidenavigation-item-${s}-text`,\n fontFamily: `--sidenavigation-item-${s}-text-font-family`,\n fontSize: `--sidenavigation-item-${s}-text-font-size`,\n fontWeight: `--sidenavigation-item-${s}-text-font-weight`,\n lineHeight: `--sidenavigation-item-${s}-text-line-height`,\n },\n };\n}\n\nfunction footerPaints(s: 'default' | 'hover' | 'active'): PaintMap {\n return {\n footer: {\n backgroundColor: `--sidenavigation-footer-${s}-surface`,\n borderLeftColor: `--sidenavigation-footer-${s}-accent`,\n borderLeftWidth: `--sidenavigation-footer-${s}-accent-width`,\n paddingTop: `--sidenavigation-footer-${s}-padding`,\n columnGap: `--sidenavigation-footer-${s}-gap`,\n color: `--sidenavigation-footer-${s}-text`,\n fontFamily: `--sidenavigation-footer-${s}-text-font-family`,\n fontSize: `--sidenavigation-footer-${s}-text-font-size`,\n fontWeight: `--sidenavigation-footer-${s}-text-font-weight`,\n lineHeight: `--sidenavigation-footer-${s}-text-line-height`,\n },\n footerIcon: {\n color: `--sidenavigation-footer-${s}-icon`,\n fontSize: `--sidenavigation-footer-${s}-icon-size`,\n },\n };\n}\n\nexport const sideNavigationContract: ComponentContract = {\n id: 'sidenavigation',\n origin: 'system',\n // Section has no currentPath-driven active state (unlike Item, whose\n // demo path lands inside section-1): it lights up only through the force\n // mechanism behind the \"Active\" sub-tab, so the inventory's one view has\n // to land there for `sectionActive` to resolve at all.\n view: { state: 'Section', setup: sub('Active') },\n root: 'root',\n parts: {\n root: '.sidenavigation',\n title: '.sn-title',\n titleLabel: '.sn-title-label',\n toggle: '.sn-toggle',\n toggleIcon: '.sn-toggle i',\n sectionWrap: '.sn-section',\n section: '.sn-section-header:not(.active)',\n sectionLabel: '.sn-section-header:not(.active) .section-label',\n sectionActive: '.sn-section-header.active',\n sectionLabelActive: '.sn-section-header.active .section-label',\n item: '.sn-item:not(.active)',\n itemActive: '.sn-item.active',\n footer: '.sn-footer',\n footerIcon: '.sn-footer i',\n },\n properties: [\n {\n state: 'Panel',\n setup: [],\n paints: {\n root: {\n backgroundColor: '--sidenavigation-panel-surface',\n borderRightColor: '--sidenavigation-panel-border',\n borderRightWidth: '--sidenavigation-panel-border-width',\n paddingTop: '--sidenavigation-panel-padding',\n },\n item: { paddingLeft: '--sidenavigation-panel-item-padding' },\n footer: { marginTop: '--sidenavigation-panel-footer-gap' },\n sectionWrap: { marginTop: '--sidenavigation-panel-section-gap' },\n },\n },\n {\n state: 'Title Block',\n setup: [],\n paints: {\n title: { columnGap: '--sidenavigation-title-gap', borderRadius: '--sidenavigation-title-radius' },\n titleLabel: {\n backgroundColor: '--sidenavigation-title-label-surface',\n borderTopColor: '--sidenavigation-title-label-border',\n borderTopWidth: '--sidenavigation-title-label-border-width',\n borderRadius: '--sidenavigation-title-label-radius',\n paddingTop: '--sidenavigation-title-label-padding',\n },\n },\n },\n { state: 'Title', setup: [], paints: titlePaints('default') },\n { state: 'Title', setup: sub('Hover'), paints: titlePaints('hover') },\n { state: 'Title', setup: sub('Active'), paints: titlePaints('active') },\n { state: 'Toggle', setup: [], paints: togglePaints('default') },\n { state: 'Toggle', setup: sub('Hover'), paints: togglePaints('hover') },\n { state: 'Section', setup: [], paints: sectionPaints('section', 'sectionLabel', 'default') },\n { state: 'Section', setup: sub('Hover'), paints: sectionPaints('section', 'sectionLabel', 'hover') },\n { state: 'Section', setup: sub('Active'), paints: sectionPaints('sectionActive', 'sectionLabelActive', 'active') },\n { state: 'Item', setup: [], paints: itemPaints('item', 'default') },\n { state: 'Item', setup: sub('Hover'), paints: itemPaints('item', 'hover') },\n { state: 'Item', setup: [], paints: itemPaints('itemActive', 'active') },\n { state: 'Footer', setup: [], paints: footerPaints('default') },\n { state: 'Footer', setup: sub('Hover'), paints: footerPaints('hover') },\n { state: 'Footer', setup: sub('Active'), paints: footerPaints('active') },\n ],\n states: [\n { state: 'Panel', setup: [] },\n { state: 'Title', setup: [] },\n { state: 'Title Block', setup: [] },\n { state: 'Toggle', setup: [] },\n { state: 'Section', setup: [] },\n { state: 'Item', setup: [] },\n { state: 'Footer', setup: [] },\n { state: 'Animation', setup: [] },\n ],\n uncovered: {\n '--sidenavigation-open-duration': 'consumed by a width transition, no probe covers duration',\n '--sidenavigation-open-easing': 'consumed by a width transition, no probe covers an easing curve',\n '--sidenavigation-close-duration': 'consumed by a width transition, no probe covers duration',\n '--sidenavigation-close-easing': 'consumed by a width transition, no probe covers an easing curve',\n '--sidenavigation-hover-tint': 'consumed inside a background-image tint wash, never appearing verbatim in a computed style',\n '--sidenavigation-hover-tint-enabled': 'the gate for the tint wash above, same limitation',\n },\n persistence: {\n cases: [\n {\n shape: 'token',\n state: 'Panel',\n setup: [],\n variable: '--sidenavigation-panel-border-width',\n observe: { part: 'root', css: 'borderRightWidth' },\n },\n ],\n resetVariable: '--sidenavigation-panel-border-width',\n },\n theme: {\n theme: 'halloween',\n changed: ['--sidenavigation-panel-border-width', '--sidenavigation-title-default-border-width'],\n unchanged: ['--sidenavigation-toggle-default-icon-size'],\n aliasedTo: {\n '--sidenavigation-panel-border-width': '--border-width-3',\n '--sidenavigation-title-default-border-width': '--border-width-3',\n },\n observe: { part: 'root', css: 'borderRightWidth', variable: '--sidenavigation-panel-border-width' },\n },\n interaction: {\n part: 'toggle',\n role: 'button',\n cases: [\n {\n name: 'clicking the toggle collapses the rail',\n action: { kind: 'click', part: 'toggle' },\n expect: { kind: 'attribute', part: 'toggle', name: 'aria-expanded', value: 'false' },\n },\n ],\n },\n sketch: {\n style: 'pencil',\n parts: [{ part: 'root', fill: '--sidenavigation-panel-surface', stroke: '--sidenavigation-panel-border' }],\n },\n};\n","import type { ComponentContract, PaintMap, StateExpectation } from '../componentContract';\n\ntype Variant = 'single' | 'range';\n\nfunction variantPaints(v: Variant): PaintMap {\n return {\n track: {\n backgroundColor: `--slider-${v}-track-surface`,\n borderTopColor: `--slider-${v}-track-border`,\n borderTopWidth: `--slider-${v}-track-border-width`,\n borderRadius: `--slider-${v}-track-radius`,\n height: `--slider-${v}-track-height`,\n },\n fill: { backgroundColor: `--slider-${v}-fill` },\n thumb: {\n backgroundColor: `--slider-${v}-thumb-surface`,\n borderTopColor: `--slider-${v}-thumb-border`,\n borderTopWidth: `--slider-${v}-thumb-border-width`,\n borderRadius: `--slider-${v}-thumb-radius`,\n width: `--slider-${v}-thumb-size`,\n boxShadow: `--slider-${v}-thumb-shadow`,\n },\n };\n}\n\nfunction variantStates(v: Variant, variant: string): StateExpectation[] {\n return [\n {\n variant,\n state: 'default',\n attributes: { input: { disabled: null } },\n paints: { thumb: { backgroundColor: `--slider-${v}-thumb-surface` } },\n },\n {\n variant,\n state: 'hover',\n forceClass: 'force-hover',\n paints: {\n thumb: {\n backgroundColor: `--slider-${v}-hover-thumb-surface`,\n borderTopColor: `--slider-${v}-hover-thumb-border`,\n },\n },\n },\n {\n variant,\n state: 'disabled',\n attributes: { input: { disabled: '' } },\n paints: {\n track: { backgroundColor: `--slider-${v}-disabled-track-surface` },\n fill: { backgroundColor: `--slider-${v}-disabled-fill` },\n thumb: {\n backgroundColor: `--slider-${v}-disabled-thumb-surface`,\n borderTopColor: `--slider-${v}-disabled-thumb-border`,\n },\n },\n },\n ];\n}\n\n/**\n * Both variants. Their rows are linked by default, so an edit to one moves the\n * other until a user unlinks them; the locators are the same and only the\n * token prefix differs.\n */\nexport const sliderContract: ComponentContract = {\n id: 'slider',\n origin: 'system',\n view: { variant: 'Single' },\n root: 'root',\n parts: {\n root: '.slider',\n track: '.slider-track',\n fill: '.slider-fill',\n thumb: '.cap',\n input: 'input.thumb',\n label: '.slider-label > span:not(.slider-value)',\n value: '.slider-value',\n },\n properties: [\n {\n variant: 'Single',\n paints: {\n ...variantPaints('single'),\n root: { rowGap: '--slider-label-gap' },\n label: {\n color: '--slider-label',\n fontFamily: '--slider-label-font-family',\n fontSize: '--slider-label-font-size',\n fontWeight: '--slider-label-font-weight',\n lineHeight: '--slider-label-line-height',\n },\n value: {\n color: '--slider-value',\n fontFamily: '--slider-value-font-family',\n fontSize: '--slider-value-font-size',\n fontWeight: '--slider-value-font-weight',\n lineHeight: '--slider-value-line-height',\n },\n },\n },\n { variant: 'Range', paints: variantPaints('range') },\n ],\n states: [\n ...variantStates('single', 'Single'),\n ...variantStates('range', 'Range'),\n ],\n persistence: {\n cases: [\n {\n shape: 'token',\n variable: '--slider-single-track-surface',\n observe: { part: 'track', css: 'backgroundColor' },\n },\n {\n shape: 'opacity',\n variable: '--slider-single-fill',\n observe: { part: 'fill', css: 'backgroundColor' },\n },\n ],\n resetVariable: '--slider-single-track-surface',\n },\n theme: {\n theme: 'ocean',\n changed: [\n '--slider-single-track-surface',\n '--slider-single-fill',\n '--slider-single-thumb-surface',\n ],\n unchanged: [\n '--slider-single-track-height',\n '--slider-single-track-radius',\n '--slider-single-thumb-size',\n '--slider-single-track-border-width',\n ],\n aliasedTo: {\n '--slider-single-track-surface': '--surface-neutral-lowest',\n '--slider-single-fill': '--surface-brand-high',\n },\n observe: { part: 'track', css: 'backgroundColor', variable: '--slider-single-track-surface' },\n },\n interaction: {\n part: 'input',\n role: 'slider',\n cases: [\n {\n name: 'arrow right raises the value',\n action: { kind: 'press', part: 'input', key: 'ArrowRight' },\n expect: { kind: 'valueMoves', part: 'input', direction: 'up' },\n },\n {\n name: 'arrow left lowers the value',\n action: { kind: 'press', part: 'input', key: 'ArrowLeft' },\n expect: { kind: 'valueMoves', part: 'input', direction: 'down' },\n },\n {\n name: 'Home takes the value to the floor',\n action: { kind: 'press', part: 'input', key: 'Home' },\n expect: { kind: 'valueBecomes', part: 'input', value: '0' },\n },\n {\n name: 'dragging the thumb along the track raises the value',\n action: { kind: 'dragTo', part: 'thumb', along: 'track', fraction: 0.85 },\n expect: { kind: 'valueMoves', part: 'input', direction: 'up' },\n },\n {\n name: 'taking hold of the thumb focuses the slider',\n action: { kind: 'dragTo', part: 'thumb', along: 'track', fraction: 0.5 },\n expect: { kind: 'focused', part: 'input', value: true },\n },\n {\n name: 'a disabled slider ignores the arrow keys',\n state: 'disabled',\n action: { kind: 'press', part: 'input', key: 'ArrowRight' },\n expect: { kind: 'valueHolds', part: 'input' },\n },\n {\n name: 'a disabled slider refuses focus',\n state: 'disabled',\n action: { kind: 'dragTo', part: 'thumb', along: 'track', fraction: 0.5 },\n expect: { kind: 'focused', part: 'input', value: false },\n },\n ],\n },\n sketch: {\n style: 'pencil',\n parts: [\n {\n part: 'track',\n fill: '--slider-single-track-surface',\n stroke: '--slider-single-track-border',\n },\n { part: 'fill', fill: '--slider-single-fill' },\n ],\n },\n};\n","import type { ComponentContract, PaintMap } from '../componentContract';\n\n/**\n * `full` adds `lineHeight`. `assertPaintsFromToken` (properties) drives a\n * controlled pixel probe, so a unitless line-height round-trips fine there;\n * `assertPaintMap` (states) reads the token's real, already-resolved value\n * through `normalize()`, which cannot recompute a unitless multiplier outside\n * the tab's own font-size context. States skip it; properties cover it.\n */\nfunction tabPaints(part: string, iconPart: string, s: string, full: boolean): PaintMap {\n const tab: PaintMap[string] = {\n backgroundColor: `--tabbar-${s}-surface`,\n borderTopColor: `--tabbar-${s}-tab-border-color`,\n borderTopWidth: `--tabbar-${s}-tab-border-width`,\n borderBottomColor: `--tabbar-${s}-border`,\n borderBottomWidth: `--tabbar-${s}-indicator-width`,\n borderTopLeftRadius: `--tabbar-${s}-tab-top-radius`,\n borderBottomLeftRadius: `--tabbar-${s}-tab-bottom-radius`,\n paddingTop: `--tabbar-${s}-padding`,\n color: `--tabbar-${s}-text`,\n fontFamily: `--tabbar-${s}-text-font-family`,\n fontSize: `--tabbar-${s}-text-font-size`,\n fontWeight: `--tabbar-${s}-text-font-weight`,\n };\n if (full) tab.lineHeight = `--tabbar-${s}-text-line-height`;\n return {\n [part]: tab,\n [iconPart]: { fontSize: `--tabbar-${s}-icon-size` },\n };\n}\n\nexport const tabBarContract: ComponentContract = {\n id: 'tabbar',\n origin: 'system',\n root: 'root',\n parts: {\n root: '.tab-bar',\n tab: '.tab:not(.active):not(:disabled)',\n icon: '.tab:not(.active):not(:disabled) i',\n activeTab: '.tab.active',\n activeIcon: '.tab.active i',\n disabledTab: '.tab:disabled',\n disabledIcon: '.tab:disabled i',\n // Position-stable: clicking `tab` (\".tab:not(.active)\") makes that very\n // tab active, which would invalidate that selector out from under a\n // focus check re-resolved after the click.\n secondTab: '.tab:nth-of-type(2)',\n },\n properties: [\n {\n state: 'bar',\n paints: {\n root: {\n borderBottomColor: '--tabbar-bar-divider',\n borderBottomWidth: '--tabbar-bar-divider-thickness',\n marginTop: '--tabbar-bar-top-margin',\n paddingBottom: '--tabbar-bar-bottom-padding',\n marginBottom: '--tabbar-bar-bottom-margin',\n columnGap: '--tabbar-tab-gap',\n },\n },\n },\n { state: 'default tab', paints: tabPaints('tab', 'icon', 'default', true) },\n { state: 'hover tab', paints: tabPaints('tab', 'icon', 'hover', true) },\n { state: 'active tab', paints: tabPaints('activeTab', 'activeIcon', 'active', true) },\n { state: 'disabled tab', paints: tabPaints('disabledTab', 'disabledIcon', 'disabled', true) },\n ],\n states: [\n { state: 'bar' },\n { state: 'default tab', paints: tabPaints('tab', 'icon', 'default', false) },\n { state: 'hover tab', paints: tabPaints('tab', 'icon', 'hover', false) },\n { state: 'active tab', paints: tabPaints('activeTab', 'activeIcon', 'active', false) },\n {\n state: 'disabled tab',\n attributes: { disabledTab: { disabled: '' } },\n paints: tabPaints('disabledTab', 'disabledIcon', 'disabled', false),\n },\n ],\n uncovered: {\n '--tabbar-hover-tint': 'consumed inside a background-image tint wash, never appearing verbatim in a computed style',\n '--tabbar-hover-tint-enabled': 'the gate for the tint wash above, same limitation',\n },\n persistence: {\n cases: [\n {\n shape: 'token',\n state: 'default tab',\n variable: '--tabbar-default-tab-border-width',\n observe: { part: 'tab', css: 'borderTopWidth' },\n },\n ],\n resetVariable: '--tabbar-default-tab-border-width',\n },\n theme: {\n theme: 'halloween',\n // The indicator width is the canary for re-migration replay: the tabbar\n // pair (2026-05-29-tabbar-indicator-thickness-to-per-state-width,\n // 2026-09-07-stroke-role-renames) rewrites it to --border-width-2 if a\n // reader migrates a theme-embedded config off a stamp of 0 instead of the\n // theme's componentSchemaVersion.\n changed: [\n '--tabbar-default-tab-border-width',\n '--tabbar-default-padding',\n '--tabbar-default-indicator-width',\n ],\n unchanged: ['--tabbar-default-icon-size'],\n aliasedTo: {\n '--tabbar-default-tab-border-width': '--border-width-2',\n '--tabbar-default-indicator-width': '--border-width-4',\n },\n observe: { part: 'tab', css: 'borderTopWidth', variable: '--tabbar-default-tab-border-width' },\n },\n interaction: {\n part: 'secondTab',\n role: 'button',\n cases: [\n {\n name: 'clicking a tab focuses it',\n action: { kind: 'click', part: 'secondTab' },\n expect: { kind: 'focused', part: 'secondTab', value: true },\n },\n {\n name: 'a disabled tab refuses focus',\n state: 'disabled tab',\n action: { kind: 'click', part: 'disabledTab' },\n expect: { kind: 'focused', part: 'disabledTab', value: false },\n },\n ],\n },\n sketch: {\n style: 'pencil',\n parts: [\n { part: 'tab', fill: '--tabbar-default-surface', stroke: '--tabbar-default-border' },\n { part: 'activeTab', fill: '--tabbar-active-surface', stroke: '--tabbar-active-border' },\n ],\n },\n};\n","import type { ComponentContract } from '../componentContract';\n\nexport const tableContract: ComponentContract = {\n id: 'table',\n origin: 'system',\n root: 'wrapper',\n parts: {\n wrapper: '.table-wrapper',\n th: '.table-wrapper th',\n td: '.table-wrapper td',\n },\n properties: [\n {\n paints: {\n wrapper: {\n backgroundColor: '--table-default-surface',\n borderTopColor: '--table-default-border',\n borderTopWidth: '--table-default-border-width',\n borderRadius: '--table-default-radius',\n boxShadow: '--table-default-shadow',\n },\n th: {\n backgroundColor: '--table-default-header-surface',\n color: '--table-default-header-text',\n fontFamily: '--table-default-header-font-family',\n fontSize: '--table-default-header-font-size',\n fontWeight: '--table-default-header-font-weight',\n lineHeight: '--table-default-header-line-height',\n borderBottomColor: '--table-default-header-divider',\n borderBottomWidth: '--table-default-header-divider-width',\n paddingTop: '--table-default-header-padding',\n borderRightColor: '--table-default-column-divider',\n borderRightWidth: '--table-default-column-divider-width',\n },\n td: {\n backgroundColor: '--table-default-row-surface',\n color: '--table-default-cell-text',\n fontFamily: '--table-default-cell-font-family',\n fontSize: '--table-default-cell-font-size',\n fontWeight: '--table-default-cell-font-weight',\n lineHeight: '--table-default-cell-line-height',\n paddingTop: '--table-default-cell-padding',\n borderBottomColor: '--table-default-row-divider',\n borderBottomWidth: '--table-default-row-divider-width',\n },\n },\n },\n ],\n states: [\n { state: 'wrapper' },\n { state: 'header' },\n { state: 'cell' },\n { state: 'row' },\n { state: 'column' },\n ],\n uncovered: {\n '--table-default-row-stripe-surface': 'layered as a background-image on every even row; a probe cannot pin a single verbatim computed value to that selector',\n },\n persistence: {\n cases: [\n {\n shape: 'token',\n variable: '--table-default-border-width',\n observe: { part: 'wrapper', css: 'borderTopWidth' },\n },\n ],\n resetVariable: '--table-default-border-width',\n },\n theme: {\n theme: 'halloween',\n changed: [\n '--table-default-border-width',\n '--table-default-radius',\n '--table-default-header-divider-width',\n '--table-default-header-padding',\n ],\n unchanged: ['--table-default-header-font-size'],\n aliasedTo: {\n '--table-default-border-width': '--border-width-4',\n '--table-default-radius': '--radius-none',\n },\n observe: { part: 'wrapper', css: 'borderTopWidth', variable: '--table-default-border-width' },\n },\n interaction: {\n applicable: false,\n reason: 'a styled table wrapper carries no interactive role',\n },\n sketch: {\n style: 'pencil',\n parts: [{ part: 'wrapper', fill: '--table-default-surface', stroke: '--table-default-border' }],\n },\n};\n","import type { ComponentContract, PaintMap } from '../componentContract';\n\nconst defaultPaints: PaintMap = {\n root: { columnGap: '--toggle-gap' },\n track: {\n backgroundColor: '--toggle-track-surface',\n borderTopColor: '--toggle-track-border',\n borderTopWidth: '--toggle-track-border-width',\n borderRadius: '--toggle-track-radius',\n },\n thumb: {\n backgroundColor: '--toggle-thumb-surface',\n borderTopColor: '--toggle-thumb-border',\n width: '--toggle-thumb-size',\n left: '--toggle-track-padding',\n },\n label: {\n color: '--toggle-label-text',\n fontFamily: '--toggle-label-font-family',\n fontSize: '--toggle-label-font-size',\n fontWeight: '--toggle-label-font-weight',\n },\n};\n\nexport const toggleContract: ComponentContract = {\n id: 'toggle',\n origin: 'system',\n root: 'root',\n parts: {\n root: '.toggle',\n track: '.track',\n thumb: '.thumb',\n label: '.label',\n },\n properties: [{ paints: defaultPaints }],\n states: [\n {\n state: 'default',\n attributes: { root: { 'aria-checked': 'false' } },\n },\n {\n state: 'hover',\n forceClass: 'force-hover',\n paints: {\n track: { backgroundColor: '--toggle-hover-track-surface' },\n thumb: { backgroundColor: '--toggle-hover-thumb-surface' },\n },\n },\n {\n state: 'on',\n attributes: { root: { 'aria-checked': 'true' } },\n paints: {\n track: { backgroundColor: '--toggle-on-track-surface', borderTopColor: '--toggle-on-track-border' },\n thumb: { backgroundColor: '--toggle-on-thumb-surface', borderTopColor: '--toggle-on-thumb-border' },\n },\n },\n {\n state: 'on hover',\n forceClass: 'force-hover',\n attributes: { root: { 'aria-checked': 'true' } },\n paints: {\n track: { backgroundColor: '--toggle-on-hover-track-surface' },\n thumb: { backgroundColor: '--toggle-on-hover-thumb-surface' },\n },\n },\n {\n state: 'disabled',\n attributes: { root: { disabled: '' } },\n paints: {\n track: { backgroundColor: '--toggle-disabled-track-surface' },\n thumb: { backgroundColor: '--toggle-disabled-thumb-surface' },\n label: { color: '--toggle-disabled-label-text' },\n },\n },\n ],\n persistence: {\n cases: [\n {\n shape: 'token',\n variable: '--toggle-track-border-width',\n observe: { part: 'track', css: 'borderTopWidth' },\n },\n ],\n resetVariable: '--toggle-track-border-width',\n },\n theme: {\n theme: 'halloween',\n changed: ['--toggle-track-border-width', '--toggle-track-radius'],\n unchanged: ['--toggle-thumb-size', '--toggle-gap'],\n aliasedTo: {\n '--toggle-track-border-width': '--border-width-3',\n '--toggle-track-radius': '--radius-none',\n },\n observe: { part: 'track', css: 'borderTopWidth', variable: '--toggle-track-border-width' },\n },\n interaction: {\n part: 'root',\n role: 'switch',\n // No activation case: Toggle.svelte is controlled (`onclick` only calls\n // `onchange?.(!checked)`, it never flips `checked` itself), and\n // ToggleEditor.svelte's preview drives `checked` off the state tab\n // without wiring `onchange` back to it. Clicking the real control in this\n // demo has no observable effect on `aria-checked`, so an activation case\n // would assert a no-op rather than the switch's behavior.\n cases: [\n {\n name: 'clicking a toggle focuses it',\n action: { kind: 'click', part: 'root' },\n expect: { kind: 'focused', part: 'root', value: true },\n },\n {\n name: 'a disabled toggle refuses focus',\n state: 'disabled',\n action: { kind: 'click', part: 'root' },\n expect: { kind: 'focused', part: 'root', value: false },\n },\n ],\n },\n sketch: {\n style: 'pencil',\n parts: [{ part: 'track', fill: '--toggle-track-surface', stroke: '--toggle-track-border' }],\n },\n};\n","import type { ComponentContract } from '../componentContract';\n\nexport const tooltipContract: ComponentContract = {\n id: 'tooltip',\n origin: 'system',\n root: 'root',\n parts: {\n root: '.tooltip',\n arrow: { selector: '.tooltip', pseudo: '::after' },\n },\n properties: [\n {\n paints: {\n root: {\n backgroundColor: '--tooltip-surface',\n color: '--tooltip-text',\n borderTopColor: '--tooltip-border',\n borderTopWidth: '--tooltip-border-width',\n borderRadius: '--tooltip-radius',\n paddingTop: '--tooltip-padding',\n boxShadow: '--tooltip-shadow',\n fontFamily: '--tooltip-text-font-family',\n fontSize: '--tooltip-text-font-size',\n fontWeight: '--tooltip-text-font-weight',\n lineHeight: '--tooltip-text-line-height',\n },\n arrow: {\n borderRightColor: '--tooltip-border',\n borderRightWidth: '--tooltip-border-width',\n },\n },\n },\n ],\n states: {\n applicable: false,\n reason: 'the editor renders one token group (tooltip) with no state strip',\n },\n persistence: {\n cases: [\n {\n shape: 'token',\n variable: '--tooltip-border',\n observe: { part: 'root', css: 'borderTopColor' },\n },\n ],\n resetVariable: '--tooltip-border',\n },\n theme: {\n theme: 'halloween',\n changed: ['--tooltip-border-width', '--tooltip-padding', '--tooltip-radius'],\n unchanged: ['--tooltip-text-font-size'],\n aliasedTo: {\n '--tooltip-border-width': '--border-width-3',\n '--tooltip-radius': '--radius-none',\n },\n observe: { part: 'root', css: 'borderTopWidth', variable: '--tooltip-border-width' },\n },\n interaction: {\n applicable: false,\n reason: 'a hint carries no interactive role; visibility follows the trigger element\\'s hover or focus, which this component does not own',\n },\n sketch: {\n style: 'pencil',\n parts: [{ part: 'root', fill: '--tooltip-surface' }],\n },\n};\n"],"mappings":"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","names":["variants","basePaints","variants","variants","colorPaints","basePaints","variants","cap","basePaints","statePaints","otherVariantProperties","statePaints","variants","paintsFor","statePaints","variantPaints"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../testing/config.ts","../editor/core/routing/ownedRoutes.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport { DEFAULT_COMPONENTS_PATH } from '../editor/core/routing/ownedRoutes';\n\n/** The file a project puts its shared test settings in, at the project root. */\nexport const TESTING_CONFIG_FILE = 'live-tokens.testing.ts';\n\n/** The components route the run drives, published from the settings so the\n * suites need no argument. */\nexport const COMPONENTS_PATH_ENV = 'LIVE_TOKENS_COMPONENTS_PATH';\n\n/** Narrows a run to one component. */\nexport const COMPONENT_ENV = 'LIVE_TOKENS_COMPONENT';\n\n/** What `resolveDataDirs` falls back to, restated because that resolver is\n * plugin-side and the tarball ships the plugin built rather than as source.\n * `vite-plugin/testingConfig.test.ts` pins the two together. */\nconst DEFAULT_DATA_DIR = 'src/live-tokens/data';\n\nconst DEFAULT_DEV_COMMAND = 'npm run dev -- --host {host} --port {port}';\n\nexport interface LiveTokensTestingConfig {\n /** Vite config a generated Vitest config merges. Default `vite.config.ts`. */\n viteConfig?: string;\n /** Command that starts the dev server. `{host}` and `{port}` are substituted.\n * Default `npm run dev -- --host {host} --port {port}`. */\n devCommand?: string;\n /** Fixed port for the dev server. Omitted, the run takes a free one. */\n port?: number;\n /** The components route, when `editorRoutes` moved it off the owned default. */\n componentsPath?: string;\n /** The plugin's data directory. Default: `dataDir` from\n * `live-tokens.config.json`, else `src/live-tokens/data`. The run never uses\n * it directly; it is the tree the isolated copy is made from. */\n dataDir?: string;\n /** Module that registers the project's components without mounting the app.\n * The registry contract imports it before it selects entries. */\n registrySetup?: string;\n /** Module exporting the `ComponentContract[]` a custom component adds to the\n * shipped list (default export or a named `contracts` export). The suite\n * files are static Playwright entry points, so an env var naming this path\n * plus a dynamic import inside `selectedContracts()` is the only way a\n * custom contract reaches them. */\n contractsModule?: string;\n}\n\nexport interface ResolvedTestingConfig {\n root: string;\n viteConfig: string;\n devCommand: string;\n port?: number;\n componentsPath: string;\n dataDir: string;\n registrySetup?: string;\n contractsModule?: string;\n}\n\n/** Types the settings file without importing the interface by hand. */\nexport function defineTestingConfig(config: LiveTokensTestingConfig): LiveTokensTestingConfig {\n return config;\n}\n\n/** `dataDir` as the plugin resolves it, from the same file the plugin reads. */\nfunction configuredDataDir(root: string): string {\n try {\n const parsed = JSON.parse(fs.readFileSync(path.join(root, 'live-tokens.config.json'), 'utf-8'));\n if (parsed && typeof parsed === 'object' && typeof parsed.dataDir === 'string') {\n return path.resolve(root, parsed.dataDir);\n }\n } catch {\n // Missing or unparseable reads as absent, matching `readLiveTokensConfig`.\n }\n return path.resolve(root, DEFAULT_DATA_DIR);\n}\n\nexport function resolveTestingConfig(\n config: LiveTokensTestingConfig = {},\n root: string = process.cwd(),\n): ResolvedTestingConfig {\n const projectRoot = path.resolve(root);\n return {\n root: projectRoot,\n viteConfig: path.resolve(projectRoot, config.viteConfig ?? 'vite.config.ts'),\n devCommand: config.devCommand ?? DEFAULT_DEV_COMMAND,\n port: config.port,\n componentsPath: config.componentsPath ?? DEFAULT_COMPONENTS_PATH,\n dataDir: config.dataDir ? path.resolve(projectRoot, config.dataDir) : configuredDataDir(projectRoot),\n registrySetup: config.registrySetup\n ? path.resolve(projectRoot, config.registrySetup)\n : undefined,\n contractsModule: config.contractsModule\n ? path.resolve(projectRoot, config.contractsModule)\n : undefined,\n };\n}\n\nexport function devServerCommand(command: string, host: string, port: number): string {\n return command.replaceAll('{host}', host).replaceAll('{port}', String(port));\n}\n","// The package's dev-only editor surfaces live under a reserved `/live-tokens/*`\n// namespace so they can never collide with a consumer's own routes — the\n// consumer owns the rest of the URL space. Keeping the defaults in one place\n// is the guard against the nav rail and the dispatcher drifting onto different\n// paths (the collision/shadow class these constants exist to prevent).\n//\n// A consumer relocates or disables each surface via the `editorRoutes` prop on\n// <LiveTokensRouter>; these are only the defaults.\nexport const DEFAULT_EDITOR_PATH = '/live-tokens/editor';\nexport const DEFAULT_COMPONENTS_PATH = '/live-tokens/components';\nexport const DEFAULT_COLORS_PATH = '/live-tokens/colors';\nexport const DEFAULT_DOCS_PATH = '/live-tokens/docs';\n"],"mappings":";AAAA,OAAO,QAAQ;AACf,OAAO,UAAU;;;ACQV,IAAM,0BAA0B;;;ADJhC,IAAM,sBAAsB;AAI5B,IAAM,sBAAsB;AAG5B,IAAM,gBAAgB;AAK7B,IAAM,mBAAmB;AAEzB,IAAM,sBAAsB;AAuCrB,SAAS,oBAAoB,QAA0D;AAC5F,SAAO;AACT;AAGA,SAAS,kBAAkB,MAAsB;AAC/C,MAAI;AACF,UAAM,SAAS,KAAK,MAAM,GAAG,aAAa,KAAK,KAAK,MAAM,yBAAyB,GAAG,OAAO,CAAC;AAC9F,QAAI,UAAU,OAAO,WAAW,YAAY,OAAO,OAAO,YAAY,UAAU;AAC9E,aAAO,KAAK,QAAQ,MAAM,OAAO,OAAO;AAAA,IAC1C;AAAA,EACF,QAAQ;AAAA,EAER;AACA,SAAO,KAAK,QAAQ,MAAM,gBAAgB;AAC5C;AAEO,SAAS,qBACd,SAAkC,CAAC,GACnC,OAAe,QAAQ,IAAI,GACJ;AACvB,QAAM,cAAc,KAAK,QAAQ,IAAI;AACrC,SAAO;AAAA,IACL,MAAM;AAAA,IACN,YAAY,KAAK,QAAQ,aAAa,OAAO,cAAc,gBAAgB;AAAA,IAC3E,YAAY,OAAO,cAAc;AAAA,IACjC,MAAM,OAAO;AAAA,IACb,gBAAgB,OAAO,kBAAkB;AAAA,IACzC,SAAS,OAAO,UAAU,KAAK,QAAQ,aAAa,OAAO,OAAO,IAAI,kBAAkB,WAAW;AAAA,IACnG,eAAe,OAAO,gBAClB,KAAK,QAAQ,aAAa,OAAO,aAAa,IAC9C;AAAA,IACJ,iBAAiB,OAAO,kBACpB,KAAK,QAAQ,aAAa,OAAO,eAAe,IAChD;AAAA,EACN;AACF;AAEO,SAAS,iBAAiB,SAAiB,MAAc,MAAsB;AACpF,SAAO,QAAQ,WAAW,UAAU,IAAI,EAAE,WAAW,UAAU,OAAO,IAAI,CAAC;AAC7E;","names":[]}
|
|
File without changes
|
|
File without changes
|