@uni-design-system/uni-mcp 4.6.0 → 4.7.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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/server/core.ts","../src/data/uni-index.json","../src/server/store.ts","../../core/src/concepts/animation/duration.helpers.ts","../../core/src/concepts/animation/keyframes.constants.ts","../../core/src/concepts/color/color.records.ts","../../core/src/concepts/color/color.utils.ts","../../core/src/concepts/color/color.helper.ts","../../core/src/concepts/generation/oklch.helper.ts","../../core/src/concepts/generation/palette.factory.ts","../../core/src/concepts/color/color.factory.ts","../../core/src/concepts/elevation/zIndex.ts","../../core/src/concepts/generation/dtcg.emitter.ts","../../core/src/concepts/generation/shadow.generator.ts","../../core/src/concepts/iconography/icon.records.ts","../../core/src/concepts/style/selectors.constants.ts","../../core/src/concepts/theme/themes/base.theme.ts","../../core/src/concepts/generation/theme.generator.ts","../../core/src/concepts/generation/theme-file.emitter.ts","../../core/src/concepts/gradient/gradient.helper.ts","../../core/src/concepts/iconography/icon.helper.ts","../../core/src/concepts/layout/layout.helper.ts","../../core/src/concepts/shadow/shadow.utils.ts","../../core/src/concepts/shadow/shadow.records.ts","../../core/src/concepts/style/inputs.constants.ts","../../core/src/concepts/theme/themes/dark.theme.ts","../../core/src/concepts/theme/themes/light.theme.ts","../../core/src/concepts/theme/theme.records.ts","../../core/src/concepts/theme/theme.validation.ts","../../core/src/concepts/typography/typography.records.ts","../../core/src/concepts/typography/typeface.helpers.ts","../../core/src/utils/getValue.ts","../../core/src/utils/debounce.ts","../src/server/generate.ts","../src/server/icons.ts","../src/server/theme-json.ts"],"sourcesContent":["/**\n * Server core — builds a fully-wired `McpServer` (tools + resources) over the\n * in-memory Uni index. Transport-agnostic: `stdio.ts` and `http.ts` both call\n * `createUniServer()`, so local and remote share exactly one implementation.\n */\nimport { McpServer, ResourceTemplate } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { z } from 'zod';\nimport * as store from './store.js';\nimport { formatGeneratedTheme } from './generate.js';\nimport { formatIconTokens } from './icons.js';\nimport {\n buildDtcgTokens,\n buildGeneratedTheme,\n buildStoredTheme,\n summarizeEnvelope,\n type BuildResult,\n} from './theme-json.js';\n\nconst FrameworkArg = z.enum(['angular', 'react']);\n\n/** `{ content: [text] }` — the shape every tool returns. */\nfunction text(body: string) {\n return { content: [{ type: 'text' as const, text: body }] };\n}\n\n/** Brand-seed inputs, shared by the file and runtime theme generators. */\nconst ThemeGenerationInput = {\n brand: z\n .union([z.string(), z.array(z.string()).min(1).max(3)])\n .describe('Brand hex color(s), e.g. \"#0052FF\". 2–3 colors map to primary/secondary/tertiary.'),\n vibe: z\n .enum(['jewel', 'pastel', 'earth', 'neutral', 'florescent'])\n .optional()\n .describe('Tonal character; defaults to a category inferred from the seed chroma.'),\n scheme: z\n .enum(['monochromatic', 'analogous', 'complimentary', 'splitComplimentary', 'triadic'])\n .optional()\n .describe('Hue-wheel relationship for generated roles; auto-classified for multi-color input.'),\n name: z.string().optional().describe('Theme display name, defaults to \"Brand\".'),\n};\n\n/**\n * Output contract for the runtime theme tools. The theme itself is typed as an\n * opaque object on purpose: uni-core's `parseTheme` is the single source of\n * truth for theme shape, and a zod mirror here would drift from it.\n */\nconst RuntimeThemeOutput = {\n themes: z\n .array(\n z.object({\n id: z.string(),\n name: z.string(),\n mode: z.enum(['light', 'dark']),\n theme: z\n .record(z.string(), z.unknown())\n .describe('A validated UniTheme with the built-in icon set elided.'),\n })\n )\n .describe('Registration-ready themes.'),\n contrast: z\n .object({\n summary: z.string(),\n pass: z.boolean(),\n worstRatio: z.number(),\n failing: z.array(\n z.object({\n mode: z.string(),\n foreground: z.string(),\n background: z.string(),\n ratio: z.number(),\n required: z.number(),\n })\n ),\n })\n .optional()\n .describe('WCAG audit of the generated colors; absent for themes that ship with Uni.'),\n apply: z\n .object({ snippet: z.string(), note: z.string() })\n .describe('How to register the theme, including the icon-hydration rule.'),\n iconsElided: z.literal(true),\n};\n\n/**\n * Structured results carry the payload; the text block is a short summary\n * rather than a duplicate serialization (the spec's SHOULD), because repeating\n * ~14 KB of theme JSON would double the cost of every call.\n */\nfunction runtimeTheme(result: BuildResult) {\n if (!result.ok) return { content: [{ type: 'text' as const, text: result.error }], isError: true };\n return {\n content: [{ type: 'text' as const, text: summarizeEnvelope(result.envelope) }],\n structuredContent: result.envelope as unknown as Record<string, unknown>,\n };\n}\n\nfunction notFound(kind: string, id: string) {\n return text(\n `No ${kind} found with id \\`${id}\\`. Use the matching list/search tool to discover valid ids.`\n );\n}\n\nexport function createUniServer(): McpServer {\n const server = new McpServer(\n { name: 'uni-design-system', version: store.meta.version },\n {\n instructions:\n 'Authoritative interface to the Uni Design System. Prefer these tools over ' +\n 'recalling component APIs or token values from memory: names, props, and tokens ' +\n 'here match the exact Uni release the developer installed. Start with ' +\n '`list-components` or `search`, then `get-component` / `get-component-examples`. ' +\n 'Use real token ids (via `list-tokens`) instead of raw hex. Theming has four tools, ' +\n 'split by what you need: to brand an app permanently, call `generate-uni-theme` once ' +\n 'and write the returned static `uni-theme.ts` — then change look and feel by editing ' +\n \"that file's tokens directly, since shared tokens propagate everywhere; to apply a \" +\n 'theme immediately with no build step (previews, per-tenant theming, generated UI), ' +\n 'call `generate-runtime-theme` or `get-runtime-theme` and register the JSON they ' +\n 'return; to read a theme\\'s token values without applying one, use `get-theme-template`. ' +\n 'Never inline `<svg>` in a component: when you meet inline SVG, or a brand icon set ' +\n 'to import, call `create-icon-tokens` to convert it into theme icon tokens, add them ' +\n 'to `uni-theme.ts`, and render with `<uni-icon name=\"…\" />`. For release questions ' +\n '(\"what changed in 8.1?\", \"what does upgrading get me?\"), call `get-changelog`.',\n }\n );\n\n // -- list-components -------------------------------------------------------\n server.registerTool(\n 'list-components',\n {\n title: 'List Uni components',\n description:\n 'Compact inventory of Uni components: id, name, summary, category, and which ' +\n 'frameworks each supports. Filter by framework, category, or status.',\n inputSchema: {\n framework: FrameworkArg.optional(),\n category: z.string().optional().describe('e.g. forms, layout, feedback, data, primitives'),\n status: z.enum(['stable', 'beta', 'deprecated']).optional(),\n },\n },\n async ({ framework, category, status }) =>\n text(store.formatComponentList(store.listComponents({ framework, category, status })))\n );\n\n // -- get-component ---------------------------------------------------------\n server.registerTool(\n 'get-component',\n {\n title: 'Get a Uni component',\n description:\n 'Full reference for one component: description, per-framework import + selector/tag, ' +\n 'complete API (inputs/outputs or props/events), related tokens, and a sample. ' +\n 'Pass `framework` to scope to Angular or React.',\n inputSchema: {\n id: z.string().describe('component id, e.g. \"button\"'),\n framework: FrameworkArg.optional(),\n },\n },\n async ({ id, framework }) => {\n const c = store.getComponent(id);\n return c ? text(store.formatComponent(c, framework)) : notFound('component', id);\n }\n );\n\n // -- get-component-examples ------------------------------------------------\n server.registerTool(\n 'get-component-examples',\n {\n title: 'Get component examples',\n description:\n 'Working, copy-pasteable code snippets for a component (from Storybook stories), with deep links.',\n inputSchema: { id: z.string(), framework: FrameworkArg.optional() },\n },\n async ({ id, framework }) => {\n const c = store.getComponent(id);\n return c ? text(store.formatExamples(c, framework)) : notFound('component', id);\n }\n );\n\n // -- list-tokens -----------------------------------------------------------\n server.registerTool(\n 'list-tokens',\n {\n title: 'List design tokens',\n description:\n 'Inventory of Uni design tokens. Filter by `type` (color, spacing, radius, shadow, ' +\n 'border, thickness, typography, ...), `kind` (style|behavioral), or `theme`.',\n inputSchema: {\n type: z.string().optional(),\n kind: z.enum(['style', 'behavioral']).optional(),\n theme: z.string().optional(),\n },\n },\n async ({ type, kind, theme }) =>\n text(store.formatTokenList(store.listTokens({ type, kind, theme })))\n );\n\n // -- get-token -------------------------------------------------------------\n server.registerTool(\n 'get-token',\n {\n title: 'Get a design token',\n description:\n 'Resolved value, type, style/behavioral classification, alias chain, and per-theme values for one token.',\n inputSchema: {\n id: z.string().describe('token id, e.g. \"color.primary\" or \"input.behavior.height\"'),\n },\n },\n async ({ id }) => {\n const t = store.getToken(id);\n return t ? text(store.formatToken(t)) : notFound('token', id);\n }\n );\n\n // -- get-guidelines --------------------------------------------------------\n server.registerTool(\n 'get-guidelines',\n {\n title: 'Get component guidelines',\n description: \"Authored when-to-use, do/don't, and accessibility guidance for a component.\",\n inputSchema: { id: z.string() },\n },\n async ({ id }) => {\n const c = store.getComponent(id);\n return c ? text(store.formatGuidelines(c)) : notFound('component', id);\n }\n );\n\n // -- list-themes -----------------------------------------------------------\n server.registerTool(\n 'list-themes',\n {\n title: 'List theme templates',\n description: 'Available Uni theme templates.',\n inputSchema: {},\n },\n async () => text(store.formatThemeList(store.listThemes()))\n );\n\n // -- get-theme-template ----------------------------------------------------\n server.registerTool(\n 'get-theme-template',\n {\n title: 'Get a theme template',\n description:\n 'A theme in two distinct buckets: style overrides (apply via the Emotion theme provider) ' +\n 'and component options (pass as component inputs/props). Kept separate so each is applied correctly.',\n inputSchema: { id: z.string().describe('theme id, e.g. \"LightTheme\"') },\n },\n async ({ id }) => {\n const t = store.getTheme(id);\n return t ? text(store.formatTheme(t)) : notFound('theme', id);\n }\n );\n\n // -- generate-uni-theme ----------------------------------------------------\n server.registerTool(\n 'generate-uni-theme',\n {\n title: 'Generate a Uni brand theme file',\n description:\n 'Generate a complete, WCAG-AA light+dark Uni theme from brand hex color(s) and return ' +\n 'the static `uni-theme.ts` file content (write it to `src/app/uni-theme.ts`), the ' +\n '`UNI_THEMES` provider registration snippet, and a contrast report. The file is plain ' +\n 'editable data and becomes the source of truth: later restyling means editing its ' +\n 'tokens (colors, named border primitives, sparse component overrides) — not calling ' +\n 'this tool again. Never hardcode hex in components; reference theme tokens.',\n inputSchema: {\n ...ThemeGenerationInput,\n shape: z\n .enum(['sharp', 'modern', 'playful'])\n .optional()\n .describe('Shape language — emits a radii override into the file.'),\n darkMode: z.boolean().optional().describe('Emit the dark theme too. Defaults to true.'),\n },\n },\n async (args) => text(formatGeneratedTheme(args))\n );\n\n // -- generate-runtime-theme ------------------------------------------------\n server.registerTool(\n 'generate-runtime-theme',\n {\n title: 'Generate a Uni brand theme as runtime JSON',\n description:\n 'Generate a WCAG-AA light+dark Uni theme from brand hex color(s) and return it as ' +\n 'validated JSON data, ready to register live via `ThemeService.registerTheme(theme, ' +\n '{ select: true })` — no file to write, no rebuild. Use this when a theme should apply ' +\n 'immediately (previewing a brand, per-tenant theming, generated UI). To brand an app ' +\n 'permanently, use `generate-uni-theme` instead: it returns an editable `uni-theme.ts` ' +\n 'that becomes the source of truth. The built-in icon set is elided from the payload and ' +\n 'restored on registration.',\n inputSchema: {\n ...ThemeGenerationInput,\n shape: z\n .enum(['sharp', 'modern', 'playful'])\n .optional()\n .describe('Shape language — sets the radii scale on the returned themes.'),\n darkMode: z\n .boolean()\n .optional()\n .describe('Include the dark theme too. Defaults to true.'),\n },\n outputSchema: RuntimeThemeOutput,\n },\n async (args) => runtimeTheme(buildGeneratedTheme(args))\n );\n\n // -- get-runtime-theme -----------------------------------------------------\n server.registerTool(\n 'get-runtime-theme',\n {\n title: 'Get a built-in Uni theme as runtime JSON',\n description:\n 'A theme that ships with Uni, as a complete validated `UniTheme` ready to register at ' +\n 'runtime. Differs from `get-theme-template`, which returns a flat read-only projection ' +\n 'of token values for inspection — this returns the real theme object. The built-in icon ' +\n 'set is elided from the payload and restored on registration.',\n inputSchema: {\n id: z.string().describe('Theme id, e.g. \"LightTheme\" or \"DarkTheme\".'),\n },\n outputSchema: RuntimeThemeOutput,\n },\n async ({ id }) => runtimeTheme(buildStoredTheme(id))\n );\n\n // -- export-dtcg-tokens ----------------------------------------------------\n server.registerTool(\n 'export-dtcg-tokens',\n {\n title: 'Export DTCG design tokens',\n description:\n 'W3C DTCG JSON (Style Dictionary compatible) for a built-in Uni theme — the color, ' +\n 'radius, and spacing scales, named with Uni token ids. Use this to feed external ' +\n 'token pipelines; the `UniTheme` JSON from the theme tools remains the lossless ' +\n 'primary format.',\n inputSchema: {\n theme: z.string().describe('Theme id, e.g. \"LightTheme\" or \"DarkTheme\".'),\n },\n },\n async ({ theme }) => {\n const result = buildDtcgTokens(theme);\n if (!result.ok) return { content: [{ type: 'text' as const, text: result.error }], isError: true };\n return text('```json\\n' + result.json + '\\n```');\n }\n );\n\n // -- create-icon-tokens ----------------------------------------------------\n server.registerTool(\n 'create-icon-tokens',\n {\n title: 'Convert SVGs into Uni icon tokens',\n description:\n 'Convert raw SVG source into theme icon tokens and return a paste-ready `icons` map for ' +\n '`uni-theme.ts`. Use this whenever an app has inline `<svg>` in a component, or a brand ' +\n 'icon set to import: move the artwork into the theme once, then render it anywhere with ' +\n '`<uni-icon name=\"…\" />`. Encodes to a `currentColor`-masked data URI (identical to the ' +\n 'built-in set), reports which names override built-ins, flags artwork that cannot be ' +\n 'masked (multi-color, gradients, no viewBox, raster or external references), and warns ' +\n 'when a set mixes viewBox grids. Icons are monochrome — a multi-color logo flattens to a ' +\n 'silhouette. Safe to re-run: already-encoded data URIs pass through unchanged.',\n inputSchema: {\n icons: z\n .array(\n z.object({\n name: z\n .string()\n .describe('Token name, e.g. \"acmeLogo\". Converted to flat camelCase if needed.'),\n svg: z\n .string()\n .describe('Raw SVG source, or an already-encoded data:image/svg+xml URI.'),\n allowMultiColor: z\n .boolean()\n .optional()\n .describe(\n 'Accept multi-color artwork, knowing the mask flattens it to a silhouette.'\n ),\n })\n )\n .min(1)\n .describe('The icons to convert. Pass the whole set at once so grids can be compared.'),\n },\n },\n async ({ icons }) => text(formatIconTokens(icons))\n );\n\n // -- get-changelog ---------------------------------------------------------\n server.registerTool(\n 'get-changelog',\n {\n title: 'Get release notes',\n description:\n 'Release notes for the Uni packages, from their changesets changelogs. Answers ' +\n '\"what changed in X?\" and \"what do I get by upgrading?\". Pass `version` for one ' +\n \"release's full notes (\\\"8.1\\\" matches every 8.1.x), `since` for the full notes of \" +\n 'every release after an installed version (an upgrade diff), or neither for a ' +\n 'compact release list.',\n inputSchema: {\n package: z\n .string()\n .optional()\n .describe('npm name or short name, e.g. \"uni-angular\" (default), \"uni-core\", \"uni-react\", \"uni-mcp\".'),\n version: z.string().optional().describe('One release, e.g. \"8.1.0\" or \"8.1\".'),\n since: z.string().optional().describe('Every release newer than this version, e.g. the installed \"8.0.0\".'),\n },\n },\n async ({ package: pkg, version, since }) => {\n const cl = store.getChangelog(pkg);\n if (!cl) {\n const known = store.listChangelogs().map((c) => `\\`${c.package}\\``).join(', ');\n return text(`No changelog for \\`${pkg}\\`. Known packages: ${known}.`);\n }\n return text(store.formatChangelog(cl, { version, since }));\n }\n );\n\n // -- search ----------------------------------------------------------------\n server.registerTool(\n 'search',\n {\n title: 'Search the design system',\n description:\n 'Keyword search across components, tokens, themes, and guidelines. Narrow with `kind`.',\n inputSchema: {\n query: z.string(),\n kind: z.enum(['component', 'token', 'theme', 'guideline']).optional(),\n },\n },\n async ({ query, kind }) => text(store.formatSearch(query, store.search(query, kind)))\n );\n\n registerResources(server);\n return server;\n}\n\n/** Read-only, addressable content the host can browse or pin. */\nfunction registerResources(server: McpServer): void {\n server.registerResource(\n 'meta',\n 'uni://meta',\n {\n title: 'Uni index metadata',\n description: 'Index version, Uni release, framework coverage, counts, build time.',\n mimeType: 'application/json',\n },\n async (uri) => ({\n contents: [\n { uri: uri.href, mimeType: 'application/json', text: JSON.stringify(store.meta, null, 2) },\n ],\n })\n );\n\n server.registerResource(\n 'component',\n new ResourceTemplate('uni://components/{id}', {\n list: async () => ({\n resources: store\n .listComponents()\n .map((c) => ({ uri: `uni://components/${c.id}`, name: c.name, description: c.summary })),\n }),\n }),\n {\n title: 'Uni component',\n description: 'A component reference card.',\n mimeType: 'text/markdown',\n },\n async (uri, { id }) => {\n const c = store.getComponent(String(id));\n return {\n contents: [\n {\n uri: uri.href,\n mimeType: 'text/markdown',\n text: c ? store.formatComponent(c) : `Unknown component: ${id}`,\n },\n ],\n };\n }\n );\n\n server.registerResource(\n 'token',\n new ResourceTemplate('uni://tokens/{id}', {\n list: async () => ({\n resources: store.listTokens().map((t) => ({\n uri: `uni://tokens/${t.id}`,\n name: t.id,\n description: `${t.type} = ${t.value}`,\n })),\n }),\n }),\n { title: 'Uni token', description: 'A design token.', mimeType: 'text/markdown' },\n async (uri, { id }) => {\n const t = store.getToken(String(id));\n return {\n contents: [\n {\n uri: uri.href,\n mimeType: 'text/markdown',\n text: t ? store.formatToken(t) : `Unknown token: ${id}`,\n },\n ],\n };\n }\n );\n\n server.registerResource(\n 'theme',\n new ResourceTemplate('uni://themes/{id}', {\n list: async () => ({\n resources: store\n .listThemes()\n .map((t) => ({ uri: `uni://themes/${t.id}`, name: t.name, description: t.description })),\n }),\n }),\n {\n title: 'Uni theme template',\n description: 'A theme template (style + component options).',\n mimeType: 'text/markdown',\n },\n async (uri, { id }) => {\n const t = store.getTheme(String(id));\n return {\n contents: [\n {\n uri: uri.href,\n mimeType: 'text/markdown',\n text: t ? store.formatTheme(t) : `Unknown theme: ${id}`,\n },\n ],\n };\n }\n );\n\n server.registerResource(\n 'changelog',\n new ResourceTemplate('uni://changelog/{package}', {\n list: async () => ({\n resources: store.listChangelogs().map((c) => ({\n uri: `uni://changelog/${c.package.split('/').pop()}`,\n name: `${c.package} changelog`,\n description: `Release notes, latest ${c.releases[0]?.version ?? 'none'}.`,\n })),\n }),\n }),\n {\n title: 'Uni changelog',\n description: \"A package's release notes (compact digest).\",\n mimeType: 'text/markdown',\n },\n async (uri, { package: pkg }) => {\n const cl = store.getChangelog(String(pkg));\n return {\n contents: [\n {\n uri: uri.href,\n mimeType: 'text/markdown',\n text: cl ? store.formatChangelog(cl) : `Unknown package: ${pkg}`,\n },\n ],\n };\n }\n );\n\n server.registerResource(\n 'guidelines',\n new ResourceTemplate('uni://guidelines/{id}', {\n list: async () => ({\n resources: store.listComponents().map((c) => ({\n uri: `uni://guidelines/${c.id}`,\n name: `${c.name} guidelines`,\n description: c.summary,\n })),\n }),\n }),\n {\n title: 'Uni guidelines',\n description: 'Authored usage guidance for a component.',\n mimeType: 'text/markdown',\n },\n async (uri, { id }) => {\n const c = store.getComponent(String(id));\n return {\n contents: [\n {\n uri: uri.href,\n mimeType: 'text/markdown',\n text: c ? store.formatGuidelines(c) : `Unknown component: ${id}`,\n },\n ],\n };\n }\n );\n}\n","{\n \"meta\": {\n \"version\": \"8.2.0\",\n \"builtAt\": \"2026-08-20T22:58:33.744Z\",\n \"frameworks\": [\n \"angular\"\n ],\n \"counts\": {\n \"components\": 76,\n \"tokens\": 353,\n \"themes\": 2,\n \"examples\": 168\n }\n },\n \"components\": [\n {\n \"id\": \"alert\",\n \"name\": \"Alert\",\n \"status\": \"stable\",\n \"summary\": \"\",\n \"description\": \"\",\n \"category\": \"feedback\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-alert\",\n \"api\": [\n {\n \"name\": \"show\",\n \"kind\": \"model\",\n \"type\": \"boolean\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"iconName\",\n \"kind\": \"input\",\n \"type\": \"IconName | undefined\",\n \"required\": false,\n \"default\": \"undefined\",\n \"description\": \"\"\n },\n {\n \"name\": \"symbolName\",\n \"kind\": \"input\",\n \"type\": \"string | undefined\",\n \"required\": false,\n \"default\": \"undefined\",\n \"description\": \"\"\n },\n {\n \"name\": \"useVariant\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"showing\",\n \"kind\": \"output\",\n \"type\": \"boolean\",\n \"required\": false,\n \"description\": \"\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Primary\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Primary -->\\n<button text-button (click)=\\\"alert.open()\\\">Show Alert</button>\\n<uni-alert #alert ${argsToTemplate(props)}>\\n ${ngContent}\\n</uni-alert>\\n<!-- args:\\n{\\n ngContent: 'This is an alert!',\\n variant: 'tertiary',\\n symbolName: 'privacy_tip',\\n }\\n-->\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"The Alert is used to communicate a state that affects a system, feature or page.\\nFor instance, alerts can be used to display errors or any unexpected results from a user's action.\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": []\n },\n \"relatedTokens\": [\n \"alert.behavior.topPosition\",\n \"alert.behavior.borderRadius\",\n \"alert.behavior.transitionSpeed\",\n \"alert.behavior.elevation\"\n ]\n },\n {\n \"id\": \"app-bar\",\n \"name\": \"AppBar\",\n \"status\": \"stable\",\n \"summary\": \"Horizontal application bar: project leading controls (menu button, logo) with the `leading` attribute, actions with `trailing` (pushed to the far edge), and either pass `title` or project custom center content.\",\n \"description\": \"Horizontal application bar: project leading controls (menu button, logo) with the `leading` attribute, actions with `trailing` (pushed to the far edge), and either pass `title` or project custom center content. Surface, divider, height, typography and spacing all resolve from `appBar` tokens. Place it inside your page's `<header>` landmark.\",\n \"category\": \"components\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-app-bar\",\n \"api\": [\n {\n \"name\": \"title\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"Bar title; alternatively project your own center content.\"\n },\n {\n \"name\": \"sticky\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"Stick the bar to the top of its scroll container.\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Default\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Default -->\\n<uni-app-bar [title]=\\\"title\\\" [sticky]=\\\"sticky\\\">\\n<button leading icon-button symbolName=\\\"menu\\\">Open navigation</button>\\n<button trailing icon-button symbolName=\\\"notifications\\\">Notifications</button>\\n<uni-avatar trailing name=\\\"Grace Hopper\\\" size=\\\"sm\\\" />\\n</uni-app-bar>\\n<!-- args:\\n{ title: 'Console' }\\n-->\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"Horizontal application bar for the top of a page or section. Project controls with the\\n`leading` attribute (menu button, logo) and actions with `trailing` (pushed to the far\\nedge); pass `title` or project your own center content. Surface color, height, the\\ndivider rule, title typography and spacing all resolve from the theme's `appBar`\\noptions, and `sticky` pins the bar to the top of its scroll container.\\nPlace it inside your page's `<header>` landmark. It pairs with the Drawer — see the\\nDrawer docs for the full dashboard-shell recipe.\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": [\n \"The bar is a styled container, not a landmark — place it inside your page's `<header>` element.\",\n \"Give leading/trailing icon buttons text content or `ariaLabel` so they announce.\"\n ]\n },\n \"relatedTokens\": []\n },\n {\n \"id\": \"avatar\",\n \"name\": \"Avatar\",\n \"status\": \"stable\",\n \"summary\": \"Identity avatar with a graceful fallback chain: image → initials from `name` → themed symbol.\",\n \"description\": \"Identity avatar with a graceful fallback chain: image → initials from `name` → themed symbol. Coloring, radius, typeface and sizes all resolve from `avatar` theme tokens; `variant` picks the container palette.\",\n \"category\": \"components\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-avatar\",\n \"api\": [\n {\n \"name\": \"src\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"Image URL; on load error the avatar falls back to initials/symbol.\"\n },\n {\n \"name\": \"name\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"Person's name: drives the initials and the accessible label.\"\n },\n {\n \"name\": \"text\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"Verbatim text instead of derived initials (e.g. a group's “+3”).\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Initials\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Initials -->\\n<div row-layout gap=\\\"sm\\\" alignItems=\\\"center\\\">\\n<uni-avatar name=\\\"Ada Lovelace\\\" size=\\\"sm\\\" />\\n<uni-avatar name=\\\"Grace Hopper\\\" size=\\\"md\\\" variant=\\\"secondary\\\" />\\n<uni-avatar name=\\\"Katherine Johnson\\\" size=\\\"lg\\\" variant=\\\"tertiary\\\" />\\n<uni-avatar name=\\\"Annie Easley\\\" size=\\\"xl\\\" variant=\\\"success\\\" />\\n<uni-avatar size=\\\"lg\\\" variant=\\\"quaternary\\\" />\\n</div>\\n<!-- args:\\n{ name: 'Grace Hopper', variant: 'primary', size: 'lg' }\\n-->\"\n },\n {\n \"title\": \"Sizes And Variants\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Sizes And Variants -->\\n<div row-layout gap=\\\"sm\\\" alignItems=\\\"center\\\">\\n<uni-avatar name=\\\"Ada Lovelace\\\" size=\\\"sm\\\" />\\n<uni-avatar name=\\\"Grace Hopper\\\" size=\\\"md\\\" variant=\\\"secondary\\\" />\\n<uni-avatar name=\\\"Katherine Johnson\\\" size=\\\"lg\\\" variant=\\\"tertiary\\\" />\\n<uni-avatar name=\\\"Annie Easley\\\" size=\\\"xl\\\" variant=\\\"success\\\" />\\n<uni-avatar size=\\\"lg\\\" variant=\\\"quaternary\\\" />\\n</div>\"\n },\n {\n \"title\": \"Group\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Group -->\\n<div row-layout gap=\\\"sm\\\" alignItems=\\\"center\\\">\\n<uni-avatar name=\\\"Ada Lovelace\\\" size=\\\"sm\\\" />\\n<uni-avatar name=\\\"Grace Hopper\\\" size=\\\"md\\\" variant=\\\"secondary\\\" />\\n<uni-avatar name=\\\"Katherine Johnson\\\" size=\\\"lg\\\" variant=\\\"tertiary\\\" />\\n<uni-avatar name=\\\"Annie Easley\\\" size=\\\"xl\\\" variant=\\\"success\\\" />\\n<uni-avatar size=\\\"lg\\\" variant=\\\"quaternary\\\" />\\n</div>\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"Identity avatar with a graceful fallback chain: the image when it loads, initials\\nderived from `name` when it doesn't (or was never given), and a themed symbol as the\\nlast resort. The name doubles as the accessible label; avatars with no name are marked\\ndecorative automatically.\\nVariants color initials from the role's container tokens, so avatars follow the brand\\npalette in light and dark. The corner radius is the theme's `avatar.options.borderRadius`\\ntoken — circles by default, squares under a `sharp` shape language.\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": [\n \"With a `name`, the avatar is `role=\\\"img\\\"` labelled by that name; purely decorative avatars are `aria-hidden`.\",\n \"The group is a `role=\\\"group\\\"`; the \\\"+N\\\" chip reads as text.\"\n ]\n },\n \"relatedTokens\": [\n \"avatar.behavior.borderRadius\",\n \"avatar.behavior.typeface\",\n \"avatar.behavior.fallbackSymbol\"\n ]\n },\n {\n \"id\": \"avatar-group\",\n \"name\": \"AvatarGroup\",\n \"status\": \"stable\",\n \"summary\": \"Overlapping stack of avatars.\",\n \"description\": \"Overlapping stack of avatars. `max` collapses the overflow into a themed “+N” chip (itself a `uni-avatar`). Overlap and separator ring resolve from `avatarGroup` theme tokens.\",\n \"category\": \"components\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-avatar-group\",\n \"api\": [\n {\n \"name\": \"max\",\n \"kind\": \"input\",\n \"type\": \"number | undefined\",\n \"required\": false,\n \"default\": \"undefined\",\n \"description\": \"Show at most this many avatars; the rest collapse into a “+N” chip.\"\n }\n ]\n }\n },\n \"examples\": [],\n \"guidelines\": {\n \"whenToUse\": \"\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": []\n },\n \"relatedTokens\": []\n },\n {\n \"id\": \"background\",\n \"name\": \"Background\",\n \"status\": \"stable\",\n \"summary\": \"\",\n \"description\": \"\",\n \"category\": \"primitives\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-background\",\n \"api\": [\n {\n \"name\": \"image\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"imagePosition\",\n \"kind\": \"input\",\n \"type\": \"ImagePosition\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"imageSize\",\n \"kind\": \"input\",\n \"type\": \"'cover' | 'contain' | number | string\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"height\",\n \"kind\": \"input\",\n \"type\": \"number | string\",\n \"required\": false,\n \"default\": \"'100%'\",\n \"description\": \"\"\n },\n {\n \"name\": \"width\",\n \"kind\": \"input\",\n \"type\": \"number | string\",\n \"required\": false,\n \"description\": \"\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Primary\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Primary -->\\n<!-- args:\\n{\\n image: 'images/phone-zone-illustration.svg',\\n imagePosition: 'center',\\n imageSize: '400px',\\n height: '400px',\\n width: '100%',\\n }\\n-->\"\n },\n {\n \"title\": \"Contain Size\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Contain Size -->\\n<!-- args:\\n{\\n ...Primary.args,\\n imageSize: 'contain',\\n }\\n-->\"\n },\n {\n \"title\": \"Custom Position\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Custom Position -->\\n<!-- args:\\n{\\n ...Primary.args,\\n imagePosition: 'top',\\n }\\n-->\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"The Background component is a flexible container that allows you to add and control background images in your application.\\nIt provides various options for positioning and sizing the background image while maintaining a clean and responsive layout.\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": [\n \"Ensure any text overlaid on the background has sufficient contrast\",\n \"Don't rely on background images to convey important information\",\n \"Consider providing alternative visual styles for users who prefer reduced motion\"\n ]\n },\n \"relatedTokens\": []\n },\n {\n \"id\": \"badge\",\n \"name\": \"Badge\",\n \"status\": \"stable\",\n \"summary\": \"\",\n \"description\": \"\",\n \"category\": \"feedback\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"[uni-badge]\",\n \"api\": [\n {\n \"name\": \"color\",\n \"kind\": \"input\",\n \"type\": \"Variant | undefined\",\n \"required\": false,\n \"default\": \"undefined\",\n \"description\": \"\"\n },\n {\n \"name\": \"useVariant\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"width\",\n \"kind\": \"input\",\n \"type\": \"number\",\n \"required\": false,\n \"description\": \"\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Pass\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Pass -->\\n<div uni-badge color=\\\"${color}\\\" [width]=\\\"${width}\\\">\\n ${ngContent}\\n</div>\\n<!-- args:\\n{\\n color: 'secondary',\\n ngContent: 'Pass',\\n width: 76,\\n }\\n-->\"\n },\n {\n \"title\": \"Fail\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Fail -->\\n<div uni-badge color=\\\"${color}\\\" [width]=\\\"${width}\\\">\\n ${ngContent}\\n</div>\\n<!-- args:\\n{\\n color: 'warn',\\n ngContent: 'Fail',\\n width: 76,\\n }\\n-->\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"Badges are used to highlight an item's status for quick recognition.\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": []\n },\n \"relatedTokens\": [\n \"badge.behavior.borderRadius\"\n ]\n },\n {\n \"id\": \"body-render\",\n \"name\": \"BodyRender\",\n \"status\": \"stable\",\n \"summary\": \"\",\n \"description\": \"\",\n \"category\": \"directives\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"[uniBodyRender]\",\n \"api\": []\n }\n },\n \"examples\": [],\n \"guidelines\": {\n \"whenToUse\": \"\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": []\n },\n \"relatedTokens\": []\n },\n {\n \"id\": \"box\",\n \"name\": \"Box\",\n \"status\": \"stable\",\n \"summary\": \"The base layout primitive, applied as an attribute to any element so semantics stay yours: `<main box-layout [grow]=\\\"1\\\" padding=\\\"md\\\">`.\",\n \"description\": \"The base layout primitive, applied as an attribute to any element so semantics stay yours: `<main box-layout [grow]=\\\"1\\\" padding=\\\"md\\\">`. Exception: other components' host elements (`<uni-card box-layout>` would put two components on one element) — wrap those in a `<div box-layout>`. Sizing convention (height/width/min/max/inset): a **number is px and needs a binding** — `[height]=\\\"420\\\"`; a **plain attribute is a CSS length string** — `height=\\\"420px\\\"`. Spacing/radius/color inputs take theme tokens.\",\n \"category\": \"layout\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"[uni-box-layout], [box-layout]\",\n \"api\": [\n {\n \"name\": \"color\",\n \"kind\": \"input\",\n \"type\": \"ContainerColorToken\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"backgroundColor\",\n \"kind\": \"input\",\n \"type\": \"OptionalColor\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"borderRadius\",\n \"kind\": \"input\",\n \"type\": \"OptionalRadius\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"borderRadiusLeft\",\n \"kind\": \"input\",\n \"type\": \"OptionalRadius\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"borderRadiusRight\",\n \"kind\": \"input\",\n \"type\": \"OptionalRadius\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"borderRadiusTop\",\n \"kind\": \"input\",\n \"type\": \"OptionalRadius\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"borderRadiusBottom\",\n \"kind\": \"input\",\n \"type\": \"OptionalRadius\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"padding\",\n \"kind\": \"input\",\n \"type\": \"OptionalSize\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"paddingHorizontal\",\n \"kind\": \"input\",\n \"type\": \"OptionalSize\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"paddingVertical\",\n \"kind\": \"input\",\n \"type\": \"OptionalSize\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"paddingLeft\",\n \"kind\": \"input\",\n \"type\": \"OptionalSize\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"paddingRight\",\n \"kind\": \"input\",\n \"type\": \"OptionalSize\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"paddingTop\",\n \"kind\": \"input\",\n \"type\": \"OptionalSize\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"paddingBottom\",\n \"kind\": \"input\",\n \"type\": \"OptionalSize\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"border\",\n \"kind\": \"input\",\n \"type\": \"OptionalBorder\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"borderTop\",\n \"kind\": \"input\",\n \"type\": \"OptionalBorder\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"borderBottom\",\n \"kind\": \"input\",\n \"type\": \"OptionalBorder\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"borderLeft\",\n \"kind\": \"input\",\n \"type\": \"OptionalBorder\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"borderRight\",\n \"kind\": \"input\",\n \"type\": \"OptionalBorder\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"dashBorder\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"alignSelf\",\n \"kind\": \"input\",\n \"type\": \"OptionalAlignSelf\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"alignItems\",\n \"kind\": \"input\",\n \"type\": \"OptionalAlignItems\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"alignContent\",\n \"kind\": \"input\",\n \"type\": \"OptionalAlignContent\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"justifyContent\",\n \"kind\": \"input\",\n \"type\": \"OptionalJustifyContent\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"grow\",\n \"kind\": \"input\",\n \"type\": \"number\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"display\",\n \"kind\": \"input\",\n \"type\": \"OptionalDisplay\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"position\",\n \"kind\": \"input\",\n \"type\": \"OptionalPosition\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"inset\",\n \"kind\": \"input\",\n \"type\": \"number | string\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"height\",\n \"kind\": \"input\",\n \"type\": \"number | string\",\n \"required\": false,\n \"description\": \"Number = px via binding (`[height]=\\\"420\\\"`); string = CSS length (`height=\\\"420px\\\"`).\"\n },\n {\n \"name\": \"minHeight\",\n \"kind\": \"input\",\n \"type\": \"number | string\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"maxHeight\",\n \"kind\": \"input\",\n \"type\": \"number | string\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"width\",\n \"kind\": \"input\",\n \"type\": \"number | string\",\n \"required\": false,\n \"description\": \"Number = px via binding (`[width]=\\\"420\\\"`); string = CSS length (`width=\\\"50%\\\"`).\"\n },\n {\n \"name\": \"minWidth\",\n \"kind\": \"input\",\n \"type\": \"number | string\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"maxWidth\",\n \"kind\": \"input\",\n \"type\": \"number | string\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"ignoreDir\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"true\",\n \"description\": \"\"\n },\n {\n \"name\": \"gridArea\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"gridColumn\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"gridRow\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"overflow\",\n \"kind\": \"input\",\n \"type\": \"OptionalOverflow\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"shadow\",\n \"kind\": \"input\",\n \"type\": \"Shadow\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"gap\",\n \"kind\": \"input\",\n \"type\": \"OptionalSize\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"fullWidth\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"fullHeight\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"flexDirection\",\n \"kind\": \"input\",\n \"type\": \"OptionalFlexDirection\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"textAlign\",\n \"kind\": \"input\",\n \"type\": \"OptionalTextAlign\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"wrapItems\",\n \"kind\": \"input\",\n \"type\": \"OptionalWrap\",\n \"required\": false,\n \"default\": \"undefined\",\n \"description\": \"\"\n },\n {\n \"name\": \"zIndex\",\n \"kind\": \"input\",\n \"type\": \"ZIndexableElements\",\n \"required\": false,\n \"description\": \"\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Primary\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Primary -->\\n<div box-layout ${argsToTemplate(props)}>\\n<span uni-text>${ngContent}</span>\\n</div>\\n<!-- args:\\n{\\n color: 'secondary-container',\\n borderRadius: 'md',\\n padding: 'lg',\\n ngContent: 'Box Content.',\\n }\\n-->\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"Box is the base Layout component. It is highly configurable.\\nEach layout component extends the Box component while providing presets to support their application.\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": []\n },\n \"relatedTokens\": []\n },\n {\n \"id\": \"breadcrumb\",\n \"name\": \"Breadcrumb\",\n \"status\": \"stable\",\n \"summary\": \"WAI-ARIA breadcrumb: a `nav` landmark wrapping an ordered list; the last item is the current page (`aria-current=\\\"page\\\"`), separators are decorative.\",\n \"description\": \"WAI-ARIA breadcrumb: a `nav` landmark wrapping an ordered list; the last item is the current page (`aria-current=\\\"page\\\"`), separators are decorative. Items with `href` render as real links; without one they render as link-styled buttons emitting `itemClicked` — wire that to your router.\",\n \"category\": \"components\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-breadcrumb\",\n \"api\": [\n {\n \"name\": \"items\",\n \"kind\": \"input\",\n \"type\": \"BreadcrumbItem[]\",\n \"required\": true,\n \"description\": \"The trail, root first; the last item is the current page.\"\n },\n {\n \"name\": \"ariaLabel\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"default\": \"'Breadcrumb'\",\n \"description\": \"Landmark label distinguishing this nav from others on the page.\"\n },\n {\n \"name\": \"itemClicked\",\n \"kind\": \"output\",\n \"type\": \"BreadcrumbItem\",\n \"required\": false,\n \"description\": \"Emits the clicked ancestor item (also fires for `href` links).\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Default\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Default -->\\n<!-- args:\\n{\\n items: [\\n { label: 'Home', href: '#' },\\n { label: 'Reports', href: '#' },\\n { label: 'Q3 Revenue' },\\n ],\\n }\\n-->\"\n },\n {\n \"title\": \"Router-driven (no hrefs)\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Router-driven (no hrefs) -->\\n<!-- args:\\n{\\n items: [{ label: 'Home' }, { label: 'Settings' }, { label: 'Notifications' }],\\n }\\n-->\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"Breadcrumbs show where the current page sits in the hierarchy and give one-click\\npassage back up the trail. The component renders the WAI-ARIA pattern: a labelled\\n`nav` landmark wrapping an ordered list, with the last item marked as the current page\\nand separators hidden from assistive tech.\\nItems with `href` render as real links. For SPA routing, omit `href` and handle\\n`itemClicked` — items render as link-styled buttons instead. Typography, link and\\ncurrent-page colors, the separator symbol, and spacing all resolve from the theme's\\n`breadcrumb` options.\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": [\n \"Renders the WAI-ARIA pattern: a labelled `nav` landmark wrapping an ordered list.\",\n \"The last item is `aria-current=\\\"page\\\"` and not a link.\",\n \"Separators are `aria-hidden` — screen readers hear the trail, not the chevrons.\",\n \"Set `ariaLabel` when a page has more than one breadcrumb nav.\"\n ]\n },\n \"relatedTokens\": [\n \"breadcrumb.behavior.typeface\",\n \"breadcrumb.behavior.color\",\n \"breadcrumb.behavior.currentColor\",\n \"breadcrumb.behavior.separatorSymbol\",\n \"breadcrumb.behavior.gap\"\n ]\n },\n {\n \"id\": \"button\",\n \"name\": \"Button\",\n \"status\": \"stable\",\n \"summary\": \"\",\n \"description\": \"\",\n \"category\": \"primitives\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"button[uni-text-button], button[text-button]\",\n \"api\": [\n {\n \"name\": \"disable\",\n \"kind\": \"input\",\n \"type\": \"boolean | undefined\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"loading\",\n \"kind\": \"input\",\n \"type\": \"boolean | undefined\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"fullWidth\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"symbolLeft\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"symbolRight\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Primary\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Primary -->\\n<button text-button [variant]=\\\"variant\\\" [size]=\\\"size\\\" ${argsToTemplate(props)}>\\n {{ngContent}}\\n</button>\\n<!-- args:\\n{\\n variant: 'primary',\\n size: 'lg',\\n ngContent: 'Button',\\n }\\n-->\"\n },\n {\n \"title\": \"Secondary\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Secondary -->\\n<button text-button [variant]=\\\"variant\\\" [size]=\\\"size\\\" ${argsToTemplate(props)}>\\n {{ngContent}}\\n</button>\\n<!-- args:\\n{\\n size: 'lg',\\n variant: 'secondary',\\n ngContent: 'Secondary Button',\\n }\\n-->\"\n },\n {\n \"title\": \"Tertiary\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Tertiary -->\\n<button text-button [variant]=\\\"variant\\\" [size]=\\\"size\\\" ${argsToTemplate(props)}>\\n {{ngContent}}\\n</button>\\n<!-- args:\\n{\\n size: 'lg',\\n variant: 'tertiary',\\n ngContent: 'Tertiary Button',\\n }\\n-->\"\n },\n {\n \"title\": \"Medium\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Medium -->\\n<button text-button [variant]=\\\"variant\\\" [size]=\\\"size\\\" ${argsToTemplate(props)}>\\n {{ngContent}}\\n</button>\\n<!-- args:\\n{\\n size: 'md',\\n ngContent: 'Medium Button',\\n }\\n-->\"\n },\n {\n \"title\": \"Small\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Small -->\\n<button text-button [variant]=\\\"variant\\\" [size]=\\\"size\\\" ${argsToTemplate(props)}>\\n {{ngContent}}\\n</button>\\n<!-- args:\\n{\\n size: 'sm',\\n ngContent: 'Small Button',\\n }\\n-->\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"Button is a clickable interactive element that triggers a response.\\nYou can place text and icons inside of a button.\\nButtons are often used for form submissions and to toggle elements into view.\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": [\n \"A real `<button>` element — native focus, Enter/Space activation, and `disabled` semantics.\",\n \"`aria-busy` is set while `loading`; the spinner and symbols are decorative.\"\n ]\n },\n \"relatedTokens\": [\n \"button.behavior.borderRadius\",\n \"button.behavior.typeface\"\n ]\n },\n {\n \"id\": \"button-group\",\n \"name\": \"ButtonGroup\",\n \"status\": \"stable\",\n \"summary\": \"\",\n \"description\": \"\",\n \"category\": \"primitives\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-button-group\",\n \"api\": []\n }\n },\n \"examples\": [\n {\n \"title\": \"Primary\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Primary -->\\n<uni-button-group ${argsToTemplate(props)}>\\n <button icon-button symbolName=\\\"align_horizontal_left\\\" size=\\\"sm\\\"></button>\\n <button icon-button symbolName=\\\"align_horizontal_center\\\" size=\\\"sm\\\"></button>\\n <button icon-button symbolName=\\\"align_horizontal_right\\\" size=\\\"sm\\\"></button>\\n</uni-button-group>\\n<!-- args:\\n{}\\n-->\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"The `ButtonGroup` component is used to group related buttons. It applies some base styling to the nested buttons.\\nIf this is not desirable, consider using the `Row` component.\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": [\n \"Group the related actions; each button keeps its own accessible name.\"\n ]\n },\n \"relatedTokens\": []\n },\n {\n \"id\": \"calendar\",\n \"name\": \"Calendar\",\n \"status\": \"stable\",\n \"summary\": \"Inline month calendar: single-date or start–end range selection, day markers (availability dots), min/max fences and disabled dates.\",\n \"description\": \"Inline month calendar: single-date or start–end range selection, day markers (availability dots), min/max fences and disabled dates. One tab stop with a roving-tabindex `role=\\\"grid\\\"`; every day is a real button named with its full date. Values are plain ISO strings (`'YYYY-MM-DD'`), never `Date` objects, so bindings are timezone-free and serializable. Selection and today colours come from the theme's `primary` role pair; geometry and glyphs come from the `calendar` theme entry.\",\n \"category\": \"forms\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-calendar, Calendar\",\n \"api\": [\n {\n \"name\": \"value\",\n \"kind\": \"model\",\n \"type\": \"UniCalendarValue\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"disabled\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"touched\",\n \"kind\": \"model\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"invalid\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"dirty\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"required\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"ariaDescribedBy\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"mode\",\n \"kind\": \"input\",\n \"type\": \"UniCalendarMode\",\n \"required\": false,\n \"default\": \"'single'\",\n \"description\": \"`'single'` reads/writes a `UniDate`; `'range'` a `UniDateRange`.\"\n },\n {\n \"name\": \"month\",\n \"kind\": \"model\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"Shown month, `'YYYY-MM'` — two-way, so an app can drive \\\"jump to June\\\".\"\n },\n {\n \"name\": \"minDate\",\n \"kind\": \"input\",\n \"type\": \"UniDate\",\n \"required\": false,\n \"description\": \"Earliest selectable date (inclusive).\"\n },\n {\n \"name\": \"maxDate\",\n \"kind\": \"input\",\n \"type\": \"UniDate\",\n \"required\": false,\n \"description\": \"Latest selectable date (inclusive).\"\n },\n {\n \"name\": \"markers\",\n \"kind\": \"input\",\n \"type\": \"UniCalendarMarker[]\",\n \"required\": false,\n \"default\": \"[]\",\n \"description\": \"Availability dots; `label` extends the day's accessible name.\"\n },\n {\n \"name\": \"locale\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"BCP 47 tag; defaults to the document language, then the browser's.\"\n },\n {\n \"name\": \"weekStart\",\n \"kind\": \"input\",\n \"type\": \"0 | 1 | 2 | 3 | 4 | 5 | 6\",\n \"required\": false,\n \"description\": \"First day of week, 0 = Sunday; defaults from the locale's week info.\"\n },\n {\n \"name\": \"ariaLabel\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"Names the grid when it stands alone (otherwise the heading names it).\"\n },\n {\n \"name\": \"size\",\n \"kind\": \"input\",\n \"type\": \"Size\",\n \"required\": false,\n \"default\": \"'md'\",\n \"description\": \"Day geometry token; `sm`/`md`/`lg` map to the theme's `calendar` sizes.\"\n },\n {\n \"name\": \"selected\",\n \"kind\": \"output\",\n \"type\": \"UniDate\",\n \"required\": false,\n \"description\": \"Each committed day, including both ends of a range.\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Primary\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Primary -->\\n<uni-calendar size=\\\"sm\\\" ariaLabel=\\\"Small\\\" month=\\\"${MONTH}\\\" />\\n<uni-calendar size=\\\"md\\\" ariaLabel=\\\"Medium\\\" month=\\\"${MONTH}\\\" />\\n<uni-calendar size=\\\"lg\\\" ariaLabel=\\\"Large\\\" month=\\\"${MONTH}\\\" />\\n<!-- args:\\n{ value: dayIn(12), month: MONTH }\\n-->\"\n },\n {\n \"title\": \"Range\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Range -->\\n<uni-calendar size=\\\"sm\\\" ariaLabel=\\\"Small\\\" month=\\\"${MONTH}\\\" />\\n<uni-calendar size=\\\"md\\\" ariaLabel=\\\"Medium\\\" month=\\\"${MONTH}\\\" />\\n<uni-calendar size=\\\"lg\\\" ariaLabel=\\\"Large\\\" month=\\\"${MONTH}\\\" />\\n<!-- args:\\n{ mode: 'range', value: { start: dayIn(3), end: dayIn(7) }, month: MONTH }\\n-->\"\n },\n {\n \"title\": \"Markers\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Markers -->\\n<uni-calendar size=\\\"sm\\\" ariaLabel=\\\"Small\\\" month=\\\"${MONTH}\\\" />\\n<uni-calendar size=\\\"md\\\" ariaLabel=\\\"Medium\\\" month=\\\"${MONTH}\\\" />\\n<uni-calendar size=\\\"lg\\\" ariaLabel=\\\"Large\\\" month=\\\"${MONTH}\\\" />\\n<!-- args:\\n{\\n month: MONTH,\\n markers: [\\n { date: dayIn(4), variant: 'success', label: '3 slots open' },\\n { date: dayIn(4), variant: 'primary' },\\n { date: dayIn(16), variant: 'warn', label: '1 slot open' },\\n { date: dayIn(24), variant: 'secondary' },\\n ],\\n }\\n-->\"\n },\n {\n \"title\": \"Fenced And Disabled\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Fenced And Disabled -->\\n<uni-calendar size=\\\"sm\\\" ariaLabel=\\\"Small\\\" month=\\\"${MONTH}\\\" />\\n<uni-calendar size=\\\"md\\\" ariaLabel=\\\"Medium\\\" month=\\\"${MONTH}\\\" />\\n<uni-calendar size=\\\"lg\\\" ariaLabel=\\\"Large\\\" month=\\\"${MONTH}\\\" />\\n<!-- args:\\n{\\n month: MONTH,\\n minDate: dayIn(5),\\n maxDate: dayIn(25),\\n disabledDates: (date: string) => [0, 6].includes(new Date(`${date}T00:00:00Z`).getUTCDay()),\\n }\\n-->\"\n },\n {\n \"title\": \"Sizes\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Sizes -->\\n<uni-calendar size=\\\"sm\\\" ariaLabel=\\\"Small\\\" month=\\\"${MONTH}\\\" />\\n<uni-calendar size=\\\"md\\\" ariaLabel=\\\"Medium\\\" month=\\\"${MONTH}\\\" />\\n<uni-calendar size=\\\"lg\\\" ariaLabel=\\\"Large\\\" month=\\\"${MONTH}\\\" />\\n<!-- args:\\n{ locale: 'de-DE', weekStart: 1, month: MONTH, value: dayIn(12) }\\n-->\"\n },\n {\n \"title\": \"Locale And Week Start\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Locale And Week Start -->\\n<uni-calendar size=\\\"sm\\\" ariaLabel=\\\"Small\\\" month=\\\"${MONTH}\\\" />\\n<uni-calendar size=\\\"md\\\" ariaLabel=\\\"Medium\\\" month=\\\"${MONTH}\\\" />\\n<uni-calendar size=\\\"lg\\\" ariaLabel=\\\"Large\\\" month=\\\"${MONTH}\\\" />\\n<!-- args:\\n{ locale: 'de-DE', weekStart: 1, month: MONTH, value: dayIn(12) }\\n-->\"\n },\n {\n \"title\": \"Scheduling\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Scheduling -->\\n<uni-calendar size=\\\"sm\\\" ariaLabel=\\\"Small\\\" month=\\\"${MONTH}\\\" />\\n<uni-calendar size=\\\"md\\\" ariaLabel=\\\"Medium\\\" month=\\\"${MONTH}\\\" />\\n<uni-calendar size=\\\"lg\\\" ariaLabel=\\\"Large\\\" month=\\\"${MONTH}\\\" />\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"An inline month calendar — a form control in its own right, not just the\\ninside of a date picker. It selects a single date or a start–end range, marks\\ndays with app-driven availability dots, and fences selection with\\n`minDate`/`maxDate`/`disabledDates`. Values are plain ISO strings\\n(`'2026-08-20'`, `{ start, end }`), never `Date` objects, so bindings are\\ntimezone-free, serializable and sortable with `<`.\\nReach for it directly when the calendar should stay on screen — scheduling\\npages, availability dashboards, booking flows. For a text field with this\\ngrid in a popup, use `uni-date-input`; both render the same component, so it\\nis one grid to learn, test and theme.\",\n \"dos\": [\n \"Bind ISO strings: `[value]=\\\"'2026-08-20'\\\"` is a complete, correct binding.\",\n \"Drive availability through `markers` and `disabledDates` from app data.\",\n \"Give a standalone calendar an `ariaLabel` naming the question it answers.\"\n ],\n \"donts\": [\n \"Don't convert to `Date` objects at the edge of the component — midnight-UTC\",\n \"Don't restyle selection colours per instance; retheme the `primary` pair.\",\n \"Don't build a popup date field from this yourself — `uni-date-input`\"\n ],\n \"accessibility\": [\n \"The month grid is `role=\\\"grid\\\"` labelled by the month heading (or\",\n \"Every day is a real `<button>` in a `role=\\\"gridcell\\\"`, named with its full\",\n \"One tab stop: roving `tabindex` inside the grid; ←/→ move a day, ↑/↓ a\",\n \"Today is `aria-current=\\\"date\\\"` with an outline; selection is a fill;\",\n \"Selections and range progress announce through one `role=\\\"status\\\"` region;\",\n \"`aria-invalid` is gated on `invalid && (touched || dirty)`, per the\"\n ]\n },\n \"relatedTokens\": [\n \"calendar.behavior.dayBorderRadius\",\n \"calendar.behavior.typeface\",\n \"calendar.behavior.gap\",\n \"calendar.behavior.navPrevSymbol\",\n \"calendar.behavior.navNextSymbol\",\n \"calendar.behavior.weekdayFormat\",\n \"calendar.behavior.showOutsideDays\",\n \"calendar.behavior.todayStyle\"\n ]\n },\n {\n \"id\": \"card\",\n \"name\": \"Card\",\n \"status\": \"stable\",\n \"summary\": \"\",\n \"description\": \"\",\n \"category\": \"layout\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-card\",\n \"api\": []\n }\n },\n \"examples\": [\n {\n \"title\": \"Primary\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Primary -->\\n<uni-card variant=\\\"${variant}\\\">\\n <uni-card-header title=\\\"Card Header\\\"></uni-card-header>\\n <uni-card-content>\\n <span uni-text>${ngContent}</span>\\n </uni-card-content>\\n</uni-card>\\n<!-- args:\\n{\\n variant: 'primary',\\n size: 'lg',\\n ngContent: 'Card content.',\\n }\\n-->\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"Content container with a themed frame: the border resolves from the **border\\nprimitive named by its variant** (`borders.primary` … `borders.success`), the corner\\nradius from the `card` theme options, and an optional elevation shadow. Compose with\\nCard Header and Card Content for the standard anatomy — or point `options.border` at\\na custom primitive to restyle every card in the theme at once.\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": []\n },\n \"relatedTokens\": [\n \"card.behavior.borderRadius\"\n ]\n },\n {\n \"id\": \"card-content\",\n \"name\": \"CardContent\",\n \"status\": \"stable\",\n \"summary\": \"\",\n \"description\": \"\",\n \"category\": \"layout\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-card-content\",\n \"api\": []\n }\n },\n \"examples\": [],\n \"guidelines\": {\n \"whenToUse\": \"\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": []\n },\n \"relatedTokens\": []\n },\n {\n \"id\": \"card-header\",\n \"name\": \"CardHeader\",\n \"status\": \"stable\",\n \"summary\": \"\",\n \"description\": \"\",\n \"category\": \"layout\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-card-header\",\n \"api\": [\n {\n \"name\": \"title\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"default\": \"''\",\n \"description\": \"\"\n },\n {\n \"name\": \"titleTextRole\",\n \"kind\": \"input\",\n \"type\": \"Typeface\",\n \"required\": false,\n \"default\": \"'title-large'\",\n \"description\": \"\"\n }\n ]\n }\n },\n \"examples\": [],\n \"guidelines\": {\n \"whenToUse\": \"\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": []\n },\n \"relatedTokens\": []\n },\n {\n \"id\": \"center\",\n \"name\": \"Center\",\n \"status\": \"stable\",\n \"summary\": \"\",\n \"description\": \"\",\n \"category\": \"layout\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"[uni-center-layout], [center-layout]\",\n \"api\": [\n {\n \"name\": \"display\",\n \"kind\": \"input\",\n \"type\": \"OptionalDisplay\",\n \"required\": false,\n \"default\": \"'flex'\",\n \"description\": \"\"\n },\n {\n \"name\": \"justifyContent\",\n \"kind\": \"input\",\n \"type\": \"OptionalJustifyContent\",\n \"required\": false,\n \"default\": \"'center'\",\n \"description\": \"\"\n },\n {\n \"name\": \"alignItems\",\n \"kind\": \"input\",\n \"type\": \"OptionalAlignItems\",\n \"required\": false,\n \"default\": \"'center'\",\n \"description\": \"\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Primary\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Primary -->\\n<div center-layout ${argsToTemplate(props)}>\\n <span uni-text=\\\"headline-large\\\">${ngContent}</span>\\n</div>\\n<!-- args:\\n{\\n ngContent: 'Centered Content',\\n height: 180,\\n width: '100%',\\n }\\n-->\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"`Center` is a layout component that centers its child within itself.\\n`Center` is an extension to the `Box` component and has all the `Box` attributes available to it.\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": []\n },\n \"relatedTokens\": []\n },\n {\n \"id\": \"checkbox\",\n \"name\": \"Checkbox\",\n \"status\": \"stable\",\n \"summary\": \"\",\n \"description\": \"\",\n \"category\": \"forms\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-checkbox\",\n \"api\": [\n {\n \"name\": \"checked\",\n \"kind\": \"model\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"disabled\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"touched\",\n \"kind\": \"model\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"invalid\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"dirty\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"required\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"Synced from required() validators by the Signal Forms [field] directive.\"\n },\n {\n \"name\": \"ariaDescribedBy\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"Id(s) of external element(s) describing this control — typically your app-rendered error message — exposed as aria-describedby.\"\n },\n {\n \"name\": \"label\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"indeterminate\",\n \"kind\": \"model\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"Mixed state for \\\"select all\\\"-style parent checkboxes. Cleared automatically on the next user interaction, matching native behavior.\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Default\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Default -->\\n<uni-checkbox ${argsToTemplate(args)}></uni-checkbox>\\n<!-- args:\\n{\\n label: 'Accept terms and conditions',\\n variant: 'primary',\\n disabled: false,\\n checked: true,\\n }\\n-->\"\n },\n {\n \"title\": \"Without Label\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Without Label -->\\n<uni-checkbox ${argsToTemplate(args)}></uni-checkbox>\\n<!-- args:\\n{\\n label: '',\\n variant: 'primary',\\n disabled: false,\\n }\\n-->\"\n },\n {\n \"title\": \"Disabled\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Disabled -->\\n<uni-checkbox ${argsToTemplate(args)}></uni-checkbox>\\n<!-- args:\\n{\\n label: 'Disabled checkbox',\\n variant: 'primary',\\n disabled: true,\\n }\\n-->\"\n },\n {\n \"title\": \"Variants\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Variants -->\\n<uni-checkbox ${argsToTemplate(args)}></uni-checkbox>\"\n },\n {\n \"title\": \"With Change Event\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: With Change Event -->\\n<uni-checkbox ${argsToTemplate(args)}></uni-checkbox>\"\n },\n {\n \"title\": \"Form Signals\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Form Signals -->\\n<uni-checkbox ${argsToTemplate(args)}></uni-checkbox>\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"Binary choice control for forms: check to opt in, submit to apply. It implements\\n`FormCheckboxControl` for the Signal Forms `[field]` directive (or bind\\n`[(checked)]` directly), exposes `aria-invalid` once touched, and supports an\\n`indeterminate` model for \\\"select all\\\" parents — cleared automatically on the next\\nuser interaction, matching native behavior.\\nThe box color, check stroke (the variant's paired on-color), and size resolve from\\nthe `checkbox` theme options.\",\n \"dos\": [\n \"Use for choices that apply when the form is submitted\"\n ],\n \"donts\": [\n \"Use for instant on/off effects — that is a toggle\"\n ],\n \"accessibility\": [\n \"Semantic `<input type=\\\"checkbox\\\">` + `<label>`; Space toggles.\",\n \"`aria-invalid` reflects the error state once the field was touched or is dirty.\",\n \"The indeterminate visual state is carried by the native `indeterminate` property, announced as \\\"mixed\\\".\"\n ]\n },\n \"relatedTokens\": [\n \"checkbox.behavior.size\",\n \"checkbox.behavior.boxColor\",\n \"checkbox.behavior.borderRadius\",\n \"checkbox.behavior.focusRingGap\"\n ]\n },\n {\n \"id\": \"confirmation-dialog\",\n \"name\": \"ConfirmationDialog\",\n \"status\": \"stable\",\n \"summary\": \"\",\n \"description\": \"\",\n \"category\": \"feedback\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-confirmation-dialog\",\n \"api\": [\n {\n \"name\": \"show\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"confirmation\",\n \"kind\": \"input\",\n \"type\": \"Confirmation\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"showing\",\n \"kind\": \"output\",\n \"type\": \"boolean\",\n \"required\": false,\n \"description\": \"\"\n }\n ]\n }\n },\n \"examples\": [],\n \"guidelines\": {\n \"whenToUse\": \"\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": []\n },\n \"relatedTokens\": []\n },\n {\n \"id\": \"data-search\",\n \"name\": \"DataSearch\",\n \"status\": \"stable\",\n \"summary\": \"\",\n \"description\": \"\",\n \"category\": \"forms\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-data-search\",\n \"api\": [\n {\n \"name\": \"datasource\",\n \"kind\": \"input\",\n \"type\": \"UniDatasource<T>\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"placeholder\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"default\": \"'Search'\",\n \"description\": \"\"\n },\n {\n \"name\": \"fields\",\n \"kind\": \"input\",\n \"type\": \"string[]\",\n \"required\": false,\n \"description\": \"\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Primary\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Primary -->\\n<uni-data-search ${argsToTemplate(props)} />\\n<div box-layout paddingTop=\\\"md\\\">\\n @for (record of datasource.records(); track record.id) {\\n <div>{{ record.name }} — {{ record.homeworld }}</div>\\n }\\n</div>\\n<!-- args:\\n{\\n datasource: new UniRecordDatasource<any>(starWarsCharacters.slice(0, 10)),\\n placeholder: 'Search characters',\\n }\\n-->\"\n },\n {\n \"title\": \"Field Scoped\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Field Scoped -->\\n<uni-data-search ${argsToTemplate(props)} />\\n<div box-layout paddingTop=\\\"md\\\">\\n @for (record of datasource.records(); track record.id) {\\n <div>{{ record.name }} — {{ record.homeworld }}</div>\\n }\\n</div>\\n<!-- args:\\n{\\n datasource: new UniRecordDatasource<any>(starWarsCharacters.slice(0, 10)),\\n placeholder: 'Search by name only',\\n fields: ['name'],\\n }\\n-->\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"The Data Search input filters a `UniDatasource` as the user types. With a client-side\\n`UniRecordDatasource` it applies a predicate over the record's fields; with a\\n`UniServerSideDatasource` it sends a filter object to the data loader. Pass `fields` to\\nrestrict the search to specific columns. A clear button resets the filter.\\nIt pairs with the [Data Table](?path=/docs/components-data-display-data-table--data-table) — see its\\n\\\"With Search\\\" story.\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": []\n },\n \"relatedTokens\": []\n },\n {\n \"id\": \"data-table\",\n \"name\": \"DataTable\",\n \"status\": \"stable\",\n \"summary\": \"\",\n \"description\": \"\",\n \"category\": \"data\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-data-table\",\n \"api\": [\n {\n \"name\": \"datasource\",\n \"kind\": \"input\",\n \"type\": \"UniDatasource<T>\",\n \"required\": true,\n \"description\": \"\"\n },\n {\n \"name\": \"columns\",\n \"kind\": \"input\",\n \"type\": \"ColumnDefinition<T>[]\",\n \"required\": true,\n \"description\": \"\"\n },\n {\n \"name\": \"useMultiSelect\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"useRowClick\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"true\",\n \"description\": \"\"\n },\n {\n \"name\": \"height\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"rowSelect\",\n \"kind\": \"output\",\n \"type\": \"T\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"rowClick\",\n \"kind\": \"output\",\n \"type\": \"T\",\n \"required\": false,\n \"description\": \"\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Primary\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Primary -->\\n<!-- args:\\n{\\n columns: [\\n {\\n columnDef: 'id',\\n header: 'ID',\\n isSticky: true,\\n },\\n {\\n columnDef: 'name',\\n header: 'Name',\\n textAlign: 'left',\\n },\\n {\\n columnDef: 'species',\\n header: 'Species',\\n },\\n {\\n columnDef: 'height',\\n header: 'Height',\\n cell: (element: any) => (element.height ? `${element.height} m` : ''),\\n },\\n {\\n columnDef: 'homeworld',\\n header: 'Home World',\\n },\\n ],\\n datasource: new UniRecordDatasource<any>(starWarsCharacters),\\n }\\n-->\"\n },\n {\n \"title\": \"With Header\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: With Header -->\\n<!-- args:\\n{\\n height: '300px',\\n columns: [\\n {\\n columnDef: 'id',\\n header: 'ID',\\n },\\n {\\n columnDef: 'name',\\n header: 'Name',\\n textAlign: 'left',\\n },\\n {\\n columnDef: 'homeworld',\\n header: 'Home World',\\n },\\n ],\\n datasource: new UniRecordDatasource<any>(starWarsCharacters),\\n }\\n-->\"\n },\n {\n \"title\": \"With Search\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: With Search -->\\n<!-- args:\\n{\\n height: '300px',\\n columns: [\\n {\\n columnDef: 'id',\\n header: 'ID',\\n },\\n {\\n columnDef: 'name',\\n header: 'Name',\\n textAlign: 'left',\\n },\\n {\\n columnDef: 'homeworld',\\n header: 'Home World',\\n },\\n ],\\n datasource: new UniRecordDatasource<any>(starWarsCharacters),\\n }\\n-->\"\n },\n {\n \"title\": \"With Detail Row\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: With Detail Row -->\\n<!-- args:\\n{\\n height: '300px',\\n columns: [\\n {\\n columnDef: 'id',\\n header: 'ID',\\n },\\n {\\n columnDef: 'name',\\n header: 'Name',\\n textAlign: 'left',\\n },\\n {\\n columnDef: 'homeworld',\\n header: 'Home World',\\n },\\n ],\\n datasource: new UniRecordDatasource<any>(starWarsCharacters),\\n }\\n-->\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"Data grid for structured records: sortable column headers (Sort Header), paging\\n(Paginator), field-scoped search (Data Search), row interaction, sticky columns,\\nand expandable detail rows — all themed through the `dataTable` options, which\\npoint at shared tokens for surfaces, borders, and typography.\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": [\n \"Column headers use `scope=\\\"col\\\"`; sortable headers are real buttons with `aria-sort` on the `<th>`.\",\n \"The loading overlay is a `role=\\\"status\\\"` region and the table is `aria-busy` while loading.\",\n \"Collapsed detail rows are `inert`, out of the accessibility tree until expanded.\"\n ]\n },\n \"relatedTokens\": []\n },\n {\n \"id\": \"date-input\",\n \"name\": \"DateInput\",\n \"status\": \"stable\",\n \"summary\": \"Date field with free-typed parsing and a popup calendar.\",\n \"description\": \"Date field with free-typed parsing and a popup calendar. Type `aug 20`, `8/20/2026` or `2026-08-20`, or pick from the grid — the form gets the same canonical `'YYYY-MM-DD'` string either way. Parsing is `Intl`-driven (locale digit order and month names, never hardcoded); unreadable text stays in the field, flagged, with a `rejected` event. The popup is a native popover hosting the same `uni-calendar` an app could render inline.\",\n \"category\": \"forms\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-date-input, DateInput\",\n \"api\": [\n {\n \"name\": \"value\",\n \"kind\": \"model\",\n \"type\": \"UniDate | undefined\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"disabled\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"touched\",\n \"kind\": \"model\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"invalid\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"dirty\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"required\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"ariaDescribedBy\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"label\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": true,\n \"description\": \"Accessible name for the field, e.g. \\\"Appointment date\\\".\"\n },\n {\n \"name\": \"placeholder\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"Defaults to the locale's digit pattern, e.g. `MM/DD/YYYY`.\"\n },\n {\n \"name\": \"displayFormat\",\n \"kind\": \"input\",\n \"type\": \"Intl.DateTimeFormatOptions\",\n \"required\": false,\n \"default\": \"{ dateStyle: 'medium' }\",\n \"description\": \"How the committed value renders, e.g. `{ dateStyle: 'long' }`.\"\n },\n {\n \"name\": \"locale\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"BCP 47 tag; defaults to the document language, then the browser's.\"\n },\n {\n \"name\": \"commitOnBlur\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"true\",\n \"description\": \"\"\n },\n {\n \"name\": \"embedded\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"Renders without its own input-box chrome, for composers like uni-date-time-input.\"\n },\n {\n \"name\": \"minDate\",\n \"kind\": \"input\",\n \"type\": \"UniDate\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"maxDate\",\n \"kind\": \"input\",\n \"type\": \"UniDate\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"markers\",\n \"kind\": \"input\",\n \"type\": \"UniCalendarMarker[]\",\n \"required\": false,\n \"default\": \"[]\",\n \"description\": \"\"\n },\n {\n \"name\": \"weekStart\",\n \"kind\": \"input\",\n \"type\": \"0 | 1 | 2 | 3 | 4 | 5 | 6\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"opened\",\n \"kind\": \"output\",\n \"type\": \"void\",\n \"required\": false,\n \"description\": \"Popup shown.\"\n },\n {\n \"name\": \"closed\",\n \"kind\": \"output\",\n \"type\": \"void\",\n \"required\": false,\n \"description\": \"Popup hidden.\"\n },\n {\n \"name\": \"rejected\",\n \"kind\": \"output\",\n \"type\": \"UniDateInputRejection\",\n \"required\": false,\n \"description\": \"A typed commit was refused; the raw text stays in the field.\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Primary\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Primary -->\\n<!-- args:\\n{ value: dayIn(12) }\\n-->\"\n },\n {\n \"title\": \"With Calendar Constraints\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: With Calendar Constraints -->\\n<!-- args:\\n{\\n label: 'Appointment date',\\n minDate: TODAY,\\n maxDate: addDays(TODAY, 45),\\n disabledDates: (date: string) => [0, 6].includes(new Date(`${date}T00:00:00Z`).getUTCDay()),\\n markers: [\\n { date: addDays(TODAY, 1), variant: 'success', label: '3 slots open' },\\n { date: addDays(TODAY, 3), variant: 'primary', label: '1 slot open' },\\n ],\\n }\\n-->\"\n },\n {\n \"title\": \"Display Format\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Display Format -->\\n<!-- args:\\n{ value: dayIn(12), displayFormat: { dateStyle: 'full' } }\\n-->\"\n },\n {\n \"title\": \"Disabled\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Disabled -->\\n<!-- args:\\n{ value: dayIn(12), disabled: true }\\n-->\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"A date field with free-typed parsing and a popup calendar. Type `aug 20`,\\n`8/20/2026` or `2026-08-20`, or pick from the grid — the form gets the same\\ncanonical `'YYYY-MM-DD'` string either way. There is no input mask: masks\\nfight paste, IMEs and screen-reader echo, and hard-code one digit order in a\\nlocale-aware library. Text parses on Enter or blur, then re-renders in\\n`displayFormat`.\\nThe popup is a native popover hosting the same `uni-calendar` an app could\\nrender inline, so fences, disabled days and markers forward untouched. Field\\nchrome comes from `uni-input-box` — error, disabled and focus states stay\\nconsistent with every other field.\",\n \"dos\": [\n \"Feed fences and availability (`minDate`, `disabledDates`, `markers`)\",\n \"Listen to `(rejected)` when the app should explain a refusal in its own UI.\"\n ],\n \"donts\": [\n \"Don't add an input mask on top; the field is free text by design.\",\n \"Don't parse dates yourself before binding — pass what the user typed and\",\n \"Don't use it for a time — that is `uni-time-input`; for one combined value\"\n ],\n \"accessibility\": [\n \"The text input is a **plain input, not a combobox** — there is no\",\n \"The toggle is a real icon-button named from the value — *\\\"Choose date\\\"* /\",\n \"The popup is a native popover with `role=\\\"dialog\\\"`; light-dismiss is the\",\n \"Commits, steps and rejections announce through `role=\\\"status\\\"` — the\",\n \"A refused draft shows invalid styling and `aria-invalid` immediately (it\"\n ]\n },\n \"relatedTokens\": []\n },\n {\n \"id\": \"date-time-input\",\n \"name\": \"DateTimeInput\",\n \"status\": \"stable\",\n \"summary\": \"One field for a date and a time: a thin composer seating a uni-date-input and a uni-time-input in one input-box chrome under one label, yielding one combined `'YYYY-MM-DDTHH:mm'` value.\",\n \"description\": \"One field for a date and a time: a thin composer seating a uni-date-input and a uni-time-input in one input-box chrome under one label, yielding one combined `'YYYY-MM-DDTHH:mm'` value. The value emits only when both parts are set — a time without a day is not an answer — and clearing the date clears it. With `slotsFor`, the time part stays disabled until a day is chosen and offers exactly that day's slots: the scheduling flow in one attribute. Two honest tab stops (it is two questions); apps needing a different arrangement compose the primitives directly.\",\n \"category\": \"forms\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-date-time-input, DateTimeInput\",\n \"api\": [\n {\n \"name\": \"value\",\n \"kind\": \"model\",\n \"type\": \"UniDateTime | undefined\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"disabled\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"touched\",\n \"kind\": \"model\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"invalid\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"dirty\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"required\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"ariaDescribedBy\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"label\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": true,\n \"description\": \"Names the group; the parts are announced as \\\"Date\\\" and \\\"Time\\\" under it.\"\n },\n {\n \"name\": \"minDateTime\",\n \"kind\": \"input\",\n \"type\": \"UniDateTime\",\n \"required\": false,\n \"description\": \"Earliest allowed moment; the date and time fences are split from it.\"\n },\n {\n \"name\": \"maxDateTime\",\n \"kind\": \"input\",\n \"type\": \"UniDateTime\",\n \"required\": false,\n \"description\": \"Latest allowed moment; the date and time fences are split from it.\"\n },\n {\n \"name\": \"markers\",\n \"kind\": \"input\",\n \"type\": \"UniCalendarMarker[]\",\n \"required\": false,\n \"default\": \"[]\",\n \"description\": \"\"\n },\n {\n \"name\": \"slots\",\n \"kind\": \"input\",\n \"type\": \"UniTime[]\",\n \"required\": false,\n \"description\": \"Fixed time choices; superseded per-day by `slotsFor` when that is set.\"\n },\n {\n \"name\": \"minuteStep\",\n \"kind\": \"input\",\n \"type\": \"number\",\n \"required\": false,\n \"default\": \"30\",\n \"description\": \"\"\n },\n {\n \"name\": \"hour12\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"weekStart\",\n \"kind\": \"input\",\n \"type\": \"0 | 1 | 2 | 3 | 4 | 5 | 6\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"locale\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Primary\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Primary -->\\n<uni-date-time-input\\n label=\\\"Appointment\\\"\\n [disabledDates]=\\\"isFullyBooked\\\"\\n [markers]=\\\"markers\\\"\\n [slotsFor]=\\\"slotsFor\\\"\\n/>\\n<!-- args:\\n{ value: `${addDays(TODAY, 1)}T15:00` }\\n-->\"\n },\n {\n \"title\": \"Scheduling\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Scheduling -->\\n<uni-date-time-input\\n label=\\\"Appointment\\\"\\n [disabledDates]=\\\"isFullyBooked\\\"\\n [markers]=\\\"markers\\\"\\n [slotsFor]=\\\"slotsFor\\\"\\n/>\\n<!-- args:\\n{ value: `${addDays(TODAY, 1)}T15:00`, disabled: true }\\n-->\"\n },\n {\n \"title\": \"Disabled\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Disabled -->\\n<uni-date-time-input\\n label=\\\"Appointment\\\"\\n [disabledDates]=\\\"isFullyBooked\\\"\\n [markers]=\\\"markers\\\"\\n [slotsFor]=\\\"slotsFor\\\"\\n/>\\n<!-- args:\\n{ value: `${addDays(TODAY, 1)}T15:00`, disabled: true }\\n-->\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"One field for a date and a time: a thin composer seating a `uni-date-input`\\nand a `uni-time-input` in one `uni-input-box` chrome under one label, and\\nmapping the two part-values to one combined `'YYYY-MM-DDTHH:mm'` value. The\\nvalue emits only when **both** parts are set — a time without a day is not an\\nanswer — and clearing the date clears it.\\nIt is a convenience, not the only door: apps that need a different\\narrangement (calendar always inline, slot buttons instead of a time field)\\ncompose the primitives directly.\",\n \"dos\": [\n \"Use `slotsFor` for availability-driven scheduling; it gates and supplies\",\n \"Treat the combined value as the only form value; the parts are internal.\"\n ],\n \"donts\": [\n \"Don't wire separate date and time form fields through this component —\",\n \"Don't expect a value while either part is empty; partial states are\"\n ],\n \"accessibility\": [\n \"One `role=\\\"group\\\"` named by `label`; the parts are named *\\\"Date\\\"* and\",\n \"Tab order: date field → time field. Two tab stops, honestly — it *is* two\",\n \"Each part keeps its own contract: the date part's popup dialog and status\"\n ]\n },\n \"relatedTokens\": []\n },\n {\n \"id\": \"debounce-input\",\n \"name\": \"DebounceInput\",\n \"status\": \"stable\",\n \"summary\": \"Text input that emits `change` only after the user pauses typing.\",\n \"description\": \"Text input that emits `change` only after the user pauses typing. Wears the shared input chrome (themed color, border, typeface, focus ring) via `uni-input-box`; project adornments with the `pre-input` / `post-input` slots, matching `uni-input`'s convention. The ARIA passthrough inputs let a wrapping composite (e.g. SearchInput's combobox) annotate the real input element.\",\n \"category\": \"forms\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-debounce-input\",\n \"api\": [\n {\n \"name\": \"inputName\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"inputId\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"debounceTime\",\n \"kind\": \"input\",\n \"type\": \"number\",\n \"required\": false,\n \"default\": \"400\",\n \"description\": \"\"\n },\n {\n \"name\": \"label\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"Accessible name for the input.\"\n },\n {\n \"name\": \"placeholder\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"default\": \"''\",\n \"description\": \"\"\n },\n {\n \"name\": \"disabled\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"role\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"ariaExpanded\",\n \"kind\": \"input\",\n \"type\": \"boolean | undefined\",\n \"required\": false,\n \"default\": \"undefined\",\n \"description\": \"\"\n },\n {\n \"name\": \"ariaControls\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"ariaActivedescendant\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"change\",\n \"kind\": \"output\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Primary\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Primary -->\\n<uni-debounce-input ${argsToTemplate(props)} (change)=\\\"lastEmitted = $event\\\" #debounce />\\n<div box-layout paddingTop=\\\"md\\\">\\n <div>Live value: {{ debounce.value() }}</div>\\n <div>Debounced value: {{ lastEmitted }}</div>\\n</div>\\n<!-- args:\\n{\\n inputName: 'search',\\n debounceTime: 400,\\n }\\n-->\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"A themed text input that emits its `change` output only after the user pauses typing\\n(400&nbsp;ms by default) and only when the value actually changed — a signal-based\\ndebounce with no rxjs involved. The live value is exposed as the `value` signal, and\\n`clear()` empties the field immediately (cancelling any pending emit).\\nIt wears the shared input chrome (color, border, typeface, focus ring) via the input\\nbox, and offers `pre-input` / `post-input` attribute slots for adornments plus ARIA\\npassthrough inputs (`role`, `ariaExpanded`, `ariaControls`, `ariaActivedescendant`)\\nso composite widgets can annotate the real input element.\\nUsed by the [Search Input](?path=/docs/components-forms-search-input--search-input), which\\nprojects its magnifier and clear button through the slots and drives the combobox\\nARIA through the passthroughs.\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": [\n \"Set `label` — it becomes the accessible name (`aria-label`) of the inner input.\",\n \"The ARIA passthrough inputs (`role`, `ariaExpanded`, `ariaControls`,\"\n ]\n },\n \"relatedTokens\": []\n },\n {\n \"id\": \"dialog\",\n \"name\": \"Dialog\",\n \"status\": \"stable\",\n \"summary\": \"\",\n \"description\": \"\",\n \"category\": \"feedback\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"dialog[uni-dialog]\",\n \"api\": [\n {\n \"name\": \"show\",\n \"kind\": \"model\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"Two-way bindable open state: [(show)].\"\n },\n {\n \"name\": \"ariaLabel\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"Accessible name for dialogs without a DialogHeader. When a DialogHeader is present it labels the dialog automatically via aria-labelledby.\"\n },\n {\n \"name\": \"initialFocus\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"CSS selector for the element to focus when the dialog opens. Defaults to the browser's native behavior (first focusable element).\"\n },\n {\n \"name\": \"defaultCloseButton\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"showing\",\n \"kind\": \"output\",\n \"type\": \"boolean\",\n \"required\": false,\n \"description\": \"Emits true once opened and false once the closing animation finishes.\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Primary\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Primary -->\\n<button text-button (click)=\\\"dialog.open()\\\">Open Dialog</button>\\n<dialog uni-dialog #dialog>\\n <header uni-dialog-header color=\\\"primary\\\">Sample Dialog</header>\\n <div center-layout [width]=\\\"300\\\" [height]=\\\"200\\\">\\n <span uni-text>Dialog</span>\\n </div>\\n <footer dialog-buttons></footer>\\n</dialog>\\n<!-- args:\\n{}\\n-->\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"Enhanced modal dialog that extends the native HTML `<dialog>` element with built-in animations, composition components, and accessibility features.\\n### Features\\n- **Native HTML Dialog**: Built on the standard dialog element with full semantic support\\n- **Smooth Animations**: Automatic fade transitions for open/close states\\n- **Composition Components**: Optional `DialogHeader` and `DialogButtons` for consistent layouts\\n- **Programmatic Control**: Open/close methods plus show property binding\\n- **Backdrop Handling**: Click-outside-to-close with customizable behavior\\n- **Accessibility**: Full keyboard navigation, focus trapping, and screen reader support\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": [\n \"Focus trapping and keyboard navigation (Tab, Escape, Enter)\",\n \"Screen reader announcements\",\n \"Semantic dialog roles\"\n ]\n },\n \"relatedTokens\": [\n \"dialog.behavior.borderRadius\",\n \"dialog.behavior.color\",\n \"dialog.behavior.border\",\n \"dialog.behavior.padding\",\n \"dialog.behavior.elevation\",\n \"dialog.behavior.backdrop\"\n ]\n },\n {\n \"id\": \"dialog-buttons\",\n \"name\": \"DialogButtons\",\n \"status\": \"stable\",\n \"summary\": \"\",\n \"description\": \"\",\n \"category\": \"feedback\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"[uni-dialog-buttons], [dialog-buttons]\",\n \"api\": [\n {\n \"name\": \"confirmButtonText\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"confirmButtonVariant\",\n \"kind\": \"input\",\n \"type\": \"Variant\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"cancelButtonText\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"cancelButtonVariant\",\n \"kind\": \"input\",\n \"type\": \"Variant\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"disableConfirm\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"padding\",\n \"kind\": \"input\",\n \"type\": \"NullableSize\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"paddingBottom\",\n \"kind\": \"input\",\n \"type\": \"NullableSize\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"justifyContent\",\n \"kind\": \"input\",\n \"type\": \"JustifyContent\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"confirmed\",\n \"kind\": \"output\",\n \"type\": \"unknown\",\n \"required\": false,\n \"description\": \"\"\n }\n ]\n }\n },\n \"examples\": [],\n \"guidelines\": {\n \"whenToUse\": \"\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": []\n },\n \"relatedTokens\": []\n },\n {\n \"id\": \"dialog-header\",\n \"name\": \"DialogHeader\",\n \"status\": \"stable\",\n \"summary\": \"\",\n \"description\": \"\",\n \"category\": \"feedback\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"[uni-dialog-header]\",\n \"api\": []\n }\n },\n \"examples\": [],\n \"guidelines\": {\n \"whenToUse\": \"\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": []\n },\n \"relatedTokens\": []\n },\n {\n \"id\": \"divider\",\n \"name\": \"Divider\",\n \"status\": \"stable\",\n \"summary\": \"\",\n \"description\": \"\",\n \"category\": \"layout\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-divider\",\n \"api\": [\n {\n \"name\": \"orientation\",\n \"kind\": \"input\",\n \"type\": \"Orientation\",\n \"required\": false,\n \"default\": \"'horizontal'\",\n \"description\": \"\"\n },\n {\n \"name\": \"border\",\n \"kind\": \"input\",\n \"type\": \"Border\",\n \"required\": false,\n \"default\": \"'primary'\",\n \"description\": \"\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Primary\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Primary -->\\n<div center-layout height=\\\"200px\\\">\\n <uni-divider border=\\\"${border}\\\" orientation=\\\"${orientation}\\\" />\\n</div>\\n<!-- args:\\n{\\n orientation: 'horizontal',\\n border: 'primary',\\n }\\n-->\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"Dividers are used to visually separate content in a list or group.\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": []\n },\n \"relatedTokens\": []\n },\n {\n \"id\": \"drag-and-drop\",\n \"name\": \"DragAndDrop\",\n \"status\": \"stable\",\n \"summary\": \"\",\n \"description\": \"\",\n \"category\": \"directives\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"[uni-drag-n-drop], [dragAndDrop]\",\n \"api\": [\n {\n \"name\": \"onFileDropped\",\n \"kind\": \"output\",\n \"type\": \"FileList\",\n \"required\": false,\n \"description\": \"\"\n }\n ]\n }\n },\n \"examples\": [],\n \"guidelines\": {\n \"whenToUse\": \"\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": []\n },\n \"relatedTokens\": []\n },\n {\n \"id\": \"drawer\",\n \"name\": \"Drawer\",\n \"status\": \"stable\",\n \"summary\": \"Navigation drawer with two modes sharing one content slot: - `side` — an in-flow `<aside>` that pushes content (dashboard sidenav); opening/closing animates its width, and the divider border primitive separates it from the page.\",\n \"description\": \"Navigation drawer with two modes sharing one content slot: - `side` — an in-flow `<aside>` that pushes content (dashboard sidenav); opening/closing animates its width, and the divider border primitive separates it from the page. - `over` — a native `<dialog>` in the top layer: focus trap, Escape and scrim backdrop come from the platform (same machinery as `uni-dialog`), sliding in from its edge. Surface, width, divider, elevation, padding and backdrop all resolve from `drawer` theme tokens.\",\n \"category\": \"components\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-drawer\",\n \"api\": [\n {\n \"name\": \"open\",\n \"kind\": \"model\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"Two-way bindable open state: [(open)].\"\n },\n {\n \"name\": \"mode\",\n \"kind\": \"input\",\n \"type\": \"DrawerMode\",\n \"required\": false,\n \"default\": \"'side'\",\n \"description\": \"\"\n },\n {\n \"name\": \"position\",\n \"kind\": \"input\",\n \"type\": \"DrawerPosition\",\n \"required\": false,\n \"default\": \"'start'\",\n \"description\": \"\"\n },\n {\n \"name\": \"ariaLabel\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"default\": \"'Navigation'\",\n \"description\": \"Accessible name for the overlay mode's dialog.\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Dashboard Shell\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Dashboard Shell -->\\n<section stack-layout height=\\\"420px\\\" overflow=\\\"hidden\\\">\\n<uni-app-bar title=\\\"Console\\\">\\n <button leading icon-button symbolName=\\\"menu\\\" (click)=\\\"open = !open\\\">Toggle navigation</button>\\n <button trailing icon-button symbolName=\\\"account_circle\\\">Account</button>\\n</uni-app-bar>\\n<div row-layout [grow]=\\\"1\\\" [minHeight]=\\\"0\\\">\\n <uni-drawer mode=\\\"side\\\" [(open)]=\\\"open\\\">\\n <nav stack-layout gap=\\\"sm\\\" aria-label=\\\"Main\\\">\\n <span uni-text=\\\"title-small\\\" display=\\\"block\\\">Dashboard</span>\\n <span uni-text=\\\"title-small\\\" display=\\\"block\\\">Reports</span>\\n <span uni-text=\\\"title-small\\\" display=\\\"block\\\">Settings</span>\\n </nav>\\n </uni-drawer>\\n <main box-layout [grow]=\\\"1\\\" padding=\\\"md\\\" [minWidth]=\\\"0\\\">\\n <h2 uni-text=\\\"headline-small\\\">Content</h2>\\n <span uni-text=\\\"body-1-long\\\" display=\\\"block\\\">\\n The side drawer pushes this content; toggle it from the app bar.\\n </span>\\n </main>\\n</div>\\n</section>\"\n },\n {\n \"title\": \"Overlay\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Overlay -->\\n<section stack-layout height=\\\"420px\\\" overflow=\\\"hidden\\\">\\n<uni-app-bar title=\\\"Console\\\">\\n <button leading icon-button symbolName=\\\"menu\\\" (click)=\\\"open = !open\\\">Toggle navigation</button>\\n <button trailing icon-button symbolName=\\\"account_circle\\\">Account</button>\\n</uni-app-bar>\\n<div row-layout [grow]=\\\"1\\\" [minHeight]=\\\"0\\\">\\n <uni-drawer mode=\\\"side\\\" [(open)]=\\\"open\\\">\\n <nav stack-layout gap=\\\"sm\\\" aria-label=\\\"Main\\\">\\n <span uni-text=\\\"title-small\\\" display=\\\"block\\\">Dashboard</span>\\n <span uni-text=\\\"title-small\\\" display=\\\"block\\\">Reports</span>\\n <span uni-text=\\\"title-small\\\" display=\\\"block\\\">Settings</span>\\n </nav>\\n </uni-drawer>\\n <main box-layout [grow]=\\\"1\\\" padding=\\\"md\\\" [minWidth]=\\\"0\\\">\\n <h2 uni-text=\\\"headline-small\\\">Content</h2>\\n <span uni-text=\\\"body-1-long\\\" display=\\\"block\\\">\\n The side drawer pushes this content; toggle it from the app bar.\\n </span>\\n </main>\\n</div>\\n</section>\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"Navigation drawer with two modes sharing one content slot:\\n- **`side`** renders an in-flow `<aside>` that pushes page content — the classic\\n dashboard sidenav. Opening and closing animates its width; a divider border primitive\\n separates it from the content, and it is hidden from assistive tech while closed.\\n- **`over`** renders a native `<dialog>` in the top layer: focus trapping, Escape, and\\n the scrim backdrop come from the platform, and the panel slides in from its edge\\n (`position`: `start` or `end`).\\n`[(open)]` is two-way; Escape and backdrop clicks keep it in sync. Surface, width,\\ndivider, elevation, padding and backdrop all resolve from the theme's `drawer` options.\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": [\n \"Overlay mode is a native `<dialog>`: focus is trapped by `showModal()`, Escape closes, and the backdrop click closes — all kept in sync with `[(open)]`.\",\n \"Give the overlay an accessible name via `ariaLabel` (defaults to \\\"Navigation\\\").\",\n \"A closed side drawer is `aria-hidden`, so its links leave the accessibility tree.\"\n ]\n },\n \"relatedTokens\": [\n \"drawer.behavior.color\",\n \"drawer.behavior.width\",\n \"drawer.behavior.divider\",\n \"drawer.behavior.elevation\",\n \"drawer.behavior.padding\",\n \"drawer.behavior.backdrop\"\n ]\n },\n {\n \"id\": \"dropdown\",\n \"name\": \"Dropdown\",\n \"status\": \"stable\",\n \"summary\": \"\",\n \"description\": \"\",\n \"category\": \"components\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-dropdown\",\n \"api\": [\n {\n \"name\": \"trigger\",\n \"kind\": \"input\",\n \"type\": \"HTMLElement\",\n \"required\": true,\n \"description\": \"\"\n },\n {\n \"name\": \"placement\",\n \"kind\": \"input\",\n \"type\": \"Placement\",\n \"required\": false,\n \"default\": \"'bottom-start'\",\n \"description\": \"\"\n },\n {\n \"name\": \"offset\",\n \"kind\": \"input\",\n \"type\": \"AnchorOffset\",\n \"required\": false,\n \"default\": \"{ mainAxis: 4, alignmentAxis: 12 }\",\n \"description\": \"\"\n },\n {\n \"name\": \"ariaHasPopup\",\n \"kind\": \"input\",\n \"type\": \"AriaHasPopup | null\",\n \"required\": false,\n \"default\": \"null\",\n \"description\": \"Value for aria-haspopup on the trigger, describing what the popover contains (e.g. 'menu' for Menu, 'dialog' for rich content). When unset, only aria-expanded/aria-controls are managed.\"\n },\n {\n \"name\": \"paddingVertical\",\n \"kind\": \"input\",\n \"type\": \"NullableSize\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"paddingHorizontal\",\n \"kind\": \"input\",\n \"type\": \"NullableSize\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"border\",\n \"kind\": \"input\",\n \"type\": \"Border | undefined\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"borderRadius\",\n \"kind\": \"input\",\n \"type\": \"Radius | undefined\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"shadow\",\n \"kind\": \"input\",\n \"type\": \"Shadow | undefined\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"color\",\n \"kind\": \"input\",\n \"type\": \"ContainerColorToken | undefined\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"dropdownShowing\",\n \"kind\": \"output\",\n \"type\": \"boolean\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"dropdownHiding\",\n \"kind\": \"output\",\n \"type\": \"boolean\",\n \"required\": false,\n \"description\": \"\"\n }\n ]\n }\n },\n \"examples\": [],\n \"guidelines\": {\n \"whenToUse\": \"\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": []\n },\n \"relatedTokens\": [\n \"dropdown.behavior.border\",\n \"dropdown.behavior.borderRadius\",\n \"dropdown.behavior.color\",\n \"dropdown.behavior.shadow\"\n ]\n },\n {\n \"id\": \"expand\",\n \"name\": \"Expand\",\n \"status\": \"stable\",\n \"summary\": \"\",\n \"description\": \"\",\n \"category\": \"layout\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-expand\",\n \"api\": [\n {\n \"name\": \"collapsed\",\n \"kind\": \"model\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"true\",\n \"description\": \"\"\n },\n {\n \"name\": \"transitionSpeed\",\n \"kind\": \"input\",\n \"type\": \"number\",\n \"required\": false,\n \"description\": \"Exact per-instance duration in seconds. Bypasses size-aware scaling — an explicit number means the consumer wants that number. Omitted, the duration derives from the `expand` theme options' `transitionSpeed` scaled by content height (see `duration`).\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Primary\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Primary -->\\n<uni-card>\\n<uni-card-header title=\\\"Expandable Card\\\"><uni-expand-toggle #toggle [transitionSpeed]=\\\"expand.duration()\\\" /></uni-card-header>\\n<uni-expand #expand [collapsed]=\\\"toggle.collapsed()\\\" [transitionSpeed]=\\\"transitionSpeed\\\">\\n <uni-card-content>\\n <span uni-text>${ngContent}</span>\\n </uni-card-content>\\n</uni-expand>\\n</uni-card>\\n<!-- args:\\n{\\n ngContent: 'Expandable Content',\\n }\\n-->\"\n },\n {\n \"title\": \"Snappy\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Snappy -->\\n<uni-card>\\n<uni-card-header title=\\\"Expandable Card\\\"><uni-expand-toggle #toggle [transitionSpeed]=\\\"expand.duration()\\\" /></uni-card-header>\\n<uni-expand #expand [collapsed]=\\\"toggle.collapsed()\\\" [transitionSpeed]=\\\"transitionSpeed\\\">\\n <uni-card-content>\\n <span uni-text>${ngContent}</span>\\n </uni-card-content>\\n</uni-expand>\\n</uni-card>\\n<!-- args:\\n{\\n ngContent: 'Reveals in exactly 150ms, regardless of content height.',\\n transitionSpeed: 0.15,\\n }\\n-->\"\n },\n {\n \"title\": \"Tall\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Tall -->\\n<uni-card>\\n<uni-card-header title=\\\"Expandable Card\\\"><uni-expand-toggle #toggle [transitionSpeed]=\\\"expand.duration()\\\" /></uni-card-header>\\n<uni-expand #expand [collapsed]=\\\"toggle.collapsed()\\\" [transitionSpeed]=\\\"transitionSpeed\\\">\\n <uni-card-content>\\n <span uni-text>${ngContent}</span>\\n </uni-card-content>\\n</uni-expand>\\n</uni-card>\\n<!-- args:\\n{\\n ngContent: Array.from(\\n { length: 12 },\\n (_, i) => `Row ${i + 1} of a tall reveal, timed to its height.`,\\n ).join('<br>'),\\n }\\n-->\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"Expand is a group of components that can be used in concert to expand/collapse sections of information.\\nThe Expand component is transparent in nature and can nest any element to collapse it out of view.\\nThe Expand Toggle is an optional convenience element that can be used to trigger the expand/collapse animation.\\nIt has been designed to work with the Card Header.\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": [\n \"The toggle carries `aria-expanded` and `aria-controls` for its region (wired automatically inside Expand Area).\",\n \"The reveal is motion-safe (WCAG 2.3.3): under `prefers-reduced-motion` the\"\n ]\n },\n \"relatedTokens\": [\n \"expand.behavior.transitionSpeed\"\n ]\n },\n {\n \"id\": \"expand-area\",\n \"name\": \"ExpandArea\",\n \"status\": \"stable\",\n \"summary\": \"\",\n \"description\": \"\",\n \"category\": \"layout\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-expand-area\",\n \"api\": [\n {\n \"name\": \"title\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": true,\n \"description\": \"\"\n },\n {\n \"name\": \"initCollapsed\",\n \"kind\": \"input\",\n \"type\": \"unknown\",\n \"required\": false,\n \"default\": \"false, { transform: booleanAttribute }\",\n \"description\": \"\"\n },\n {\n \"name\": \"padding\",\n \"kind\": \"input\",\n \"type\": \"NullableSize\",\n \"required\": false,\n \"default\": \"'md'\",\n \"description\": \"\"\n },\n {\n \"name\": \"collapsed\",\n \"kind\": \"output\",\n \"type\": \"boolean\",\n \"required\": false,\n \"description\": \"\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Primary\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Primary -->\\n<uni-expand-area title=\\\"${title}\\\" padding=\\\"${padding}\\\" [initCollapsed]=\\\"initCollapsed\\\" #expandArea>\\n <button text-button (click)=\\\"expandArea.toggleExpand()\\\" size=\\\"md\\\" variant=\\\"ghost\\\" symbolLeft=\\\"collapse_all\\\">Collapse area</button>\\n</uni-expand-area>\\n<!-- args:\\n{\\n title: 'Expand Area Title',\\n padding: 'sm',\\n initCollapsed: true,\\n }\\n-->\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"The batteries-included collapsible: a themed surface with a header row, an Expand\\nToggle, and a content region wired together — `aria-expanded`/`aria-controls`\\nhandled automatically. For custom collapse layouts, compose the lower-level Expand\\nand Expand Toggle directly.\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": []\n },\n \"relatedTokens\": []\n },\n {\n \"id\": \"expand-toggle\",\n \"name\": \"ExpandToggle\",\n \"status\": \"stable\",\n \"summary\": \"Trigger for a {@link UniExpandComponent} region.\",\n \"description\": \"Trigger for a {@link UniExpandComponent} region. Two shapes, chosen by whether `label` is set: - **Icon only** (default) — the bare chevron, sized for a Card Header. - **Labelled** — chevron plus a label and optional muted sublabel, as a single full-width button. Most real disclosures need a name for the section, and building that row by hand is the thing this saves; it also makes the label the button's accessible name rather than adjacent text.\",\n \"category\": \"forms\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-expand-toggle\",\n \"api\": [\n {\n \"name\": \"collapsed\",\n \"kind\": \"model\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"true\",\n \"description\": \"\"\n },\n {\n \"name\": \"ariaControls\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"Id of the Expand region this toggle controls (see UniExpandComponent.regionId).\"\n },\n {\n \"name\": \"label\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"Names the region. Setting it switches the toggle to its labelled shape.\"\n },\n {\n \"name\": \"sublabel\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"Muted qualifier beside the label (\\\"for POs & custom orders\\\"). Needs `label`.\"\n },\n {\n \"name\": \"transitionSpeed\",\n \"kind\": \"input\",\n \"type\": \"number\",\n \"required\": false,\n \"description\": \"Rotation duration in seconds. Expand Area binds the region's resolved `duration` here so chevron and reveal share one clock even when the region is size-scaled or overridden per instance.\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Primary\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Primary -->\\n<uni-expand-toggle [collapsed]=\\\"collapsed\\\" #toggle />\\n<div>Collapsed: {{ toggle.collapsed() }}</div>\\n<!-- args:\\n{\\n collapsed: true,\\n }\\n-->\"\n },\n {\n \"title\": \"Labelled\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Labelled -->\\n<uni-expand-toggle [collapsed]=\\\"collapsed\\\" #toggle />\\n<div>Collapsed: {{ toggle.collapsed() }}</div>\\n<!-- args:\\n{\\n collapsed: true,\\n label: 'Dimensions & Materials',\\n sublabel: 'for POs & custom orders',\\n }\\n-->\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"The Expand Toggle is a chevron icon button that controls collapsed/expanded state. It pairs\\nwith the [Expand](?path=/docs/components-surfaces-expand--expand) component: bind the toggle's\\n`collapsed` model to the Expand's `collapsed` input to build collapsible sections.\\nThe icon rotates 180° between states and shows an \\\"Expand\\\"/\\\"Collapse\\\" tooltip.\\nThe transform is applied to the glyph, not to the component host — the host is\\nthe tooltip's anchor, so rotating it would carry the bubble around with it.\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": [\n \"`aria-expanded` is set for you from `collapsed`.\",\n \"Pass `ariaControls` the Expand's `regionId` so the trigger points at its\",\n \"Rotation is motion-safe — it does not animate under `prefers-reduced-motion`.\"\n ]\n },\n \"relatedTokens\": []\n },\n {\n \"id\": \"file-drop-zone\",\n \"name\": \"FileDropZone\",\n \"status\": \"stable\",\n \"summary\": \"\",\n \"description\": \"\",\n \"category\": \"forms\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-file-drop-zone\",\n \"api\": [\n {\n \"name\": \"height\",\n \"kind\": \"input\",\n \"type\": \"number | string\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"borderRadius\",\n \"kind\": \"input\",\n \"type\": \"Radius\",\n \"required\": false,\n \"default\": \"'md'\",\n \"description\": \"\"\n },\n {\n \"name\": \"border\",\n \"kind\": \"input\",\n \"type\": \"Variant\",\n \"required\": false,\n \"default\": \"'light'\",\n \"description\": \"\"\n },\n {\n \"name\": \"padding\",\n \"kind\": \"input\",\n \"type\": \"NullableSize\",\n \"required\": false,\n \"default\": \"'lg'\",\n \"description\": \"\"\n },\n {\n \"name\": \"useBrowseButton\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"browseButtonText\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"default\": \"'Browse for file'\",\n \"description\": \"\"\n },\n {\n \"name\": \"allowedFileExtensions\",\n \"kind\": \"input\",\n \"type\": \"string[]\",\n \"required\": false,\n \"default\": \"[]\",\n \"description\": \"\"\n },\n {\n \"name\": \"label\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"helpTemplate\",\n \"kind\": \"input\",\n \"type\": \"TemplateRef<unknown> | null\",\n \"required\": false,\n \"default\": \"null\",\n \"description\": \"\"\n },\n {\n \"name\": \"helpTemplateContext\",\n \"kind\": \"input\",\n \"type\": \"unknown | null\",\n \"required\": false,\n \"default\": \"null\",\n \"description\": \"\"\n },\n {\n \"name\": \"fileAttached\",\n \"kind\": \"output\",\n \"type\": \"File | undefined\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"fileRemoved\",\n \"kind\": \"output\",\n \"type\": \"unknown\",\n \"required\": false,\n \"description\": \"\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Primary\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Primary -->\\n<uni-file-drop-zone ${argsToTemplate(props)} [helpTemplate]=\\\"myTemplate\\\" />\\n<ng-template #myTemplate>\\n<div stack-layout alignItems=\\\"center\\\">\\n <span uni-text=\\\"title-medium\\\">Title Text</span>\\n <span uni-text=\\\"subtitle-1\\\">Subtitle Text</span>\\n</div>\\n</ng-template>\\n<!-- args:\\n{\\n label: 'Image',\\n browseButtonText: 'Browse for image',\\n allowedFileExtensions: ['png', 'jpg'],\\n }\\n-->\"\n },\n {\n \"title\": \"With Help Template\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: With Help Template -->\\n<uni-file-drop-zone ${argsToTemplate(props)} [helpTemplate]=\\\"myTemplate\\\" />\\n<ng-template #myTemplate>\\n<div stack-layout alignItems=\\\"center\\\">\\n <span uni-text=\\\"title-medium\\\">Title Text</span>\\n <span uni-text=\\\"subtitle-1\\\">Subtitle Text</span>\\n</div>\\n</ng-template>\\n<!-- args:\\n{\\n label: 'Image',\\n browseButtonText: 'Browse for image',\\n allowedFileExtensions: ['png', 'jpg'],\\n }\\n-->\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"The File Drop Zone component is used in uploading files.\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": [\n \"Without a browse button, the zone itself is `role=\\\"button\\\"` with `tabindex=\\\"0\\\"` and Enter/Space activation.\"\n ]\n },\n \"relatedTokens\": []\n },\n {\n \"id\": \"grid\",\n \"name\": \"Grid\",\n \"status\": \"stable\",\n \"summary\": \"\",\n \"description\": \"\",\n \"category\": \"layout\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"[uni-grid-layout], [grid-layout]\",\n \"api\": [\n {\n \"name\": \"display\",\n \"kind\": \"input\",\n \"type\": \"OptionalDisplay\",\n \"required\": false,\n \"default\": \"'grid'\",\n \"description\": \"\"\n },\n {\n \"name\": \"templateAreas\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"templateColumns\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"templateRows\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"outline\",\n \"kind\": \"input\",\n \"type\": \"Thickness\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"outlineColor\",\n \"kind\": \"input\",\n \"type\": \"Variant\",\n \"required\": false,\n \"description\": \"\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Simple Grid\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Simple Grid -->\\n<div grid-layout ${argsToTemplate(props)}>\\n <div box-layout gridArea=\\\"nav\\\" color=\\\"quaternary\\\" padding=\\\"md\\\" borderRadius=\\\"sm\\\">\\n <span uni-text>nav</span>\\n </div>\\n <div box-layout gridArea=\\\"a1\\\" color=\\\"primary\\\" padding=\\\"md\\\" borderRadius=\\\"sm\\\">\\n <span uni-text>a1</span>\\n </div>\\n <div box-layout gridArea=\\\"a2\\\" color=\\\"secondary\\\" padding=\\\"md\\\" borderRadius=\\\"sm\\\">\\n <span uni-text>a2</span>\\n </div>\\n <div box-layout gridArea=\\\"b1\\\" color=\\\"tertiary\\\" padding=\\\"md\\\" borderRadius=\\\"sm\\\">\\n <span uni-text>b1</span>\\n </div>\\n <div box-layout gridArea=\\\"b2\\\" color=\\\"warn\\\" padding=\\\"md\\\" borderRadius=\\\"sm\\\">\\n <span uni-text>b2</span>\\n </div>\\n</div>\\n<!-- args:\\n{\\n templateAreas: `'nav a1 a2' 'nav b1 b2'`,\\n gap: 'sm',\\n }\\n-->\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"Grid is a layout component used for composing elements in a grid-like pattern.\\nLike tables, grid layouts align elements into columns and rows.\\nHowever, grids allow for more control when spanning elements across columns and rows.\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": []\n },\n \"relatedTokens\": []\n },\n {\n \"id\": \"grid-area\",\n \"name\": \"GridArea\",\n \"status\": \"stable\",\n \"summary\": \"\",\n \"description\": \"\",\n \"category\": \"layout\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"[uni-grid-area-layout], [grid-area-layout]\",\n \"api\": [\n {\n \"name\": \"area\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": true,\n \"description\": \"\"\n }\n ]\n }\n },\n \"examples\": [],\n \"guidelines\": {\n \"whenToUse\": \"\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": []\n },\n \"relatedTokens\": []\n },\n {\n \"id\": \"icon\",\n \"name\": \"Icon\",\n \"status\": \"stable\",\n \"summary\": \"\",\n \"description\": \"\",\n \"category\": \"primitives\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-icon\",\n \"api\": [\n {\n \"name\": \"color\",\n \"kind\": \"input\",\n \"type\": \"ColorToken\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"name\",\n \"kind\": \"input\",\n \"type\": \"IconName\",\n \"required\": true,\n \"description\": \"\"\n },\n {\n \"name\": \"size\",\n \"kind\": \"input\",\n \"type\": \"CssLength\",\n \"required\": false,\n \"description\": \"Explicit square size. Bare numbers are px; strings pass through, so any CSS length works (`'1.25rem'`, `'1em'`, `'clamp(…)'`). Leave it unset to keep the default behaviour — the icon fills its container, which is what lets a themed control size its own glyph through padding. Set it at call sites that would otherwise need a width/height rule just to size one icon.\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Primary\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Primary -->\\n<div box-layout height=\\\"${containerSize}px\\\">\\n <uni-icon name=\\\"${name}\\\" color=\\\"${color}\\\" ${size ?\\n<!-- args:\\n{\\n name: 'checkCircle',\\n }\\n-->\"\n },\n {\n \"title\": \"Explicit Size\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Explicit Size -->\\n<div box-layout height=\\\"${containerSize}px\\\">\\n <uni-icon name=\\\"${name}\\\" color=\\\"${color}\\\" ${size ?\\n<!-- args:\\n{\\n name: 'checkCircle',\\n size: 20,\\n containerSize: 48,\\n }\\n-->\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"Icons are adaptive svg images. By default they grow to the space allotted to them and\\nuse the current color of the parent element — so a themed control can size its own glyph\\nthrough padding, and recoloring the container recolors the icon.\\nBoth defaults can be overridden:\\n- `color` statically sets the icon color, ignoring `currentColor`.\\n- `size` sets an explicit square size, for call sites that would otherwise need a\\n width/height CSS rule just to size one icon. Bare numbers are px; strings pass\\n through, so any CSS length works.\\n```html\\n```\\nLeave `size` off wherever the container already defines the box — that is still the\\npreferred form, and it is what keeps a themed `icon-button` in control of its glyph.\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": [\n \"Icons are decorative (`aria-hidden`) — the parent control carries the accessible name.\",\n \"Icons come from the theme's `icons` map (masked with `currentColor`); unknown names render nothing.\"\n ]\n },\n \"relatedTokens\": []\n },\n {\n \"id\": \"icon-button\",\n \"name\": \"IconButton\",\n \"status\": \"stable\",\n \"summary\": \"\",\n \"description\": \"\",\n \"category\": \"primitives\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"button[uni-icon-button], button[icon-button]\",\n \"api\": [\n {\n \"name\": \"ariaLabel\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"Accessible name for the button. Alternative to projecting text content (`<button icon-button>Close</button>`); one of the two is required for an icon-only button to be announced correctly.\"\n },\n {\n \"name\": \"iconName\",\n \"kind\": \"input\",\n \"type\": \"IconName\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"symbolName\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"variant\",\n \"kind\": \"input\",\n \"type\": \"Variant\",\n \"required\": false,\n \"default\": \"'ghost'\",\n \"description\": \"\"\n },\n {\n \"name\": \"size\",\n \"kind\": \"input\",\n \"type\": \"Size\",\n \"required\": false,\n \"default\": \"'lg'\",\n \"description\": \"\"\n },\n {\n \"name\": \"disable\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"loading\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"opticalSize\",\n \"kind\": \"input\",\n \"type\": \"number\",\n \"required\": false,\n \"default\": \"24\",\n \"description\": \"\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Primary\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Primary -->\\n<button icon-button iconName=\\\"${iconName}\\\" variant=\\\"${variant}\\\" size=\\\"${size}\\\" ${argsToTemplate(\\n props\\n)}></button>\\n<!-- args:\\n{\\n iconName: 'search',\\n size: 'lg',\\n variant: 'ghost',\\n }\\n-->\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"A square, icon-only button for toolbars, bars, and tight layouts. Renders a real\\n`<button>` around a symbol or icon, with ghost as the default variant so it sits\\nquietly on any surface. Because there is no visible text, the accessible name comes\\nfrom projected (visually hidden) text or `ariaLabel`.\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": [\n \"Icon-only buttons need a name: project text (rendered visually hidden) or set `ariaLabel`.\",\n \"The icon/symbol itself is decorative (`aria-hidden`).\"\n ]\n },\n \"relatedTokens\": []\n },\n {\n \"id\": \"input\",\n \"name\": \"Input\",\n \"status\": \"stable\",\n \"summary\": \"\",\n \"description\": \"\",\n \"category\": \"forms\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-input\",\n \"api\": [\n {\n \"name\": \"value\",\n \"kind\": \"model\",\n \"type\": \"string\",\n \"required\": false,\n \"default\": \"''\",\n \"description\": \"\"\n },\n {\n \"name\": \"disabled\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"touched\",\n \"kind\": \"model\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"invalid\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"dirty\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"required\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"Synced from required() validators by the Signal Forms [field] directive.\"\n },\n {\n \"name\": \"ariaDescribedBy\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"Id(s) of external element(s) describing this control — typically your app-rendered error message — exposed as aria-describedby.\"\n },\n {\n \"name\": \"label\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": true,\n \"description\": \"\"\n },\n {\n \"name\": \"placeholder\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"default\": \"''\",\n \"description\": \"\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Primary\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Primary -->\\n<uni-input ${argsToTemplate(props)}>\\n</uni-input>\\n<!-- args:\\n{\\n label: 'Email Address',\\n placeholder: 'Enter your email',\\n value: '',\\n disabled: false,\\n touched: false,\\n invalid: false,\\n dirty: false,\\n }\\n-->\"\n },\n {\n \"title\": \"With Value\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: With Value -->\\n<uni-input ${argsToTemplate(props)}>\\n</uni-input>\\n<!-- args:\\n{\\n label: 'Username',\\n placeholder: 'Enter username',\\n value: 'john.doe',\\n disabled: false,\\n touched: true,\\n invalid: false,\\n dirty: true,\\n }\\n-->\"\n },\n {\n \"title\": \"Disabled\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Disabled -->\\n<uni-input ${argsToTemplate(props)}>\\n</uni-input>\\n<!-- args:\\n{\\n label: 'Disabled Input',\\n placeholder: 'This input is disabled',\\n value: 'Cannot edit this',\\n disabled: true,\\n touched: false,\\n invalid: false,\\n dirty: false,\\n }\\n-->\"\n },\n {\n \"title\": \"Invalid\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Invalid -->\\n<uni-input ${argsToTemplate(props)}>\\n</uni-input>\\n<!-- args:\\n{\\n label: 'Email Address',\\n placeholder: 'Enter your email',\\n value: 'invalid-email',\\n disabled: false,\\n touched: true,\\n invalid: true,\\n dirty: true,\\n }\\n-->\"\n },\n {\n \"title\": \"Required\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Required -->\\n<uni-input ${argsToTemplate(props)}>\\n</uni-input>\\n<!-- args:\\n{\\n label: 'Full Name',\\n placeholder: 'This field is required',\\n value: '',\\n disabled: false,\\n touched: true,\\n invalid: true,\\n dirty: false,\\n }\\n-->\"\n },\n {\n \"title\": \"Long Label\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Long Label -->\\n<uni-input ${argsToTemplate(props)}>\\n</uni-input>\\n<!-- args:\\n{\\n label: 'A Very Long Label That Demonstrates How The Component Handles Extended Text',\\n placeholder: 'Enter some text',\\n value: '',\\n disabled: false,\\n touched: false,\\n invalid: false,\\n dirty: false,\\n }\\n-->\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"Single-line text field with the shared input chrome (themed color, border, typeface,\\nfocus ring, error state). It implements `FormValueControl<string>`: bind a Signal\\nForms field with `[field]`, or drive `[(value)]` directly. Errors style the field\\nonly after the user has interacted (touched or dirty), and `required` syncs from\\n`required()` validators automatically.\\nProject adornments with the `pre-input` / `post-input` slots. For multi-line text\\nuse Textarea; for search semantics use Search Input.\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": [\n \"`label` is required and becomes the accessible name (`aria-label`).\",\n \"`aria-invalid` reflects the error state once the field was touched or is dirty.\",\n \"`aria-required` mirrors the `required` state synced from validators.\",\n \"Link external error text with `ariaDescribedBy`.\"\n ]\n },\n \"relatedTokens\": [\n \"input.behavior.typeface\",\n \"input.behavior.color\",\n \"input.behavior.textColor\",\n \"input.behavior.disabledColor\",\n \"input.behavior.disabledTextColor\",\n \"input.behavior.border\",\n \"input.behavior.borderRadius\",\n \"input.behavior.errorShadow\",\n \"input.behavior.errorBorder\",\n \"input.behavior.height\",\n \"input.behavior.paddingLeft\",\n \"input.behavior.focusOutline\",\n \"input.behavior.focusOutlineOffset\"\n ]\n },\n {\n \"id\": \"input-box\",\n \"name\": \"InputBox\",\n \"status\": \"stable\",\n \"summary\": \"\",\n \"description\": \"\",\n \"category\": \"forms\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-input-box\",\n \"api\": [\n {\n \"name\": \"disabled\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"error\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"minWidth\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"default\": \"'0'\",\n \"description\": \"\"\n },\n {\n \"name\": \"height\",\n \"kind\": \"input\",\n \"type\": \"string | number | undefined\",\n \"required\": false,\n \"default\": \"undefined\",\n \"description\": \"Override the themed field height, e.g. `'auto'` for multi-line fields.\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Primary\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Primary -->\\n<uni-input-box ${argsToTemplate(props)}>\\n <input type=\\\"text\\\" placeholder=\\\"Type here...\\\" />\\n</uni-input-box>\\n<!-- args:\\n{\\n disabled: false,\\n error: false,\\n }\\n-->\"\n },\n {\n \"title\": \"Error State\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Error State -->\\n<uni-input-box ${argsToTemplate(props)}>\\n <input type=\\\"text\\\" placeholder=\\\"Type here...\\\" />\\n</uni-input-box>\\n<!-- args:\\n{\\n disabled: false,\\n error: true,\\n }\\n-->\"\n },\n {\n \"title\": \"Disabled\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Disabled -->\\n<uni-input-box ${argsToTemplate(props)}>\\n <input type=\\\"text\\\" placeholder=\\\"Type here...\\\" />\\n</uni-input-box>\\n<!-- args:\\n{\\n disabled: true,\\n error: false,\\n }\\n-->\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"The Input Box is the themed shell shared by all text-like form controls\\n([Input](?path=/docs/components-forms-input--input),\\n[Select](?path=/docs/components-forms-select--select), Multi Select Dropdown). It projects any\\nnative `input` or `select` element, strips the platform's default styling, and applies the\\n`input` component theme options: colors, border, radius, focus outline, and the error and\\ndisabled states.\\nUse it directly when composing a custom form control that should match the design system's\\ninput styling.\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": []\n },\n \"relatedTokens\": []\n },\n {\n \"id\": \"json-view\",\n \"name\": \"JsonView\",\n \"status\": \"stable\",\n \"summary\": \"\",\n \"description\": \"\",\n \"category\": \"components\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-json-view\",\n \"api\": [\n {\n \"name\": \"json\",\n \"kind\": \"input\",\n \"type\": \"unknown\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"rows\",\n \"kind\": \"input\",\n \"type\": \"number\",\n \"required\": false,\n \"default\": \"6\",\n \"description\": \"\"\n },\n {\n \"name\": \"fontSize\",\n \"kind\": \"input\",\n \"type\": \"AbsoluteSize | string\",\n \"required\": false,\n \"default\": \"'medium'\",\n \"description\": \"\"\n },\n {\n \"name\": \"width\",\n \"kind\": \"input\",\n \"type\": \"string | number\",\n \"required\": false,\n \"default\": \"'100%'\",\n \"description\": \"\"\n },\n {\n \"name\": \"selectOnClick\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"true\",\n \"description\": \"\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Primary\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Primary -->\\n<!-- args:\\n{\\n json: { a: { b: ['c', 'd', 'e', 'f'], g: ['h', 'i'] }, j: 'k' },\\n }\\n-->\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"The JSON View component provides a simple way to display JSON data in a formatted, readable manner. It renders the JSON in a textarea element, making it easy for users to view and copy the content. The component automatically formats the JSON with proper indentation for better readability.\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": []\n },\n \"relatedTokens\": []\n },\n {\n \"id\": \"menu\",\n \"name\": \"Menu\",\n \"status\": \"stable\",\n \"summary\": \"\",\n \"description\": \"\",\n \"category\": \"layout\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-menu\",\n \"api\": [\n {\n \"name\": \"menuItems\",\n \"kind\": \"input\",\n \"type\": \"MenuItem[]\",\n \"required\": true,\n \"description\": \"\"\n },\n {\n \"name\": \"activeItem\",\n \"kind\": \"input\",\n \"type\": \"MenuItem\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"placement\",\n \"kind\": \"input\",\n \"type\": \"Placement\",\n \"required\": false,\n \"default\": \"'bottom-start'\",\n \"description\": \"\"\n },\n {\n \"name\": \"menuItemClicked\",\n \"kind\": \"output\",\n \"type\": \"MenuItem\",\n \"required\": false,\n \"description\": \"\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Primary\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Primary -->\\n<div box-layout color=\\\"primary\\\" padding=\\\"sm\\\">\\n <uni-menu ${argsToTemplate(props)}>\\n <button text-button variant=\\\"ghost\\\" symbolRight=\\\"arrow_drop_down\\\">Menu</button>\\n </uni-menu>\\n</div>\\n<!-- args:\\n{\\n menuItems: [\\n { label: 'Language', symbolName: 'translate' },\\n { label: 'Settings', symbolName: 'settings' },\\n { label: 'Logout', symbolName: 'logout' },\\n ],\\n }\\n-->\"\n },\n {\n \"title\": \"Tones\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Tones -->\\n<div box-layout color=\\\"primary\\\" padding=\\\"sm\\\">\\n <uni-menu ${argsToTemplate(props)}>\\n <button text-button variant=\\\"ghost\\\" symbolRight=\\\"arrow_drop_down\\\">Menu</button>\\n </uni-menu>\\n</div>\\n<!-- args:\\n{\\n menuItems: [\\n { label: 'Rename', symbolName: 'edit' },\\n { label: 'Duplicate', symbolName: 'content_copy' },\\n { label: 'Share', symbolName: 'share', disabled: true },\\n { divider: true },\\n { label: 'Delete', symbolName: 'delete', variant: 'warn' },\\n ],\\n }\\n-->\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"Menus can be linked to any component, but it is recommended to use either the `text-button` or `icon-button` component.\\nMenus are populated by creating an array of Menu Items (`MenuItem[]`) and binding it to the `Menu` component.\\nActions are optional as the `Menu` component also emits the clicked menu item via the `menuItemClicked` output attribute.\\n### Menu Item Interface\\nAn item is either a labeled action, a templated action, or a divider:\\n```\\nMenuItem =\\n | { label: string; symbolName?: string; action?: () => void;\\n variant?: Variant; disabled?: boolean }\\n | { template: TemplateRef<T>; context: T; symbolName?: string;\\n action?: () => void; variant?: Variant; disabled?: boolean }\\n | { divider: true }\\n```\\n- `variant` routes through the theme's `menuItem` variants — e.g. `variant: 'warn'`\\n renders the item in the theme's destructive tone.\\n- `disabled` items render with the disabled color and are skipped by keyboard\\n navigation.\\n- `{ divider: true }` renders a `role=\\\"separator\\\"` rule styled by the `menu`\\n theme options.\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": [\n \"Full ARIA menu pattern: arrows and Home/End move, first-letter typeahead jumps, Enter/Space activates.\",\n \"ArrowDown/ArrowUp on the trigger opens onto the first/last item; focus returns to the trigger on close.\"\n ]\n },\n \"relatedTokens\": [\n \"menu.behavior.minWidth\",\n \"menu.behavior.paddingVertical\",\n \"menu.behavior.paddingHorizontal\",\n \"menu.behavior.dividerBorder\",\n \"menu.behavior.dividerSpacing\"\n ]\n },\n {\n \"id\": \"menu-item\",\n \"name\": \"MenuItem\",\n \"status\": \"stable\",\n \"summary\": \"\",\n \"description\": \"\",\n \"category\": \"layout\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"[uni-menu-item], [menu-item]\",\n \"api\": [\n {\n \"name\": \"label\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"template\",\n \"kind\": \"input\",\n \"type\": \"TemplateRef<T>\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"context\",\n \"kind\": \"input\",\n \"type\": \"T\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"symbolName\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"active\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"variant\",\n \"kind\": \"input\",\n \"type\": \"Variant | undefined\",\n \"required\": false,\n \"description\": \"Tone routed through the theme's `menuItem` variants (e.g. 'warn').\"\n },\n {\n \"name\": \"hoverColor\",\n \"kind\": \"input\",\n \"type\": \"ContainerColorToken | undefined\",\n \"required\": false,\n \"description\": \"Per-instance override of the theme's `menuItem.hoverColor`.\"\n },\n {\n \"name\": \"disabled\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n }\n ]\n }\n },\n \"examples\": [],\n \"guidelines\": {\n \"whenToUse\": \"\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": []\n },\n \"relatedTokens\": []\n },\n {\n \"id\": \"multi-select\",\n \"name\": \"MultiSelect\",\n \"status\": \"stable\",\n \"summary\": \"\",\n \"description\": \"\",\n \"category\": \"forms\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-multi-select\",\n \"api\": [\n {\n \"name\": \"options\",\n \"kind\": \"input\",\n \"type\": \"Option<T>[]\",\n \"required\": false,\n \"default\": \"[]\",\n \"description\": \"\"\n },\n {\n \"name\": \"selections\",\n \"kind\": \"input\",\n \"type\": \"T[] | null | undefined\",\n \"required\": false,\n \"default\": \"undefined\",\n \"description\": \"\"\n },\n {\n \"name\": \"updates\",\n \"kind\": \"output\",\n \"type\": \"T[] | undefined\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"flexDirection\",\n \"kind\": \"input\",\n \"type\": \"'row' | 'row-reverse' | 'column' | 'column-reverse'\",\n \"required\": false,\n \"default\": \"'column'\",\n \"description\": \"\"\n },\n {\n \"name\": \"checkboxGap\",\n \"kind\": \"input\",\n \"type\": \"NullableSize | undefined\",\n \"required\": false,\n \"default\": \"'sm'\",\n \"description\": \"\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Primary\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Primary -->\\n<uni-multi-select ${argsToTemplate(props)}>\\n</uni-multi-select>\\n<!-- args:\\n{\\n options: [\\n { value: 'option1', label: 'Option 1' },\\n { value: 'option2', label: 'Option 2' },\\n { value: 'option3', label: 'Option 3' },\\n { value: 'option4', label: 'Option 4' },\\n ],\\n selections: ['option1', 'option3'],\\n }\\n-->\"\n },\n {\n \"title\": \"Empty\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Empty -->\\n<uni-multi-select ${argsToTemplate(props)}>\\n</uni-multi-select>\\n<!-- args:\\n{\\n options: [\\n { value: 'option1', label: 'Option 1' },\\n { value: 'option2', label: 'Option 2' },\\n { value: 'option3', label: 'Option 3' },\\n ],\\n selections: undefined,\\n }\\n-->\"\n },\n {\n \"title\": \"Single Selection\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Single Selection -->\\n<uni-multi-select ${argsToTemplate(props)}>\\n</uni-multi-select>\\n<!-- args:\\n{\\n options: [\\n { value: 'red', label: 'Red' },\\n { value: 'green', label: 'Green' },\\n { value: 'blue', label: 'Blue' },\\n ],\\n selections: ['red'],\\n }\\n-->\"\n },\n {\n \"title\": \"Many Options\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Many Options -->\\n<uni-multi-select ${argsToTemplate(props)}>\\n</uni-multi-select>\\n<!-- args:\\n{\\n options: [\\n { value: 'option1', label: 'First Option' },\\n { value: 'option2', label: 'Second Option' },\\n { value: 'option3', label: 'Third Option' },\\n { value: 'option4', label: 'Fourth Option' },\\n { value: 'option5', label: 'Fifth Option' },\\n { value: 'option6', label: 'Sixth Option' },\\n { value: 'option7', label: 'Seventh Option' },\\n { value: 'option8', label: 'Eighth Option' },\\n ],\\n selections: ['option2', 'option4', 'option6'],\\n }\\n-->\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"Inline multiple-choice: every option visible as a toggleable item, selection\\nemitted as an array. Reach for it when the option set is small enough to show all\\nat once and seeing the full set helps the choice; when space is tight or options\\nare many, use Multi Select Dropdown instead.\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": [\n \"Options are real checkboxes in a labelled group — Space toggles, Tab moves between them.\",\n \"Selection state is announced per option.\"\n ]\n },\n \"relatedTokens\": []\n },\n {\n \"id\": \"multi-select-dropdown\",\n \"name\": \"MultiSelectDropdown\",\n \"status\": \"stable\",\n \"summary\": \"\",\n \"description\": \"\",\n \"category\": \"forms\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-multi-select-dropdown\",\n \"api\": [\n {\n \"name\": \"value\",\n \"kind\": \"model\",\n \"type\": \"T[]\",\n \"required\": false,\n \"default\": \"[]\",\n \"description\": \"\"\n },\n {\n \"name\": \"disabled\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"touched\",\n \"kind\": \"model\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"invalid\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"dirty\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"required\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"Synced from required() validators by the Signal Forms [field] directive.\"\n },\n {\n \"name\": \"ariaDescribedBy\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"Id(s) of external element(s) describing this control — typically your app-rendered error message — exposed as aria-describedby.\"\n },\n {\n \"name\": \"options\",\n \"kind\": \"input\",\n \"type\": \"Options<T>\",\n \"required\": true,\n \"description\": \"\"\n },\n {\n \"name\": \"placeholder\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"default\": \"''\",\n \"description\": \"\"\n },\n {\n \"name\": \"label\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"What the field is for, e.g. \\\"Fruits\\\". Rendered visually hidden inside the trigger so its accessible name reads \\\"Fruits, Apple, Pear\\\" — without it a screen reader announces only the current selection, with no clue which field it belongs to.\"\n },\n {\n \"name\": \"debounceTime\",\n \"kind\": \"input\",\n \"type\": \"number\",\n \"required\": false,\n \"default\": \"200\",\n \"description\": \"Debounce for the filter box, matching the library's input debounce.\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Primary\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Primary -->\\n<uni-multi-select-dropdown ${argsToTemplate(props)}>\\n</uni-multi-select-dropdown>\\n<!-- args:\\n{\\n options: [\\n { value: 'option1', label: 'Option 1' },\\n { value: 'option2', label: 'Option 2' },\\n { value: 'option3', label: 'Option 3' },\\n { value: 'option4', label: 'Option 4' },\\n ],\\n value: ['option1', 'option3'],\\n }\\n-->\"\n },\n {\n \"title\": \"Empty\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Empty -->\\n<uni-multi-select-dropdown ${argsToTemplate(props)}>\\n</uni-multi-select-dropdown>\\n<!-- args:\\n{\\n options: [\\n { value: 'option1', label: 'Option 1' },\\n { value: 'option2', label: 'Option 2' },\\n { value: 'option3', label: 'Option 3' },\\n ],\\n value: [],\\n }\\n-->\"\n },\n {\n \"title\": \"Single Selection\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Single Selection -->\\n<uni-multi-select-dropdown ${argsToTemplate(props)}>\\n</uni-multi-select-dropdown>\\n<!-- args:\\n{\\n options: [\\n { value: 'red', label: 'Red' },\\n { value: 'green', label: 'Green' },\\n { value: 'blue', label: 'Blue' },\\n ],\\n value: ['red'],\\n }\\n-->\"\n },\n {\n \"title\": \"Many Options\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Many Options -->\\n<uni-multi-select-dropdown ${argsToTemplate(props)}>\\n</uni-multi-select-dropdown>\\n<!-- args:\\n{\\n options: [\\n { value: 'option1', label: 'First Option' },\\n { value: 'option2', label: 'Second Option' },\\n { value: 'option3', label: 'Third Option' },\\n { value: 'option4', label: 'Fourth Option' },\\n { value: 'option5', label: 'Fifth Option' },\\n { value: 'option6', label: 'Sixth Option' },\\n { value: 'option7', label: 'Seventh Option' },\\n { value: 'option8', label: 'Eighth Option' },\\n ],\\n value: ['option2', 'option4', 'option6'],\\n }\\n-->\"\n },\n {\n \"title\": \"Disabled\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Disabled -->\\n<uni-multi-select-dropdown ${argsToTemplate(props)}>\\n</uni-multi-select-dropdown>\\n<!-- args:\\n{\\n options: [\\n { value: 'option1', label: 'Option 1' },\\n { value: 'option2', label: 'Option 2' },\\n { value: 'option3', label: 'Option 3' },\\n ],\\n value: ['option1'],\\n disabled: true,\\n }\\n-->\"\n },\n {\n \"title\": \"Error State\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Error State -->\\n<uni-multi-select-dropdown ${argsToTemplate(props)}>\\n</uni-multi-select-dropdown>\\n<!-- args:\\n{\\n options: [\\n { value: 'option1', label: 'Option 1' },\\n { value: 'option2', label: 'Option 2' },\\n { value: 'option3', label: 'Option 3' },\\n ],\\n value: [],\\n invalid: true,\\n touched: true,\\n }\\n-->\"\n },\n {\n \"title\": \"With Placeholder\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: With Placeholder -->\\n<uni-multi-select-dropdown ${argsToTemplate(props)}>\\n</uni-multi-select-dropdown>\\n<!-- args:\\n{\\n options: [\\n { value: 'apple', label: 'Apple' },\\n { value: 'banana', label: 'Banana' },\\n { value: 'orange', label: 'Orange' },\\n { value: 'grape', label: 'Grape' },\\n ],\\n value: [],\\n placeholder: 'Choose your favorite fruits...',\\n }\\n-->\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"Multiple choice behind a compact trigger: a disclosure popover containing a search\\nfield, checkbox options, and a Done action. Implements `FormValueControl` with an\\narray value for Signal Forms, and shows a summarized selection in the trigger.\\nThe popover surface, radius, and elevation resolve from the\\n`multiSelectDropdown` theme options.\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": [\n \"The trigger is a disclosure (`aria-haspopup=\\\"dialog\\\"`, `aria-expanded`); the popover contains native focusables Tab reaches normally.\",\n \"The search input is labelled; options are real checkboxes announced with their state.\",\n \"Escape closes the popover and returns focus to the trigger.\"\n ]\n },\n \"relatedTokens\": []\n },\n {\n \"id\": \"notification-badge\",\n \"name\": \"NotificationBadge\",\n \"status\": \"stable\",\n \"summary\": \"\",\n \"description\": \"\",\n \"category\": \"feedback\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-notification-badge\",\n \"api\": [\n {\n \"name\": \"count\",\n \"kind\": \"input\",\n \"type\": \"number | undefined\",\n \"required\": false,\n \"default\": \"undefined\",\n \"description\": \"\"\n },\n {\n \"name\": \"maxCount\",\n \"kind\": \"input\",\n \"type\": \"number\",\n \"required\": false,\n \"default\": \"99\",\n \"description\": \"\"\n },\n {\n \"name\": \"badgeVariant\",\n \"kind\": \"input\",\n \"type\": \"'dot' | 'count' | 'pill'\",\n \"required\": false,\n \"default\": \"'count'\",\n \"description\": \"\"\n },\n {\n \"name\": \"color\",\n \"kind\": \"input\",\n \"type\": \"Variant | undefined\",\n \"required\": false,\n \"default\": \"undefined\",\n \"description\": \"\"\n },\n {\n \"name\": \"position\",\n \"kind\": \"input\",\n \"type\": \"'top-right' | 'top-left' | 'bottom-right' | 'bottom-left'\",\n \"required\": false,\n \"default\": \"'top-right'\",\n \"description\": \"\"\n },\n {\n \"name\": \"show\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"true\",\n \"description\": \"\"\n },\n {\n \"name\": \"ariaLabel\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"Screen-reader text for the badge (e.g. \\\"5 unread messages\\\"). Without it a sensible default is announced; a bare number or dot carries no meaning.\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Default\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Default -->\\n<div box-layout padding=\\\"md\\\">\\n<uni-notification-badge\\n [count]=\\\"count\\\"\\n [maxCount]=\\\"maxCount\\\"\\n [badgeVariant]=\\\"badgeVariant\\\"\\n [color]=\\\"color\\\"\\n [position]=\\\"position\\\"\\n [show]=\\\"show\\\">\\n <button uni-text-button>\\n Button with Badge\\n </button>\\n</uni-notification-badge>\\n</div>\\n<!-- args:\\n{\\n count: 5,\\n badgeVariant: 'count',\\n color: 'warn',\\n position: 'top-right',\\n show: true,\\n maxCount: 99,\\n }\\n-->\"\n },\n {\n \"title\": \"Dot\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Dot -->\\n<div box-layout padding=\\\"md\\\">\\n<uni-notification-badge\\n [count]=\\\"count\\\"\\n [maxCount]=\\\"maxCount\\\"\\n [badgeVariant]=\\\"badgeVariant\\\"\\n [color]=\\\"color\\\"\\n [position]=\\\"position\\\"\\n [show]=\\\"show\\\">\\n <button uni-text-button>\\n Button with Badge\\n </button>\\n</uni-notification-badge>\\n</div>\\n<!-- args:\\n{\\n badgeVariant: 'dot',\\n color: 'warn',\\n position: 'top-right',\\n show: true,\\n }\\n-->\"\n },\n {\n \"title\": \"Count\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Count -->\\n<div box-layout padding=\\\"md\\\">\\n<uni-notification-badge\\n [count]=\\\"count\\\"\\n [maxCount]=\\\"maxCount\\\"\\n [badgeVariant]=\\\"badgeVariant\\\"\\n [color]=\\\"color\\\"\\n [position]=\\\"position\\\"\\n [show]=\\\"show\\\">\\n <button uni-text-button>\\n Button with Badge\\n </button>\\n</uni-notification-badge>\\n</div>\\n<!-- args:\\n{\\n count: 12,\\n badgeVariant: 'count',\\n color: 'warn',\\n position: 'top-right',\\n show: true,\\n maxCount: 99,\\n }\\n-->\"\n },\n {\n \"title\": \"Pill\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Pill -->\\n<div box-layout padding=\\\"md\\\">\\n<uni-notification-badge\\n [count]=\\\"count\\\"\\n [maxCount]=\\\"maxCount\\\"\\n [badgeVariant]=\\\"badgeVariant\\\"\\n [color]=\\\"color\\\"\\n [position]=\\\"position\\\"\\n [show]=\\\"show\\\">\\n <button uni-text-button>\\n Button with Badge\\n </button>\\n</uni-notification-badge>\\n</div>\\n<!-- args:\\n{\\n count: 1234,\\n badgeVariant: 'pill',\\n color: 'warn',\\n position: 'top-right',\\n show: true,\\n maxCount: 999,\\n }\\n-->\"\n },\n {\n \"title\": \"Large Count\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Large Count -->\\n<div box-layout padding=\\\"md\\\">\\n<uni-notification-badge\\n [count]=\\\"count\\\"\\n [maxCount]=\\\"maxCount\\\"\\n [badgeVariant]=\\\"badgeVariant\\\"\\n [color]=\\\"color\\\"\\n [position]=\\\"position\\\"\\n [show]=\\\"show\\\">\\n <button uni-text-button>\\n Button with Badge\\n </button>\\n</uni-notification-badge>\\n</div>\\n<!-- args:\\n{\\n count: 150,\\n badgeVariant: 'count',\\n color: 'warn',\\n position: 'top-right',\\n show: true,\\n maxCount: 99,\\n }\\n-->\"\n },\n {\n \"title\": \"Different Colors\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Different Colors -->\\n<div box-layout padding=\\\"md\\\">\\n<uni-notification-badge\\n [count]=\\\"count\\\"\\n [maxCount]=\\\"maxCount\\\"\\n [badgeVariant]=\\\"badgeVariant\\\"\\n [color]=\\\"color\\\"\\n [position]=\\\"position\\\"\\n [show]=\\\"show\\\">\\n <button uni-text-button>\\n Button with Badge\\n </button>\\n</uni-notification-badge>\\n</div>\"\n },\n {\n \"title\": \"Different Positions\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Different Positions -->\\n<div box-layout padding=\\\"md\\\">\\n<uni-notification-badge\\n [count]=\\\"count\\\"\\n [maxCount]=\\\"maxCount\\\"\\n [badgeVariant]=\\\"badgeVariant\\\"\\n [color]=\\\"color\\\"\\n [position]=\\\"position\\\"\\n [show]=\\\"show\\\">\\n <button uni-text-button>\\n Button with Badge\\n </button>\\n</uni-notification-badge>\\n</div>\"\n },\n {\n \"title\": \"Variant Comparison\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Variant Comparison -->\\n<div box-layout padding=\\\"md\\\">\\n<uni-notification-badge\\n [count]=\\\"count\\\"\\n [maxCount]=\\\"maxCount\\\"\\n [badgeVariant]=\\\"badgeVariant\\\"\\n [color]=\\\"color\\\"\\n [position]=\\\"position\\\"\\n [show]=\\\"show\\\">\\n <button uni-text-button>\\n Button with Badge\\n </button>\\n</uni-notification-badge>\\n</div>\"\n },\n {\n \"title\": \"With Icons\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: With Icons -->\\n<div box-layout padding=\\\"md\\\">\\n<uni-notification-badge\\n [count]=\\\"count\\\"\\n [maxCount]=\\\"maxCount\\\"\\n [badgeVariant]=\\\"badgeVariant\\\"\\n [color]=\\\"color\\\"\\n [position]=\\\"position\\\"\\n [show]=\\\"show\\\">\\n <button uni-text-button>\\n Button with Badge\\n </button>\\n</uni-notification-badge>\\n</div>\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"Attention indicator anchored to whatever it wraps — an icon button, a nav item, an\\navatar. Three shapes: `dot` (something is new), `count` (how many), and `pill`\\n(counts that need room); `maxCount` caps the display (\\\"99+\\\"). Position it on any\\ncorner of the wrapped content.\\nRadius and offset resolve from the `notificationBadge` theme options; the badge\\nwears the active `variant` color.\",\n \"dos\": [],\n \"donts\": [\n \"Convey urgency by color alone — the count/dot shape carries the signal\"\n ],\n \"accessibility\": [\n \"The visual badge is hidden from assistive tech; a visually-hidden text announcement carries the meaning (\\\"3 notifications\\\").\",\n \"Provide `ariaLabel` context when the wrapped control's purpose isn't obvious from its own name.\"\n ]\n },\n \"relatedTokens\": []\n },\n {\n \"id\": \"notifications\",\n \"name\": \"Notifications\",\n \"status\": \"stable\",\n \"summary\": \"\",\n \"description\": \"\",\n \"category\": \"feedback\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-notifications\",\n \"api\": []\n }\n },\n \"examples\": [],\n \"guidelines\": {\n \"whenToUse\": \"\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": []\n },\n \"relatedTokens\": []\n },\n {\n \"id\": \"paginator\",\n \"name\": \"Paginator\",\n \"status\": \"stable\",\n \"summary\": \"\",\n \"description\": \"\",\n \"category\": \"data\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-paginator\",\n \"api\": [\n {\n \"name\": \"datasource\",\n \"kind\": \"input\",\n \"type\": \"UniDatasource<T>\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"initPageSize\",\n \"kind\": \"input\",\n \"type\": \"number\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"showPageSize\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"true\",\n \"description\": \"\"\n },\n {\n \"name\": \"showPageJumper\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"true\",\n \"description\": \"\"\n },\n {\n \"name\": \"showPageNumbers\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"true\",\n \"description\": \"\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Primary\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Primary -->\\n<uni-paginator ${argsToTemplate(props)} />\\n<div box-layout paddingTop=\\\"md\\\">\\n @for (record of datasource.records(); track record.id) {\\n <div>{{ record.name }}</div>\\n }\\n</div>\\n<!-- args:\\n{\\n datasource: new UniRecordDatasource<any>(starWarsCharacters),\\n initPageSize: 5,\\n showPageSize: true,\\n showPageJumper: true,\\n showPageNumbers: true,\\n }\\n-->\"\n },\n {\n \"title\": \"Page Numbers Only\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Page Numbers Only -->\\n<uni-paginator ${argsToTemplate(props)} />\\n<div box-layout paddingTop=\\\"md\\\">\\n @for (record of datasource.records(); track record.id) {\\n <div>{{ record.name }}</div>\\n }\\n</div>\\n<!-- args:\\n{\\n datasource: new UniRecordDatasource<any>(starWarsCharacters),\\n initPageSize: 5,\\n showPageSize: false,\\n showPageJumper: false,\\n showPageNumbers: true,\\n }\\n-->\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"The Paginator drives page navigation for any `UniDatasource`: first/previous/next/last\\nbuttons, truncated page numbers, an editable page size, and a page jumper. Each section can\\nbe toggled independently, so it can render as a full control bar or a minimal pager — the\\n[Data Table](?path=/docs/components-data-display-data-table--data-table) stories use one paginator in the header\\nfor page size and another in the footer for page numbers.\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": [\n \"A `role=\\\"navigation\\\"` landmark; pages are real buttons with `aria-current=\\\"page\\\"` on the active one.\",\n \"The page-number input is labelled.\"\n ]\n },\n \"relatedTokens\": [\n \"paginator.behavior.gap\",\n \"paginator.behavior.textRole\",\n \"paginator.behavior.inputBorder\",\n \"paginator.behavior.inputBorderRadius\",\n \"paginator.behavior.pageBorderRadius\",\n \"paginator.behavior.currentPageBorder\",\n \"paginator.behavior.currentPageBorderRadius\"\n ]\n },\n {\n \"id\": \"popover\",\n \"name\": \"Popover\",\n \"status\": \"stable\",\n \"summary\": \"\",\n \"description\": \"\",\n \"category\": \"layout\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-popover\",\n \"api\": [\n {\n \"name\": \"placement\",\n \"kind\": \"input\",\n \"type\": \"Placement\",\n \"required\": false,\n \"default\": \"'bottom'\",\n \"description\": \"\"\n },\n {\n \"name\": \"autoClose\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"true\",\n \"description\": \"Light-dismiss on outside click / Escape (native popover=\\\"auto\\\").\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Primary\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Primary -->\\n<uni-popover placement=\\\"${placement}\\\" [autoClose]=\\\"${autoClose}\\\" #popover>\\n <button text-button trigger>Open Popover</button>\\n <div stack-layout gap=\\\"sm\\\">\\n <div>\\n <span uni-text=\\\"title-small\\\" display=\\\"block\\\">\\n This is a Popover.\\n </span>\\n It is possible to add any markup you want to a Popover.\\n </div>\\n <div>\\n <button text-button symbolLeft=\\\"thumb_up\\\" size=\\\"sm\\\" variant=\\\"secondary\\\" (click)=\\\"popover.hidePopover()\\\">OK!</button>\\n </div>\\n </div>\\n</uni-popover>\\n<!-- args:\\n{\\n placement: 'right-start',\\n autoClose: true,\\n }\\n-->\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"Popover is a non-modal dialog that floats around a trigger.\\nAny type of content can be added inside a popover; however, it is most suitable for short callouts or compact actions.\\n**Note:** It is important to add the `trigger` attribute to the item you want to open and be referenced to the Popover.\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": [\n \"The trigger carries `aria-expanded` and `aria-controls`; light-dismiss comes from the native popover.\"\n ]\n },\n \"relatedTokens\": []\n },\n {\n \"id\": \"progress-bar\",\n \"name\": \"ProgressBar\",\n \"status\": \"stable\",\n \"summary\": \"\",\n \"description\": \"\",\n \"category\": \"feedback\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-progress-bar\",\n \"api\": [\n {\n \"name\": \"width\",\n \"kind\": \"input\",\n \"type\": \"number\",\n \"required\": false,\n \"default\": \"560\",\n \"description\": \"\"\n },\n {\n \"name\": \"height\",\n \"kind\": \"input\",\n \"type\": \"number\",\n \"required\": false,\n \"default\": \"24\",\n \"description\": \"\"\n },\n {\n \"name\": \"percent\",\n \"kind\": \"input\",\n \"type\": \"number\",\n \"required\": false,\n \"default\": \"0\",\n \"description\": \"\"\n },\n {\n \"name\": \"ariaLabel\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"Accessible name describing what is progressing (e.g. \\\"Upload progress\\\").\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Default\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Default -->\\n<uni-progress-bar percent=\\\"${percent}\\\" ${argsToTemplate(props)}></uni-progress-bar>\\n<!-- args:\\n{\\n percent: 60,\\n }\\n-->\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"The progress bar is a graphical way of representing progress to completion.\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": [\n \"`role=\\\"progressbar\\\"` with `aria-valuenow`/`min`/`max`; name it with `ariaLabel`.\"\n ]\n },\n \"relatedTokens\": []\n },\n {\n \"id\": \"progress-gauge\",\n \"name\": \"ProgressGauge\",\n \"status\": \"stable\",\n \"summary\": \"\",\n \"description\": \"\",\n \"category\": \"feedback\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-progress-gauge\",\n \"api\": [\n {\n \"name\": \"percent\",\n \"kind\": \"input\",\n \"type\": \"number\",\n \"required\": false,\n \"default\": \"0\",\n \"description\": \"\"\n },\n {\n \"name\": \"ariaLabel\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"Accessible name describing what is progressing.\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Default\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Default -->\\n<uni-progress-gauge percent=\\\"${percent}\\\" variant=\\\"${variant}\\\" size=\\\"${size}\\\"></uni-progress-gauge>\\n<!-- args:\\n{\\n percent: 60,\\n size: 'lg',\\n variant: 'primary',\\n }\\n-->\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"The progress gauge is a graphical way of representing progress to completion as well as scoring or ranking.\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": [\n \"`role=\\\"progressbar\\\"` with `aria-valuenow`/`min`/`max`; name it with `ariaLabel`. The SVG is decorative.\"\n ]\n },\n \"relatedTokens\": []\n },\n {\n \"id\": \"radio\",\n \"name\": \"Radio\",\n \"status\": \"stable\",\n \"summary\": \"\",\n \"description\": \"\",\n \"category\": \"forms\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-radio\",\n \"api\": [\n {\n \"name\": \"value\",\n \"kind\": \"model\",\n \"type\": \"string\",\n \"required\": false,\n \"default\": \"''\",\n \"description\": \"\"\n },\n {\n \"name\": \"disabled\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"touched\",\n \"kind\": \"model\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"invalid\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"dirty\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"required\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"Synced from required() validators by the Signal Forms [field] directive.\"\n },\n {\n \"name\": \"ariaDescribedBy\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"Id(s) of external element(s) describing this control — typically your app-rendered error message — exposed as aria-describedby.\"\n },\n {\n \"name\": \"options\",\n \"kind\": \"input\",\n \"type\": \"UniRadioOption[]\",\n \"required\": false,\n \"default\": \"[]\",\n \"description\": \"\"\n },\n {\n \"name\": \"label\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"name\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"default\": \"uniqueId('uni-radio-group')\",\n \"description\": \"\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Default\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Default -->\\n<uni-radio ${argsToTemplate(args)}></uni-radio>\\n<!-- args:\\n{\\n label: 'Select an option',\\n variant: 'primary',\\n disabled: false,\\n value: 'option1',\\n name: 'radio-group',\\n options: defaultOptions,\\n }\\n-->\"\n },\n {\n \"title\": \"Without Label\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Without Label -->\\n<uni-radio ${argsToTemplate(args)}></uni-radio>\\n<!-- args:\\n{\\n label: '',\\n variant: 'primary',\\n disabled: false,\\n value: '',\\n name: 'radio-group',\\n options: defaultOptions,\\n }\\n-->\"\n },\n {\n \"title\": \"Disabled\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Disabled -->\\n<uni-radio ${argsToTemplate(args)}></uni-radio>\\n<!-- args:\\n{\\n label: 'Disabled radio group',\\n variant: 'primary',\\n disabled: true,\\n value: 'option1',\\n name: 'radio-group',\\n options: defaultOptions,\\n }\\n-->\"\n },\n {\n \"title\": \"With Disabled Options\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: With Disabled Options -->\\n<uni-radio ${argsToTemplate(args)}></uni-radio>\\n<!-- args:\\n{\\n label: 'Some options disabled',\\n variant: 'primary',\\n disabled: false,\\n value: 'option1',\\n name: 'radio-group',\\n options: [\\n { label: 'Available Option', value: 'option1' },\\n { label: 'Disabled Option', value: 'option2', disabled: true },\\n { label: 'Another Available', value: 'option3' },\\n ],\\n }\\n-->\"\n },\n {\n \"title\": \"Variants\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Variants -->\\n<uni-radio ${argsToTemplate(args)}></uni-radio>\"\n },\n {\n \"title\": \"With Change Event\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: With Change Event -->\\n<uni-radio ${argsToTemplate(args)}></uni-radio>\"\n },\n {\n \"title\": \"Form Signals\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Form Signals -->\\n<uni-radio ${argsToTemplate(args)}></uni-radio>\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"Single choice among a small set of visible options. The component renders the whole\\ngroup from an `options` array (`{ label, value, disabled? }`), implements\\n`FormValueControl<string>` for Signal Forms, and defaults each group to a unique\\n`name` so multiple groups on a page never collide.\\nRing, fill, and size resolve from the `radio` theme options; the selected dot wears\\nthe active `variant` color.\",\n \"dos\": [\n \"Use for 2–5 mutually exclusive options that should all be visible\"\n ],\n \"donts\": [\n \"Use for long option lists — that is a select\"\n ],\n \"accessibility\": [\n \"`role=\\\"radiogroup\\\"` labelled by the group label via `aria-labelledby`.\",\n \"Native radio inputs: arrow keys move selection within the group, Tab moves out.\",\n \"`aria-invalid` reflects the error state once the group was touched or is dirty.\"\n ]\n },\n \"relatedTokens\": [\n \"radio.behavior.size\",\n \"radio.behavior.ringColor\",\n \"radio.behavior.fillColor\",\n \"radio.behavior.transitionSpeed\"\n ]\n },\n {\n \"id\": \"ripple\",\n \"name\": \"Ripple\",\n \"status\": \"stable\",\n \"summary\": \"\",\n \"description\": \"\",\n \"category\": \"directives\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"[uniRipple]\",\n \"api\": []\n }\n },\n \"examples\": [],\n \"guidelines\": {\n \"whenToUse\": \"\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": []\n },\n \"relatedTokens\": []\n },\n {\n \"id\": \"row\",\n \"name\": \"Row\",\n \"status\": \"stable\",\n \"summary\": \"\",\n \"description\": \"\",\n \"category\": \"layout\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"[uni-row-layout], [row-layout]\",\n \"api\": [\n {\n \"name\": \"display\",\n \"kind\": \"input\",\n \"type\": \"OptionalDisplay\",\n \"required\": false,\n \"default\": \"'flex'\",\n \"description\": \"\"\n },\n {\n \"name\": \"flexDirection\",\n \"kind\": \"input\",\n \"type\": \"OptionalFlexDirection\",\n \"required\": false,\n \"default\": \"'row'\",\n \"description\": \"\"\n },\n {\n \"name\": \"minWidth\",\n \"kind\": \"input\",\n \"type\": \"number | string | undefined\",\n \"required\": false,\n \"default\": \"'fit-content'\",\n \"description\": \"Defaults to `fit-content` (guards content collapse). Set `[minWidth]=\\\"0\\\"` when the row must shrink inside a constrained flex parent (scroll or text truncation containment).\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Button Row\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Button Row -->\\n<div row-layout ${argsToTemplate(props)}>\\n <button text-button>Button 1</button>\\n <button text-button>Button 2</button>\\n <button text-button>Button 3</button>\\n</div>\\n<!-- args:\\n{ gap: 'lg' }\\n-->\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"`Row` is a layout component used to group elements in a horizontal arrangement and applies a uniform space between them.\\n`Row` is an extension to the `Box` component and has all the `Box` attributes available to it.\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": []\n },\n \"relatedTokens\": []\n },\n {\n \"id\": \"scroll-area\",\n \"name\": \"ScrollArea\",\n \"status\": \"stable\",\n \"summary\": \"Native scroll area with theme-driven scrollbar styling.\",\n \"description\": \"Native scroll area with theme-driven scrollbar styling. Scrollbars are styled entirely through Emotion-generated CSS: `::-webkit-scrollbar` rules cover Chromium/Safari, with a `scrollbar-width`/`scrollbar-color` fallback for Firefox.\",\n \"category\": \"layout\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"[uni-scroll-area], [scroll-area]\",\n \"api\": [\n {\n \"name\": \"color\",\n \"kind\": \"input\",\n \"type\": \"ContainerColorToken\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"borderRadius\",\n \"kind\": \"input\",\n \"type\": \"Radius\",\n \"required\": false,\n \"default\": \"'sm'\",\n \"description\": \"\"\n },\n {\n \"name\": \"padding\",\n \"kind\": \"input\",\n \"type\": \"OptionalSize\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"paddingHorizontal\",\n \"kind\": \"input\",\n \"type\": \"OptionalSize\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"paddingVertical\",\n \"kind\": \"input\",\n \"type\": \"OptionalSize\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"paddingLeft\",\n \"kind\": \"input\",\n \"type\": \"OptionalSize\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"paddingRight\",\n \"kind\": \"input\",\n \"type\": \"OptionalSize\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"paddingTop\",\n \"kind\": \"input\",\n \"type\": \"OptionalSize\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"paddingBottom\",\n \"kind\": \"input\",\n \"type\": \"OptionalSize\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"border\",\n \"kind\": \"input\",\n \"type\": \"Variant\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"height\",\n \"kind\": \"input\",\n \"type\": \"OptionalValue\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"width\",\n \"kind\": \"input\",\n \"type\": \"OptionalValue\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"appearance\",\n \"kind\": \"input\",\n \"type\": \"ScrollbarAppearance\",\n \"required\": false,\n \"default\": \"'compact'\",\n \"description\": \"\"\n },\n {\n \"name\": \"autoHeightDisabled\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"verticalScrollPadding\",\n \"kind\": \"input\",\n \"type\": \"number\",\n \"required\": false,\n \"default\": \"29\",\n \"description\": \"\"\n },\n {\n \"name\": \"scrollable\",\n \"kind\": \"output\",\n \"type\": \"boolean\",\n \"required\": false,\n \"description\": \"\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Primary\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Primary -->\\n<div scroll-area ${argsToTemplate(props)} #scrollArea>\\n <button size=\\\"sm\\\" text-button variant=\\\"ghost\\\" symbolLeft=\\\"arrow_downward\\\" (click)=\\\"scrollArea.scrollToBottom()\\\">Scroll to bottom</button>\\n ${ngContent}\\n <button size=\\\"sm\\\" text-button variant=\\\"ghost\\\" symbolLeft=\\\"arrow_upward\\\" (click)=\\\"scrollArea.scrollToTop()\\\">Back to top</button>\\n</div>\\n<!-- args:\\n{\\n border: 'quaternary',\\n color: 'tertiary-surface',\\n height: 200,\\n ngContent: `\\n <span uni-text=\\\"headline-medium\\\">Lorem ipsum dolor sit amet, consectetur adipisicing elit.</span>\\n <span uni-text=\\\"body-1-long\\\">\\n <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quis facere debitis ullam, quae quidem, impedit\\n culpa nam\\n repellat in voluptatibus esse ab harum, hic? Aliquam nesciunt voluptates repellendus assumenda labore.\\n </p>\\n <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Porro quos voluptate doloribus. Optio unde\\n inventore, tempore\\n nemo repellat expedita! Quod, accusamus nobis iure. Aliquam quibusdam, nemo explicabo ipsum provident\\n asperiores.</p>\\n <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quaerat, qui, rem! Debitis cum maiores iste,\\n possimus!\\n Obcaecati accusamus eaque expedita quo soluta quis, repudiandae similique, veritatis repellendus facere\\n suscipit!\\n Et!</p>\\n <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Harum doloremque repellat praesentium quae et\\n consectetur\\n iure quos porro, provident voluptates reprehenderit a. Accusamus ut, quaerat asperiores blanditiis\\n voluptate, sint\\n facilis.</p>\\n <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Accusamus beatae inventore nobis esse\\n temporibus\\n exercitationem\\n eos illo minima non magnam, provident sit doloribus maiores odio in animi quidem unde. Perferendis.</p>\\n\\n </span>\\n\\n\\n `,\\n }\\n-->\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"A scroll container with themed, consistent scrollbars across browsers — thin\\nEmotion-styled WebKit scrollbars with a `scrollbar-width`/`scrollbar-color`\\nfallback. It detects scrollable state via ResizeObserver (the `scrollable` output)\\nand offers `scrollToTop`/`scrollToBottom` for programmatic control.\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": []\n },\n \"relatedTokens\": []\n },\n {\n \"id\": \"search-input\",\n \"name\": \"SearchInput\",\n \"status\": \"stable\",\n \"summary\": \"Generic search field: shared input chrome with a leading magnifier, a clear button while there's a query, Enter to submit, and optional type-ahead — pass `suggestions` (refresh them from `change`) and the field becomes an ARIA combobox with a keyboard-navigable listbox.\",\n \"description\": \"Generic search field: shared input chrome with a leading magnifier, a clear button while there's a query, Enter to submit, and optional type-ahead — pass `suggestions` (refresh them from `change`) and the field becomes an ARIA combobox with a keyboard-navigable listbox. Escape closes the list first, then clears the query.\",\n \"category\": \"forms\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-search-input\",\n \"api\": [\n {\n \"name\": \"label\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": true,\n \"description\": \"Accessible name for the field, also the placeholder fallback.\"\n },\n {\n \"name\": \"placeholder\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"width\",\n \"kind\": \"input\",\n \"type\": \"string | number\",\n \"required\": false,\n \"default\": \"'100%'\",\n \"description\": \"\"\n },\n {\n \"name\": \"debounceTime\",\n \"kind\": \"input\",\n \"type\": \"number\",\n \"required\": false,\n \"default\": \"400\",\n \"description\": \"\"\n },\n {\n \"name\": \"suggestions\",\n \"kind\": \"input\",\n \"type\": \"string[]\",\n \"required\": false,\n \"default\": \"[]\",\n \"description\": \"Type-ahead entries. Keep them fresh from `change` emissions; the list shows while the field has focus and entries exist.\"\n },\n {\n \"name\": \"change\",\n \"kind\": \"output\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"search\",\n \"kind\": \"output\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"suggestionSelected\",\n \"kind\": \"output\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Primary\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Primary -->\\n<div box-layout maxWidth=\\\"420px\\\">\\n<uni-search-input\\n label=\\\"Search the docs\\\"\\n [debounceTime]=\\\"200\\\"\\n [suggestions]=\\\"suggestions\\\"\\n (change)=\\\"filter($event)\\\"\\n (search)=\\\"log($event)\\\"\\n></uni-search-input>\\n</div>\\n<!-- args:\\n{ label: 'Search' }\\n-->\"\n },\n {\n \"title\": \"Type-ahead\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Type-ahead -->\\n<div box-layout maxWidth=\\\"420px\\\">\\n<uni-search-input\\n label=\\\"Search the docs\\\"\\n [debounceTime]=\\\"200\\\"\\n [suggestions]=\\\"suggestions\\\"\\n (change)=\\\"filter($event)\\\"\\n (search)=\\\"log($event)\\\"\\n></uni-search-input>\\n</div>\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"Generic search field wearing the shared input chrome: a decorative leading magnifier,\\na clear button while there's a query, and Enter to submit (`search`). `change` emits\\ndebounced as the user types — use it to refresh results or the `suggestions` input.\\nWith `suggestions`, the field becomes an ARIA combobox: entries render in a listbox\\nunder the field, ArrowUp/Down move the highlight, Enter selects (emitting both\\n`suggestionSelected` and `search`), and Escape closes the list first, then clears the\\nquery. The suggestion list's surface, elevation and radius resolve from the theme's\\n`searchInput` options, alongside the search/clear symbols.\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": [\n \"The field is an ARIA combobox: `aria-expanded`, `aria-controls`, and `aria-activedescendant` track the suggestion listbox.\",\n \"ArrowUp/ArrowDown move the active option, Enter selects, Escape closes the list first and clears the query second.\",\n \"The magnifier is decorative; the clear button has an accessible name (\\\"Clear search\\\").\"\n ]\n },\n \"relatedTokens\": []\n },\n {\n \"id\": \"select\",\n \"name\": \"Select\",\n \"status\": \"stable\",\n \"summary\": \"\",\n \"description\": \"\",\n \"category\": \"forms\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-select\",\n \"api\": [\n {\n \"name\": \"value\",\n \"kind\": \"model\",\n \"type\": \"T | null\",\n \"required\": false,\n \"default\": \"null\",\n \"description\": \"\"\n },\n {\n \"name\": \"disabled\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"touched\",\n \"kind\": \"model\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"invalid\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"dirty\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"required\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"Synced from required() validators by the Signal Forms [field] directive.\"\n },\n {\n \"name\": \"ariaDescribedBy\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"Id(s) of external element(s) describing this control — typically your app-rendered error message — exposed as aria-describedby.\"\n },\n {\n \"name\": \"options\",\n \"kind\": \"input\",\n \"type\": \"Options<T>\",\n \"required\": false,\n \"default\": \"[]\",\n \"description\": \"\"\n },\n {\n \"name\": \"placeholder\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"ariaLabel\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"Accessible name for the select; a placeholder is not a label.\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Primary\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Primary -->\\n<uni-select ${argsToTemplate(props)}>\\n</uni-select>\\n<!-- args:\\n{\\n placeholder: 'Select your country...',\\n options: [\\n { value: 'us', label: 'United States' },\\n { value: 'ca', label: 'Canada' },\\n { value: 'uk', label: 'United Kingdom' },\\n { value: 'au', label: 'Australia' },\\n ],\\n value: null,\\n disabled: false,\\n touched: false,\\n invalid: false,\\n dirty: false,\\n }\\n-->\"\n },\n {\n \"title\": \"With Value\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: With Value -->\\n<uni-select ${argsToTemplate(props)}>\\n</uni-select>\\n<!-- args:\\n{\\n placeholder: 'Select priority...',\\n options: [\\n { value: 'low', label: 'Low Priority' },\\n { value: 'medium', label: 'Medium Priority' },\\n { value: 'high', label: 'High Priority' },\\n { value: 'urgent', label: 'Urgent' },\\n ],\\n value: 'high',\\n disabled: false,\\n touched: true,\\n invalid: false,\\n dirty: false,\\n }\\n-->\"\n },\n {\n \"title\": \"Disabled\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Disabled -->\\n<uni-select ${argsToTemplate(props)}>\\n</uni-select>\\n<!-- args:\\n{\\n placeholder: 'Cannot select...',\\n options: [\\n { value: 'option1', label: 'Option 1' },\\n { value: 'option2', label: 'Option 2' },\\n { value: 'option3', label: 'Option 3' },\\n ],\\n value: 'option2',\\n disabled: true,\\n touched: false,\\n invalid: false,\\n dirty: false,\\n }\\n-->\"\n },\n {\n \"title\": \"Invalid\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Invalid -->\\n<uni-select ${argsToTemplate(props)}>\\n</uni-select>\\n<!-- args:\\n{\\n placeholder: 'Please select an option...',\\n options: [\\n { value: 'yes', label: 'Yes' },\\n { value: 'no', label: 'No' },\\n { value: 'maybe', label: 'Maybe' },\\n ],\\n value: null,\\n disabled: false,\\n touched: true,\\n invalid: true,\\n }\\n-->\"\n },\n {\n \"title\": \"Many Options\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Many Options -->\\n<uni-select ${argsToTemplate(props)}>\\n</uni-select>\\n<!-- args:\\n{\\n placeholder: 'Select state or province...',\\n options: [\\n { value: 'al', label: 'Alabama' },\\n { value: 'ak', label: 'Alaska' },\\n { value: 'az', label: 'Arizona' },\\n { value: 'ar', label: 'Arkansas' },\\n { value: 'ca', label: 'California' },\\n { value: 'co', label: 'Colorado' },\\n { value: 'ct', label: 'Connecticut' },\\n { value: 'de', label: 'Delaware' },\\n { value: 'fl', label: 'Florida' },\\n { value: 'ga', label: 'Georgia' },\\n { value: 'hi', label: 'Hawaii' },\\n { value: 'id', label: 'Idaho' },\\n { value: 'il', label: 'Illinois' },\\n { value: 'in', label: 'Indiana' },\\n { value: 'ia', label: 'Iowa' },\\n ],\\n value: 'ca',\\n disabled: false,\\n touched: true,\\n invalid: false,\\n dirty: false,\\n }\\n-->\"\n },\n {\n \"title\": \"Short Options\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Short Options -->\\n<uni-select ${argsToTemplate(props)}>\\n</uni-select>\\n<!-- args:\\n{\\n placeholder: 'Pick a size...',\\n options: [\\n { value: 'xs', label: 'XS' },\\n { value: 's', label: 'S' },\\n { value: 'm', label: 'M' },\\n { value: 'l', label: 'L' },\\n { value: 'xl', label: 'XL' },\\n ],\\n value: 'm',\\n disabled: false,\\n touched: false,\\n invalid: false,\\n dirty: false,\\n }\\n-->\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"Single choice from a list, on a native `<select>` — platform pickers on mobile,\\nplatform keyboard behavior everywhere. Options are typed generically\\n(`options: T[]` with `optionLabel`/`optionValue` accessors), and the component\\nimplements `FormValueControl` for the Signal Forms `[field]` directive. Errors\\nstyle the field only after interaction, matching Input.\\nFor choosing several, use Multi Select; for type-to-filter over large sets, use\\nSearch Input's type-ahead.\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": [\n \"Native `<select>`: platform keyboard interaction and mobile pickers for free.\",\n \"`label` becomes the accessible name; `aria-invalid` reflects the touched error state.\"\n ]\n },\n \"relatedTokens\": []\n },\n {\n \"id\": \"skeleton\",\n \"name\": \"Skeleton\",\n \"status\": \"stable\",\n \"summary\": \"Loading placeholder painted with surface tokens.\",\n \"description\": \"Loading placeholder painted with surface tokens. `text` renders one or more lines (the last line shortened, as real text would be), `rect` and `circle` render fixed shapes. The shimmer only animates when the user allows motion; it degrades to static blocks under `prefers-reduced-motion`.\",\n \"category\": \"components\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-skeleton\",\n \"api\": [\n {\n \"name\": \"shape\",\n \"kind\": \"input\",\n \"type\": \"SkeletonShape\",\n \"required\": false,\n \"default\": \"'text'\",\n \"description\": \"\"\n },\n {\n \"name\": \"width\",\n \"kind\": \"input\",\n \"type\": \"string | number | undefined\",\n \"required\": false,\n \"default\": \"undefined\",\n \"description\": \"CSS width; defaults to 100% for text/rect and `height` for circles.\"\n },\n {\n \"name\": \"height\",\n \"kind\": \"input\",\n \"type\": \"string | number | undefined\",\n \"required\": false,\n \"default\": \"undefined\",\n \"description\": \"CSS height per block; defaults to 1em (text), 96px (rect), 40px (circle).\"\n },\n {\n \"name\": \"lines\",\n \"kind\": \"input\",\n \"type\": \"number\",\n \"required\": false,\n \"default\": \"1\",\n \"description\": \"Number of text lines (text shape only).\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Text Lines\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Text Lines -->\\n<div box-layout maxWidth=\\\"360px\\\">\\n<uni-card>\\n <div row-layout gap=\\\"sm\\\" alignItems=\\\"center\\\" padding=\\\"md\\\">\\n <uni-skeleton shape=\\\"circle\\\" [height]=\\\"40\\\" />\\n <div box-layout [grow]=\\\"1\\\">\\n <uni-skeleton [lines]=\\\"2\\\" />\\n </div>\\n </div>\\n <div box-layout paddingHorizontal=\\\"md\\\" paddingBottom=\\\"md\\\">\\n <uni-skeleton shape=\\\"rect\\\" [height]=\\\"120\\\" />\\n </div>\\n</uni-card>\\n</div>\\n<!-- args:\\n{ shape: 'text', lines: 3 }\\n-->\"\n },\n {\n \"title\": \"Card Placeholder\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Card Placeholder -->\\n<div box-layout maxWidth=\\\"360px\\\">\\n<uni-card>\\n <div row-layout gap=\\\"sm\\\" alignItems=\\\"center\\\" padding=\\\"md\\\">\\n <uni-skeleton shape=\\\"circle\\\" [height]=\\\"40\\\" />\\n <div box-layout [grow]=\\\"1\\\">\\n <uni-skeleton [lines]=\\\"2\\\" />\\n </div>\\n </div>\\n <div box-layout paddingHorizontal=\\\"md\\\" paddingBottom=\\\"md\\\">\\n <uni-skeleton shape=\\\"rect\\\" [height]=\\\"120\\\" />\\n </div>\\n</uni-card>\\n</div>\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"Loading placeholder that sketches the shape of incoming content: `text` renders one or\\nmore lines (ending on a short line, as real copy would), `rect` stands in for media and\\ncharts, `circle` for avatars. Skeletons paint with the theme's surface tokens so they\\nsit naturally on any brand in both modes, and the shimmer sweep only animates for users\\nwho allow motion — under `prefers-reduced-motion` it degrades to calm static blocks.\\nSkeletons are `aria-hidden`; announce loading on the container (e.g. `aria-busy`)\\nwhere your app knows what is actually loading.\",\n \"dos\": [],\n \"donts\": [\n \"Announce individual skeletons to assistive tech — they are decorative placeholders\"\n ],\n \"accessibility\": [\n \"Skeletons are `aria-hidden` — announce loading on the container (e.g. `aria-busy`) where your app knows what is loading.\",\n \"The shimmer respects `prefers-reduced-motion`, degrading to static blocks.\"\n ]\n },\n \"relatedTokens\": [\n \"skeleton.behavior.color\",\n \"skeleton.behavior.highlightColor\",\n \"skeleton.behavior.borderRadius\",\n \"skeleton.behavior.animation\",\n \"skeleton.behavior.duration\",\n \"skeleton.behavior.gap\"\n ]\n },\n {\n \"id\": \"slider\",\n \"name\": \"Slider\",\n \"status\": \"stable\",\n \"summary\": \"Range slider on a native `<input type=\\\"range\\\">` — keyboard interaction and the ARIA slider contract come from the platform.\",\n \"description\": \"Range slider on a native `<input type=\\\"range\\\">` — keyboard interaction and the ARIA slider contract come from the platform. Fill, track, thumb and radii resolve from `slider` theme tokens; the fill percentage rides a CSS custom property so dragging never regenerates styles.\",\n \"category\": \"forms\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-slider\",\n \"api\": [\n {\n \"name\": \"value\",\n \"kind\": \"model\",\n \"type\": \"number\",\n \"required\": false,\n \"default\": \"0\",\n \"description\": \"\"\n },\n {\n \"name\": \"disabled\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"touched\",\n \"kind\": \"model\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"invalid\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"dirty\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"required\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"Synced from required() validators by the Signal Forms [field] directive.\"\n },\n {\n \"name\": \"ariaDescribedBy\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"Id(s) of external element(s) describing this control — typically your app-rendered value or error text — exposed as aria-describedby.\"\n },\n {\n \"name\": \"label\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": true,\n \"description\": \"\"\n },\n {\n \"name\": \"min\",\n \"kind\": \"input\",\n \"type\": \"number | undefined\",\n \"required\": false,\n \"default\": \"0\",\n \"description\": \"\"\n },\n {\n \"name\": \"max\",\n \"kind\": \"input\",\n \"type\": \"number | undefined\",\n \"required\": false,\n \"default\": \"100\",\n \"description\": \"\"\n },\n {\n \"name\": \"step\",\n \"kind\": \"input\",\n \"type\": \"number\",\n \"required\": false,\n \"default\": \"1\",\n \"description\": \"\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Default\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Default -->\\n<uni-slider ${argsToTemplate(props)}></uni-slider>\\n<!-- args:\\n{ label: 'Volume', value: 40 }\\n-->\"\n },\n {\n \"title\": \"Stepped Range\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Stepped Range -->\\n<uni-slider ${argsToTemplate(props)}></uni-slider>\\n<!-- args:\\n{ label: 'Opacity', min: 0, max: 1, step: 0.05, value: 0.6 }\\n-->\"\n },\n {\n \"title\": \"Disabled\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Disabled -->\\n<uni-slider ${argsToTemplate(props)}></uni-slider>\\n<!-- args:\\n{ label: 'Brightness', value: 70, disabled: true }\\n-->\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"Range slider for picking a number within bounds. It renders a native\\n`<input type=\\\"range\\\">`, so keyboard interaction (arrows, Home/End, Page Up/Down) and\\nthe ARIA slider contract come from the platform. The same Signal Forms contract as\\nInput applies — bind with the `[field]` directive or drive `[(value)]` directly.\\nFill and thumb color, track color, radii and geometry resolve from the theme's\\n`slider` options; the fill level rides a CSS custom property, so dragging never\\nregenerates styles.\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": [\n \"Native `<input type=\\\"range\\\">`: arrows, Home/End, and Page Up/Down come from the platform, and the ARIA slider contract (valuenow/min/max) is native.\",\n \"`label` is required and becomes the accessible name.\",\n \"Expose the current value textually nearby and link it with `ariaDescribedBy` when the number matters.\"\n ]\n },\n \"relatedTokens\": [\n \"slider.behavior.color\",\n \"slider.behavior.trackColor\",\n \"slider.behavior.borderRadius\",\n \"slider.behavior.trackHeight\",\n \"slider.behavior.thumbSize\"\n ]\n },\n {\n \"id\": \"snackbar\",\n \"name\": \"Snackbar\",\n \"status\": \"stable\",\n \"summary\": \"\",\n \"description\": \"\",\n \"category\": \"feedback\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-snackbar\",\n \"api\": [\n {\n \"name\": \"show\",\n \"kind\": \"model\",\n \"type\": \"boolean\",\n \"required\": false,\n \"description\": \"Two-way bindable open state: [(show)].\"\n },\n {\n \"name\": \"iconName\",\n \"kind\": \"input\",\n \"type\": \"IconName\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"symbolName\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"timeout\",\n \"kind\": \"input\",\n \"type\": \"number | string | 'disabled'\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"actionLabel\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"useVariant\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"action\",\n \"kind\": \"output\",\n \"type\": \"unknown\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"showing\",\n \"kind\": \"output\",\n \"type\": \"boolean\",\n \"required\": false,\n \"description\": \"\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Primary\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Primary -->\\n<button text-button (click)=\\\"snackbar.open()\\\">Show Snackbar</button>\\n<uni-snackbar #snackbar ${argsToTemplate(props)}>\\n ${ngContent}\\n</uni-snackbar>\\n<!-- args:\\n{\\n ngContent: 'The record has been removed.',\\n variant: 'warn',\\n actionLabel: 'undo',\\n timeout: '5000',\\n symbolName: 'delete_sweep',\\n }\\n-->\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"The Snackbar component is used to give feedback to users after an action has taken place.\\nIt appears near the bottom center of the screen temporarily and floats above the UI to not affect the application's layout.\\nA side action can be defined (e.g. undoing a process or navigating to the details of a newly created record).\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": []\n },\n \"relatedTokens\": [\n \"snackbar.behavior.bottomPosition\",\n \"snackbar.behavior.transitionDelay\",\n \"snackbar.behavior.autoCloseDelay\"\n ]\n },\n {\n \"id\": \"sort-header\",\n \"name\": \"SortHeader\",\n \"status\": \"stable\",\n \"summary\": \"\",\n \"description\": \"\",\n \"category\": \"data\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-sort-header\",\n \"api\": [\n {\n \"name\": \"column\",\n \"kind\": \"input\",\n \"type\": \"keyof T\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"datasource\",\n \"kind\": \"input\",\n \"type\": \"UniDatasource<T>\",\n \"required\": false,\n \"description\": \"\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Primary\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Primary -->\\n<uni-sort-header [datasource]=\\\"datasource\\\" [column]=\\\"column\\\">\\n <span uni-text=\\\"title-small\\\">Name</span>\\n</uni-sort-header>\\n<div box-layout paddingTop=\\\"md\\\">\\n @for (record of datasource.records().slice(0, 5); track record.id) {\\n <div>{{ record.name }}</div>\\n }\\n</div>\\n<!-- args:\\n{\\n column: 'name',\\n datasource: new UniRecordDatasource<any>(starWarsCharacters),\\n }\\n-->\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"The Sort Header wraps a column heading and cycles the bound datasource's sort state\\n(ascending → descending → unsorted) when clicked. An animated arrow indicates the current\\nsort direction. It is used by the [Data Table](?path=/docs/components-data-display-data-table--data-table)\\nfor sortable columns, but can wrap any header content bound to a `UniDatasource`.\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": []\n },\n \"relatedTokens\": []\n },\n {\n \"id\": \"stack\",\n \"name\": \"Stack\",\n \"status\": \"stable\",\n \"summary\": \"\",\n \"description\": \"\",\n \"category\": \"layout\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"[uni-stack-layout], [stack-layout]\",\n \"api\": [\n {\n \"name\": \"display\",\n \"kind\": \"input\",\n \"type\": \"OptionalDisplay\",\n \"required\": false,\n \"default\": \"'flex'\",\n \"description\": \"\"\n },\n {\n \"name\": \"flexDirection\",\n \"kind\": \"input\",\n \"type\": \"OptionalFlexDirection\",\n \"required\": false,\n \"default\": \"'column'\",\n \"description\": \"\"\n },\n {\n \"name\": \"minHeight\",\n \"kind\": \"input\",\n \"type\": \"number | string | undefined\",\n \"required\": false,\n \"default\": \"'fit-content'\",\n \"description\": \"Defaults to `fit-content` (guards content collapse). Set `[minHeight]=\\\"0\\\"` when the stack must shrink inside a constrained flex parent (scroll containment).\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Stacked Cards\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Stacked Cards -->\\n<div stack-layout ${argsToTemplate(props)}>\\n <uni-card><uni-card-content><span uni-text>Card 1</span></uni-card-content></uni-card>\\n <uni-card><uni-card-content><span uni-text>Card 2</span></uni-card-content></uni-card>\\n <uni-card><uni-card-content><span uni-text>Card 3</span></uni-card-content></uni-card>\\n <uni-card><uni-card-content><span uni-text>Card 4</span></uni-card-content></uni-card>\\n <uni-card><uni-card-content><span uni-text>Card 5</span></uni-card-content></uni-card>\\n</div>\\n<!-- args:\\n{ gap: 'lg' }\\n-->\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"`Stack` is a layout component used to group elements in a vertical arrangement and applies a uniform space between them.\\n`Stack` is an extension to the `Box` component and has all the `Box` attributes available to it.\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": []\n },\n \"relatedTokens\": []\n },\n {\n \"id\": \"stat\",\n \"name\": \"Stat\",\n \"status\": \"stable\",\n \"summary\": \"KPI stat tile: muted label, large value (numbers auto-compact: 48234 → \\\"48.2K\\\"), an optional delta whose ink is decided by *direction × whether up is good* (never direction alone — churn going down is good news), and an optional decorative sparkline.\",\n \"description\": \"KPI stat tile: muted label, large value (numbers auto-compact: 48234 → \\\"48.2K\\\"), an optional delta whose ink is decided by *direction × whether up is good* (never direction alone — churn going down is good news), and an optional decorative sparkline. Frame, typography and inks are all `stat` theme tokens.\",\n \"category\": \"components\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-stat\",\n \"api\": [\n {\n \"name\": \"label\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": true,\n \"description\": \"What is being measured, sentence case.\"\n },\n {\n \"name\": \"value\",\n \"kind\": \"input\",\n \"type\": \"string | number\",\n \"required\": true,\n \"description\": \"The headline number: strings render verbatim, numbers auto-compact.\"\n },\n {\n \"name\": \"delta\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"Signed change, e.g. \\\"+12.4%\\\" or \\\"-0.4%\\\". The sign drives the arrow.\"\n },\n {\n \"name\": \"upIsGood\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"true\",\n \"description\": \"Whether an upward movement is good news. Flip for churn, errors, cost.\"\n },\n {\n \"name\": \"caption\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"Names the comparison period, e.g. \\\"vs last month\\\".\"\n },\n {\n \"name\": \"trend\",\n \"kind\": \"input\",\n \"type\": \"number[] | undefined\",\n \"required\": false,\n \"default\": \"undefined\",\n \"description\": \"Recent values for the decorative sparkline (12 points reads best).\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Default\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Default -->\\n<uni-stat ${argsToTemplate(props)}></uni-stat>\\n<!-- args:\\n{\\n label: 'Monthly recurring revenue',\\n value: '$48.2K',\\n delta: '+12.4%',\\n caption: 'vs last month',\\n trend: [31, 34, 33, 38, 37, 41, 40, 44, 43, 46, 47, 48],\\n }\\n-->\"\n },\n {\n \"title\": \"Down is good (churn)\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Down is good (churn) -->\\n<uni-stat ${argsToTemplate(props)}></uni-stat>\\n<!-- args:\\n{\\n label: 'Churn rate',\\n value: '2.1%',\\n delta: '-0.4%',\\n upIsGood: false,\\n caption: 'vs last month',\\n trend: [3.2, 3.1, 3.0, 2.8, 2.9, 2.7, 2.6, 2.4, 2.5, 2.3, 2.2, 2.1],\\n }\\n-->\"\n },\n {\n \"title\": \"KPI row\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: KPI row -->\\n<uni-stat ${argsToTemplate(props)}></uni-stat>\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"The KPI tile a dashboard leads with: a muted label, a large headline value (numbers\\nauto-compact — `48234` renders \\\"48.2K\\\"), an optional signed delta, and an optional\\ndecorative sparkline.\\nThe delta's color is decided by **direction × whether up is good**, never direction\\nalone — set `upIsGood` to `false` for measures like churn, errors, or cost, and a\\nfalling number correctly reads as good news. The arrow is accompanied by\\nscreen-reader text (\\\"up\\\"/\\\"down\\\"), so state never relies on color alone, and `caption`\\nnames the comparison period.\\nFrame (surface, border primitive, radius), typography (the type scale's `stat` role\\nfor values), delta inks (the semantic `success`/`error`), and sparkline colors all\\nresolve from the theme's `stat` options.\",\n \"dos\": [],\n \"donts\": [\n \"Rely on delta color alone — the arrow + wording carry direction for everyone\"\n ],\n \"accessibility\": [\n \"The delta arrow is decorative; screen readers hear \\\"up\\\"/\\\"down\\\" in words instead.\",\n \"The sparkline is `aria-hidden` — the value and delta carry the information.\"\n ]\n },\n \"relatedTokens\": [\n \"stat.behavior.labelTypeface\",\n \"stat.behavior.valueTypeface\",\n \"stat.behavior.color\",\n \"stat.behavior.border\",\n \"stat.behavior.borderRadius\",\n \"stat.behavior.positiveColor\",\n \"stat.behavior.negativeColor\",\n \"stat.behavior.trendColor\",\n \"stat.behavior.trendAccent\",\n \"stat.behavior.padding\",\n \"stat.behavior.gap\"\n ]\n },\n {\n \"id\": \"symbol\",\n \"name\": \"Symbol\",\n \"status\": \"stable\",\n \"summary\": \"\",\n \"description\": \"\",\n \"category\": \"primitives\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-symbol\",\n \"api\": [\n {\n \"name\": \"name\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": true,\n \"description\": \"\"\n },\n {\n \"name\": \"fill\",\n \"kind\": \"input\",\n \"type\": \"SymbolFill\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"weight\",\n \"kind\": \"input\",\n \"type\": \"SymbolWeight\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"grade\",\n \"kind\": \"input\",\n \"type\": \"SymbolGrade\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"opticalSize\",\n \"kind\": \"input\",\n \"type\": \"number\",\n \"required\": false,\n \"description\": \"\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Primary\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Primary -->\\n<!-- args:\\n{\\n name: 'settings',\\n }\\n-->\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"The Symbol Component integrates the latest [Material Symbols](https://fonts.google.com/icons?icon.platform=web&icon.style=Rounded&icon.set=Material+Symbols&query=les).\\nMaterial Symbols consolidates over 3,275 glyphs (icons) in a single font file with a wide range of design variants.\\nSymbols are available in three styles and four adjustable variable font styles (fill, weight, grade, and optical size).\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": [\n \"Symbols are decorative (`aria-hidden`) — the parent control carries the accessible name.\"\n ]\n },\n \"relatedTokens\": [\n \"symbol.behavior.fill\",\n \"symbol.behavior.weight\",\n \"symbol.behavior.grade\",\n \"symbol.behavior.opticalSize\"\n ]\n },\n {\n \"id\": \"tab\",\n \"name\": \"Tab\",\n \"status\": \"stable\",\n \"summary\": \"One tab inside `uni-tabs`: a label for the tablist plus projected panel content.\",\n \"description\": \"One tab inside `uni-tabs`: a label for the tablist plus projected panel content. Content is captured in a template and only instantiated while the tab is selected, so inactive panels cost nothing.\",\n \"category\": \"components\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-tab\",\n \"api\": [\n {\n \"name\": \"label\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": true,\n \"description\": \"\"\n },\n {\n \"name\": \"disabled\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n }\n ]\n }\n },\n \"examples\": [],\n \"guidelines\": {\n \"whenToUse\": \"\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": []\n },\n \"relatedTokens\": []\n },\n {\n \"id\": \"tabs\",\n \"name\": \"Tabs\",\n \"status\": \"stable\",\n \"summary\": \"WAI-ARIA tabs: roving tabindex, automatic activation (arrow keys move focus and select), Home/End, disabled tabs skipped.\",\n \"description\": \"WAI-ARIA tabs: roving tabindex, automatic activation (arrow keys move focus and select), Home/End, disabled tabs skipped. Only the selected panel is instantiated. All styling resolves from `tabs` theme option tokens.\",\n \"category\": \"components\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-tabs\",\n \"api\": [\n {\n \"name\": \"selectedIndex\",\n \"kind\": \"model\",\n \"type\": \"number\",\n \"required\": false,\n \"default\": \"0\",\n \"description\": \"Index of the selected tab; two-way bindable.\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Default\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Default -->\\n<uni-tabs [selectedIndex]=\\\"selectedIndex ?? 0\\\">\\n<uni-tab label=\\\"Overview\\\">\\n <span uni-text=\\\"body-1-long\\\">\\n Arrow keys move between tabs (disabled tabs are skipped), Home and End jump\\n to the extremes, and only the selected panel is rendered.\\n </span>\\n</uni-tab>\\n<uni-tab label=\\\"Activity\\\">\\n <span uni-text=\\\"body-1-long\\\">Recent activity would render here.</span>\\n</uni-tab>\\n<uni-tab label=\\\"Settings\\\">\\n <span uni-text=\\\"body-1-long\\\">Settings content, instantiated on selection.</span>\\n</uni-tab>\\n</uni-tabs>\"\n },\n {\n \"title\": \"With Disabled Tab\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: With Disabled Tab -->\\n<uni-tabs [selectedIndex]=\\\"selectedIndex ?? 0\\\">\\n<uni-tab label=\\\"Overview\\\">\\n <span uni-text=\\\"body-1-long\\\">\\n Arrow keys move between tabs (disabled tabs are skipped), Home and End jump\\n to the extremes, and only the selected panel is rendered.\\n </span>\\n</uni-tab>\\n<uni-tab label=\\\"Activity\\\">\\n <span uni-text=\\\"body-1-long\\\">Recent activity would render here.</span>\\n</uni-tab>\\n<uni-tab label=\\\"Settings\\\">\\n <span uni-text=\\\"body-1-long\\\">Settings content, instantiated on selection.</span>\\n</uni-tab>\\n</uni-tabs>\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"Tabs organize peer views behind a single switcher. Each `uni-tab` supplies a label and\\nits panel content; only the selected panel is instantiated, so heavy tab content costs\\nnothing until visited.\\nThe default tokens render underline tabs; a theme that sets `borderRadius: 'max'` and\\nan `activeColor` gets segmented pills without any component changes.\",\n \"dos\": [\n \"Use for peer views of the same subject (details, activity, settings)\",\n \"Keep labels to one or two words\"\n ],\n \"donts\": [\n \"Nest tabs inside tabs\",\n \"Use tabs for sequential steps — that is a stepper\"\n ],\n \"accessibility\": [\n \"Full WAI-ARIA tabs pattern: `tablist`/`tab`/`tabpanel` roles with wired\",\n \"Arrow keys move between tabs with selection following focus, wrapping at the ends;\",\n \"Roving tabindex: only the selected tab sits in the tab order; the panel itself is\"\n ]\n },\n \"relatedTokens\": [\n \"tabs.behavior.typeface\",\n \"tabs.behavior.textColor\",\n \"tabs.behavior.activeTextColor\",\n \"tabs.behavior.indicatorColor\",\n \"tabs.behavior.indicatorThickness\",\n \"tabs.behavior.divider\",\n \"tabs.behavior.gap\",\n \"tabs.behavior.borderRadius\",\n \"tabs.behavior.padding\"\n ]\n },\n {\n \"id\": \"tag\",\n \"name\": \"Tag\",\n \"status\": \"stable\",\n \"summary\": \"Compact chip for categories, states, filters and tokens.\",\n \"description\": \"Compact chip for categories, states, filters and tokens. Two orthogonal style axes: `variant` picks the colour role and `tone` picks the archetype (soft / solid / outline). Both live in the theme's `tag` entry, so a theme restyles every chip in the app without touching markup. Structurally a chip is **body + trailing action as siblings**, never nested buttons: an interactive chip whose body is a `<button>` cannot contain the remove `<button>` (invalid HTML, and the inner control becomes unreachable for keyboard users). Both stay independently operable.\",\n \"category\": \"data\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-tag\",\n \"api\": [\n {\n \"name\": \"size\",\n \"kind\": \"input\",\n \"type\": \"Size\",\n \"required\": false,\n \"default\": \"'md'\",\n \"description\": \"\"\n },\n {\n \"name\": \"tone\",\n \"kind\": \"input\",\n \"type\": \"TagTone\",\n \"required\": false,\n \"default\": \"'soft'\",\n \"description\": \"\"\n },\n {\n \"name\": \"label\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"value\",\n \"kind\": \"input\",\n \"type\": \"string | number\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"maxWidth\",\n \"kind\": \"input\",\n \"type\": \"string | number\",\n \"required\": false,\n \"description\": \"Truncation budget, e.g. `'14ch'`. A number is treated as px.\"\n },\n {\n \"name\": \"avatarSrc\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"avatarName\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"Initials fallback when `avatarSrc` is absent or fails to load.\"\n },\n {\n \"name\": \"iconName\",\n \"kind\": \"input\",\n \"type\": \"IconName\",\n \"required\": false,\n \"description\": \"Theme icon primitive — the preferred glyph path.\"\n },\n {\n \"name\": \"symbolName\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"Material Symbols ligature, for glyphs the theme's icon set doesn't carry.\"\n },\n {\n \"name\": \"dot\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"Status dot in the current colour.\"\n },\n {\n \"name\": \"removable\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"interactive\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"selected\",\n \"kind\": \"input\",\n \"type\": \"boolean | undefined\",\n \"required\": false,\n \"default\": \"undefined\",\n \"description\": \"Toggle state. Left undefined the chip carries no `aria-pressed` at all — an interactive chip is not always a toggle (inside a tag input it is focusable so it can be removed), and announcing \\\"not pressed\\\" on a recipient chip is worse than announcing nothing.\"\n },\n {\n \"name\": \"invalid\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"disabled\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"removeLabel\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"Accessible-name override for the remove button.\"\n },\n {\n \"name\": \"controlTabIndex\",\n \"kind\": \"input\",\n \"type\": \"number\",\n \"required\": false,\n \"default\": \"0\",\n \"description\": \"Tab position of the chip's controls. A composite that owns its own roving focus — `uni-tag-input`, where the whole field is one tab stop — passes `-1` so Tab does not walk through every chip to reach the next control.\"\n },\n {\n \"name\": \"removed\",\n \"kind\": \"output\",\n \"type\": \"UniTagValue\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"activated\",\n \"kind\": \"output\",\n \"type\": \"UniTagValue\",\n \"required\": false,\n \"description\": \"\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Primary\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Primary -->\\n<div box-layout gap=\\\"sm\\\">\\n@for (tone of ['soft', 'solid', 'outline']; track tone) {\\n <div row-layout gap=\\\"sm\\\" alignItems=\\\"center\\\" style=\\\"margin-bottom:8px\\\">\\n @for (variant of ['primary', 'secondary', 'tertiary', 'warn', 'success', 'ghost']; track variant) {\\n <uni-tag [variant]=\\\"variant\\\" [tone]=\\\"tone\\\" [label]=\\\"variant\\\" />\\n }\\n </div>\\n}\\n</div>\\n<!-- args:\\n{ removable: true }\\n-->\"\n },\n {\n \"title\": \"Variants And Tones\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Variants And Tones -->\\n<div box-layout gap=\\\"sm\\\">\\n@for (tone of ['soft', 'solid', 'outline']; track tone) {\\n <div row-layout gap=\\\"sm\\\" alignItems=\\\"center\\\" style=\\\"margin-bottom:8px\\\">\\n @for (variant of ['primary', 'secondary', 'tertiary', 'warn', 'success', 'ghost']; track variant) {\\n <uni-tag [variant]=\\\"variant\\\" [tone]=\\\"tone\\\" [label]=\\\"variant\\\" />\\n }\\n </div>\\n}\\n</div>\\n<!-- args:\\n{ removable: true }\\n-->\"\n },\n {\n \"title\": \"Sizes\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Sizes -->\\n<div box-layout gap=\\\"sm\\\">\\n@for (tone of ['soft', 'solid', 'outline']; track tone) {\\n <div row-layout gap=\\\"sm\\\" alignItems=\\\"center\\\" style=\\\"margin-bottom:8px\\\">\\n @for (variant of ['primary', 'secondary', 'tertiary', 'warn', 'success', 'ghost']; track variant) {\\n <uni-tag [variant]=\\\"variant\\\" [tone]=\\\"tone\\\" [label]=\\\"variant\\\" />\\n }\\n </div>\\n}\\n</div>\\n<!-- args:\\n{ removable: true }\\n-->\"\n },\n {\n \"title\": \"Removable\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Removable -->\\n<div box-layout gap=\\\"sm\\\">\\n@for (tone of ['soft', 'solid', 'outline']; track tone) {\\n <div row-layout gap=\\\"sm\\\" alignItems=\\\"center\\\" style=\\\"margin-bottom:8px\\\">\\n @for (variant of ['primary', 'secondary', 'tertiary', 'warn', 'success', 'ghost']; track variant) {\\n <uni-tag [variant]=\\\"variant\\\" [tone]=\\\"tone\\\" [label]=\\\"variant\\\" />\\n }\\n </div>\\n}\\n</div>\\n<!-- args:\\n{ removable: true }\\n-->\"\n },\n {\n \"title\": \"Interactive\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Interactive -->\\n<div box-layout gap=\\\"sm\\\">\\n@for (tone of ['soft', 'solid', 'outline']; track tone) {\\n <div row-layout gap=\\\"sm\\\" alignItems=\\\"center\\\" style=\\\"margin-bottom:8px\\\">\\n @for (variant of ['primary', 'secondary', 'tertiary', 'warn', 'success', 'ghost']; track variant) {\\n <uni-tag [variant]=\\\"variant\\\" [tone]=\\\"tone\\\" [label]=\\\"variant\\\" />\\n }\\n </div>\\n}\\n</div>\\n<!-- args:\\n{ interactive: true, removable: true, selected: false }\\n-->\"\n },\n {\n \"title\": \"Selected\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Selected -->\\n<div box-layout gap=\\\"sm\\\">\\n@for (tone of ['soft', 'solid', 'outline']; track tone) {\\n <div row-layout gap=\\\"sm\\\" alignItems=\\\"center\\\" style=\\\"margin-bottom:8px\\\">\\n @for (variant of ['primary', 'secondary', 'tertiary', 'warn', 'success', 'ghost']; track variant) {\\n <uni-tag [variant]=\\\"variant\\\" [tone]=\\\"tone\\\" [label]=\\\"variant\\\" />\\n }\\n </div>\\n}\\n</div>\\n<!-- args:\\n{ interactive: true, selected: true, tone: 'solid' }\\n-->\"\n },\n {\n \"title\": \"Lead Elements\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Lead Elements -->\\n<div box-layout gap=\\\"sm\\\">\\n@for (tone of ['soft', 'solid', 'outline']; track tone) {\\n <div row-layout gap=\\\"sm\\\" alignItems=\\\"center\\\" style=\\\"margin-bottom:8px\\\">\\n @for (variant of ['primary', 'secondary', 'tertiary', 'warn', 'success', 'ghost']; track variant) {\\n <uni-tag [variant]=\\\"variant\\\" [tone]=\\\"tone\\\" [label]=\\\"variant\\\" />\\n }\\n </div>\\n}\\n</div>\\n<!-- args:\\n{ label: 'nope@@x', invalid: true, removable: true, variant: 'warn' }\\n-->\"\n },\n {\n \"title\": \"Invalid\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Invalid -->\\n<div box-layout gap=\\\"sm\\\">\\n@for (tone of ['soft', 'solid', 'outline']; track tone) {\\n <div row-layout gap=\\\"sm\\\" alignItems=\\\"center\\\" style=\\\"margin-bottom:8px\\\">\\n @for (variant of ['primary', 'secondary', 'tertiary', 'warn', 'success', 'ghost']; track variant) {\\n <uni-tag [variant]=\\\"variant\\\" [tone]=\\\"tone\\\" [label]=\\\"variant\\\" />\\n }\\n </div>\\n}\\n</div>\\n<!-- args:\\n{ label: 'nope@@x', invalid: true, removable: true, variant: 'warn' }\\n-->\"\n },\n {\n \"title\": \"Disabled\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Disabled -->\\n<div box-layout gap=\\\"sm\\\">\\n@for (tone of ['soft', 'solid', 'outline']; track tone) {\\n <div row-layout gap=\\\"sm\\\" alignItems=\\\"center\\\" style=\\\"margin-bottom:8px\\\">\\n @for (variant of ['primary', 'secondary', 'tertiary', 'warn', 'success', 'ghost']; track variant) {\\n <uni-tag [variant]=\\\"variant\\\" [tone]=\\\"tone\\\" [label]=\\\"variant\\\" />\\n }\\n </div>\\n}\\n</div>\\n<!-- args:\\n{ label: 'Locked', disabled: true, removable: true }\\n-->\"\n },\n {\n \"title\": \"Truncated\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Truncated -->\\n<div box-layout gap=\\\"sm\\\">\\n@for (tone of ['soft', 'solid', 'outline']; track tone) {\\n <div row-layout gap=\\\"sm\\\" alignItems=\\\"center\\\" style=\\\"margin-bottom:8px\\\">\\n @for (variant of ['primary', 'secondary', 'tertiary', 'warn', 'success', 'ghost']; track variant) {\\n <uni-tag [variant]=\\\"variant\\\" [tone]=\\\"tone\\\" [label]=\\\"variant\\\" />\\n }\\n </div>\\n}\\n</div>\\n<!-- args:\\n{\\n label: 'A very long tag label that has to be truncated somewhere',\\n maxWidth: '18ch',\\n removable: true,\\n }\\n-->\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"Compact chip for categories, states, filters and tokens. Two orthogonal style\\naxes: **`variant`** picks the colour role and **`tone`** picks the archetype\\n(`soft`, `solid`, `outline`). Both resolve from the theme's `tag` entry, so a\\ntheme restyles every chip in the app without touching markup.\",\n \"dos\": [\n \"Use `variant` for meaning (a `warn` chip for a problem) and `tone` for emphasis.\",\n \"Give `removable` chips a `value` so the handler knows which one to drop.\",\n \"Set `maxWidth` when user-supplied text could be arbitrarily long.\"\n ],\n \"donts\": [\n \"Don't make a whole chip clickable *and* nest the remove control inside it —\",\n \"Don't rely on chip colour alone to convey state.\",\n \"Don't put a remove control on a chip that is purely a label.\"\n ],\n \"accessibility\": [\n \"A static tag is **text, not a widget**: no role, no tab stop. Screen readers\",\n \"`removable` adds one real `<button>` named `Remove {label}`, overridable with\",\n \"`interactive` makes the body a `<button type=\\\"button\\\">`; `selected` maps to\",\n \"Icons, avatars, initials and dots are `aria-hidden` — the chip's text is its\",\n \"`invalid` sets `aria-invalid` and adds a non-colour cue.\"\n ]\n },\n \"relatedTokens\": [\n \"tag.behavior.borderRadius\",\n \"tag.behavior.typeface\",\n \"tag.behavior.gap\",\n \"tag.behavior.removeIcon\",\n \"tag.behavior.selectedIcon\"\n ]\n },\n {\n \"id\": \"tag-input\",\n \"name\": \"TagInput\",\n \"status\": \"stable\",\n \"summary\": \"\",\n \"description\": \"\",\n \"category\": \"forms\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-tag-input\",\n \"api\": [\n {\n \"name\": \"value\",\n \"kind\": \"model\",\n \"type\": \"UniTagItem[]\",\n \"required\": false,\n \"default\": \"[]\",\n \"description\": \"\"\n },\n {\n \"name\": \"disabled\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"touched\",\n \"kind\": \"model\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"invalid\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"dirty\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"required\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"ariaDescribedBy\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"label\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": true,\n \"description\": \"Accessible name for the field, e.g. \\\"To\\\".\"\n },\n {\n \"name\": \"placeholder\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"preset\",\n \"kind\": \"input\",\n \"type\": \"'text' | 'email'\",\n \"required\": false,\n \"default\": \"'text'\",\n \"description\": \"`email` wires an address validator, paste parser and space separator.\"\n },\n {\n \"name\": \"separators\",\n \"kind\": \"input\",\n \"type\": \"string[]\",\n \"required\": false,\n \"default\": \"[',', ';']\",\n \"description\": \"\"\n },\n {\n \"name\": \"commitOnBlur\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"true\",\n \"description\": \"\"\n },\n {\n \"name\": \"allowDuplicates\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"max\",\n \"kind\": \"input\",\n \"type\": \"number\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"tagVariant\",\n \"kind\": \"input\",\n \"type\": \"Variant\",\n \"required\": false,\n \"default\": \"'primary'\",\n \"description\": \"\"\n },\n {\n \"name\": \"tagTone\",\n \"kind\": \"input\",\n \"type\": \"TagTone\",\n \"required\": false,\n \"default\": \"'soft'\",\n \"description\": \"\"\n },\n {\n \"name\": \"tagSize\",\n \"kind\": \"input\",\n \"type\": \"Size\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"suggestions\",\n \"kind\": \"input\",\n \"type\": \"UniTagSuggestion[]\",\n \"required\": false,\n \"default\": \"[]\",\n \"description\": \"\"\n },\n {\n \"name\": \"query\",\n \"kind\": \"output\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"Debounced text the app should filter `suggestions` from.\"\n },\n {\n \"name\": \"debounceTime\",\n \"kind\": \"input\",\n \"type\": \"number\",\n \"required\": false,\n \"default\": \"250\",\n \"description\": \"\"\n },\n {\n \"name\": \"added\",\n \"kind\": \"output\",\n \"type\": \"UniTagItem\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"removed\",\n \"kind\": \"output\",\n \"type\": \"UniTagItem\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"rejected\",\n \"kind\": \"output\",\n \"type\": \"UniTagRejection\",\n \"required\": false,\n \"description\": \"\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Primary\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Primary -->\\n<uni-tag-input\\nlabel=\\\"To\\\"\\npreset=\\\"email\\\"\\nplaceholder=\\\"Name or address…\\\"\\n[value]=\\\"value\\\"\\n[suggestions]=\\\"suggestions\\\"\\n(query)=\\\"onQuery($event)\\\"\\n/>\\n<!-- args:\\n{ value: [{ value: 'alice@uni.dev', label: 'Alice Chen' }] }\\n-->\"\n },\n {\n \"title\": \"Email Recipients\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Email Recipients -->\\n<uni-tag-input\\nlabel=\\\"To\\\"\\npreset=\\\"email\\\"\\nplaceholder=\\\"Name or address…\\\"\\n[value]=\\\"value\\\"\\n[suggestions]=\\\"suggestions\\\"\\n(query)=\\\"onQuery($event)\\\"\\n/>\\n<!-- args:\\n{ value: [{ value: 'alice@uni.dev', label: 'Alice Chen' }] }\\n-->\"\n },\n {\n \"title\": \"Invalid Entry\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Invalid Entry -->\\n<uni-tag-input\\nlabel=\\\"To\\\"\\npreset=\\\"email\\\"\\nplaceholder=\\\"Name or address…\\\"\\n[value]=\\\"value\\\"\\n[suggestions]=\\\"suggestions\\\"\\n(query)=\\\"onQuery($event)\\\"\\n/>\\n<!-- args:\\n{\\n preset: 'email',\\n value: [\\n { value: 'alice@uni.dev', label: 'Alice Chen' },\\n { value: 'nope@@x', invalid: true },\\n ],\\n }\\n-->\"\n },\n {\n \"title\": \"Locked Entry\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Locked Entry -->\\n<uni-tag-input\\nlabel=\\\"To\\\"\\npreset=\\\"email\\\"\\nplaceholder=\\\"Name or address…\\\"\\n[value]=\\\"value\\\"\\n[suggestions]=\\\"suggestions\\\"\\n(query)=\\\"onQuery($event)\\\"\\n/>\\n<!-- args:\\n{\\n value: [\\n { value: 'owner@uni.dev', label: 'Thread owner', disabled: true },\\n { value: 'bob@uni.dev', label: 'Bob Ferrari' },\\n ],\\n }\\n-->\"\n },\n {\n \"title\": \"With Maximum\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: With Maximum -->\\n<uni-tag-input\\nlabel=\\\"To\\\"\\npreset=\\\"email\\\"\\nplaceholder=\\\"Name or address…\\\"\\n[value]=\\\"value\\\"\\n[suggestions]=\\\"suggestions\\\"\\n(query)=\\\"onQuery($event)\\\"\\n/>\\n<!-- args:\\n{ max: 3, value: [{ value: 'alpha' }, { value: 'beta' }] }\\n-->\"\n },\n {\n \"title\": \"Disabled\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Disabled -->\\n<uni-tag-input\\nlabel=\\\"To\\\"\\npreset=\\\"email\\\"\\nplaceholder=\\\"Name or address…\\\"\\n[value]=\\\"value\\\"\\n[suggestions]=\\\"suggestions\\\"\\n(query)=\\\"onQuery($event)\\\"\\n/>\\n<!-- args:\\n{ disabled: true, value: [{ value: 'alpha' }, { value: 'beta' }] }\\n-->\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"Type-to-add chip field: recipients, filters, labels. It is the **open-set**\\ncontrol — anything the user types can become a token, whether or not it matches\\na suggestion. For picking from a fixed list, use `uni-select` or\\n`uni-multi-select-dropdown` instead.\",\n \"dos\": [],\n \"donts\": [\n \"Don't use it to pick from a closed list — that is `uni-multi-select-dropdown`.\",\n \"Don't filter `suggestions` inside the component; drive them from `(query)`.\",\n \"Don't set `preset=\\\"email\\\"` for people's names: Space would split them.\"\n ],\n \"accessibility\": [\n \"The text input is `role=\\\"combobox\\\"` with `aria-expanded`, `aria-controls` and\",\n \"Every add, remove and rejection announces through a `role=\\\"status\\\"` live\",\n \"The removal route is described **once** for the field through\",\n \"`aria-invalid` is gated on `invalid && (touched || dirty)`, per the library's\"\n ]\n },\n \"relatedTokens\": []\n },\n {\n \"id\": \"text\",\n \"name\": \"Text\",\n \"status\": \"stable\",\n \"summary\": \"The typography primitive, applied as an attribute to any element so semantics stay yours.\",\n \"description\": \"The typography primitive, applied as an attribute to any element so semantics stay yours. The attribute value is the typeface: `<h1 uni-text=\\\"display-small\\\">`, `<span uni-text=\\\"caption\\\">`, dynamic via `[uni-text]=\\\"role()\\\"`. With no value, the typeface is inferred from the host element (h1 → headline-large, p → body-1-long, …), falling back to `title-small`; the `typeface` input remains as an explicit override.\",\n \"category\": \"primitives\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"[uni-text]\",\n \"api\": [\n {\n \"name\": \"uniText\",\n \"kind\": \"input\",\n \"type\": \"Typeface | ''\",\n \"required\": false,\n \"default\": \"'', { alias: 'uni-text' }\",\n \"description\": \"Typeface via the selector attribute: `uni-text=\\\"headline-large\\\"`.\"\n },\n {\n \"name\": \"typeface\",\n \"kind\": \"input\",\n \"type\": \"Typeface | undefined\",\n \"required\": false,\n \"default\": \"undefined\",\n \"description\": \"Explicit typeface; the attribute value wins when both are set.\"\n },\n {\n \"name\": \"color\",\n \"kind\": \"input\",\n \"type\": \"ColorKey\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"display\",\n \"kind\": \"input\",\n \"type\": \"OptionalDisplay\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"align\",\n \"kind\": \"input\",\n \"type\": \"OptionalTextAlign\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"nowrap\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"maxWidth\",\n \"kind\": \"input\",\n \"type\": \"number\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"ellipsis\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Value shorthand\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Value shorthand -->\\n<div stack-layout gap=\\\"sm\\\">\\n<span uni-text=\\\"display-small\\\" display=\\\"block\\\">Display small</span>\\n<span uni-text=\\\"headline-medium\\\" display=\\\"block\\\">Headline medium</span>\\n<span uni-text=\\\"body-1-long\\\" display=\\\"block\\\">\\n Body copy set with uni-text=\\\"body-1-long\\\" — the attribute value is the typeface.\\n</span>\\n<span uni-text=\\\"caption\\\" color=\\\"on-background-variant\\\" display=\\\"block\\\">\\n A caption in the muted ink.\\n</span>\\n</div>\"\n },\n {\n \"title\": \"Element-aware defaults\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Element-aware defaults -->\\n<div stack-layout gap=\\\"sm\\\">\\n<span uni-text=\\\"display-small\\\" display=\\\"block\\\">Display small</span>\\n<span uni-text=\\\"headline-medium\\\" display=\\\"block\\\">Headline medium</span>\\n<span uni-text=\\\"body-1-long\\\" display=\\\"block\\\">\\n Body copy set with uni-text=\\\"body-1-long\\\" — the attribute value is the typeface.\\n</span>\\n<span uni-text=\\\"caption\\\" color=\\\"on-background-variant\\\" display=\\\"block\\\">\\n A caption in the muted ink.\\n</span>\\n</div>\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"The typography primitive, applied as an **attribute on any element** so your HTML\\nsemantics stay intact. The attribute value is the typeface —\\n`<h1 uni-text=\\\"display-small\\\">` — and `[uni-text]=\\\"role()\\\"` binds it dynamically.\\nWith no value, the typeface is inferred from the host element (`h1` →\\n`headline-large`, `p` → `body-1-long`, `small` → `caption`, `blockquote` → `quote`,\\nfalling back to `title-small`), so plain semantic markup is correctly set with zero\\nconfiguration. `color` takes any theme color token; `align`, `nowrap`, `maxWidth`,\\nand `ellipsis` handle common text layout.\",\n \"dos\": [\n \"Reach for semantic elements first and let the element-aware defaults set the type\"\n ],\n \"donts\": [\n \"Use `span uni-text=\\\"headline-large\\\"` where a real heading belongs\"\n ],\n \"accessibility\": [\n \"Text never replaces your elements — headings stay `h1`–`h6`, paragraphs stay `p`,\",\n \"Type is styling only: pick the element for meaning, the typeface for appearance\"\n ]\n },\n \"relatedTokens\": []\n },\n {\n \"id\": \"textarea\",\n \"name\": \"Textarea\",\n \"status\": \"stable\",\n \"summary\": \"\",\n \"description\": \"\",\n \"category\": \"primitives\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-textarea\",\n \"api\": [\n {\n \"name\": \"value\",\n \"kind\": \"model\",\n \"type\": \"string\",\n \"required\": false,\n \"default\": \"''\",\n \"description\": \"\"\n },\n {\n \"name\": \"disabled\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"touched\",\n \"kind\": \"model\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"invalid\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"dirty\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"required\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"Synced from required() validators by the Signal Forms [field] directive.\"\n },\n {\n \"name\": \"ariaDescribedBy\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"Id(s) of external element(s) describing this control — typically your app-rendered error message — exposed as aria-describedby.\"\n },\n {\n \"name\": \"label\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": true,\n \"description\": \"\"\n },\n {\n \"name\": \"placeholder\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"default\": \"''\",\n \"description\": \"\"\n },\n {\n \"name\": \"rows\",\n \"kind\": \"input\",\n \"type\": \"number | undefined\",\n \"required\": false,\n \"default\": \"undefined\",\n \"description\": \"Visible text rows. Defaults to the theme's `textarea` options.\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Default\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Default -->\\n<uni-textarea ${argsToTemplate(props)}>\\n</uni-textarea>\\n<!-- args:\\n{ label: 'Message', placeholder: 'Tell us everything…' }\\n-->\"\n },\n {\n \"title\": \"Prefilled\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Prefilled -->\\n<uni-textarea ${argsToTemplate(props)}>\\n</uni-textarea>\\n<!-- args:\\n{\\n label: 'Bio',\\n value: 'Design systems engineer.\\\\nOKLCH enthusiast.',\\n rows: 5,\\n }\\n-->\"\n },\n {\n \"title\": \"Invalid\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Invalid -->\\n<uni-textarea ${argsToTemplate(props)}>\\n</uni-textarea>\\n<!-- args:\\n{\\n label: 'Feedback',\\n placeholder: 'Required',\\n invalid: true,\\n touched: true,\\n }\\n-->\"\n },\n {\n \"title\": \"Disabled\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Disabled -->\\n<uni-textarea ${argsToTemplate(props)}>\\n</uni-textarea>\\n<!-- args:\\n{ label: 'Notes', value: 'Read-only content', disabled: true }\\n-->\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"Multi-line text field with the same Signal Forms contract as Input — use it anywhere\\nfree-form text runs past one line (comments, descriptions, feedback). It shares Input's\\nthemed chrome (color, border, error state, focus outline, typeface) and adds\\ntextarea-specific behavior from the theme's `textarea` options: default `rows` and the\\nCSS `resize` mode. Bind it to a form with the `[field]` directive, or drive `[(value)]`\\ndirectly.\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": [\n \"`label` is required and becomes the accessible name (`aria-label`).\",\n \"Error state is exposed as `aria-invalid` once the field was touched or is dirty; wire your error text with `ariaDescribedBy`.\"\n ]\n },\n \"relatedTokens\": [\n \"textarea.behavior.rows\",\n \"textarea.behavior.resize\"\n ]\n },\n {\n \"id\": \"theme-builder\",\n \"name\": \"ThemeBuilder\",\n \"status\": \"stable\",\n \"summary\": \"\",\n \"description\": \"\",\n \"category\": \"primitives\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-theme-builder\",\n \"api\": []\n }\n },\n \"examples\": [\n {\n \"title\": \"Builder\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Builder -->\\n<uni-theme-builder />\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": []\n },\n \"relatedTokens\": []\n },\n {\n \"id\": \"theme-switch\",\n \"name\": \"ThemeSwitch\",\n \"status\": \"stable\",\n \"summary\": \"Drop-in switcher for the themes registered via `UNI_THEMES`: a select over `ThemeService.themeOptions` that applies the choice through `selectTheme` (so it persists across reloads like any other theme selection).\",\n \"description\": \"Drop-in switcher for the themes registered via `UNI_THEMES`: a select over `ThemeService.themeOptions` that applies the choice through `selectTheme` (so it persists across reloads like any other theme selection).\",\n \"category\": \"components\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-theme-switch\",\n \"api\": [\n {\n \"name\": \"ariaLabel\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"default\": \"'Theme'\",\n \"description\": \"Accessible name for the underlying select.\"\n },\n {\n \"name\": \"themeChanged\",\n \"kind\": \"output\",\n \"type\": \"ThemeName\",\n \"required\": false,\n \"description\": \"Emits the selected theme key after it has been applied.\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Primary\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Primary -->\\n<div stack-layout gap=\\\"md\\\" [width]=\\\"420\\\">\\n<uni-theme-switch></uni-theme-switch>\\n<uni-card>\\n <uni-card-header>Live preview</uni-card-header>\\n <uni-card-content>\\n <div stack-layout gap=\\\"md\\\">\\n <span uni-text typeface=\\\"body-2-long\\\">\\n Pick a theme above — every registered theme (UNI_THEMES) restyles\\n this card and these buttons instantly.\\n </span>\\n <div row-layout gap=\\\"sm\\\">\\n <button text-button variant=\\\"primary\\\">Primary</button>\\n <button text-button variant=\\\"secondary\\\">Secondary</button>\\n <button text-button variant=\\\"warn\\\">Danger</button>\\n </div>\\n </div>\\n </uni-card-content>\\n</uni-card>\\n</div>\\n<!-- args:\\n{}\\n-->\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"Drop-in switcher for every theme registered via `UNI_THEMES`. Renders a `uni-select` over\\n`ThemeService.themeOptions` and applies the choice through `ThemeService.selectTheme`, so the\\nselection persists across reloads exactly like any other theme change. Use it wherever an app\\noffers a theme choice — a settings page, an app-bar action, or a light/dark toggle backed by two\\nregistered themes. Because it reads the registry from the injected `UNI_THEMES` token, adding a\\nnew theme to the registry is all it takes for the switcher to offer it.\",\n \"dos\": [\n \"Register every selectable theme in `UNI_THEMES` (bootstrap) or via `registerTheme` (runtime); the switcher derives its options from the registry.\",\n \"Give the control a meaningful `ariaLabel` when \\\"Theme\\\" is ambiguous in context (e.g. \\\"Editor color theme\\\").\",\n \"Use `themeChanged` for side effects like analytics or syncing a user preference to a backend.\"\n ],\n \"donts\": [\n \"Don't try to write `ThemeService.theme` directly — it's a readonly signal. Go through `selectTheme`/`registerTheme` (persisted, listed) or `setTheme` (validated, unlisted) instead.\",\n \"Don't hardcode theme ids in app logic; read `ThemeService.selectedThemeKey()` instead.\",\n \"Don't use it for the palette-generation workflow — that's the Theme Builder; the switcher only picks among registered themes.\"\n ],\n \"accessibility\": [\n \"Built on a native `<select>` (via `uni-select`), so keyboard and screen-reader interaction come from the platform.\",\n \"Exposes `ariaLabel` (default \\\"Theme\\\") as the accessible name for the control.\",\n \"Theme changes restyle in place without moving focus or reloading, so context is preserved for assistive tech.\"\n ]\n },\n \"relatedTokens\": []\n },\n {\n \"id\": \"time-input\",\n \"name\": \"TimeInput\",\n \"status\": \"stable\",\n \"summary\": \"Time field: a combobox over time options — the same listbox contract as uni-search-input and uni-tag-input.\",\n \"description\": \"Time field: a combobox over time options — the same listbox contract as uni-search-input and uni-tag-input. Type `3p`, `930` or `15:00`, or pick `3:00 PM` from the list; the form always gets 24-hour `'HH:mm'` (`hour12` affects display only). The list is assistive, not exhaustive: any parseable time commits, unless `slots` pins the choices (a slot picker) — then a typed time must match one. Unreadable or unavailable text stays in the field, flagged, with a `rejected` event.\",\n \"category\": \"forms\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-time-input, TimeInput\",\n \"api\": [\n {\n \"name\": \"value\",\n \"kind\": \"model\",\n \"type\": \"UniTime | undefined\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"disabled\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"touched\",\n \"kind\": \"model\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"invalid\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"dirty\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"required\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"ariaDescribedBy\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"label\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": true,\n \"description\": \"Accessible name for the field, e.g. \\\"Start time\\\".\"\n },\n {\n \"name\": \"placeholder\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"\"\n },\n {\n \"name\": \"minuteStep\",\n \"kind\": \"input\",\n \"type\": \"number\",\n \"required\": false,\n \"default\": \"30\",\n \"description\": \"Generated list granularity, in minutes.\"\n },\n {\n \"name\": \"minTime\",\n \"kind\": \"input\",\n \"type\": \"UniTime\",\n \"required\": false,\n \"description\": \"Earliest allowed time (inclusive), `'09:00'`.\"\n },\n {\n \"name\": \"maxTime\",\n \"kind\": \"input\",\n \"type\": \"UniTime\",\n \"required\": false,\n \"description\": \"Latest allowed time (inclusive), `'17:00'`.\"\n },\n {\n \"name\": \"slots\",\n \"kind\": \"input\",\n \"type\": \"UniTime[]\",\n \"required\": false,\n \"description\": \"Exact allowed times (scheduling). When set, typed entry must match one.\"\n },\n {\n \"name\": \"hour12\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"description\": \"12-hour display; defaults from the locale. The value stays 24-hour.\"\n },\n {\n \"name\": \"locale\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"BCP 47 tag for the display format; defaults to the document language.\"\n },\n {\n \"name\": \"commitOnBlur\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"true\",\n \"description\": \"\"\n },\n {\n \"name\": \"embedded\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"Renders without its own input-box chrome, for composers like uni-date-time-input.\"\n },\n {\n \"name\": \"rejected\",\n \"kind\": \"output\",\n \"type\": \"UniTimeInputRejection\",\n \"required\": false,\n \"description\": \"A typed commit was refused; the raw text stays in the field.\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Primary\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Primary -->\\n<!-- args:\\n{ minTime: '09:00', maxTime: '17:00', minuteStep: 30, value: '09:30' }\\n-->\"\n },\n {\n \"title\": \"Slots\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Slots -->\\n<!-- args:\\n{ label: 'Slot time', slots: ['09:00', '09:30', '11:00', '14:30'] }\\n-->\"\n },\n {\n \"title\": \"Twenty Four Hour\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Twenty Four Hour -->\\n<!-- args:\\n{ hour12: false, minTime: '08:00', maxTime: '18:00', value: '15:00' }\\n-->\"\n },\n {\n \"title\": \"Disabled\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Disabled -->\\n<!-- args:\\n{ value: '09:30', disabled: true }\\n-->\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"A time field: a combobox over time options, sharing the exact listbox\\ncontract of `uni-search-input` and `uni-tag-input`. Type `3p`, `930` or\\n`15:00`, or pick `3:00 PM` from the list — the form always gets 24-hour\\n`'HH:mm'` (`hour12` affects display only). The list is **assistive, not\\nexhaustive**: any parseable time commits even if it isn't listed, unless\\n`slots` pins the choices.\\nTyped shorthand does what an appointment field should: `9` → 09:00,\\n`930` → 09:30, `3p` → 15:00, and a bare `3` leans PM in a 12-hour field —\\ntyping 3 into an appointment field means 15:00, not 03:00 (the bias yields\\nif `minTime`/`maxTime` say otherwise). Unreadable or unavailable text stays\\nin the field, flagged, with a `(rejected)` event.\",\n \"dos\": [\n \"Pin `slots` for scheduling; leave them off for free time entry fenced by\",\n \"Keep values 24-hour everywhere in app state; let `hour12` handle display.\"\n ],\n \"donts\": [\n \"Don't use `<input type=\\\"time\\\">` alongside it — the platform control brings\",\n \"Don't filter the option list as the user types; the list is a picker, not\"\n ],\n \"accessibility\": [\n \"The input is `role=\\\"combobox\\\"` with `aria-expanded`, `aria-controls` and\",\n \"Options are named in the display format (*\\\"3:00 PM\\\"*); the committed one\",\n \"Commits and rejections announce through `role=\\\"status\\\"`.\",\n \"Typing never selects an option — Enter commits the draft, not whatever\",\n \"`aria-invalid` is gated on `invalid && (touched || dirty)`; a refused\"\n ]\n },\n \"relatedTokens\": []\n },\n {\n \"id\": \"toggle\",\n \"name\": \"Toggle\",\n \"status\": \"stable\",\n \"summary\": \"\",\n \"description\": \"\",\n \"category\": \"forms\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-toggle\",\n \"api\": [\n {\n \"name\": \"checked\",\n \"kind\": \"model\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"disabled\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"touched\",\n \"kind\": \"model\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"invalid\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"dirty\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"required\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"Synced from required() validators by the Signal Forms [field] directive.\"\n },\n {\n \"name\": \"ariaDescribedBy\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"Id(s) of external element(s) describing this control — typically your app-rendered error message — exposed as aria-describedby.\"\n },\n {\n \"name\": \"label\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": false,\n \"description\": \"\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Default\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Default -->\\n<uni-toggle ${argsToTemplate(args)}></uni-toggle>\\n<!-- args:\\n{\\n label: 'Enable notifications',\\n variant: 'primary',\\n disabled: false,\\n checked: true,\\n }\\n-->\"\n },\n {\n \"title\": \"Without Label\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Without Label -->\\n<uni-toggle ${argsToTemplate(args)}></uni-toggle>\\n<!-- args:\\n{\\n label: '',\\n variant: 'primary',\\n disabled: false,\\n }\\n-->\"\n },\n {\n \"title\": \"Disabled\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Disabled -->\\n<uni-toggle ${argsToTemplate(args)}></uni-toggle>\\n<!-- args:\\n{\\n label: 'Disabled toggle',\\n variant: 'primary',\\n disabled: true,\\n }\\n-->\"\n },\n {\n \"title\": \"Variants\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Variants -->\\n<uni-toggle ${argsToTemplate(args)}></uni-toggle>\"\n },\n {\n \"title\": \"With Change Event\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: With Change Event -->\\n<uni-toggle ${argsToTemplate(args)}></uni-toggle>\"\n },\n {\n \"title\": \"Form Signals\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Form Signals -->\\n<uni-toggle ${argsToTemplate(args)}></uni-toggle>\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"A switch-style control for turning an option on or off with immediate effect —\\nprefer it over a checkbox when the change applies instantly (settings, feature\\nswitches) rather than as part of a submitted form. It implements\\n`FormCheckboxControl`, so it binds with the Signal Forms `[field]` directive or a\\ndirect `[(checked)]` model.\\nTrack, knob, and size resolve from the `toggle` theme options; the checked state\\nwears the active `variant` color.\",\n \"dos\": [\n \"Use for instant on/off effects (settings, feature switches)\"\n ],\n \"donts\": [\n \"Use in submitted forms where nothing happens until save — that is a checkbox\"\n ],\n \"accessibility\": [\n \"Semantic `<input type=\\\"checkbox\\\">` with `role=\\\"switch\\\"`, properly associated with its label.\",\n \"Space toggles; focus indicators are provided for keyboard navigation.\",\n \"Screen readers announce the label and on/off state.\"\n ]\n },\n \"relatedTokens\": [\n \"toggle.behavior.size\",\n \"toggle.behavior.trackColor\",\n \"toggle.behavior.knobColor\"\n ]\n },\n {\n \"id\": \"tooltip\",\n \"name\": \"Tooltip\",\n \"status\": \"stable\",\n \"summary\": \"\",\n \"description\": \"\",\n \"category\": \"feedback\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"uni-tooltip\",\n \"api\": [\n {\n \"name\": \"hoverDelay\",\n \"kind\": \"input\",\n \"type\": \"number\",\n \"required\": false,\n \"default\": \"500\",\n \"description\": \"\"\n },\n {\n \"name\": \"label\",\n \"kind\": \"input\",\n \"type\": \"string\",\n \"required\": true,\n \"description\": \"\"\n },\n {\n \"name\": \"placement\",\n \"kind\": \"input\",\n \"type\": \"Placement\",\n \"required\": false,\n \"default\": \"'top'\",\n \"description\": \"\"\n },\n {\n \"name\": \"inlineText\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"\"\n },\n {\n \"name\": \"appendToBody\",\n \"kind\": \"input\",\n \"type\": \"boolean\",\n \"required\": false,\n \"default\": \"false\",\n \"description\": \"@deprecated The tooltip renders in the native top layer; ignored.\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Primary\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Primary -->\\n<span uni-text>Here is some text with a <uni-tooltip ${argsToTemplate(props)}>tooltip</uni-tooltip> in the middle.\\n</span>\\n<!-- args:\\n{\\n label: 'Bottom-start tooltip',\\n placement: 'bottom-start',\\n inlineText: true,\\n }\\n-->\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"A tooltip is a brief, informative message that appears when a user interacts with an element.\\nIf using a tooltip within a body of text, set the `inlineText` option to `true`.\\nWrapping an interactive control (a button, a link) is supported: activating\\nthe control hides the bubble and keeps it hidden until the pointer leaves and\\nreturns, so a label that changes with the control's state (\\\"Expand\\\" →\\n\\\"Collapse\\\") never blinks back mid-interaction. Tapping a non-interactive\\ntooltip (inline text) still toggles the bubble.\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": [\n \"`role=\\\"tooltip\\\"` linked to the trigger via `aria-describedby` (wired once — the bubble is always in the DOM).\",\n \"Shows on keyboard focus, hides on blur and Escape; stays open while hovered (WCAG 1.4.13).\",\n \"Non-focusable triggers get `tabindex=\\\"0\\\"` so keyboard users can reach the tooltip.\"\n ]\n },\n \"relatedTokens\": [\n \"tooltip.behavior.borderRadius\",\n \"tooltip.behavior.shadow\",\n \"tooltip.behavior.color\",\n \"tooltip.behavior.typeface\"\n ]\n },\n {\n \"id\": \"wrap\",\n \"name\": \"Wrap\",\n \"status\": \"stable\",\n \"summary\": \"\",\n \"description\": \"\",\n \"category\": \"layout\",\n \"version\": \"8.2.0\",\n \"bindings\": {\n \"angular\": {\n \"importPath\": \"@uni-design-system/uni-angular\",\n \"selectorOrTag\": \"[uni-wrap-layout], [wrap-layout]\",\n \"api\": [\n {\n \"name\": \"display\",\n \"kind\": \"input\",\n \"type\": \"OptionalDisplay\",\n \"required\": false,\n \"default\": \"'flex'\",\n \"description\": \"\"\n },\n {\n \"name\": \"wrapItems\",\n \"kind\": \"input\",\n \"type\": \"OptionalWrap\",\n \"required\": false,\n \"default\": \"'wrap'\",\n \"description\": \"\"\n }\n ]\n }\n },\n \"examples\": [\n {\n \"title\": \"Primary\",\n \"framework\": \"angular\",\n \"code\": \"<!-- Storybook story: Primary -->\"\n }\n ],\n \"guidelines\": {\n \"whenToUse\": \"Used to add space between elements and wraps automatically if there isn't enough space.\",\n \"dos\": [],\n \"donts\": [],\n \"accessibility\": []\n },\n \"relatedTokens\": []\n }\n ],\n \"tokens\": [\n {\n \"id\": \"color.primary\",\n \"value\": \"#6A6F8F\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#6A6F8F\",\n \"DarkTheme\": \"#AFB5D8\"\n }\n },\n {\n \"id\": \"color.on-primary\",\n \"value\": \"#F9FAFF\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#F9FAFF\",\n \"DarkTheme\": \"#11132C\"\n }\n },\n {\n \"id\": \"color.primary-container\",\n \"value\": \"#DBDDEA\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#DBDDEA\",\n \"DarkTheme\": \"#4A4C57\"\n }\n },\n {\n \"id\": \"color.on-primary-container\",\n \"value\": \"#1A1C37\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#1A1C37\",\n \"DarkTheme\": \"#F9FAFF\"\n }\n },\n {\n \"id\": \"color.on-primary-container-variant\",\n \"value\": \"#5B5D68\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#5B5D68\",\n \"DarkTheme\": \"#BCBECB\"\n }\n },\n {\n \"id\": \"color.on-primary-container-border\",\n \"value\": \"#6A6F8F\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#6A6F8F\",\n \"DarkTheme\": \"#AFB5D8\"\n }\n },\n {\n \"id\": \"color.primary-surface\",\n \"value\": \"#F3F5FD\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#F3F5FD\",\n \"DarkTheme\": \"#22242A\"\n }\n },\n {\n \"id\": \"color.on-primary-surface\",\n \"value\": \"#1E1F25\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#1E1F25\",\n \"DarkTheme\": \"#F9FAFF\"\n }\n },\n {\n \"id\": \"color.on-primary-surface-variant\",\n \"value\": \"#6A6F8F\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#6A6F8F\",\n \"DarkTheme\": \"#AFB5D8\"\n }\n },\n {\n \"id\": \"color.secondary\",\n \"value\": \"#8C685D\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#8C685D\",\n \"DarkTheme\": \"#D5ADA1\"\n }\n },\n {\n \"id\": \"color.on-secondary\",\n \"value\": \"#FFF8F6\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#FFF8F6\",\n \"DarkTheme\": \"#280C05\"\n }\n },\n {\n \"id\": \"color.secondary-container\",\n \"value\": \"#E9DAD6\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#E9DAD6\",\n \"DarkTheme\": \"#564A46\"\n }\n },\n {\n \"id\": \"color.on-secondary-container\",\n \"value\": \"#33160D\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#33160D\",\n \"DarkTheme\": \"#FFF8F7\"\n }\n },\n {\n \"id\": \"color.on-secondary-container-variant\",\n \"value\": \"#675A57\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#675A57\",\n \"DarkTheme\": \"#CABCB7\"\n }\n },\n {\n \"id\": \"color.on-secondary-container-border\",\n \"value\": \"#8C685D\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#8C685D\",\n \"DarkTheme\": \"#D5ADA1\"\n }\n },\n {\n \"id\": \"color.secondary-surface\",\n \"value\": \"#FDF3EF\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#FDF3EF\",\n \"DarkTheme\": \"#292220\"\n }\n },\n {\n \"id\": \"color.on-secondary-surface\",\n \"value\": \"#251D1B\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#251D1B\",\n \"DarkTheme\": \"#FFF8F7\"\n }\n },\n {\n \"id\": \"color.on-secondary-surface-variant\",\n \"value\": \"#8C685D\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#8C685D\",\n \"DarkTheme\": \"#D5ADA1\"\n }\n },\n {\n \"id\": \"color.tertiary\",\n \"value\": \"#597B66\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#597B66\",\n \"DarkTheme\": \"#9EC2AB\"\n }\n },\n {\n \"id\": \"color.on-tertiary\",\n \"value\": \"#F0FFF5\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#F0FFF5\",\n \"DarkTheme\": \"#001C0D\"\n }\n },\n {\n \"id\": \"color.tertiary-container\",\n \"value\": \"#D5E2D9\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#D5E2D9\",\n \"DarkTheme\": \"#465049\"\n }\n },\n {\n \"id\": \"color.on-tertiary-container\",\n \"value\": \"#052615\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#052615\",\n \"DarkTheme\": \"#F0FFF5\"\n }\n },\n {\n \"id\": \"color.on-tertiary-container-variant\",\n \"value\": \"#56615A\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#56615A\",\n \"DarkTheme\": \"#B7C3BB\"\n }\n },\n {\n \"id\": \"color.on-tertiary-container-border\",\n \"value\": \"#597B66\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#597B66\",\n \"DarkTheme\": \"#9EC2AB\"\n }\n },\n {\n \"id\": \"color.tertiary-surface\",\n \"value\": \"#EFF8F2\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#EFF8F2\",\n \"DarkTheme\": \"#1F2622\"\n }\n },\n {\n \"id\": \"color.on-tertiary-surface\",\n \"value\": \"#1B211D\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#1B211D\",\n \"DarkTheme\": \"#F4FDF7\"\n }\n },\n {\n \"id\": \"color.on-tertiary-surface-variant\",\n \"value\": \"#557762\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#557762\",\n \"DarkTheme\": \"#9EC2AB\"\n }\n },\n {\n \"id\": \"color.quaternary\",\n \"value\": \"#61636A\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#61636A\",\n \"DarkTheme\": \"#A2A4AC\"\n }\n },\n {\n \"id\": \"color.on-quaternary\",\n \"value\": \"#F9FAFF\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#F9FAFF\",\n \"DarkTheme\": \"#15161C\"\n }\n },\n {\n \"id\": \"color.quaternary-surface\",\n \"value\": \"#F3F5FD\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#F3F5FD\",\n \"DarkTheme\": \"#22242A\"\n }\n },\n {\n \"id\": \"color.on-quaternary-surface\",\n \"value\": \"#1E1F25\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#1E1F25\",\n \"DarkTheme\": \"#F9FAFF\"\n }\n },\n {\n \"id\": \"color.on-quaternary-surface-variant\",\n \"value\": \"#6A6F8F\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#6A6F8F\",\n \"DarkTheme\": \"#AFB5D8\"\n }\n },\n {\n \"id\": \"color.on-quaternary-container-variant\",\n \"value\": \"#5B5D68\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#5B5D68\",\n \"DarkTheme\": \"#AEB0BD\"\n }\n },\n {\n \"id\": \"color.on-quaternary-container-border\",\n \"value\": \"#61636A\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#61636A\",\n \"DarkTheme\": \"#A2A4AC\"\n }\n },\n {\n \"id\": \"color.error\",\n \"value\": \"#CC2827\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#CC2827\",\n \"DarkTheme\": \"#FF968A\"\n }\n },\n {\n \"id\": \"color.on-error\",\n \"value\": \"#FFF8F7\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#FFF8F7\",\n \"DarkTheme\": \"#290B09\"\n }\n },\n {\n \"id\": \"color.error-container\",\n \"value\": \"#FFD2CC\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#FFD2CC\",\n \"DarkTheme\": \"#69413C\"\n }\n },\n {\n \"id\": \"color.on-error-container\",\n \"value\": \"#331512\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#331512\",\n \"DarkTheme\": \"#FFF8F7\"\n }\n },\n {\n \"id\": \"color.warn\",\n \"value\": \"#AC5700\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#AC5700\",\n \"DarkTheme\": \"#FF9B51\"\n }\n },\n {\n \"id\": \"color.on-warn\",\n \"value\": \"#FFF9F5\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#FFF9F5\",\n \"DarkTheme\": \"#270E00\"\n }\n },\n {\n \"id\": \"color.warn-container\",\n \"value\": \"#FDD5BA\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#FDD5BA\",\n \"DarkTheme\": \"#66442E\"\n }\n },\n {\n \"id\": \"color.on-warn-container\",\n \"value\": \"#311805\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#311805\",\n \"DarkTheme\": \"#FFF9F5\"\n }\n },\n {\n \"id\": \"color.on-warn-container-variant\",\n \"value\": \"#78543C\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#78543C\",\n \"DarkTheme\": \"#DFB69B\"\n }\n },\n {\n \"id\": \"color.on-warn-container-border\",\n \"value\": \"#AC5700\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#AC5700\",\n \"DarkTheme\": \"#FF9B51\"\n }\n },\n {\n \"id\": \"color.success\",\n \"value\": \"#008341\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#008341\",\n \"DarkTheme\": \"#59D483\"\n }\n },\n {\n \"id\": \"color.on-success\",\n \"value\": \"#F1FEF4\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#F1FEF4\",\n \"DarkTheme\": \"#011C0A\"\n }\n },\n {\n \"id\": \"color.success-container\",\n \"value\": \"#C3EACC\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#C3EACC\",\n \"DarkTheme\": \"#34563D\"\n }\n },\n {\n \"id\": \"color.on-success-container\",\n \"value\": \"#092613\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#092613\",\n \"DarkTheme\": \"#F1FEF4\"\n }\n },\n {\n \"id\": \"color.on-success-container-variant\",\n \"value\": \"#43684D\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#43684D\",\n \"DarkTheme\": \"#A3CBAD\"\n }\n },\n {\n \"id\": \"color.on-success-container-border\",\n \"value\": \"#008341\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#008341\",\n \"DarkTheme\": \"#59D483\"\n }\n },\n {\n \"id\": \"color.background\",\n \"value\": \"#FDFDFF\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#FDFDFF\",\n \"DarkTheme\": \"#101117\"\n }\n },\n {\n \"id\": \"color.on-background\",\n \"value\": \"#202127\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#202127\",\n \"DarkTheme\": \"#E5E7F0\"\n }\n },\n {\n \"id\": \"color.on-background-variant\",\n \"value\": \"#5C5D65\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#5C5D65\",\n \"DarkTheme\": \"#AFB0B9\"\n }\n },\n {\n \"id\": \"color.surface\",\n \"value\": \"#F9FAFF\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#F9FAFF\",\n \"DarkTheme\": \"#17181E\"\n }\n },\n {\n \"id\": \"color.on-surface\",\n \"value\": \"#202127\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#202127\",\n \"DarkTheme\": \"#E5E7F0\"\n }\n },\n {\n \"id\": \"color.surface-variant\",\n \"value\": \"#E9EBF3\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#E9EBF3\",\n \"DarkTheme\": \"#313239\"\n }\n },\n {\n \"id\": \"color.on-surface-variant\",\n \"value\": \"#36373E\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#36373E\",\n \"DarkTheme\": \"#AFB0B9\"\n }\n },\n {\n \"id\": \"color.inverse-surface\",\n \"value\": \"#2C2D34\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#2C2D34\",\n \"DarkTheme\": \"#E5E7F0\"\n }\n },\n {\n \"id\": \"color.on-inverse-surface\",\n \"value\": \"#F3F5FD\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#F3F5FD\",\n \"DarkTheme\": \"#202127\"\n }\n },\n {\n \"id\": \"color.on-inverse-surface-primary\",\n \"value\": \"#8D93B4\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#8D93B4\",\n \"DarkTheme\": \"#5F6483\"\n }\n },\n {\n \"id\": \"color.on-inverse-surface-variant\",\n \"value\": \"#8D93B4\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#8D93B4\",\n \"DarkTheme\": \"#5F6483\"\n }\n },\n {\n \"id\": \"color.inverse-container\",\n \"value\": \"#2C2D34\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#2C2D34\",\n \"DarkTheme\": \"#E5E7F0\"\n }\n },\n {\n \"id\": \"color.on-inverse-container\",\n \"value\": \"#F3F5FD\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#F3F5FD\",\n \"DarkTheme\": \"#202127\"\n }\n },\n {\n \"id\": \"color.outline\",\n \"value\": \"#7E8088\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#7E8088\",\n \"DarkTheme\": \"#90929A\"\n }\n },\n {\n \"id\": \"color.shadow\",\n \"value\": \"#000000\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#000000\",\n \"DarkTheme\": \"#000000\"\n }\n },\n {\n \"id\": \"color.scrim\",\n \"value\": \"#000000\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#000000\",\n \"DarkTheme\": \"#000000\"\n }\n },\n {\n \"id\": \"color.surface-tint\",\n \"value\": \"#6A6F8F\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#6A6F8F\",\n \"DarkTheme\": \"#AFB5D8\"\n }\n },\n {\n \"id\": \"color.transparent\",\n \"value\": \"rgba(0,0,0,0)\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"rgba(0,0,0,0)\",\n \"DarkTheme\": \"rgba(0,0,0,0)\"\n }\n },\n {\n \"id\": \"color.ghost\",\n \"value\": \"rgba(0,0,0,0)\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"rgba(0,0,0,0)\",\n \"DarkTheme\": \"rgba(0,0,0,0)\"\n }\n },\n {\n \"id\": \"color.disabled\",\n \"value\": \"rgba(0,0,0,0.12)\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"rgba(0,0,0,0.12)\",\n \"DarkTheme\": \"rgba(255,255,255,0.12)\"\n }\n },\n {\n \"id\": \"color.on-disabled\",\n \"value\": \"rgba(0,0,0,0.38)\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"rgba(0,0,0,0.38)\",\n \"DarkTheme\": \"rgba(255,255,255,0.38)\"\n }\n },\n {\n \"id\": \"color.disabled-container\",\n \"value\": \"#EFF1FA\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"#EFF1FA\",\n \"DarkTheme\": \"#2C2D34\"\n }\n },\n {\n \"id\": \"color.on-disabled-container\",\n \"value\": \"rgba(0,0,0,0.38)\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"rgba(0,0,0,0.38)\",\n \"DarkTheme\": \"rgba(255,255,255,0.38)\"\n }\n },\n {\n \"id\": \"color.disabled-surface\",\n \"value\": \"rgba(0,0,0,0.12)\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"rgba(0,0,0,0.12)\",\n \"DarkTheme\": \"rgba(255,255,255,0.12)\"\n }\n },\n {\n \"id\": \"color.on-disabled-surface\",\n \"value\": \"rgba(0,0,0,0.5)\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"rgba(0,0,0,0.5)\",\n \"DarkTheme\": \"rgba(255,255,255,0.5)\"\n }\n },\n {\n \"id\": \"color.on-disabled-surface-variant\",\n \"value\": \"rgba(0,0,0,0.4)\",\n \"type\": \"color\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"rgba(0,0,0,0.4)\",\n \"DarkTheme\": \"rgba(255,255,255,0.4)\"\n }\n },\n {\n \"id\": \"radius.none\",\n \"value\": \"none\",\n \"type\": \"radius\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"none\",\n \"DarkTheme\": \"none\"\n }\n },\n {\n \"id\": \"radius.xxs\",\n \"value\": \"4px\",\n \"type\": \"radius\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"4px\",\n \"DarkTheme\": \"4px\"\n }\n },\n {\n \"id\": \"radius.xs\",\n \"value\": \"8px\",\n \"type\": \"radius\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"8px\",\n \"DarkTheme\": \"8px\"\n }\n },\n {\n \"id\": \"radius.sm\",\n \"value\": \"16px\",\n \"type\": \"radius\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"16px\",\n \"DarkTheme\": \"16px\"\n }\n },\n {\n \"id\": \"radius.md\",\n \"value\": \"24px\",\n \"type\": \"radius\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"24px\",\n \"DarkTheme\": \"24px\"\n }\n },\n {\n \"id\": \"radius.lg\",\n \"value\": \"32px\",\n \"type\": \"radius\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"32px\",\n \"DarkTheme\": \"32px\"\n }\n },\n {\n \"id\": \"radius.max\",\n \"value\": \"999px\",\n \"type\": \"radius\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"999px\",\n \"DarkTheme\": \"999px\"\n }\n },\n {\n \"id\": \"spacing.none\",\n \"value\": 0,\n \"type\": \"spacing\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": 0,\n \"DarkTheme\": 0\n }\n },\n {\n \"id\": \"spacing.xxs\",\n \"value\": \"2px\",\n \"type\": \"spacing\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"2px\",\n \"DarkTheme\": \"2px\"\n }\n },\n {\n \"id\": \"spacing.xs\",\n \"value\": \"4px\",\n \"type\": \"spacing\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"4px\",\n \"DarkTheme\": \"4px\"\n }\n },\n {\n \"id\": \"spacing.sm\",\n \"value\": \"8px\",\n \"type\": \"spacing\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"8px\",\n \"DarkTheme\": \"8px\"\n }\n },\n {\n \"id\": \"spacing.md\",\n \"value\": \"16px\",\n \"type\": \"spacing\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"16px\",\n \"DarkTheme\": \"16px\"\n }\n },\n {\n \"id\": \"spacing.lg\",\n \"value\": \"32px\",\n \"type\": \"spacing\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"32px\",\n \"DarkTheme\": \"32px\"\n }\n },\n {\n \"id\": \"spacing.xl\",\n \"value\": \"64px\",\n \"type\": \"spacing\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"64px\",\n \"DarkTheme\": \"64px\"\n }\n },\n {\n \"id\": \"border.primary\",\n \"value\": \"1px solid #6A6F8F\",\n \"type\": \"border\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"1px solid #6A6F8F\",\n \"DarkTheme\": \"1px solid #AFB5D8\"\n }\n },\n {\n \"id\": \"border.secondary\",\n \"value\": \"1px solid #8C685D\",\n \"type\": \"border\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"1px solid #8C685D\",\n \"DarkTheme\": \"1px solid #D5ADA1\"\n }\n },\n {\n \"id\": \"border.tertiary\",\n \"value\": \"1px solid #597B66\",\n \"type\": \"border\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"1px solid #597B66\",\n \"DarkTheme\": \"1px solid #9EC2AB\"\n }\n },\n {\n \"id\": \"border.quaternary\",\n \"value\": \"1px solid #61636A\",\n \"type\": \"border\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"1px solid #61636A\",\n \"DarkTheme\": \"1px solid #A2A4AC\"\n }\n },\n {\n \"id\": \"border.warn\",\n \"value\": \"1px solid #AC5700\",\n \"type\": \"border\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"1px solid #AC5700\",\n \"DarkTheme\": \"1px solid #FF9B51\"\n }\n },\n {\n \"id\": \"border.success\",\n \"value\": \"1px solid #008341\",\n \"type\": \"border\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"1px solid #008341\",\n \"DarkTheme\": \"1px solid #59D483\"\n }\n },\n {\n \"id\": \"border.light\",\n \"value\": \"1px solid #7E8088\",\n \"type\": \"border\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"1px solid #7E8088\",\n \"DarkTheme\": \"1px solid #90929A\"\n }\n },\n {\n \"id\": \"border.dark\",\n \"value\": \"1px solid #202127\",\n \"type\": \"border\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"1px solid #202127\",\n \"DarkTheme\": \"1px solid #E5E7F0\"\n }\n },\n {\n \"id\": \"border.dotted\",\n \"value\": \"1px dotted #202127\",\n \"type\": \"border\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"1px dotted #202127\",\n \"DarkTheme\": \"1px dotted #E5E7F0\"\n }\n },\n {\n \"id\": \"shadow.raised\",\n \"value\": \"rgba(23, 25, 43, 0.2) 0px 2px 1px -1px, rgba(23, 25, 43, 0.14) 0px 1px 1px 0px, rgba(23, 25, 43, 0.12) 0px 1px 3px 0px\",\n \"type\": \"shadow\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"rgba(23, 25, 43, 0.2) 0px 2px 1px -1px, rgba(23, 25, 43, 0.14) 0px 1px 1px 0px, rgba(23, 25, 43, 0.12) 0px 1px 3px 0px\",\n \"DarkTheme\": \"none\"\n }\n },\n {\n \"id\": \"shadow.menu\",\n \"value\": \"rgba(23, 25, 43, 0.2) 0px 3px 3px -2px, rgba(23, 25, 43, 0.14) 0px 3px 4px 0px, rgba(23, 25, 43, 0.12) 0px 1px 8px 0px\",\n \"type\": \"shadow\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"rgba(23, 25, 43, 0.2) 0px 3px 3px -2px, rgba(23, 25, 43, 0.14) 0px 3px 4px 0px, rgba(23, 25, 43, 0.12) 0px 1px 8px 0px\",\n \"DarkTheme\": \"0px 4px 12px rgba(0, 0, 0, 0.45)\"\n }\n },\n {\n \"id\": \"shadow.dialog\",\n \"value\": \"rgba(23, 25, 43, 0.2) 0px 3px 5px -1px, rgba(23, 25, 43, 0.14) 0px 6px 10px 0px, rgba(23, 25, 43, 0.12) 0px 1px 18px 0px\",\n \"type\": \"shadow\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"rgba(23, 25, 43, 0.2) 0px 3px 5px -1px, rgba(23, 25, 43, 0.14) 0px 6px 10px 0px, rgba(23, 25, 43, 0.12) 0px 1px 18px 0px\",\n \"DarkTheme\": \"0px 8px 28px rgba(0, 0, 0, 0.55)\"\n }\n },\n {\n \"id\": \"shadow.warn\",\n \"value\": \"0 0 5px rgba(204, 40, 39, 0.5), inset 0 0 5px rgba(204, 40, 39, 0.3)\",\n \"type\": \"shadow\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"0 0 5px rgba(204, 40, 39, 0.5), inset 0 0 5px rgba(204, 40, 39, 0.3)\",\n \"DarkTheme\": \"0 0 5px rgba(255, 150, 138, 0.55), inset 0 0 5px rgba(255, 150, 138, 0.35)\"\n }\n },\n {\n \"id\": \"thickness.thin\",\n \"value\": 1,\n \"type\": \"thickness\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": 1,\n \"DarkTheme\": 1\n }\n },\n {\n \"id\": \"thickness.standard\",\n \"value\": 2,\n \"type\": \"thickness\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": 2,\n \"DarkTheme\": 2\n }\n },\n {\n \"id\": \"thickness.thick\",\n \"value\": 4,\n \"type\": \"thickness\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": 4,\n \"DarkTheme\": 4\n }\n },\n {\n \"id\": \"typography.display-large\",\n \"value\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":57,\\\"lineHeight\\\":64,\\\"fontWeight\\\":\\\"normal\\\",\\\"letterSpacing\\\":-0.25}\",\n \"type\": \"typography\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":57,\\\"lineHeight\\\":64,\\\"fontWeight\\\":\\\"normal\\\",\\\"letterSpacing\\\":-0.25}\",\n \"DarkTheme\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":57,\\\"lineHeight\\\":64,\\\"fontWeight\\\":\\\"normal\\\",\\\"letterSpacing\\\":-0.25}\"\n }\n },\n {\n \"id\": \"typography.display-medium\",\n \"value\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":45,\\\"lineHeight\\\":52,\\\"fontWeight\\\":\\\"normal\\\"}\",\n \"type\": \"typography\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":45,\\\"lineHeight\\\":52,\\\"fontWeight\\\":\\\"normal\\\"}\",\n \"DarkTheme\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":45,\\\"lineHeight\\\":52,\\\"fontWeight\\\":\\\"normal\\\"}\"\n }\n },\n {\n \"id\": \"typography.display-small\",\n \"value\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":36,\\\"lineHeight\\\":44,\\\"fontWeight\\\":\\\"normal\\\"}\",\n \"type\": \"typography\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":36,\\\"lineHeight\\\":44,\\\"fontWeight\\\":\\\"normal\\\"}\",\n \"DarkTheme\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":36,\\\"lineHeight\\\":44,\\\"fontWeight\\\":\\\"normal\\\"}\"\n }\n },\n {\n \"id\": \"typography.headline-large\",\n \"value\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":32,\\\"lineHeight\\\":40,\\\"fontWeight\\\":\\\"normal\\\"}\",\n \"type\": \"typography\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":32,\\\"lineHeight\\\":40,\\\"fontWeight\\\":\\\"normal\\\"}\",\n \"DarkTheme\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":32,\\\"lineHeight\\\":40,\\\"fontWeight\\\":\\\"normal\\\"}\"\n }\n },\n {\n \"id\": \"typography.headline-medium\",\n \"value\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":28,\\\"lineHeight\\\":36,\\\"fontWeight\\\":\\\"normal\\\"}\",\n \"type\": \"typography\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":28,\\\"lineHeight\\\":36,\\\"fontWeight\\\":\\\"normal\\\"}\",\n \"DarkTheme\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":28,\\\"lineHeight\\\":36,\\\"fontWeight\\\":\\\"normal\\\"}\"\n }\n },\n {\n \"id\": \"typography.headline-small\",\n \"value\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":24,\\\"lineHeight\\\":32,\\\"fontWeight\\\":\\\"normal\\\"}\",\n \"type\": \"typography\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":24,\\\"lineHeight\\\":32,\\\"fontWeight\\\":\\\"normal\\\"}\",\n \"DarkTheme\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":24,\\\"lineHeight\\\":32,\\\"fontWeight\\\":\\\"normal\\\"}\"\n }\n },\n {\n \"id\": \"typography.title-large\",\n \"value\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":22,\\\"lineHeight\\\":28,\\\"fontWeight\\\":\\\"normal\\\"}\",\n \"type\": \"typography\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":22,\\\"lineHeight\\\":28,\\\"fontWeight\\\":\\\"normal\\\"}\",\n \"DarkTheme\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":22,\\\"lineHeight\\\":28,\\\"fontWeight\\\":\\\"normal\\\"}\"\n }\n },\n {\n \"id\": \"typography.title-medium\",\n \"value\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":16,\\\"lineHeight\\\":24,\\\"fontWeight\\\":\\\"medium\\\",\\\"letterSpacing\\\":0.15}\",\n \"type\": \"typography\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":16,\\\"lineHeight\\\":24,\\\"fontWeight\\\":\\\"medium\\\",\\\"letterSpacing\\\":0.15}\",\n \"DarkTheme\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":16,\\\"lineHeight\\\":24,\\\"fontWeight\\\":\\\"medium\\\",\\\"letterSpacing\\\":0.15}\"\n }\n },\n {\n \"id\": \"typography.title-small\",\n \"value\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontWeight\\\":\\\"medium\\\",\\\"fontSize\\\":14,\\\"lineHeight\\\":20,\\\"letterSpacing\\\":0.1}\",\n \"type\": \"typography\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontWeight\\\":\\\"medium\\\",\\\"fontSize\\\":14,\\\"lineHeight\\\":20,\\\"letterSpacing\\\":0.1}\",\n \"DarkTheme\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontWeight\\\":\\\"medium\\\",\\\"fontSize\\\":14,\\\"lineHeight\\\":20,\\\"letterSpacing\\\":0.1}\"\n }\n },\n {\n \"id\": \"typography.body-1-long\",\n \"value\": \"{\\\"fontFamily\\\":\\\"Roboto\\\",\\\"fontSize\\\":16,\\\"lineHeight\\\":22}\",\n \"type\": \"typography\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"{\\\"fontFamily\\\":\\\"Roboto\\\",\\\"fontSize\\\":16,\\\"lineHeight\\\":22}\",\n \"DarkTheme\": \"{\\\"fontFamily\\\":\\\"Roboto\\\",\\\"fontSize\\\":16,\\\"lineHeight\\\":22}\"\n }\n },\n {\n \"id\": \"typography.body-1-short\",\n \"value\": \"{\\\"fontFamily\\\":\\\"Roboto\\\",\\\"fontSize\\\":16,\\\"lineHeight\\\":24}\",\n \"type\": \"typography\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"{\\\"fontFamily\\\":\\\"Roboto\\\",\\\"fontSize\\\":16,\\\"lineHeight\\\":24}\",\n \"DarkTheme\": \"{\\\"fontFamily\\\":\\\"Roboto\\\",\\\"fontSize\\\":16,\\\"lineHeight\\\":24}\"\n }\n },\n {\n \"id\": \"typography.body-2-long\",\n \"value\": \"{\\\"fontFamily\\\":\\\"Roboto\\\",\\\"fontSize\\\":14,\\\"lineHeight\\\":18}\",\n \"type\": \"typography\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"{\\\"fontFamily\\\":\\\"Roboto\\\",\\\"fontSize\\\":14,\\\"lineHeight\\\":18}\",\n \"DarkTheme\": \"{\\\"fontFamily\\\":\\\"Roboto\\\",\\\"fontSize\\\":14,\\\"lineHeight\\\":18}\"\n }\n },\n {\n \"id\": \"typography.body-2-short\",\n \"value\": \"{\\\"fontFamily\\\":\\\"Roboto\\\",\\\"fontSize\\\":14,\\\"lineHeight\\\":20}\",\n \"type\": \"typography\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"{\\\"fontFamily\\\":\\\"Roboto\\\",\\\"fontSize\\\":14,\\\"lineHeight\\\":20}\",\n \"DarkTheme\": \"{\\\"fontFamily\\\":\\\"Roboto\\\",\\\"fontSize\\\":14,\\\"lineHeight\\\":20}\"\n }\n },\n {\n \"id\": \"typography.subtitle-1\",\n \"value\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":16,\\\"lineHeight\\\":24,\\\"letterSpacing\\\":0.15}\",\n \"type\": \"typography\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":16,\\\"lineHeight\\\":24,\\\"letterSpacing\\\":0.15}\",\n \"DarkTheme\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":16,\\\"lineHeight\\\":24,\\\"letterSpacing\\\":0.15}\"\n }\n },\n {\n \"id\": \"typography.subtitle-2\",\n \"value\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":14,\\\"lineHeight\\\":20,\\\"fontWeight\\\":\\\"medium\\\",\\\"letterSpacing\\\":0.1}\",\n \"type\": \"typography\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":14,\\\"lineHeight\\\":20,\\\"fontWeight\\\":\\\"medium\\\",\\\"letterSpacing\\\":0.1}\",\n \"DarkTheme\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":14,\\\"lineHeight\\\":20,\\\"fontWeight\\\":\\\"medium\\\",\\\"letterSpacing\\\":0.1}\"\n }\n },\n {\n \"id\": \"typography.label\",\n \"value\": \"{\\\"fontFamily\\\":\\\"Roboto\\\",\\\"fontSize\\\":14,\\\"lineHeight\\\":20}\",\n \"type\": \"typography\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"{\\\"fontFamily\\\":\\\"Roboto\\\",\\\"fontSize\\\":14,\\\"lineHeight\\\":20}\",\n \"DarkTheme\": \"{\\\"fontFamily\\\":\\\"Roboto\\\",\\\"fontSize\\\":14,\\\"lineHeight\\\":20}\"\n }\n },\n {\n \"id\": \"typography.button\",\n \"value\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":14,\\\"lineHeight\\\":20,\\\"fontWeight\\\":\\\"medium\\\",\\\"textTransform\\\":\\\"capitalize\\\"}\",\n \"type\": \"typography\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":14,\\\"lineHeight\\\":20,\\\"fontWeight\\\":\\\"medium\\\",\\\"textTransform\\\":\\\"capitalize\\\"}\",\n \"DarkTheme\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":14,\\\"lineHeight\\\":20,\\\"fontWeight\\\":\\\"medium\\\",\\\"textTransform\\\":\\\"capitalize\\\"}\"\n }\n },\n {\n \"id\": \"typography.caption\",\n \"value\": \"{\\\"fontFamily\\\":\\\"Roboto\\\",\\\"fontSize\\\":12,\\\"lineHeight\\\":18,\\\"letterSpacing\\\":0.4}\",\n \"type\": \"typography\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"{\\\"fontFamily\\\":\\\"Roboto\\\",\\\"fontSize\\\":12,\\\"lineHeight\\\":18,\\\"letterSpacing\\\":0.4}\",\n \"DarkTheme\": \"{\\\"fontFamily\\\":\\\"Roboto\\\",\\\"fontSize\\\":12,\\\"lineHeight\\\":18,\\\"letterSpacing\\\":0.4}\"\n }\n },\n {\n \"id\": \"typography.overline\",\n \"value\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":10,\\\"lineHeight\\\":18,\\\"letterSpacing\\\":1.5,\\\"textTransform\\\":\\\"uppercase\\\"}\",\n \"type\": \"typography\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":10,\\\"lineHeight\\\":18,\\\"letterSpacing\\\":1.5,\\\"textTransform\\\":\\\"uppercase\\\"}\",\n \"DarkTheme\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":10,\\\"lineHeight\\\":18,\\\"letterSpacing\\\":1.5,\\\"textTransform\\\":\\\"uppercase\\\"}\"\n }\n },\n {\n \"id\": \"typography.paragraph\",\n \"value\": \"{\\\"fontFamily\\\":\\\"Roboto\\\",\\\"fontSize\\\":16,\\\"lineHeight\\\":24}\",\n \"type\": \"typography\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"{\\\"fontFamily\\\":\\\"Roboto\\\",\\\"fontSize\\\":16,\\\"lineHeight\\\":24}\",\n \"DarkTheme\": \"{\\\"fontFamily\\\":\\\"Roboto\\\",\\\"fontSize\\\":16,\\\"lineHeight\\\":24}\"\n }\n },\n {\n \"id\": \"typography.quote\",\n \"value\": \"{\\\"fontFamily\\\":\\\"Roboto\\\",\\\"fontSize\\\":16,\\\"lineHeight\\\":24}\",\n \"type\": \"typography\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"{\\\"fontFamily\\\":\\\"Roboto\\\",\\\"fontSize\\\":16,\\\"lineHeight\\\":24}\",\n \"DarkTheme\": \"{\\\"fontFamily\\\":\\\"Roboto\\\",\\\"fontSize\\\":16,\\\"lineHeight\\\":24}\"\n }\n },\n {\n \"id\": \"typography.note\",\n \"value\": \"{\\\"fontFamily\\\":\\\"Roboto\\\",\\\"fontSize\\\":14,\\\"lineHeight\\\":22,\\\"fontStyle\\\":\\\"italic\\\"}\",\n \"type\": \"typography\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"{\\\"fontFamily\\\":\\\"Roboto\\\",\\\"fontSize\\\":14,\\\"lineHeight\\\":22,\\\"fontStyle\\\":\\\"italic\\\"}\",\n \"DarkTheme\": \"{\\\"fontFamily\\\":\\\"Roboto\\\",\\\"fontSize\\\":14,\\\"lineHeight\\\":22,\\\"fontStyle\\\":\\\"italic\\\"}\"\n }\n },\n {\n \"id\": \"typography.badge\",\n \"value\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":16,\\\"lineHeight\\\":24}\",\n \"type\": \"typography\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":16,\\\"lineHeight\\\":24}\",\n \"DarkTheme\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":16,\\\"lineHeight\\\":24}\"\n }\n },\n {\n \"id\": \"typography.stat\",\n \"value\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":32,\\\"lineHeight\\\":38,\\\"fontWeight\\\":600,\\\"letterSpacing\\\":-0.32}\",\n \"type\": \"typography\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":32,\\\"lineHeight\\\":38,\\\"fontWeight\\\":600,\\\"letterSpacing\\\":-0.32}\",\n \"DarkTheme\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":32,\\\"lineHeight\\\":38,\\\"fontWeight\\\":600,\\\"letterSpacing\\\":-0.32}\"\n }\n },\n {\n \"id\": \"typography.tag\",\n \"value\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":15,\\\"lineHeight\\\":20,\\\"fontWeight\\\":600}\",\n \"type\": \"typography\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":15,\\\"lineHeight\\\":20,\\\"fontWeight\\\":600}\",\n \"DarkTheme\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":15,\\\"lineHeight\\\":20,\\\"fontWeight\\\":600}\"\n }\n },\n {\n \"id\": \"typography.input\",\n \"value\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":14,\\\"lineHeight\\\":24}\",\n \"type\": \"typography\",\n \"kind\": \"style\",\n \"target\": \"emotion-css\",\n \"themeValues\": {\n \"LightTheme\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":14,\\\"lineHeight\\\":24}\",\n \"DarkTheme\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":14,\\\"lineHeight\\\":24}\"\n }\n },\n {\n \"id\": \"alert.behavior.topPosition\",\n \"value\": 40,\n \"type\": \"number\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"alert\",\n \"themeValues\": {\n \"LightTheme\": 40,\n \"DarkTheme\": 40\n }\n },\n {\n \"id\": \"alert.behavior.borderRadius\",\n \"value\": \"sm\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"alert\",\n \"themeValues\": {\n \"LightTheme\": \"sm\",\n \"DarkTheme\": \"sm\"\n }\n },\n {\n \"id\": \"alert.behavior.transitionSpeed\",\n \"value\": 0.35,\n \"type\": \"number\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"alert\",\n \"themeValues\": {\n \"LightTheme\": 0.35,\n \"DarkTheme\": 0.35\n }\n },\n {\n \"id\": \"alert.behavior.elevation\",\n \"value\": \"md\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"alert\",\n \"themeValues\": {\n \"LightTheme\": \"md\",\n \"DarkTheme\": \"md\"\n }\n },\n {\n \"id\": \"breadcrumb.behavior.typeface\",\n \"value\": \"label\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"breadcrumb\",\n \"themeValues\": {\n \"LightTheme\": \"label\",\n \"DarkTheme\": \"label\"\n }\n },\n {\n \"id\": \"breadcrumb.behavior.color\",\n \"value\": \"on-background-variant\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"breadcrumb\",\n \"themeValues\": {\n \"LightTheme\": \"on-background-variant\",\n \"DarkTheme\": \"on-background-variant\"\n }\n },\n {\n \"id\": \"breadcrumb.behavior.currentColor\",\n \"value\": \"on-background\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"breadcrumb\",\n \"themeValues\": {\n \"LightTheme\": \"on-background\",\n \"DarkTheme\": \"on-background\"\n }\n },\n {\n \"id\": \"breadcrumb.behavior.separatorSymbol\",\n \"value\": \"chevron_right\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"breadcrumb\",\n \"themeValues\": {\n \"LightTheme\": \"chevron_right\",\n \"DarkTheme\": \"chevron_right\"\n }\n },\n {\n \"id\": \"breadcrumb.behavior.gap\",\n \"value\": \"xs\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"breadcrumb\",\n \"themeValues\": {\n \"LightTheme\": \"xs\",\n \"DarkTheme\": \"xs\"\n }\n },\n {\n \"id\": \"appBar.behavior.color\",\n \"value\": \"surface\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"appBar\",\n \"themeValues\": {\n \"LightTheme\": \"surface\",\n \"DarkTheme\": \"surface\"\n }\n },\n {\n \"id\": \"appBar.behavior.height\",\n \"value\": 56,\n \"type\": \"number\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"appBar\",\n \"themeValues\": {\n \"LightTheme\": 56,\n \"DarkTheme\": 56\n }\n },\n {\n \"id\": \"appBar.behavior.divider\",\n \"value\": \"light\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"appBar\",\n \"themeValues\": {\n \"LightTheme\": \"light\",\n \"DarkTheme\": \"light\"\n }\n },\n {\n \"id\": \"appBar.behavior.typeface\",\n \"value\": \"title-large\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"appBar\",\n \"themeValues\": {\n \"LightTheme\": \"title-large\",\n \"DarkTheme\": \"title-large\"\n }\n },\n {\n \"id\": \"appBar.behavior.padding\",\n \"value\": \"md\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"appBar\",\n \"themeValues\": {\n \"LightTheme\": \"md\",\n \"DarkTheme\": \"md\"\n }\n },\n {\n \"id\": \"appBar.behavior.gap\",\n \"value\": \"md\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"appBar\",\n \"themeValues\": {\n \"LightTheme\": \"md\",\n \"DarkTheme\": \"md\"\n }\n },\n {\n \"id\": \"drawer.behavior.color\",\n \"value\": \"surface\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"drawer\",\n \"themeValues\": {\n \"LightTheme\": \"surface\",\n \"DarkTheme\": \"surface\"\n }\n },\n {\n \"id\": \"drawer.behavior.width\",\n \"value\": 280,\n \"type\": \"number\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"drawer\",\n \"themeValues\": {\n \"LightTheme\": 280,\n \"DarkTheme\": 280\n }\n },\n {\n \"id\": \"drawer.behavior.divider\",\n \"value\": \"light\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"drawer\",\n \"themeValues\": {\n \"LightTheme\": \"light\",\n \"DarkTheme\": \"light\"\n }\n },\n {\n \"id\": \"drawer.behavior.elevation\",\n \"value\": \"menu\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"drawer\",\n \"themeValues\": {\n \"LightTheme\": \"menu\",\n \"DarkTheme\": \"menu\"\n }\n },\n {\n \"id\": \"drawer.behavior.padding\",\n \"value\": \"md\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"drawer\",\n \"themeValues\": {\n \"LightTheme\": \"md\",\n \"DarkTheme\": \"md\"\n }\n },\n {\n \"id\": \"drawer.behavior.backdrop\",\n \"value\": \"{\\\"background\\\":\\\"rgba(0, 0, 0, 0.4)\\\"}\",\n \"type\": \"object\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"drawer\",\n \"themeValues\": {\n \"LightTheme\": \"{\\\"background\\\":\\\"rgba(0, 0, 0, 0.4)\\\"}\",\n \"DarkTheme\": \"{\\\"background\\\":\\\"rgba(0, 0, 0, 0.4)\\\"}\"\n }\n },\n {\n \"id\": \"avatar.behavior.borderRadius\",\n \"value\": \"max\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"avatar\",\n \"themeValues\": {\n \"LightTheme\": \"max\",\n \"DarkTheme\": \"max\"\n }\n },\n {\n \"id\": \"avatar.behavior.typeface\",\n \"value\": \"subtitle-2\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"avatar\",\n \"themeValues\": {\n \"LightTheme\": \"subtitle-2\",\n \"DarkTheme\": \"subtitle-2\"\n }\n },\n {\n \"id\": \"avatar.behavior.fallbackSymbol\",\n \"value\": \"person\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"avatar\",\n \"themeValues\": {\n \"LightTheme\": \"person\",\n \"DarkTheme\": \"person\"\n }\n },\n {\n \"id\": \"avatarGroup.behavior.overlap\",\n \"value\": \"sm\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"avatarGroup\",\n \"themeValues\": {\n \"LightTheme\": \"sm\",\n \"DarkTheme\": \"sm\"\n }\n },\n {\n \"id\": \"avatarGroup.behavior.ringColor\",\n \"value\": \"surface\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"avatarGroup\",\n \"themeValues\": {\n \"LightTheme\": \"surface\",\n \"DarkTheme\": \"surface\"\n }\n },\n {\n \"id\": \"avatarGroup.behavior.ringWidth\",\n \"value\": 2,\n \"type\": \"number\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"avatarGroup\",\n \"themeValues\": {\n \"LightTheme\": 2,\n \"DarkTheme\": 2\n }\n },\n {\n \"id\": \"searchInput.behavior.searchSymbol\",\n \"value\": \"search\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"searchInput\",\n \"themeValues\": {\n \"LightTheme\": \"search\",\n \"DarkTheme\": \"search\"\n }\n },\n {\n \"id\": \"searchInput.behavior.clearSymbol\",\n \"value\": \"close\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"searchInput\",\n \"themeValues\": {\n \"LightTheme\": \"close\",\n \"DarkTheme\": \"close\"\n }\n },\n {\n \"id\": \"searchInput.behavior.listColor\",\n \"value\": \"primary-surface\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"searchInput\",\n \"themeValues\": {\n \"LightTheme\": \"primary-surface\",\n \"DarkTheme\": \"primary-surface\"\n }\n },\n {\n \"id\": \"searchInput.behavior.listShadow\",\n \"value\": \"menu\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"searchInput\",\n \"themeValues\": {\n \"LightTheme\": \"menu\",\n \"DarkTheme\": \"menu\"\n }\n },\n {\n \"id\": \"searchInput.behavior.listBorderRadius\",\n \"value\": \"xs\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"searchInput\",\n \"themeValues\": {\n \"LightTheme\": \"xs\",\n \"DarkTheme\": \"xs\"\n }\n },\n {\n \"id\": \"searchInput.behavior.maxSuggestions\",\n \"value\": 8,\n \"type\": \"number\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"searchInput\",\n \"themeValues\": {\n \"LightTheme\": 8,\n \"DarkTheme\": 8\n }\n },\n {\n \"id\": \"checkbox.behavior.size\",\n \"value\": 20,\n \"type\": \"number\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"checkbox\",\n \"themeValues\": {\n \"LightTheme\": 20,\n \"DarkTheme\": 20\n }\n },\n {\n \"id\": \"checkbox.behavior.boxColor\",\n \"value\": \"surface\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"checkbox\",\n \"themeValues\": {\n \"LightTheme\": \"surface\",\n \"DarkTheme\": \"surface\"\n }\n },\n {\n \"id\": \"checkbox.behavior.borderRadius\",\n \"value\": 2,\n \"type\": \"number\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"checkbox\",\n \"themeValues\": {\n \"LightTheme\": 2,\n \"DarkTheme\": 2\n }\n },\n {\n \"id\": \"checkbox.behavior.focusRingGap\",\n \"value\": 2,\n \"type\": \"number\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"checkbox\",\n \"themeValues\": {\n \"LightTheme\": 2,\n \"DarkTheme\": 2\n }\n },\n {\n \"id\": \"radio.behavior.size\",\n \"value\": 20,\n \"type\": \"number\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"radio\",\n \"themeValues\": {\n \"LightTheme\": 20,\n \"DarkTheme\": 20\n }\n },\n {\n \"id\": \"radio.behavior.ringColor\",\n \"value\": \"outline\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"radio\",\n \"themeValues\": {\n \"LightTheme\": \"outline\",\n \"DarkTheme\": \"outline\"\n }\n },\n {\n \"id\": \"radio.behavior.fillColor\",\n \"value\": \"surface\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"radio\",\n \"themeValues\": {\n \"LightTheme\": \"surface\",\n \"DarkTheme\": \"surface\"\n }\n },\n {\n \"id\": \"radio.behavior.transitionSpeed\",\n \"value\": 0.3,\n \"type\": \"number\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"radio\",\n \"themeValues\": {\n \"LightTheme\": 0.3,\n \"DarkTheme\": 0.3\n }\n },\n {\n \"id\": \"dialog.behavior.borderRadius\",\n \"value\": \"lg\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"dialog\",\n \"themeValues\": {\n \"LightTheme\": \"lg\",\n \"DarkTheme\": \"lg\"\n }\n },\n {\n \"id\": \"dialog.behavior.color\",\n \"value\": \"primary-surface\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"dialog\",\n \"themeValues\": {\n \"LightTheme\": \"primary-surface\",\n \"DarkTheme\": \"primary-surface\"\n }\n },\n {\n \"id\": \"dialog.behavior.border\",\n \"value\": \"quaternary\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"dialog\",\n \"themeValues\": {\n \"LightTheme\": \"quaternary\",\n \"DarkTheme\": \"quaternary\"\n }\n },\n {\n \"id\": \"dialog.behavior.padding\",\n \"value\": \"sm\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"dialog\",\n \"themeValues\": {\n \"LightTheme\": \"sm\",\n \"DarkTheme\": \"sm\"\n }\n },\n {\n \"id\": \"dialog.behavior.elevation\",\n \"value\": \"dialog\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"dialog\",\n \"themeValues\": {\n \"LightTheme\": \"dialog\",\n \"DarkTheme\": \"dialog\"\n }\n },\n {\n \"id\": \"dialog.behavior.backdrop\",\n \"value\": \"{\\\"background\\\":\\\"rgba(255, 255, 255, 0.6)\\\",\\\"backdropFilter\\\":\\\"blur(2px)\\\"}\",\n \"type\": \"object\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"dialog\",\n \"themeValues\": {\n \"LightTheme\": \"{\\\"background\\\":\\\"rgba(255, 255, 255, 0.6)\\\",\\\"backdropFilter\\\":\\\"blur(2px)\\\"}\",\n \"DarkTheme\": \"{\\\"background\\\":\\\"rgba(255, 255, 255, 0.6)\\\",\\\"backdropFilter\\\":\\\"blur(2px)\\\"}\"\n }\n },\n {\n \"id\": \"dialogButtons.behavior.gap\",\n \"value\": \"md\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"dialogButtons\",\n \"themeValues\": {\n \"LightTheme\": \"md\",\n \"DarkTheme\": \"md\"\n }\n },\n {\n \"id\": \"dialogButtons.behavior.padding\",\n \"value\": \"md\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"dialogButtons\",\n \"themeValues\": {\n \"LightTheme\": \"md\",\n \"DarkTheme\": \"md\"\n }\n },\n {\n \"id\": \"dialogButtons.behavior.paddingBottom\",\n \"value\": \"lg\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"dialogButtons\",\n \"themeValues\": {\n \"LightTheme\": \"lg\",\n \"DarkTheme\": \"lg\"\n }\n },\n {\n \"id\": \"dialogButtons.behavior.justifyContent\",\n \"value\": \"center\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"dialogButtons\",\n \"themeValues\": {\n \"LightTheme\": \"center\",\n \"DarkTheme\": \"center\"\n }\n },\n {\n \"id\": \"dialogButtons.behavior.confirmButtonVariant\",\n \"value\": \"primary\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"dialogButtons\",\n \"themeValues\": {\n \"LightTheme\": \"primary\",\n \"DarkTheme\": \"primary\"\n }\n },\n {\n \"id\": \"dialogButtons.behavior.cancelButtonVariant\",\n \"value\": \"warn\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"dialogButtons\",\n \"themeValues\": {\n \"LightTheme\": \"warn\",\n \"DarkTheme\": \"warn\"\n }\n },\n {\n \"id\": \"dialogButtons.behavior.buttonSize\",\n \"value\": \"lg\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"dialogButtons\",\n \"themeValues\": {\n \"LightTheme\": \"lg\",\n \"DarkTheme\": \"lg\"\n }\n },\n {\n \"id\": \"dialogButtons.behavior.stretch\",\n \"value\": false,\n \"type\": \"boolean\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"dialogButtons\",\n \"themeValues\": {\n \"LightTheme\": false,\n \"DarkTheme\": false\n }\n },\n {\n \"id\": \"dialogButtons.behavior.reverseOrder\",\n \"value\": false,\n \"type\": \"boolean\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"dialogButtons\",\n \"themeValues\": {\n \"LightTheme\": false,\n \"DarkTheme\": false\n }\n },\n {\n \"id\": \"dialogHeader.behavior.borderRadius\",\n \"value\": \"max\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"dialogHeader\",\n \"themeValues\": {\n \"LightTheme\": \"max\",\n \"DarkTheme\": \"max\"\n }\n },\n {\n \"id\": \"dialogHeader.behavior.color\",\n \"value\": \"primary\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"dialogHeader\",\n \"themeValues\": {\n \"LightTheme\": \"primary\",\n \"DarkTheme\": \"primary\"\n }\n },\n {\n \"id\": \"dialogHeader.behavior.height\",\n \"value\": 48,\n \"type\": \"number\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"dialogHeader\",\n \"themeValues\": {\n \"LightTheme\": 48,\n \"DarkTheme\": 48\n }\n },\n {\n \"id\": \"dialogHeader.behavior.textRole\",\n \"value\": \"title-large\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"dialogHeader\",\n \"themeValues\": {\n \"LightTheme\": \"title-large\",\n \"DarkTheme\": \"title-large\"\n }\n },\n {\n \"id\": \"dialogHeader.behavior.textAlign\",\n \"value\": \"center\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"dialogHeader\",\n \"themeValues\": {\n \"LightTheme\": \"center\",\n \"DarkTheme\": \"center\"\n }\n },\n {\n \"id\": \"dialogHeader.behavior.closeButtonIcon\",\n \"value\": \"close\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"dialogHeader\",\n \"themeValues\": {\n \"LightTheme\": \"close\",\n \"DarkTheme\": \"close\"\n }\n },\n {\n \"id\": \"dialogHeader.behavior.closeButtonSize\",\n \"value\": \"md\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"dialogHeader\",\n \"themeValues\": {\n \"LightTheme\": \"md\",\n \"DarkTheme\": \"md\"\n }\n },\n {\n \"id\": \"dropdown.behavior.border\",\n \"value\": \"none\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"dropdown\",\n \"themeValues\": {\n \"LightTheme\": \"none\",\n \"DarkTheme\": \"none\"\n }\n },\n {\n \"id\": \"dropdown.behavior.borderRadius\",\n \"value\": \"xxs\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"dropdown\",\n \"themeValues\": {\n \"LightTheme\": \"xxs\",\n \"DarkTheme\": \"xxs\"\n }\n },\n {\n \"id\": \"dropdown.behavior.color\",\n \"value\": \"primary-surface\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"dropdown\",\n \"themeValues\": {\n \"LightTheme\": \"primary-surface\",\n \"DarkTheme\": \"primary-surface\"\n }\n },\n {\n \"id\": \"dropdown.behavior.shadow\",\n \"value\": \"menu\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"dropdown\",\n \"themeValues\": {\n \"LightTheme\": \"menu\",\n \"DarkTheme\": \"menu\"\n }\n },\n {\n \"id\": \"menu.behavior.minWidth\",\n \"value\": 184,\n \"type\": \"number\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"menu\",\n \"themeValues\": {\n \"LightTheme\": 184,\n \"DarkTheme\": 184\n }\n },\n {\n \"id\": \"menu.behavior.paddingVertical\",\n \"value\": \"xs\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"menu\",\n \"themeValues\": {\n \"LightTheme\": \"xs\",\n \"DarkTheme\": \"xs\"\n }\n },\n {\n \"id\": \"menu.behavior.paddingHorizontal\",\n \"value\": \"none\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"menu\",\n \"themeValues\": {\n \"LightTheme\": \"none\",\n \"DarkTheme\": \"none\"\n }\n },\n {\n \"id\": \"menu.behavior.dividerBorder\",\n \"value\": \"light\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"menu\",\n \"themeValues\": {\n \"LightTheme\": \"light\",\n \"DarkTheme\": \"light\"\n }\n },\n {\n \"id\": \"menu.behavior.dividerSpacing\",\n \"value\": \"xs\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"menu\",\n \"themeValues\": {\n \"LightTheme\": \"xs\",\n \"DarkTheme\": \"xs\"\n }\n },\n {\n \"id\": \"menuItem.behavior.height\",\n \"value\": 38,\n \"type\": \"number\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"menuItem\",\n \"themeValues\": {\n \"LightTheme\": 38,\n \"DarkTheme\": 38\n }\n },\n {\n \"id\": \"menuItem.behavior.paddingHorizontal\",\n \"value\": \"md\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"menuItem\",\n \"themeValues\": {\n \"LightTheme\": \"md\",\n \"DarkTheme\": \"md\"\n }\n },\n {\n \"id\": \"menuItem.behavior.gap\",\n \"value\": \"md\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"menuItem\",\n \"themeValues\": {\n \"LightTheme\": \"md\",\n \"DarkTheme\": \"md\"\n }\n },\n {\n \"id\": \"menuItem.behavior.borderRadius\",\n \"value\": \"none\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"menuItem\",\n \"themeValues\": {\n \"LightTheme\": \"none\",\n \"DarkTheme\": \"none\"\n }\n },\n {\n \"id\": \"menuItem.behavior.typeface\",\n \"value\": \"label\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"menuItem\",\n \"themeValues\": {\n \"LightTheme\": \"label\",\n \"DarkTheme\": \"label\"\n }\n },\n {\n \"id\": \"menuItem.behavior.hoverColor\",\n \"value\": \"primary-container\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"menuItem\",\n \"themeValues\": {\n \"LightTheme\": \"primary-container\",\n \"DarkTheme\": \"primary-container\"\n }\n },\n {\n \"id\": \"menuItem.behavior.activeSymbol\",\n \"value\": \"check\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"menuItem\",\n \"themeValues\": {\n \"LightTheme\": \"check\",\n \"DarkTheme\": \"check\"\n }\n },\n {\n \"id\": \"menuItem.behavior.transitionSpeed\",\n \"value\": 0.35,\n \"type\": \"number\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"menuItem\",\n \"themeValues\": {\n \"LightTheme\": 0.35,\n \"DarkTheme\": 0.35\n }\n },\n {\n \"id\": \"expand.behavior.transitionSpeed\",\n \"value\": 0.35,\n \"type\": \"number\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"expand\",\n \"themeValues\": {\n \"LightTheme\": 0.35,\n \"DarkTheme\": 0.35\n }\n },\n {\n \"id\": \"footer.behavior.height\",\n \"value\": 52,\n \"type\": \"number\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"footer\",\n \"themeValues\": {\n \"LightTheme\": 52,\n \"DarkTheme\": 52\n }\n },\n {\n \"id\": \"footer.behavior.color\",\n \"value\": \"primary\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"footer\",\n \"themeValues\": {\n \"LightTheme\": \"primary\",\n \"DarkTheme\": \"primary\"\n }\n },\n {\n \"id\": \"footer.behavior.logoHeight\",\n \"value\": 18.6,\n \"type\": \"number\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"footer\",\n \"themeValues\": {\n \"LightTheme\": 18.6,\n \"DarkTheme\": 18.6\n }\n },\n {\n \"id\": \"footer.behavior.logoPadding\",\n \"value\": \"md\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"footer\",\n \"themeValues\": {\n \"LightTheme\": \"md\",\n \"DarkTheme\": \"md\"\n }\n },\n {\n \"id\": \"input.behavior.typeface\",\n \"value\": \"input\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"input\",\n \"themeValues\": {\n \"LightTheme\": \"input\",\n \"DarkTheme\": \"input\"\n }\n },\n {\n \"id\": \"input.behavior.color\",\n \"value\": \"primary-surface\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"input\",\n \"themeValues\": {\n \"LightTheme\": \"primary-surface\",\n \"DarkTheme\": \"primary-surface\"\n }\n },\n {\n \"id\": \"input.behavior.textColor\",\n \"value\": \"on-primary-surface\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"input\",\n \"themeValues\": {\n \"LightTheme\": \"on-primary-surface\",\n \"DarkTheme\": \"on-primary-surface\"\n }\n },\n {\n \"id\": \"input.behavior.disabledColor\",\n \"value\": \"disabled-surface\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"input\",\n \"themeValues\": {\n \"LightTheme\": \"disabled-surface\",\n \"DarkTheme\": \"disabled-surface\"\n }\n },\n {\n \"id\": \"input.behavior.disabledTextColor\",\n \"value\": \"on-disabled-surface\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"input\",\n \"themeValues\": {\n \"LightTheme\": \"on-disabled-surface\",\n \"DarkTheme\": \"on-disabled-surface\"\n }\n },\n {\n \"id\": \"input.behavior.border\",\n \"value\": \"light\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"input\",\n \"themeValues\": {\n \"LightTheme\": \"light\",\n \"DarkTheme\": \"light\"\n }\n },\n {\n \"id\": \"input.behavior.borderRadius\",\n \"value\": \"xs\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"input\",\n \"themeValues\": {\n \"LightTheme\": \"xs\",\n \"DarkTheme\": \"xs\"\n }\n },\n {\n \"id\": \"input.behavior.errorShadow\",\n \"value\": \"warn\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"input\",\n \"themeValues\": {\n \"LightTheme\": \"warn\",\n \"DarkTheme\": \"warn\"\n }\n },\n {\n \"id\": \"input.behavior.errorBorder\",\n \"value\": \"warn\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"input\",\n \"themeValues\": {\n \"LightTheme\": \"warn\",\n \"DarkTheme\": \"warn\"\n }\n },\n {\n \"id\": \"input.behavior.height\",\n \"value\": 32,\n \"type\": \"number\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"input\",\n \"themeValues\": {\n \"LightTheme\": 32,\n \"DarkTheme\": 32\n }\n },\n {\n \"id\": \"input.behavior.paddingLeft\",\n \"value\": \"sm\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"input\",\n \"themeValues\": {\n \"LightTheme\": \"sm\",\n \"DarkTheme\": \"sm\"\n }\n },\n {\n \"id\": \"input.behavior.focusOutline\",\n \"value\": \"2px solid #6A6F8F\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"input\",\n \"themeValues\": {\n \"LightTheme\": \"2px solid #6A6F8F\",\n \"DarkTheme\": \"2px solid #AFB5D8\"\n }\n },\n {\n \"id\": \"input.behavior.focusOutlineOffset\",\n \"value\": 2,\n \"type\": \"number\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"input\",\n \"themeValues\": {\n \"LightTheme\": 2,\n \"DarkTheme\": 2\n }\n },\n {\n \"id\": \"textarea.behavior.rows\",\n \"value\": 3,\n \"type\": \"number\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"textarea\",\n \"themeValues\": {\n \"LightTheme\": 3,\n \"DarkTheme\": 3\n }\n },\n {\n \"id\": \"textarea.behavior.resize\",\n \"value\": \"vertical\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"textarea\",\n \"themeValues\": {\n \"LightTheme\": \"vertical\",\n \"DarkTheme\": \"vertical\"\n }\n },\n {\n \"id\": \"tabs.behavior.typeface\",\n \"value\": \"title-small\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"tabs\",\n \"themeValues\": {\n \"LightTheme\": \"title-small\",\n \"DarkTheme\": \"title-small\"\n }\n },\n {\n \"id\": \"tabs.behavior.textColor\",\n \"value\": \"on-surface-variant\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"tabs\",\n \"themeValues\": {\n \"LightTheme\": \"on-surface-variant\",\n \"DarkTheme\": \"on-surface-variant\"\n }\n },\n {\n \"id\": \"tabs.behavior.activeTextColor\",\n \"value\": \"primary\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"tabs\",\n \"themeValues\": {\n \"LightTheme\": \"primary\",\n \"DarkTheme\": \"primary\"\n }\n },\n {\n \"id\": \"tabs.behavior.indicatorColor\",\n \"value\": \"primary\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"tabs\",\n \"themeValues\": {\n \"LightTheme\": \"primary\",\n \"DarkTheme\": \"primary\"\n }\n },\n {\n \"id\": \"tabs.behavior.indicatorThickness\",\n \"value\": \"standard\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"tabs\",\n \"themeValues\": {\n \"LightTheme\": \"standard\",\n \"DarkTheme\": \"standard\"\n }\n },\n {\n \"id\": \"tabs.behavior.divider\",\n \"value\": \"light\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"tabs\",\n \"themeValues\": {\n \"LightTheme\": \"light\",\n \"DarkTheme\": \"light\"\n }\n },\n {\n \"id\": \"tabs.behavior.gap\",\n \"value\": \"sm\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"tabs\",\n \"themeValues\": {\n \"LightTheme\": \"sm\",\n \"DarkTheme\": \"sm\"\n }\n },\n {\n \"id\": \"tabs.behavior.borderRadius\",\n \"value\": \"none\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"tabs\",\n \"themeValues\": {\n \"LightTheme\": \"none\",\n \"DarkTheme\": \"none\"\n }\n },\n {\n \"id\": \"tabs.behavior.padding\",\n \"value\": \"md\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"tabs\",\n \"themeValues\": {\n \"LightTheme\": \"md\",\n \"DarkTheme\": \"md\"\n }\n },\n {\n \"id\": \"multiSelectDropdown.behavior.textRole\",\n \"value\": \"input\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"multiSelectDropdown\",\n \"themeValues\": {\n \"LightTheme\": \"input\",\n \"DarkTheme\": \"input\"\n }\n },\n {\n \"id\": \"multiSelectDropdown.behavior.textColor\",\n \"value\": \"on-primary-surface\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"multiSelectDropdown\",\n \"themeValues\": {\n \"LightTheme\": \"on-primary-surface\",\n \"DarkTheme\": \"on-primary-surface\"\n }\n },\n {\n \"id\": \"multiSelectDropdown.behavior.dividerBorder\",\n \"value\": \"light\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"multiSelectDropdown\",\n \"themeValues\": {\n \"LightTheme\": \"light\",\n \"DarkTheme\": \"light\"\n }\n },\n {\n \"id\": \"multiSelectDropdown.behavior.searchInputBorder\",\n \"value\": \"light\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"multiSelectDropdown\",\n \"themeValues\": {\n \"LightTheme\": \"light\",\n \"DarkTheme\": \"light\"\n }\n },\n {\n \"id\": \"multiSelectDropdown.behavior.searchInputBorderRadius\",\n \"value\": \"xxs\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"multiSelectDropdown\",\n \"themeValues\": {\n \"LightTheme\": \"xxs\",\n \"DarkTheme\": \"xxs\"\n }\n },\n {\n \"id\": \"multiSelectDropdown.behavior.focusOutline\",\n \"value\": \"2px solid #6A6F8F\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"multiSelectDropdown\",\n \"themeValues\": {\n \"LightTheme\": \"2px solid #6A6F8F\",\n \"DarkTheme\": \"2px solid #AFB5D8\"\n }\n },\n {\n \"id\": \"multiSelectDropdown.behavior.focusOutlineOffset\",\n \"value\": 2,\n \"type\": \"number\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"multiSelectDropdown\",\n \"themeValues\": {\n \"LightTheme\": 2,\n \"DarkTheme\": 2\n }\n },\n {\n \"id\": \"badge.behavior.borderRadius\",\n \"value\": \"xxs\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"badge\",\n \"themeValues\": {\n \"LightTheme\": \"xxs\",\n \"DarkTheme\": \"xxs\"\n }\n },\n {\n \"id\": \"tag.behavior.borderRadius\",\n \"value\": \"max\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"tag\",\n \"themeValues\": {\n \"LightTheme\": \"max\",\n \"DarkTheme\": \"max\"\n }\n },\n {\n \"id\": \"tag.behavior.typeface\",\n \"value\": \"tag\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"tag\",\n \"themeValues\": {\n \"LightTheme\": \"tag\",\n \"DarkTheme\": \"tag\"\n }\n },\n {\n \"id\": \"tag.behavior.gap\",\n \"value\": \"xs\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"tag\",\n \"themeValues\": {\n \"LightTheme\": \"xs\",\n \"DarkTheme\": \"xs\"\n }\n },\n {\n \"id\": \"tag.behavior.removeIcon\",\n \"value\": \"close\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"tag\",\n \"themeValues\": {\n \"LightTheme\": \"close\",\n \"DarkTheme\": \"close\"\n }\n },\n {\n \"id\": \"tag.behavior.selectedIcon\",\n \"value\": \"check\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"tag\",\n \"themeValues\": {\n \"LightTheme\": \"check\",\n \"DarkTheme\": \"check\"\n }\n },\n {\n \"id\": \"tagInput.behavior.chipGap\",\n \"value\": \"xs\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"tagInput\",\n \"themeValues\": {\n \"LightTheme\": \"xs\",\n \"DarkTheme\": \"xs\"\n }\n },\n {\n \"id\": \"tagInput.behavior.chipSize\",\n \"value\": \"md\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"tagInput\",\n \"themeValues\": {\n \"LightTheme\": \"md\",\n \"DarkTheme\": \"md\"\n }\n },\n {\n \"id\": \"tagInput.behavior.minInputWidth\",\n \"value\": \"12ch\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"tagInput\",\n \"themeValues\": {\n \"LightTheme\": \"12ch\",\n \"DarkTheme\": \"12ch\"\n }\n },\n {\n \"id\": \"tagInput.behavior.listColor\",\n \"value\": \"primary-surface\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"tagInput\",\n \"themeValues\": {\n \"LightTheme\": \"primary-surface\",\n \"DarkTheme\": \"primary-surface\"\n }\n },\n {\n \"id\": \"tagInput.behavior.listShadow\",\n \"value\": \"menu\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"tagInput\",\n \"themeValues\": {\n \"LightTheme\": \"menu\",\n \"DarkTheme\": \"menu\"\n }\n },\n {\n \"id\": \"tagInput.behavior.listBorderRadius\",\n \"value\": \"xs\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"tagInput\",\n \"themeValues\": {\n \"LightTheme\": \"xs\",\n \"DarkTheme\": \"xs\"\n }\n },\n {\n \"id\": \"tagInput.behavior.maxSuggestions\",\n \"value\": 8,\n \"type\": \"number\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"tagInput\",\n \"themeValues\": {\n \"LightTheme\": 8,\n \"DarkTheme\": 8\n }\n },\n {\n \"id\": \"calendar.behavior.dayBorderRadius\",\n \"value\": \"max\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"calendar\",\n \"themeValues\": {\n \"LightTheme\": \"max\",\n \"DarkTheme\": \"max\"\n }\n },\n {\n \"id\": \"calendar.behavior.typeface\",\n \"value\": \"label\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"calendar\",\n \"themeValues\": {\n \"LightTheme\": \"label\",\n \"DarkTheme\": \"label\"\n }\n },\n {\n \"id\": \"calendar.behavior.gap\",\n \"value\": \"xxs\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"calendar\",\n \"themeValues\": {\n \"LightTheme\": \"xxs\",\n \"DarkTheme\": \"xxs\"\n }\n },\n {\n \"id\": \"calendar.behavior.navPrevSymbol\",\n \"value\": \"chevron_left\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"calendar\",\n \"themeValues\": {\n \"LightTheme\": \"chevron_left\",\n \"DarkTheme\": \"chevron_left\"\n }\n },\n {\n \"id\": \"calendar.behavior.navNextSymbol\",\n \"value\": \"chevron_right\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"calendar\",\n \"themeValues\": {\n \"LightTheme\": \"chevron_right\",\n \"DarkTheme\": \"chevron_right\"\n }\n },\n {\n \"id\": \"calendar.behavior.weekdayFormat\",\n \"value\": \"short\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"calendar\",\n \"themeValues\": {\n \"LightTheme\": \"short\",\n \"DarkTheme\": \"short\"\n }\n },\n {\n \"id\": \"calendar.behavior.showOutsideDays\",\n \"value\": false,\n \"type\": \"boolean\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"calendar\",\n \"themeValues\": {\n \"LightTheme\": false,\n \"DarkTheme\": false\n }\n },\n {\n \"id\": \"calendar.behavior.todayStyle\",\n \"value\": \"outline\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"calendar\",\n \"themeValues\": {\n \"LightTheme\": \"outline\",\n \"DarkTheme\": \"outline\"\n }\n },\n {\n \"id\": \"dateInput.behavior.toggleSymbol\",\n \"value\": \"calendar_month\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"dateInput\",\n \"themeValues\": {\n \"LightTheme\": \"calendar_month\",\n \"DarkTheme\": \"calendar_month\"\n }\n },\n {\n \"id\": \"dateInput.behavior.popupShadow\",\n \"value\": \"menu\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"dateInput\",\n \"themeValues\": {\n \"LightTheme\": \"menu\",\n \"DarkTheme\": \"menu\"\n }\n },\n {\n \"id\": \"dateInput.behavior.popupBorderRadius\",\n \"value\": \"xs\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"dateInput\",\n \"themeValues\": {\n \"LightTheme\": \"xs\",\n \"DarkTheme\": \"xs\"\n }\n },\n {\n \"id\": \"dateInput.behavior.popupColor\",\n \"value\": \"primary-surface\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"dateInput\",\n \"themeValues\": {\n \"LightTheme\": \"primary-surface\",\n \"DarkTheme\": \"primary-surface\"\n }\n },\n {\n \"id\": \"timeInput.behavior.toggleSymbol\",\n \"value\": \"schedule\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"timeInput\",\n \"themeValues\": {\n \"LightTheme\": \"schedule\",\n \"DarkTheme\": \"schedule\"\n }\n },\n {\n \"id\": \"timeInput.behavior.listColor\",\n \"value\": \"primary-surface\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"timeInput\",\n \"themeValues\": {\n \"LightTheme\": \"primary-surface\",\n \"DarkTheme\": \"primary-surface\"\n }\n },\n {\n \"id\": \"timeInput.behavior.listShadow\",\n \"value\": \"menu\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"timeInput\",\n \"themeValues\": {\n \"LightTheme\": \"menu\",\n \"DarkTheme\": \"menu\"\n }\n },\n {\n \"id\": \"timeInput.behavior.listBorderRadius\",\n \"value\": \"xs\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"timeInput\",\n \"themeValues\": {\n \"LightTheme\": \"xs\",\n \"DarkTheme\": \"xs\"\n }\n },\n {\n \"id\": \"timeInput.behavior.maxVisibleOptions\",\n \"value\": 7,\n \"type\": \"number\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"timeInput\",\n \"themeValues\": {\n \"LightTheme\": 7,\n \"DarkTheme\": 7\n }\n },\n {\n \"id\": \"dateTimeInput.behavior.partGap\",\n \"value\": \"sm\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"dateTimeInput\",\n \"themeValues\": {\n \"LightTheme\": \"sm\",\n \"DarkTheme\": \"sm\"\n }\n },\n {\n \"id\": \"dateTimeInput.behavior.dividerColor\",\n \"value\": \"outline\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"dateTimeInput\",\n \"themeValues\": {\n \"LightTheme\": \"outline\",\n \"DarkTheme\": \"outline\"\n }\n },\n {\n \"id\": \"button.behavior.borderRadius\",\n \"value\": \"max\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"button\",\n \"themeValues\": {\n \"LightTheme\": \"max\",\n \"DarkTheme\": \"max\"\n }\n },\n {\n \"id\": \"button.behavior.typeface\",\n \"value\": \"button\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"button\",\n \"themeValues\": {\n \"LightTheme\": \"button\",\n \"DarkTheme\": \"button\"\n }\n },\n {\n \"id\": \"iconButton.behavior.borderRadius\",\n \"value\": \"max\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"iconButton\",\n \"themeValues\": {\n \"LightTheme\": \"max\",\n \"DarkTheme\": \"max\"\n }\n },\n {\n \"id\": \"card.behavior.borderRadius\",\n \"value\": \"xs\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"card\",\n \"themeValues\": {\n \"LightTheme\": \"xs\",\n \"DarkTheme\": \"xs\"\n }\n },\n {\n \"id\": \"dataSearch.behavior.border\",\n \"value\": \"light\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"dataSearch\",\n \"themeValues\": {\n \"LightTheme\": \"light\",\n \"DarkTheme\": \"light\"\n }\n },\n {\n \"id\": \"dataSearch.behavior.borderRadius\",\n \"value\": \"xs\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"dataSearch\",\n \"themeValues\": {\n \"LightTheme\": \"xs\",\n \"DarkTheme\": \"xs\"\n }\n },\n {\n \"id\": \"dataSearch.behavior.color\",\n \"value\": \"primary-surface\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"dataSearch\",\n \"themeValues\": {\n \"LightTheme\": \"primary-surface\",\n \"DarkTheme\": \"primary-surface\"\n }\n },\n {\n \"id\": \"dataSearch.behavior.placeholderColor\",\n \"value\": \"disabled\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"dataSearch\",\n \"themeValues\": {\n \"LightTheme\": \"disabled\",\n \"DarkTheme\": \"disabled\"\n }\n },\n {\n \"id\": \"dataTable.behavior.color\",\n \"value\": \"primary-surface\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"dataTable\",\n \"themeValues\": {\n \"LightTheme\": \"primary-surface\",\n \"DarkTheme\": \"primary-surface\"\n }\n },\n {\n \"id\": \"dataTable.behavior.border\",\n \"value\": \"light\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"dataTable\",\n \"themeValues\": {\n \"LightTheme\": \"light\",\n \"DarkTheme\": \"light\"\n }\n },\n {\n \"id\": \"dataTable.behavior.borderRadius\",\n \"value\": \"sm\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"dataTable\",\n \"themeValues\": {\n \"LightTheme\": \"sm\",\n \"DarkTheme\": \"sm\"\n }\n },\n {\n \"id\": \"dataTable.behavior.headerPadding\",\n \"value\": \"sm\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"dataTable\",\n \"themeValues\": {\n \"LightTheme\": \"sm\",\n \"DarkTheme\": \"sm\"\n }\n },\n {\n \"id\": \"dataTable.behavior.footerPadding\",\n \"value\": \"sm\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"dataTable\",\n \"themeValues\": {\n \"LightTheme\": \"sm\",\n \"DarkTheme\": \"sm\"\n }\n },\n {\n \"id\": \"dataTable.behavior.thTextRole\",\n \"value\": \"headline-small\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"dataTable\",\n \"themeValues\": {\n \"LightTheme\": \"headline-small\",\n \"DarkTheme\": \"headline-small\"\n }\n },\n {\n \"id\": \"dataTable.behavior.thColor\",\n \"value\": \"primary-container\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"dataTable\",\n \"themeValues\": {\n \"LightTheme\": \"primary-container\",\n \"DarkTheme\": \"primary-container\"\n }\n },\n {\n \"id\": \"dataTable.behavior.thVerticalBorder\",\n \"value\": \"dotted\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"dataTable\",\n \"themeValues\": {\n \"LightTheme\": \"dotted\",\n \"DarkTheme\": \"dotted\"\n }\n },\n {\n \"id\": \"dataTable.behavior.thHorizontalBorder\",\n \"value\": \"light\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"dataTable\",\n \"themeValues\": {\n \"LightTheme\": \"light\",\n \"DarkTheme\": \"light\"\n }\n },\n {\n \"id\": \"dataTable.behavior.thPadding\",\n \"value\": \"sm\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"dataTable\",\n \"themeValues\": {\n \"LightTheme\": \"sm\",\n \"DarkTheme\": \"sm\"\n }\n },\n {\n \"id\": \"dataTable.behavior.tdTextRole\",\n \"value\": \"title-small\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"dataTable\",\n \"themeValues\": {\n \"LightTheme\": \"title-small\",\n \"DarkTheme\": \"title-small\"\n }\n },\n {\n \"id\": \"dataTable.behavior.tdColor\",\n \"value\": \"primary-surface\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"dataTable\",\n \"themeValues\": {\n \"LightTheme\": \"primary-surface\",\n \"DarkTheme\": \"primary-surface\"\n }\n },\n {\n \"id\": \"dataTable.behavior.tdStickyColor\",\n \"value\": \"primary-container\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"dataTable\",\n \"themeValues\": {\n \"LightTheme\": \"primary-container\",\n \"DarkTheme\": \"primary-container\"\n }\n },\n {\n \"id\": \"dataTable.behavior.tdPadding\",\n \"value\": \"sm\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"dataTable\",\n \"themeValues\": {\n \"LightTheme\": \"sm\",\n \"DarkTheme\": \"sm\"\n }\n },\n {\n \"id\": \"dataTable.behavior.tdVerticalBorder\",\n \"value\": \"dotted\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"dataTable\",\n \"themeValues\": {\n \"LightTheme\": \"dotted\",\n \"DarkTheme\": \"dotted\"\n }\n },\n {\n \"id\": \"dataTable.behavior.tdHorizontalBorder\",\n \"value\": \"light\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"dataTable\",\n \"themeValues\": {\n \"LightTheme\": \"light\",\n \"DarkTheme\": \"light\"\n }\n },\n {\n \"id\": \"dataTable.behavior.rowHoverColor\",\n \"value\": \"primary-container\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"dataTable\",\n \"themeValues\": {\n \"LightTheme\": \"primary-container\",\n \"DarkTheme\": \"primary-container\"\n }\n },\n {\n \"id\": \"dataTable.behavior.loadingOverlayColor\",\n \"value\": \"scrim\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"dataTable\",\n \"themeValues\": {\n \"LightTheme\": \"scrim\",\n \"DarkTheme\": \"scrim\"\n }\n },\n {\n \"id\": \"dataTable.behavior.loadingSpinnerColor\",\n \"value\": \"primary\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"dataTable\",\n \"themeValues\": {\n \"LightTheme\": \"primary\",\n \"DarkTheme\": \"primary\"\n }\n },\n {\n \"id\": \"dataTable.behavior.loadingSpinnerSize\",\n \"value\": 40,\n \"type\": \"number\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"dataTable\",\n \"themeValues\": {\n \"LightTheme\": 40,\n \"DarkTheme\": 40\n }\n },\n {\n \"id\": \"notificationBadge.behavior.borderRadius\",\n \"value\": \"sm\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"notificationBadge\",\n \"themeValues\": {\n \"LightTheme\": \"sm\",\n \"DarkTheme\": \"sm\"\n }\n },\n {\n \"id\": \"notificationBadge.behavior.offset\",\n \"value\": -10,\n \"type\": \"number\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"notificationBadge\",\n \"themeValues\": {\n \"LightTheme\": -10,\n \"DarkTheme\": -10\n }\n },\n {\n \"id\": \"paginator.behavior.gap\",\n \"value\": \"xs\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"paginator\",\n \"themeValues\": {\n \"LightTheme\": \"xs\",\n \"DarkTheme\": \"xs\"\n }\n },\n {\n \"id\": \"paginator.behavior.textRole\",\n \"value\": \"label\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"paginator\",\n \"themeValues\": {\n \"LightTheme\": \"label\",\n \"DarkTheme\": \"label\"\n }\n },\n {\n \"id\": \"paginator.behavior.inputBorder\",\n \"value\": \"light\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"paginator\",\n \"themeValues\": {\n \"LightTheme\": \"light\",\n \"DarkTheme\": \"light\"\n }\n },\n {\n \"id\": \"paginator.behavior.inputBorderRadius\",\n \"value\": \"xs\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"paginator\",\n \"themeValues\": {\n \"LightTheme\": \"xs\",\n \"DarkTheme\": \"xs\"\n }\n },\n {\n \"id\": \"paginator.behavior.pageBorderRadius\",\n \"value\": \"xs\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"paginator\",\n \"themeValues\": {\n \"LightTheme\": \"xs\",\n \"DarkTheme\": \"xs\"\n }\n },\n {\n \"id\": \"paginator.behavior.currentPageBorder\",\n \"value\": \"light\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"paginator\",\n \"themeValues\": {\n \"LightTheme\": \"light\",\n \"DarkTheme\": \"light\"\n }\n },\n {\n \"id\": \"paginator.behavior.currentPageBorderRadius\",\n \"value\": \"xs\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"paginator\",\n \"themeValues\": {\n \"LightTheme\": \"xs\",\n \"DarkTheme\": \"xs\"\n }\n },\n {\n \"id\": \"stat.behavior.labelTypeface\",\n \"value\": \"label\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"stat\",\n \"themeValues\": {\n \"LightTheme\": \"label\",\n \"DarkTheme\": \"label\"\n }\n },\n {\n \"id\": \"stat.behavior.valueTypeface\",\n \"value\": \"stat\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"stat\",\n \"themeValues\": {\n \"LightTheme\": \"stat\",\n \"DarkTheme\": \"stat\"\n }\n },\n {\n \"id\": \"stat.behavior.color\",\n \"value\": \"surface\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"stat\",\n \"themeValues\": {\n \"LightTheme\": \"surface\",\n \"DarkTheme\": \"surface\"\n }\n },\n {\n \"id\": \"stat.behavior.border\",\n \"value\": \"light\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"stat\",\n \"themeValues\": {\n \"LightTheme\": \"light\",\n \"DarkTheme\": \"light\"\n }\n },\n {\n \"id\": \"stat.behavior.borderRadius\",\n \"value\": \"xs\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"stat\",\n \"themeValues\": {\n \"LightTheme\": \"xs\",\n \"DarkTheme\": \"xs\"\n }\n },\n {\n \"id\": \"stat.behavior.positiveColor\",\n \"value\": \"success\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"stat\",\n \"themeValues\": {\n \"LightTheme\": \"success\",\n \"DarkTheme\": \"success\"\n }\n },\n {\n \"id\": \"stat.behavior.negativeColor\",\n \"value\": \"error\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"stat\",\n \"themeValues\": {\n \"LightTheme\": \"error\",\n \"DarkTheme\": \"error\"\n }\n },\n {\n \"id\": \"stat.behavior.trendColor\",\n \"value\": \"outline\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"stat\",\n \"themeValues\": {\n \"LightTheme\": \"outline\",\n \"DarkTheme\": \"outline\"\n }\n },\n {\n \"id\": \"stat.behavior.trendAccent\",\n \"value\": \"primary\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"stat\",\n \"themeValues\": {\n \"LightTheme\": \"primary\",\n \"DarkTheme\": \"primary\"\n }\n },\n {\n \"id\": \"stat.behavior.padding\",\n \"value\": \"md\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"stat\",\n \"themeValues\": {\n \"LightTheme\": \"md\",\n \"DarkTheme\": \"md\"\n }\n },\n {\n \"id\": \"stat.behavior.gap\",\n \"value\": \"xxs\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"stat\",\n \"themeValues\": {\n \"LightTheme\": \"xxs\",\n \"DarkTheme\": \"xxs\"\n }\n },\n {\n \"id\": \"slider.behavior.color\",\n \"value\": \"primary\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"slider\",\n \"themeValues\": {\n \"LightTheme\": \"primary\",\n \"DarkTheme\": \"primary\"\n }\n },\n {\n \"id\": \"slider.behavior.trackColor\",\n \"value\": \"surface-variant\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"slider\",\n \"themeValues\": {\n \"LightTheme\": \"surface-variant\",\n \"DarkTheme\": \"surface-variant\"\n }\n },\n {\n \"id\": \"slider.behavior.borderRadius\",\n \"value\": \"max\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"slider\",\n \"themeValues\": {\n \"LightTheme\": \"max\",\n \"DarkTheme\": \"max\"\n }\n },\n {\n \"id\": \"slider.behavior.trackHeight\",\n \"value\": 4,\n \"type\": \"number\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"slider\",\n \"themeValues\": {\n \"LightTheme\": 4,\n \"DarkTheme\": 4\n }\n },\n {\n \"id\": \"slider.behavior.thumbSize\",\n \"value\": 16,\n \"type\": \"number\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"slider\",\n \"themeValues\": {\n \"LightTheme\": 16,\n \"DarkTheme\": 16\n }\n },\n {\n \"id\": \"skeleton.behavior.color\",\n \"value\": \"surface-variant\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"skeleton\",\n \"themeValues\": {\n \"LightTheme\": \"surface-variant\",\n \"DarkTheme\": \"surface-variant\"\n }\n },\n {\n \"id\": \"skeleton.behavior.highlightColor\",\n \"value\": \"surface\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"skeleton\",\n \"themeValues\": {\n \"LightTheme\": \"surface\",\n \"DarkTheme\": \"surface\"\n }\n },\n {\n \"id\": \"skeleton.behavior.borderRadius\",\n \"value\": \"xs\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"skeleton\",\n \"themeValues\": {\n \"LightTheme\": \"xs\",\n \"DarkTheme\": \"xs\"\n }\n },\n {\n \"id\": \"skeleton.behavior.animation\",\n \"value\": \"shimmer\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"skeleton\",\n \"themeValues\": {\n \"LightTheme\": \"shimmer\",\n \"DarkTheme\": \"shimmer\"\n }\n },\n {\n \"id\": \"skeleton.behavior.duration\",\n \"value\": 1.4,\n \"type\": \"number\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"skeleton\",\n \"themeValues\": {\n \"LightTheme\": 1.4,\n \"DarkTheme\": 1.4\n }\n },\n {\n \"id\": \"skeleton.behavior.gap\",\n \"value\": \"sm\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"skeleton\",\n \"themeValues\": {\n \"LightTheme\": \"sm\",\n \"DarkTheme\": \"sm\"\n }\n },\n {\n \"id\": \"snackbar.behavior.bottomPosition\",\n \"value\": 40,\n \"type\": \"number\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"snackbar\",\n \"themeValues\": {\n \"LightTheme\": 40,\n \"DarkTheme\": 40\n }\n },\n {\n \"id\": \"snackbar.behavior.transitionDelay\",\n \"value\": \"0.35s\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"snackbar\",\n \"themeValues\": {\n \"LightTheme\": \"0.35s\",\n \"DarkTheme\": \"0.35s\"\n }\n },\n {\n \"id\": \"snackbar.behavior.autoCloseDelay\",\n \"value\": 35000,\n \"type\": \"number\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"snackbar\",\n \"themeValues\": {\n \"LightTheme\": 35000,\n \"DarkTheme\": 35000\n }\n },\n {\n \"id\": \"symbol.behavior.fill\",\n \"value\": 0,\n \"type\": \"number\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"symbol\",\n \"themeValues\": {\n \"LightTheme\": 0,\n \"DarkTheme\": 0\n }\n },\n {\n \"id\": \"symbol.behavior.weight\",\n \"value\": 400,\n \"type\": \"number\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"symbol\",\n \"themeValues\": {\n \"LightTheme\": 400,\n \"DarkTheme\": 400\n }\n },\n {\n \"id\": \"symbol.behavior.grade\",\n \"value\": 0,\n \"type\": \"number\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"symbol\",\n \"themeValues\": {\n \"LightTheme\": 0,\n \"DarkTheme\": 0\n }\n },\n {\n \"id\": \"symbol.behavior.opticalSize\",\n \"value\": 24,\n \"type\": \"number\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"symbol\",\n \"themeValues\": {\n \"LightTheme\": 24,\n \"DarkTheme\": 24\n }\n },\n {\n \"id\": \"toggle.behavior.size\",\n \"value\": 20,\n \"type\": \"number\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"toggle\",\n \"themeValues\": {\n \"LightTheme\": 20,\n \"DarkTheme\": 20\n }\n },\n {\n \"id\": \"toggle.behavior.trackColor\",\n \"value\": \"surface-variant\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"toggle\",\n \"themeValues\": {\n \"LightTheme\": \"surface-variant\",\n \"DarkTheme\": \"surface-variant\"\n }\n },\n {\n \"id\": \"toggle.behavior.knobColor\",\n \"value\": \"surface\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"toggle\",\n \"themeValues\": {\n \"LightTheme\": \"surface\",\n \"DarkTheme\": \"surface\"\n }\n },\n {\n \"id\": \"tooltip.behavior.borderRadius\",\n \"value\": \"xs\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"tooltip\",\n \"themeValues\": {\n \"LightTheme\": \"xs\",\n \"DarkTheme\": \"xs\"\n }\n },\n {\n \"id\": \"tooltip.behavior.shadow\",\n \"value\": \"raised\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"tooltip\",\n \"themeValues\": {\n \"LightTheme\": \"raised\",\n \"DarkTheme\": \"raised\"\n }\n },\n {\n \"id\": \"tooltip.behavior.color\",\n \"value\": \"inverse-surface\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"tooltip\",\n \"themeValues\": {\n \"LightTheme\": \"inverse-surface\",\n \"DarkTheme\": \"inverse-surface\"\n }\n },\n {\n \"id\": \"tooltip.behavior.typeface\",\n \"value\": \"label\",\n \"type\": \"string\",\n \"kind\": \"behavioral\",\n \"target\": \"component-prop\",\n \"appliesTo\": \"tooltip\",\n \"themeValues\": {\n \"LightTheme\": \"label\",\n \"DarkTheme\": \"label\"\n }\n }\n ],\n \"themes\": [\n {\n \"id\": \"LightTheme\",\n \"name\": \"Light Theme\",\n \"description\": \"The Light Theme theme for the Uni Design System.\",\n \"styleOverrides\": {\n \"color.primary\": \"#6A6F8F\",\n \"color.on-primary\": \"#F9FAFF\",\n \"color.primary-container\": \"#DBDDEA\",\n \"color.on-primary-container\": \"#1A1C37\",\n \"color.on-primary-container-variant\": \"#5B5D68\",\n \"color.on-primary-container-border\": \"#6A6F8F\",\n \"color.primary-surface\": \"#F3F5FD\",\n \"color.on-primary-surface\": \"#1E1F25\",\n \"color.on-primary-surface-variant\": \"#6A6F8F\",\n \"color.secondary\": \"#8C685D\",\n \"color.on-secondary\": \"#FFF8F6\",\n \"color.secondary-container\": \"#E9DAD6\",\n \"color.on-secondary-container\": \"#33160D\",\n \"color.on-secondary-container-variant\": \"#675A57\",\n \"color.on-secondary-container-border\": \"#8C685D\",\n \"color.secondary-surface\": \"#FDF3EF\",\n \"color.on-secondary-surface\": \"#251D1B\",\n \"color.on-secondary-surface-variant\": \"#8C685D\",\n \"color.tertiary\": \"#597B66\",\n \"color.on-tertiary\": \"#F0FFF5\",\n \"color.tertiary-container\": \"#D5E2D9\",\n \"color.on-tertiary-container\": \"#052615\",\n \"color.on-tertiary-container-variant\": \"#56615A\",\n \"color.on-tertiary-container-border\": \"#597B66\",\n \"color.tertiary-surface\": \"#EFF8F2\",\n \"color.on-tertiary-surface\": \"#1B211D\",\n \"color.on-tertiary-surface-variant\": \"#557762\",\n \"color.quaternary\": \"#61636A\",\n \"color.on-quaternary\": \"#F9FAFF\",\n \"color.quaternary-surface\": \"#F3F5FD\",\n \"color.on-quaternary-surface\": \"#1E1F25\",\n \"color.on-quaternary-surface-variant\": \"#6A6F8F\",\n \"color.on-quaternary-container-variant\": \"#5B5D68\",\n \"color.on-quaternary-container-border\": \"#61636A\",\n \"color.error\": \"#CC2827\",\n \"color.on-error\": \"#FFF8F7\",\n \"color.error-container\": \"#FFD2CC\",\n \"color.on-error-container\": \"#331512\",\n \"color.warn\": \"#AC5700\",\n \"color.on-warn\": \"#FFF9F5\",\n \"color.warn-container\": \"#FDD5BA\",\n \"color.on-warn-container\": \"#311805\",\n \"color.on-warn-container-variant\": \"#78543C\",\n \"color.on-warn-container-border\": \"#AC5700\",\n \"color.success\": \"#008341\",\n \"color.on-success\": \"#F1FEF4\",\n \"color.success-container\": \"#C3EACC\",\n \"color.on-success-container\": \"#092613\",\n \"color.on-success-container-variant\": \"#43684D\",\n \"color.on-success-container-border\": \"#008341\",\n \"color.background\": \"#FDFDFF\",\n \"color.on-background\": \"#202127\",\n \"color.on-background-variant\": \"#5C5D65\",\n \"color.surface\": \"#F9FAFF\",\n \"color.on-surface\": \"#202127\",\n \"color.surface-variant\": \"#E9EBF3\",\n \"color.on-surface-variant\": \"#36373E\",\n \"color.inverse-surface\": \"#2C2D34\",\n \"color.on-inverse-surface\": \"#F3F5FD\",\n \"color.on-inverse-surface-primary\": \"#8D93B4\",\n \"color.on-inverse-surface-variant\": \"#8D93B4\",\n \"color.inverse-container\": \"#2C2D34\",\n \"color.on-inverse-container\": \"#F3F5FD\",\n \"color.outline\": \"#7E8088\",\n \"color.shadow\": \"#000000\",\n \"color.scrim\": \"#000000\",\n \"color.surface-tint\": \"#6A6F8F\",\n \"color.transparent\": \"rgba(0,0,0,0)\",\n \"color.ghost\": \"rgba(0,0,0,0)\",\n \"color.disabled\": \"rgba(0,0,0,0.12)\",\n \"color.on-disabled\": \"rgba(0,0,0,0.38)\",\n \"color.disabled-container\": \"#EFF1FA\",\n \"color.on-disabled-container\": \"rgba(0,0,0,0.38)\",\n \"color.disabled-surface\": \"rgba(0,0,0,0.12)\",\n \"color.on-disabled-surface\": \"rgba(0,0,0,0.5)\",\n \"color.on-disabled-surface-variant\": \"rgba(0,0,0,0.4)\",\n \"radius.none\": \"none\",\n \"radius.xxs\": \"4px\",\n \"radius.xs\": \"8px\",\n \"radius.sm\": \"16px\",\n \"radius.md\": \"24px\",\n \"radius.lg\": \"32px\",\n \"radius.max\": \"999px\",\n \"spacing.none\": 0,\n \"spacing.xxs\": \"2px\",\n \"spacing.xs\": \"4px\",\n \"spacing.sm\": \"8px\",\n \"spacing.md\": \"16px\",\n \"spacing.lg\": \"32px\",\n \"spacing.xl\": \"64px\",\n \"border.primary\": \"1px solid #6A6F8F\",\n \"border.secondary\": \"1px solid #8C685D\",\n \"border.tertiary\": \"1px solid #597B66\",\n \"border.quaternary\": \"1px solid #61636A\",\n \"border.warn\": \"1px solid #AC5700\",\n \"border.success\": \"1px solid #008341\",\n \"border.light\": \"1px solid #7E8088\",\n \"border.dark\": \"1px solid #202127\",\n \"border.dotted\": \"1px dotted #202127\",\n \"shadow.raised\": \"rgba(23, 25, 43, 0.2) 0px 2px 1px -1px, rgba(23, 25, 43, 0.14) 0px 1px 1px 0px, rgba(23, 25, 43, 0.12) 0px 1px 3px 0px\",\n \"shadow.menu\": \"rgba(23, 25, 43, 0.2) 0px 3px 3px -2px, rgba(23, 25, 43, 0.14) 0px 3px 4px 0px, rgba(23, 25, 43, 0.12) 0px 1px 8px 0px\",\n \"shadow.dialog\": \"rgba(23, 25, 43, 0.2) 0px 3px 5px -1px, rgba(23, 25, 43, 0.14) 0px 6px 10px 0px, rgba(23, 25, 43, 0.12) 0px 1px 18px 0px\",\n \"shadow.warn\": \"0 0 5px rgba(204, 40, 39, 0.5), inset 0 0 5px rgba(204, 40, 39, 0.3)\",\n \"thickness.thin\": 1,\n \"thickness.standard\": 2,\n \"thickness.thick\": 4,\n \"typography.display-large\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":57,\\\"lineHeight\\\":64,\\\"fontWeight\\\":\\\"normal\\\",\\\"letterSpacing\\\":-0.25}\",\n \"typography.display-medium\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":45,\\\"lineHeight\\\":52,\\\"fontWeight\\\":\\\"normal\\\"}\",\n \"typography.display-small\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":36,\\\"lineHeight\\\":44,\\\"fontWeight\\\":\\\"normal\\\"}\",\n \"typography.headline-large\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":32,\\\"lineHeight\\\":40,\\\"fontWeight\\\":\\\"normal\\\"}\",\n \"typography.headline-medium\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":28,\\\"lineHeight\\\":36,\\\"fontWeight\\\":\\\"normal\\\"}\",\n \"typography.headline-small\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":24,\\\"lineHeight\\\":32,\\\"fontWeight\\\":\\\"normal\\\"}\",\n \"typography.title-large\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":22,\\\"lineHeight\\\":28,\\\"fontWeight\\\":\\\"normal\\\"}\",\n \"typography.title-medium\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":16,\\\"lineHeight\\\":24,\\\"fontWeight\\\":\\\"medium\\\",\\\"letterSpacing\\\":0.15}\",\n \"typography.title-small\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontWeight\\\":\\\"medium\\\",\\\"fontSize\\\":14,\\\"lineHeight\\\":20,\\\"letterSpacing\\\":0.1}\",\n \"typography.body-1-long\": \"{\\\"fontFamily\\\":\\\"Roboto\\\",\\\"fontSize\\\":16,\\\"lineHeight\\\":22}\",\n \"typography.body-1-short\": \"{\\\"fontFamily\\\":\\\"Roboto\\\",\\\"fontSize\\\":16,\\\"lineHeight\\\":24}\",\n \"typography.body-2-long\": \"{\\\"fontFamily\\\":\\\"Roboto\\\",\\\"fontSize\\\":14,\\\"lineHeight\\\":18}\",\n \"typography.body-2-short\": \"{\\\"fontFamily\\\":\\\"Roboto\\\",\\\"fontSize\\\":14,\\\"lineHeight\\\":20}\",\n \"typography.subtitle-1\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":16,\\\"lineHeight\\\":24,\\\"letterSpacing\\\":0.15}\",\n \"typography.subtitle-2\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":14,\\\"lineHeight\\\":20,\\\"fontWeight\\\":\\\"medium\\\",\\\"letterSpacing\\\":0.1}\",\n \"typography.label\": \"{\\\"fontFamily\\\":\\\"Roboto\\\",\\\"fontSize\\\":14,\\\"lineHeight\\\":20}\",\n \"typography.button\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":14,\\\"lineHeight\\\":20,\\\"fontWeight\\\":\\\"medium\\\",\\\"textTransform\\\":\\\"capitalize\\\"}\",\n \"typography.caption\": \"{\\\"fontFamily\\\":\\\"Roboto\\\",\\\"fontSize\\\":12,\\\"lineHeight\\\":18,\\\"letterSpacing\\\":0.4}\",\n \"typography.overline\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":10,\\\"lineHeight\\\":18,\\\"letterSpacing\\\":1.5,\\\"textTransform\\\":\\\"uppercase\\\"}\",\n \"typography.paragraph\": \"{\\\"fontFamily\\\":\\\"Roboto\\\",\\\"fontSize\\\":16,\\\"lineHeight\\\":24}\",\n \"typography.quote\": \"{\\\"fontFamily\\\":\\\"Roboto\\\",\\\"fontSize\\\":16,\\\"lineHeight\\\":24}\",\n \"typography.note\": \"{\\\"fontFamily\\\":\\\"Roboto\\\",\\\"fontSize\\\":14,\\\"lineHeight\\\":22,\\\"fontStyle\\\":\\\"italic\\\"}\",\n \"typography.badge\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":16,\\\"lineHeight\\\":24}\",\n \"typography.stat\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":32,\\\"lineHeight\\\":38,\\\"fontWeight\\\":600,\\\"letterSpacing\\\":-0.32}\",\n \"typography.tag\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":15,\\\"lineHeight\\\":20,\\\"fontWeight\\\":600}\",\n \"typography.input\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":14,\\\"lineHeight\\\":24}\"\n },\n \"componentOptions\": {\n \"alert\": {\n \"topPosition\": 40,\n \"borderRadius\": \"sm\",\n \"transitionSpeed\": 0.35,\n \"elevation\": \"md\"\n },\n \"breadcrumb\": {\n \"typeface\": \"label\",\n \"color\": \"on-background-variant\",\n \"currentColor\": \"on-background\",\n \"separatorSymbol\": \"chevron_right\",\n \"gap\": \"xs\"\n },\n \"appBar\": {\n \"color\": \"surface\",\n \"height\": 56,\n \"divider\": \"light\",\n \"typeface\": \"title-large\",\n \"padding\": \"md\",\n \"gap\": \"md\"\n },\n \"drawer\": {\n \"color\": \"surface\",\n \"width\": 280,\n \"divider\": \"light\",\n \"elevation\": \"menu\",\n \"padding\": \"md\",\n \"backdrop\": \"{\\\"background\\\":\\\"rgba(0, 0, 0, 0.4)\\\"}\"\n },\n \"avatar\": {\n \"borderRadius\": \"max\",\n \"typeface\": \"subtitle-2\",\n \"fallbackSymbol\": \"person\"\n },\n \"avatarGroup\": {\n \"overlap\": \"sm\",\n \"ringColor\": \"surface\",\n \"ringWidth\": 2\n },\n \"searchInput\": {\n \"searchSymbol\": \"search\",\n \"clearSymbol\": \"close\",\n \"listColor\": \"primary-surface\",\n \"listShadow\": \"menu\",\n \"listBorderRadius\": \"xs\",\n \"maxSuggestions\": 8\n },\n \"checkbox\": {\n \"size\": 20,\n \"boxColor\": \"surface\",\n \"borderRadius\": 2,\n \"focusRingGap\": 2\n },\n \"radio\": {\n \"size\": 20,\n \"ringColor\": \"outline\",\n \"fillColor\": \"surface\",\n \"transitionSpeed\": 0.3\n },\n \"dialog\": {\n \"borderRadius\": \"lg\",\n \"color\": \"primary-surface\",\n \"border\": \"quaternary\",\n \"padding\": \"sm\",\n \"elevation\": \"dialog\",\n \"backdrop\": \"{\\\"background\\\":\\\"rgba(255, 255, 255, 0.6)\\\",\\\"backdropFilter\\\":\\\"blur(2px)\\\"}\"\n },\n \"dialogButtons\": {\n \"gap\": \"md\",\n \"padding\": \"md\",\n \"paddingBottom\": \"lg\",\n \"justifyContent\": \"center\",\n \"confirmButtonVariant\": \"primary\",\n \"cancelButtonVariant\": \"warn\",\n \"buttonSize\": \"lg\",\n \"stretch\": false,\n \"reverseOrder\": false\n },\n \"dialogHeader\": {\n \"borderRadius\": \"max\",\n \"color\": \"primary\",\n \"height\": 48,\n \"textRole\": \"title-large\",\n \"textAlign\": \"center\",\n \"closeButtonIcon\": \"close\",\n \"closeButtonSize\": \"md\"\n },\n \"dropdown\": {\n \"border\": \"none\",\n \"borderRadius\": \"xxs\",\n \"color\": \"primary-surface\",\n \"shadow\": \"menu\"\n },\n \"menu\": {\n \"minWidth\": 184,\n \"paddingVertical\": \"xs\",\n \"paddingHorizontal\": \"none\",\n \"dividerBorder\": \"light\",\n \"dividerSpacing\": \"xs\"\n },\n \"menuItem\": {\n \"height\": 38,\n \"paddingHorizontal\": \"md\",\n \"gap\": \"md\",\n \"borderRadius\": \"none\",\n \"typeface\": \"label\",\n \"hoverColor\": \"primary-container\",\n \"activeSymbol\": \"check\",\n \"transitionSpeed\": 0.35\n },\n \"expand\": {\n \"transitionSpeed\": 0.35\n },\n \"footer\": {\n \"height\": 52,\n \"color\": \"primary\",\n \"logoHeight\": 18.6,\n \"logoPadding\": \"md\"\n },\n \"input\": {\n \"typeface\": \"input\",\n \"color\": \"primary-surface\",\n \"textColor\": \"on-primary-surface\",\n \"disabledColor\": \"disabled-surface\",\n \"disabledTextColor\": \"on-disabled-surface\",\n \"border\": \"light\",\n \"borderRadius\": \"xs\",\n \"errorShadow\": \"warn\",\n \"errorBorder\": \"warn\",\n \"height\": 32,\n \"paddingLeft\": \"sm\",\n \"focusOutline\": \"2px solid #6A6F8F\",\n \"focusOutlineOffset\": 2\n },\n \"textarea\": {\n \"rows\": 3,\n \"resize\": \"vertical\"\n },\n \"tabs\": {\n \"typeface\": \"title-small\",\n \"textColor\": \"on-surface-variant\",\n \"activeTextColor\": \"primary\",\n \"indicatorColor\": \"primary\",\n \"indicatorThickness\": \"standard\",\n \"divider\": \"light\",\n \"gap\": \"sm\",\n \"borderRadius\": \"none\",\n \"padding\": \"md\"\n },\n \"multiSelectDropdown\": {\n \"textRole\": \"input\",\n \"textColor\": \"on-primary-surface\",\n \"dividerBorder\": \"light\",\n \"searchInputBorder\": \"light\",\n \"searchInputBorderRadius\": \"xxs\",\n \"focusOutline\": \"2px solid #6A6F8F\",\n \"focusOutlineOffset\": 2\n },\n \"badge\": {\n \"borderRadius\": \"xxs\"\n },\n \"tag\": {\n \"borderRadius\": \"max\",\n \"typeface\": \"tag\",\n \"gap\": \"xs\",\n \"removeIcon\": \"close\",\n \"selectedIcon\": \"check\"\n },\n \"tagInput\": {\n \"chipGap\": \"xs\",\n \"chipSize\": \"md\",\n \"minInputWidth\": \"12ch\",\n \"listColor\": \"primary-surface\",\n \"listShadow\": \"menu\",\n \"listBorderRadius\": \"xs\",\n \"maxSuggestions\": 8\n },\n \"calendar\": {\n \"dayBorderRadius\": \"max\",\n \"typeface\": \"label\",\n \"gap\": \"xxs\",\n \"navPrevSymbol\": \"chevron_left\",\n \"navNextSymbol\": \"chevron_right\",\n \"weekdayFormat\": \"short\",\n \"showOutsideDays\": false,\n \"todayStyle\": \"outline\"\n },\n \"dateInput\": {\n \"toggleSymbol\": \"calendar_month\",\n \"popupShadow\": \"menu\",\n \"popupBorderRadius\": \"xs\",\n \"popupColor\": \"primary-surface\"\n },\n \"timeInput\": {\n \"toggleSymbol\": \"schedule\",\n \"listColor\": \"primary-surface\",\n \"listShadow\": \"menu\",\n \"listBorderRadius\": \"xs\",\n \"maxVisibleOptions\": 7\n },\n \"dateTimeInput\": {\n \"partGap\": \"sm\",\n \"dividerColor\": \"outline\"\n },\n \"button\": {\n \"borderRadius\": \"max\",\n \"typeface\": \"button\"\n },\n \"iconButton\": {\n \"borderRadius\": \"max\"\n },\n \"card\": {\n \"borderRadius\": \"xs\"\n },\n \"dataSearch\": {\n \"border\": \"light\",\n \"borderRadius\": \"xs\",\n \"color\": \"primary-surface\",\n \"placeholderColor\": \"disabled\"\n },\n \"dataTable\": {\n \"color\": \"primary-surface\",\n \"border\": \"light\",\n \"borderRadius\": \"sm\",\n \"headerPadding\": \"sm\",\n \"footerPadding\": \"sm\",\n \"thTextRole\": \"headline-small\",\n \"thColor\": \"primary-container\",\n \"thVerticalBorder\": \"dotted\",\n \"thHorizontalBorder\": \"light\",\n \"thPadding\": \"sm\",\n \"tdTextRole\": \"title-small\",\n \"tdColor\": \"primary-surface\",\n \"tdStickyColor\": \"primary-container\",\n \"tdPadding\": \"sm\",\n \"tdVerticalBorder\": \"dotted\",\n \"tdHorizontalBorder\": \"light\",\n \"rowHoverColor\": \"primary-container\",\n \"loadingOverlayColor\": \"scrim\",\n \"loadingSpinnerColor\": \"primary\",\n \"loadingSpinnerSize\": 40\n },\n \"notificationBadge\": {\n \"borderRadius\": \"sm\",\n \"offset\": -10\n },\n \"paginator\": {\n \"gap\": \"xs\",\n \"textRole\": \"label\",\n \"inputBorder\": \"light\",\n \"inputBorderRadius\": \"xs\",\n \"pageBorderRadius\": \"xs\",\n \"currentPageBorder\": \"light\",\n \"currentPageBorderRadius\": \"xs\"\n },\n \"stat\": {\n \"labelTypeface\": \"label\",\n \"valueTypeface\": \"stat\",\n \"color\": \"surface\",\n \"border\": \"light\",\n \"borderRadius\": \"xs\",\n \"positiveColor\": \"success\",\n \"negativeColor\": \"error\",\n \"trendColor\": \"outline\",\n \"trendAccent\": \"primary\",\n \"padding\": \"md\",\n \"gap\": \"xxs\"\n },\n \"slider\": {\n \"color\": \"primary\",\n \"trackColor\": \"surface-variant\",\n \"borderRadius\": \"max\",\n \"trackHeight\": 4,\n \"thumbSize\": 16\n },\n \"skeleton\": {\n \"color\": \"surface-variant\",\n \"highlightColor\": \"surface\",\n \"borderRadius\": \"xs\",\n \"animation\": \"shimmer\",\n \"duration\": 1.4,\n \"gap\": \"sm\"\n },\n \"snackbar\": {\n \"bottomPosition\": 40,\n \"transitionDelay\": \"0.35s\",\n \"autoCloseDelay\": 35000\n },\n \"symbol\": {\n \"fill\": 0,\n \"weight\": 400,\n \"grade\": 0,\n \"opticalSize\": 24\n },\n \"toggle\": {\n \"size\": 20,\n \"trackColor\": \"surface-variant\",\n \"knobColor\": \"surface\"\n },\n \"tooltip\": {\n \"borderRadius\": \"xs\",\n \"shadow\": \"raised\",\n \"color\": \"inverse-surface\",\n \"typeface\": \"label\"\n }\n },\n \"usage\": \"Apply style overrides through the Emotion theme provider (the `UniTheme` object), and pass component options as component inputs/props. Import the theme from `@uni-design-system/uni-core` (`LightTheme`).\"\n },\n {\n \"id\": \"DarkTheme\",\n \"name\": \"Dark Theme\",\n \"description\": \"The Dark Theme theme for the Uni Design System.\",\n \"styleOverrides\": {\n \"color.primary\": \"#AFB5D8\",\n \"color.on-primary\": \"#11132C\",\n \"color.primary-container\": \"#4A4C57\",\n \"color.on-primary-container\": \"#F9FAFF\",\n \"color.on-primary-container-variant\": \"#BCBECB\",\n \"color.on-primary-container-border\": \"#AFB5D8\",\n \"color.primary-surface\": \"#22242A\",\n \"color.on-primary-surface\": \"#F9FAFF\",\n \"color.on-primary-surface-variant\": \"#AFB5D8\",\n \"color.secondary\": \"#D5ADA1\",\n \"color.on-secondary\": \"#280C05\",\n \"color.secondary-container\": \"#564A46\",\n \"color.on-secondary-container\": \"#FFF8F7\",\n \"color.on-secondary-container-variant\": \"#CABCB7\",\n \"color.on-secondary-container-border\": \"#D5ADA1\",\n \"color.secondary-surface\": \"#292220\",\n \"color.on-secondary-surface\": \"#FFF8F7\",\n \"color.on-secondary-surface-variant\": \"#D5ADA1\",\n \"color.tertiary\": \"#9EC2AB\",\n \"color.on-tertiary\": \"#001C0D\",\n \"color.tertiary-container\": \"#465049\",\n \"color.on-tertiary-container\": \"#F0FFF5\",\n \"color.on-tertiary-container-variant\": \"#B7C3BB\",\n \"color.on-tertiary-container-border\": \"#9EC2AB\",\n \"color.tertiary-surface\": \"#1F2622\",\n \"color.on-tertiary-surface\": \"#F4FDF7\",\n \"color.on-tertiary-surface-variant\": \"#9EC2AB\",\n \"color.quaternary\": \"#A2A4AC\",\n \"color.on-quaternary\": \"#15161C\",\n \"color.quaternary-surface\": \"#22242A\",\n \"color.on-quaternary-surface\": \"#F9FAFF\",\n \"color.on-quaternary-surface-variant\": \"#AFB5D8\",\n \"color.on-quaternary-container-variant\": \"#AEB0BD\",\n \"color.on-quaternary-container-border\": \"#A2A4AC\",\n \"color.error\": \"#FF968A\",\n \"color.on-error\": \"#290B09\",\n \"color.error-container\": \"#69413C\",\n \"color.on-error-container\": \"#FFF8F7\",\n \"color.warn\": \"#FF9B51\",\n \"color.on-warn\": \"#270E00\",\n \"color.warn-container\": \"#66442E\",\n \"color.on-warn-container\": \"#FFF9F5\",\n \"color.on-warn-container-variant\": \"#DFB69B\",\n \"color.on-warn-container-border\": \"#FF9B51\",\n \"color.success\": \"#59D483\",\n \"color.on-success\": \"#011C0A\",\n \"color.success-container\": \"#34563D\",\n \"color.on-success-container\": \"#F1FEF4\",\n \"color.on-success-container-variant\": \"#A3CBAD\",\n \"color.on-success-container-border\": \"#59D483\",\n \"color.background\": \"#101117\",\n \"color.on-background\": \"#E5E7F0\",\n \"color.on-background-variant\": \"#AFB0B9\",\n \"color.surface\": \"#17181E\",\n \"color.on-surface\": \"#E5E7F0\",\n \"color.surface-variant\": \"#313239\",\n \"color.on-surface-variant\": \"#AFB0B9\",\n \"color.inverse-surface\": \"#E5E7F0\",\n \"color.on-inverse-surface\": \"#202127\",\n \"color.on-inverse-surface-primary\": \"#5F6483\",\n \"color.on-inverse-surface-variant\": \"#5F6483\",\n \"color.inverse-container\": \"#E5E7F0\",\n \"color.on-inverse-container\": \"#202127\",\n \"color.outline\": \"#90929A\",\n \"color.shadow\": \"#000000\",\n \"color.scrim\": \"#000000\",\n \"color.surface-tint\": \"#AFB5D8\",\n \"color.transparent\": \"rgba(0,0,0,0)\",\n \"color.ghost\": \"rgba(0,0,0,0)\",\n \"color.disabled\": \"rgba(255,255,255,0.12)\",\n \"color.on-disabled\": \"rgba(255,255,255,0.38)\",\n \"color.disabled-container\": \"#2C2D34\",\n \"color.on-disabled-container\": \"rgba(255,255,255,0.38)\",\n \"color.disabled-surface\": \"rgba(255,255,255,0.12)\",\n \"color.on-disabled-surface\": \"rgba(255,255,255,0.5)\",\n \"color.on-disabled-surface-variant\": \"rgba(255,255,255,0.4)\",\n \"radius.none\": \"none\",\n \"radius.xxs\": \"4px\",\n \"radius.xs\": \"8px\",\n \"radius.sm\": \"16px\",\n \"radius.md\": \"24px\",\n \"radius.lg\": \"32px\",\n \"radius.max\": \"999px\",\n \"spacing.none\": 0,\n \"spacing.xxs\": \"2px\",\n \"spacing.xs\": \"4px\",\n \"spacing.sm\": \"8px\",\n \"spacing.md\": \"16px\",\n \"spacing.lg\": \"32px\",\n \"spacing.xl\": \"64px\",\n \"border.primary\": \"1px solid #AFB5D8\",\n \"border.secondary\": \"1px solid #D5ADA1\",\n \"border.tertiary\": \"1px solid #9EC2AB\",\n \"border.quaternary\": \"1px solid #A2A4AC\",\n \"border.warn\": \"1px solid #FF9B51\",\n \"border.success\": \"1px solid #59D483\",\n \"border.light\": \"1px solid #90929A\",\n \"border.dark\": \"1px solid #E5E7F0\",\n \"border.dotted\": \"1px dotted #E5E7F0\",\n \"shadow.raised\": \"none\",\n \"shadow.menu\": \"0px 4px 12px rgba(0, 0, 0, 0.45)\",\n \"shadow.dialog\": \"0px 8px 28px rgba(0, 0, 0, 0.55)\",\n \"shadow.warn\": \"0 0 5px rgba(255, 150, 138, 0.55), inset 0 0 5px rgba(255, 150, 138, 0.35)\",\n \"thickness.thin\": 1,\n \"thickness.standard\": 2,\n \"thickness.thick\": 4,\n \"typography.display-large\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":57,\\\"lineHeight\\\":64,\\\"fontWeight\\\":\\\"normal\\\",\\\"letterSpacing\\\":-0.25}\",\n \"typography.display-medium\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":45,\\\"lineHeight\\\":52,\\\"fontWeight\\\":\\\"normal\\\"}\",\n \"typography.display-small\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":36,\\\"lineHeight\\\":44,\\\"fontWeight\\\":\\\"normal\\\"}\",\n \"typography.headline-large\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":32,\\\"lineHeight\\\":40,\\\"fontWeight\\\":\\\"normal\\\"}\",\n \"typography.headline-medium\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":28,\\\"lineHeight\\\":36,\\\"fontWeight\\\":\\\"normal\\\"}\",\n \"typography.headline-small\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":24,\\\"lineHeight\\\":32,\\\"fontWeight\\\":\\\"normal\\\"}\",\n \"typography.title-large\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":22,\\\"lineHeight\\\":28,\\\"fontWeight\\\":\\\"normal\\\"}\",\n \"typography.title-medium\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":16,\\\"lineHeight\\\":24,\\\"fontWeight\\\":\\\"medium\\\",\\\"letterSpacing\\\":0.15}\",\n \"typography.title-small\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontWeight\\\":\\\"medium\\\",\\\"fontSize\\\":14,\\\"lineHeight\\\":20,\\\"letterSpacing\\\":0.1}\",\n \"typography.body-1-long\": \"{\\\"fontFamily\\\":\\\"Roboto\\\",\\\"fontSize\\\":16,\\\"lineHeight\\\":22}\",\n \"typography.body-1-short\": \"{\\\"fontFamily\\\":\\\"Roboto\\\",\\\"fontSize\\\":16,\\\"lineHeight\\\":24}\",\n \"typography.body-2-long\": \"{\\\"fontFamily\\\":\\\"Roboto\\\",\\\"fontSize\\\":14,\\\"lineHeight\\\":18}\",\n \"typography.body-2-short\": \"{\\\"fontFamily\\\":\\\"Roboto\\\",\\\"fontSize\\\":14,\\\"lineHeight\\\":20}\",\n \"typography.subtitle-1\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":16,\\\"lineHeight\\\":24,\\\"letterSpacing\\\":0.15}\",\n \"typography.subtitle-2\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":14,\\\"lineHeight\\\":20,\\\"fontWeight\\\":\\\"medium\\\",\\\"letterSpacing\\\":0.1}\",\n \"typography.label\": \"{\\\"fontFamily\\\":\\\"Roboto\\\",\\\"fontSize\\\":14,\\\"lineHeight\\\":20}\",\n \"typography.button\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":14,\\\"lineHeight\\\":20,\\\"fontWeight\\\":\\\"medium\\\",\\\"textTransform\\\":\\\"capitalize\\\"}\",\n \"typography.caption\": \"{\\\"fontFamily\\\":\\\"Roboto\\\",\\\"fontSize\\\":12,\\\"lineHeight\\\":18,\\\"letterSpacing\\\":0.4}\",\n \"typography.overline\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":10,\\\"lineHeight\\\":18,\\\"letterSpacing\\\":1.5,\\\"textTransform\\\":\\\"uppercase\\\"}\",\n \"typography.paragraph\": \"{\\\"fontFamily\\\":\\\"Roboto\\\",\\\"fontSize\\\":16,\\\"lineHeight\\\":24}\",\n \"typography.quote\": \"{\\\"fontFamily\\\":\\\"Roboto\\\",\\\"fontSize\\\":16,\\\"lineHeight\\\":24}\",\n \"typography.note\": \"{\\\"fontFamily\\\":\\\"Roboto\\\",\\\"fontSize\\\":14,\\\"lineHeight\\\":22,\\\"fontStyle\\\":\\\"italic\\\"}\",\n \"typography.badge\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":16,\\\"lineHeight\\\":24}\",\n \"typography.stat\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":32,\\\"lineHeight\\\":38,\\\"fontWeight\\\":600,\\\"letterSpacing\\\":-0.32}\",\n \"typography.tag\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":15,\\\"lineHeight\\\":20,\\\"fontWeight\\\":600}\",\n \"typography.input\": \"{\\\"fontFamily\\\":\\\"Red Hat Display\\\",\\\"fontSize\\\":14,\\\"lineHeight\\\":24}\"\n },\n \"componentOptions\": {\n \"alert\": {\n \"topPosition\": 40,\n \"borderRadius\": \"sm\",\n \"transitionSpeed\": 0.35,\n \"elevation\": \"md\"\n },\n \"breadcrumb\": {\n \"typeface\": \"label\",\n \"color\": \"on-background-variant\",\n \"currentColor\": \"on-background\",\n \"separatorSymbol\": \"chevron_right\",\n \"gap\": \"xs\"\n },\n \"appBar\": {\n \"color\": \"surface\",\n \"height\": 56,\n \"divider\": \"light\",\n \"typeface\": \"title-large\",\n \"padding\": \"md\",\n \"gap\": \"md\"\n },\n \"drawer\": {\n \"color\": \"surface\",\n \"width\": 280,\n \"divider\": \"light\",\n \"elevation\": \"menu\",\n \"padding\": \"md\",\n \"backdrop\": \"{\\\"background\\\":\\\"rgba(0, 0, 0, 0.4)\\\"}\"\n },\n \"avatar\": {\n \"borderRadius\": \"max\",\n \"typeface\": \"subtitle-2\",\n \"fallbackSymbol\": \"person\"\n },\n \"avatarGroup\": {\n \"overlap\": \"sm\",\n \"ringColor\": \"surface\",\n \"ringWidth\": 2\n },\n \"searchInput\": {\n \"searchSymbol\": \"search\",\n \"clearSymbol\": \"close\",\n \"listColor\": \"primary-surface\",\n \"listShadow\": \"menu\",\n \"listBorderRadius\": \"xs\",\n \"maxSuggestions\": 8\n },\n \"checkbox\": {\n \"size\": 20,\n \"boxColor\": \"surface\",\n \"borderRadius\": 2,\n \"focusRingGap\": 2\n },\n \"radio\": {\n \"size\": 20,\n \"ringColor\": \"outline\",\n \"fillColor\": \"surface\",\n \"transitionSpeed\": 0.3\n },\n \"dialog\": {\n \"borderRadius\": \"lg\",\n \"color\": \"primary-surface\",\n \"border\": \"quaternary\",\n \"padding\": \"sm\",\n \"elevation\": \"dialog\",\n \"backdrop\": \"{\\\"background\\\":\\\"rgba(255, 255, 255, 0.6)\\\",\\\"backdropFilter\\\":\\\"blur(2px)\\\"}\"\n },\n \"dialogButtons\": {\n \"gap\": \"md\",\n \"padding\": \"md\",\n \"paddingBottom\": \"lg\",\n \"justifyContent\": \"center\",\n \"confirmButtonVariant\": \"primary\",\n \"cancelButtonVariant\": \"warn\",\n \"buttonSize\": \"lg\",\n \"stretch\": false,\n \"reverseOrder\": false\n },\n \"dialogHeader\": {\n \"borderRadius\": \"max\",\n \"color\": \"primary\",\n \"height\": 48,\n \"textRole\": \"title-large\",\n \"textAlign\": \"center\",\n \"closeButtonIcon\": \"close\",\n \"closeButtonSize\": \"md\"\n },\n \"dropdown\": {\n \"border\": \"none\",\n \"borderRadius\": \"xxs\",\n \"color\": \"primary-surface\",\n \"shadow\": \"menu\"\n },\n \"menu\": {\n \"minWidth\": 184,\n \"paddingVertical\": \"xs\",\n \"paddingHorizontal\": \"none\",\n \"dividerBorder\": \"light\",\n \"dividerSpacing\": \"xs\"\n },\n \"menuItem\": {\n \"height\": 38,\n \"paddingHorizontal\": \"md\",\n \"gap\": \"md\",\n \"borderRadius\": \"none\",\n \"typeface\": \"label\",\n \"hoverColor\": \"primary-container\",\n \"activeSymbol\": \"check\",\n \"transitionSpeed\": 0.35\n },\n \"expand\": {\n \"transitionSpeed\": 0.35\n },\n \"footer\": {\n \"height\": 52,\n \"color\": \"primary\",\n \"logoHeight\": 18.6,\n \"logoPadding\": \"md\"\n },\n \"input\": {\n \"typeface\": \"input\",\n \"color\": \"primary-surface\",\n \"textColor\": \"on-primary-surface\",\n \"disabledColor\": \"disabled-surface\",\n \"disabledTextColor\": \"on-disabled-surface\",\n \"border\": \"light\",\n \"borderRadius\": \"xs\",\n \"errorShadow\": \"warn\",\n \"errorBorder\": \"warn\",\n \"height\": 32,\n \"paddingLeft\": \"sm\",\n \"focusOutline\": \"2px solid #AFB5D8\",\n \"focusOutlineOffset\": 2\n },\n \"textarea\": {\n \"rows\": 3,\n \"resize\": \"vertical\"\n },\n \"tabs\": {\n \"typeface\": \"title-small\",\n \"textColor\": \"on-surface-variant\",\n \"activeTextColor\": \"primary\",\n \"indicatorColor\": \"primary\",\n \"indicatorThickness\": \"standard\",\n \"divider\": \"light\",\n \"gap\": \"sm\",\n \"borderRadius\": \"none\",\n \"padding\": \"md\"\n },\n \"multiSelectDropdown\": {\n \"textRole\": \"input\",\n \"textColor\": \"on-primary-surface\",\n \"dividerBorder\": \"light\",\n \"searchInputBorder\": \"light\",\n \"searchInputBorderRadius\": \"xxs\",\n \"focusOutline\": \"2px solid #AFB5D8\",\n \"focusOutlineOffset\": 2\n },\n \"badge\": {\n \"borderRadius\": \"xxs\"\n },\n \"tag\": {\n \"borderRadius\": \"max\",\n \"typeface\": \"tag\",\n \"gap\": \"xs\",\n \"removeIcon\": \"close\",\n \"selectedIcon\": \"check\"\n },\n \"tagInput\": {\n \"chipGap\": \"xs\",\n \"chipSize\": \"md\",\n \"minInputWidth\": \"12ch\",\n \"listColor\": \"primary-surface\",\n \"listShadow\": \"menu\",\n \"listBorderRadius\": \"xs\",\n \"maxSuggestions\": 8\n },\n \"calendar\": {\n \"dayBorderRadius\": \"max\",\n \"typeface\": \"label\",\n \"gap\": \"xxs\",\n \"navPrevSymbol\": \"chevron_left\",\n \"navNextSymbol\": \"chevron_right\",\n \"weekdayFormat\": \"short\",\n \"showOutsideDays\": false,\n \"todayStyle\": \"outline\"\n },\n \"dateInput\": {\n \"toggleSymbol\": \"calendar_month\",\n \"popupShadow\": \"menu\",\n \"popupBorderRadius\": \"xs\",\n \"popupColor\": \"primary-surface\"\n },\n \"timeInput\": {\n \"toggleSymbol\": \"schedule\",\n \"listColor\": \"primary-surface\",\n \"listShadow\": \"menu\",\n \"listBorderRadius\": \"xs\",\n \"maxVisibleOptions\": 7\n },\n \"dateTimeInput\": {\n \"partGap\": \"sm\",\n \"dividerColor\": \"outline\"\n },\n \"button\": {\n \"borderRadius\": \"max\",\n \"typeface\": \"button\"\n },\n \"iconButton\": {\n \"borderRadius\": \"max\"\n },\n \"card\": {\n \"borderRadius\": \"xs\"\n },\n \"dataSearch\": {\n \"border\": \"light\",\n \"borderRadius\": \"xs\",\n \"color\": \"primary-surface\",\n \"placeholderColor\": \"disabled\"\n },\n \"dataTable\": {\n \"color\": \"primary-surface\",\n \"border\": \"light\",\n \"borderRadius\": \"sm\",\n \"headerPadding\": \"sm\",\n \"footerPadding\": \"sm\",\n \"thTextRole\": \"headline-small\",\n \"thColor\": \"primary-container\",\n \"thVerticalBorder\": \"dotted\",\n \"thHorizontalBorder\": \"light\",\n \"thPadding\": \"sm\",\n \"tdTextRole\": \"title-small\",\n \"tdColor\": \"primary-surface\",\n \"tdStickyColor\": \"primary-container\",\n \"tdPadding\": \"sm\",\n \"tdVerticalBorder\": \"dotted\",\n \"tdHorizontalBorder\": \"light\",\n \"rowHoverColor\": \"primary-container\",\n \"loadingOverlayColor\": \"scrim\",\n \"loadingSpinnerColor\": \"primary\",\n \"loadingSpinnerSize\": 40\n },\n \"notificationBadge\": {\n \"borderRadius\": \"sm\",\n \"offset\": -10\n },\n \"paginator\": {\n \"gap\": \"xs\",\n \"textRole\": \"label\",\n \"inputBorder\": \"light\",\n \"inputBorderRadius\": \"xs\",\n \"pageBorderRadius\": \"xs\",\n \"currentPageBorder\": \"light\",\n \"currentPageBorderRadius\": \"xs\"\n },\n \"stat\": {\n \"labelTypeface\": \"label\",\n \"valueTypeface\": \"stat\",\n \"color\": \"surface\",\n \"border\": \"light\",\n \"borderRadius\": \"xs\",\n \"positiveColor\": \"success\",\n \"negativeColor\": \"error\",\n \"trendColor\": \"outline\",\n \"trendAccent\": \"primary\",\n \"padding\": \"md\",\n \"gap\": \"xxs\"\n },\n \"slider\": {\n \"color\": \"primary\",\n \"trackColor\": \"surface-variant\",\n \"borderRadius\": \"max\",\n \"trackHeight\": 4,\n \"thumbSize\": 16\n },\n \"skeleton\": {\n \"color\": \"surface-variant\",\n \"highlightColor\": \"surface\",\n \"borderRadius\": \"xs\",\n \"animation\": \"shimmer\",\n \"duration\": 1.4,\n \"gap\": \"sm\"\n },\n \"snackbar\": {\n \"bottomPosition\": 40,\n \"transitionDelay\": \"0.35s\",\n \"autoCloseDelay\": 35000\n },\n \"symbol\": {\n \"fill\": 0,\n \"weight\": 400,\n \"grade\": 0,\n \"opticalSize\": 24\n },\n \"toggle\": {\n \"size\": 20,\n \"trackColor\": \"surface-variant\",\n \"knobColor\": \"surface\"\n },\n \"tooltip\": {\n \"borderRadius\": \"xs\",\n \"shadow\": \"raised\",\n \"color\": \"inverse-surface\",\n \"typeface\": \"label\"\n }\n },\n \"usage\": \"Apply style overrides through the Emotion theme provider (the `UniTheme` object), and pass component options as component inputs/props. Import the theme from `@uni-design-system/uni-core` (`DarkTheme`).\"\n }\n ],\n \"changelogs\": [\n {\n \"package\": \"@uni-design-system/uni-angular\",\n \"releases\": [\n {\n \"version\": \"8.2.0\",\n \"entries\": [\n {\n \"bump\": \"minor\",\n \"title\": \"Input options: `typeFace` → `typeface`, matching the tooltip/button/tabs casing. The base theme now writes `typeface`, and the input box reads the new key with the old one as a deprecated fallback, so themes that still set `typeFace` render unchanged. The `typeFace` key is deprecated and will be removed in the next major.\",\n \"body\": \"\",\n \"commit\": \"57a8c4c\"\n },\n {\n \"bump\": \"minor\",\n \"title\": \"`uni-select`: `compareWith` input for object values.\",\n \"body\": \"The select matched `value` against option values with `===`, so an object value that was structurally but not referentially equal — a saved record matched against options from a fresh fetch — never matched, and the native select silently rendered the first option (or the placeholder) instead of the preselection. The new `compareWith` input, called as `compareWith(optionValue, value)` and defaulting to reference equality, lets object-valued selects pass a key comparison like `(a, b) => a?.id === b?.id`. Primitive values were and remain unaffected.\",\n \"commit\": \"96113ee\"\n },\n {\n \"bump\": \"patch\",\n \"title\": \"`uni-notification-badge`: a theme that omits the `offset` option no longer breaks badge positioning — the position values serialized as the invalid length `'undefinedpx'` and the badge lost its corner placement. Missing `offset` now falls back to `0`.\",\n \"body\": \"\",\n \"commit\": \"57a8c4c\"\n },\n {\n \"bump\": \"patch\",\n \"title\": \"`uni-calendar` / `uni-date-input`: a bound `''` now counts as \\\"no value\\\".\",\n \"body\": \"An empty string — the only typeable empty for a string-typed model, and the natural \\\"no value yet\\\" in consumer code — slipped past the month path's nullish (`??`) guards into the grid math: `viewMonth` became `''`, the month heading threw `RangeError: Invalid time value` from `Intl.format` on every change-detection pass, and the grid rendered zero weeks. This hit on first render (the popup content projects eagerly), not just on open. The guards are now falsy, matching how `displayText`, `splitDateTime`, and the rest of the datetime path already treat `''`, so a calendar or date-input bound to `''` renders the current month exactly like `undefined`. `uni-time-input` and `uni-date-time-input` were already safe. Consumers no longer need to normalize `''` to `undefined` before binding — and note the `value` models were always typed `UniDate | undefined`, so no `$any()` cast is needed for a `string | undefined` draft signal.\",\n \"commit\": \"92e5d5e\"\n },\n {\n \"bump\": \"patch\",\n \"title\": \"Ship `CHANGELOG.md` in the published packages. The release notes existed only in the repo; an installed package carried no record of what changed, so upgrade questions couldn't be answered from `node_modules`. uni-angular copies it into the ng-packagr `dist` via `assets`; the rest add it to `files`.\",\n \"body\": \"\",\n \"commit\": \"e706e38\"\n },\n {\n \"bump\": \"patch\",\n \"title\": \"`uni-menu`, `uni-multi-select`, `uni-data-table`: stop tracking loop collections by identity (NG0956).\",\n \"body\": \"`uni-menu` items, `uni-multi-select` options, and `uni-data-table` records tracked by object identity, so a consumer rebuilding the array each change-detection pass — the natural way to write `[menuItems]=\\\"[...]\\\"` or re-fetch table rows — recreated every DOM node and tripped NG0956. They now track by `$index` (none of these collections carries a stable key: menu items may be templates or dividers, option values may be objects, records are arbitrary), and data-table columns track by their unique `columnDef`. Consumers no longer need to memoize a stable array; DOM nodes — including a focused menu item — survive a rebuild.\",\n \"commit\": \"96113ee\"\n }\n ],\n \"dependencyBumps\": []\n },\n {\n \"version\": \"8.1.0\",\n \"entries\": [\n {\n \"bump\": \"minor\",\n \"title\": \"Calendar, date & time entry: `uni-calendar`, `uni-date-input`, `uni-time-input` and `uni-date-time-input`, plus a pure datetime helper layer in the cdk.\",\n \"body\": \"The most-requested form control family anywhere, built native-platform-first with zero runtime dependencies: `Intl` does all formatting and parsing (no date library), the popup rides the native popover top layer with CSS anchor positioning, and every day in the grid is a real `<button>`.\\n- **Values are plain ISO strings, never `Date`s** — `UniDate` (`'YYYY-MM-DD'`), `UniTime` (`'HH:mm'`, always 24-hour), `UniDateTime` (`'YYYY-MM-DDTHH:mm'`), `UniDateRange` (`{ start, end }`). A `Date` is a timestamp with a timezone problem; a calendar date is a label on a wall calendar. Strings are timezone-free, JSON-serializable and sortable with `<`, and `[value]=\\\"'2026-08-20'\\\"` is a complete, correct binding.\\n- **`uni-calendar`** is an inline month grid and a form control in its own right: single and range modes in one component (the value shape switches with `mode`), availability **markers** with screen-reader labels, `minDate`/`maxDate` fences, `disabledDates` as a list or predicate, and a two-way `month` model so an app can drive \\\"jump to June\\\". One tab stop with a roving-tabindex `role=\\\"grid\\\"`; the full APG keyboard map (arrows, week `Home`/`End`, `PageUp`/`PageDown` with `Shift` for years) crosses month edges, skips disabled days directionally, and stops at fences without wrapping. Range selection paints a live preview band, swaps a backwards commit instead of erroring, and narrates every step through a `role=\\\"status\\\"` region.\\n- **`uni-date-input`** is free-typed date entry — no input mask (masks fight paste, IMEs and screen-reader echo). The parser accepts ISO, locale-numeric text with the digit order read from `Intl.DateTimeFormat(locale).formatToParts()`, and the locale's own month names; a missing year resolves to the next occurrence and two-digit years are refused rather than guessed. Unreadable, fenced or unavailable text **stays in the field**, flagged, with a `rejected` event. The popup is the same `uni-calendar`, hosted in a `role=\\\"dialog\\\"` popover via the shared `uni-dropdown`; `↑`/`↓` on a committed value step ±1 day.\\n- **`uni-time-input`** is a combobox over time slots — byte-for-byte the search-input/tag-input listbox contract via the CDK's `ListboxNavigation`. `9` → 09:00, `930` → 09:30, `3p` → 15:00, and a bare `3` leans PM in a 12-hour field (the bias yields when `minTime`/`maxTime` say otherwise). `slots` pins the choices for scheduling, refusing a typed `5pm` as `'unavailable'`; `↑`/`↓` on a committed value step ±`minuteStep`.\\n- **`uni-date-time-input`** seats both parts in one `uni-input-box` chrome under one `role=\\\"group\\\"` label, emitting one combined value only when both parts are set. `slotsFor` is the scheduling flow in one attribute: the time part stays disabled until a day is chosen, then offers exactly that day's slots, and changing the day clears a slot that no longer exists. The parts gained an `embedded` input so the composer renders one shared box instead of nested chrome.\\n- **cdk `datetime` module** (public export): the string-math and `Intl` layer — `addDays`/`addMonths`/`buildMonthGrid`/`parseDateText`/`parseTimeText`/`timeSlots`/`localeWeekStart` and friends — pure functions, unit-tested hard, usable by apps directly.\\n- **uni-core**: `'calendar'`, `'dateInput'`, `'timeInput'`, `'dateTimeInput'` join `ComponentName` with base-theme entries (day geometry per size token, `dayBorderRadius: 'xxs'` for the square look, toggle glyphs, popup/list chrome). Selection, range and today colours are deliberately not options — they are the `primary` role pair, so themes restyle them by restyling the palette.\\n- **Naming note:** the fences are `minDate`/`maxDate`/`minTime`/`maxTime`/`minDateTime`/`maxDateTime` rather than the platform's `min`/`max`, because Signal Forms' `FormUiControl` reserves `min`/`max` as numeric signals on form controls.\",\n \"commit\": \"71bc74c\"\n },\n {\n \"bump\": \"minor\",\n \"title\": \"Themable focus chrome: a shared `focusRing` primitive for every control, plus `focusBorder`/`focusShadow`/`focusColor` options for input boxes.\",\n \"body\": \"**Shared focus ring.** A theme can now restyle the keyboard-focus indicator across the whole library by defining `focusRing` **border** and/or **shadow** primitives: `ThemeService.focusRing()` (and the new selector-less `focusRingStyle()`) replaces its default 2px outline with that border — drawn as an outline hugging the control — plus the ring shadow. A `focusRing` **thickness** primitive sets the ring's outline offset (negative values overlay the control's resting border, reading as a border-color change). Checkbox, radio, toggle and slider now route their hand-rolled focus styles through the shared helper (calendar days and tag chips already did), so one primitive trio gives every control the same focus language. Themes without the primitives render exactly as before.\\n\\n**uni-core:** `Thicknesses` is now an open record like `Borders`/`Shadows` (extra named primitives allowed), and `createTheme` accepts a sparse `thicknesses` override merged over the base scale.\\n\\n**Also in this release:**\\n- Radio and toggle scope their transitions (border/background/transform) instead of `all`, so the focus ring's outline and shadow apply instantly — `transition: all` interpolated the outline from a stale color, flashing a dark ring before the themed ring color landed.\\n- The radio's dot grow/retract animation is a token — `radio.options.transitionSpeed` (seconds, default 0.3 preserving the current feel; 0 switches instantly).\\n- The checkbox focus ring rounds proportionally again (box radius plus its gap) and the gap itself is a new `checkbox.options.focusRingGap` option; a `focusRingStyle` call's explicit gap wins over the theme's `focusRing` thickness, then the branch defaults.\\n\\nThe `input` component options could previously restyle focus only through `focusOutline`/`focusOutlineOffset`. The new optional trio mirrors the error-state trio (`errorBorder`/`errorShadow`/`errorColor`) and applies while any projected control has focus: `focusBorder` swaps the border primitive, `focusShadow` draws a ring (e.g. a soft `0 0 0 3px` spread), and `focusColor` swaps the background. All three default to `undefined`, so existing themes render exactly as before, and they yield to the error state so a flagged field stays visibly flagged while being corrected.\\n\\nThe Wellsourced showcase theme now defines the `focusRing` pair for its app's `.search-input:focus` look — an ochre (`secondary`) 1px border with a 10% ring of the same hue, tinted per palette in light and dark — so text fields (which rest on a canvas tint and snap to the clean surface on focus), checkboxes, radios, toggles, sliders, calendar days and tag chips all share one focus treatment.\",\n \"commit\": \"1a6b382\"\n }\n ],\n \"dependencyBumps\": []\n },\n {\n \"version\": \"8.0.0\",\n \"entries\": [\n {\n \"bump\": \"major\",\n \"title\": \"`uni-tag` v2: themable, opt-in removal, two style axes\",\n \"body\": \"v1 was a single hardcoded look with the palette welded into its template, an\\nunconditional remove button, and no theme entry — a filter chip, a status pill\\nand a recipient token all rendered identically. v2 makes the chip a real themed\\ncomponent and the building block `uni-tag-input` composes.\\n\\n**Breaking (uni-angular)**\\n- **`(close)` is now `(removed)`.** The old name shadowed the native `close`\\n event and needed an eslint suppression to compile.\\n- **The remove button is opt-in** — set `[removable]=\\\"true\\\"`. Previously every\\n tag, including a plain category label, shipped a \\\"Remove …\\\" button into the\\n accessibility tree.\\n- Codemod: rename `(close)` → `(removed)` and add `[removable]=\\\"true\\\"` wherever\\n a `(close)` handler exists.\\n\\n**Fixed**\\n- **A falsy value can now be removed.** `handleClose` guarded with `if (v)`, so\\n a tag keyed `''` or `0` silently could not be dismissed. Every defined value\\n emits, and a tag with no value emits `undefined`.\\n- The remove control now sizes from the chip instead of the icon-button's own\\n `sm` size — it was 22px inside a 24px chip, and taller than an `sm` chip\\n entirely.\\n\\n**New**\\n- **Two orthogonal style axes**: `variant` picks the colour role, `tone` picks\\n the archetype (`soft` / `solid` / `outline`). Both resolve from the new `tag`\\n theme entry, with tones as nested `&.tone-*` selectors inside each variant so\\n a theme author restyles both axes in one place.\\n- **`'tag'` joins core's `ComponentName`**, with a `TagTone` type and a full\\n theme entry (`options` for radius/typeface/gap/symbols, `variants` per colour\\n role, `sizes` carrying geometry only).\\n- **`interactive`** turns the chip body into a `<button>` with `selected` mapped\\n to `aria-pressed`, keeping the remove control a sibling — nesting them would\\n be invalid HTML and would strand the inner control for keyboard users.\\n- **Lead slot**: `avatarSrc`, `avatarName` (initials fallback), `iconName`,\\n `symbolName` and `dot` convenience inputs, plus a `[tag-lead]` slot for\\n anything richer. Lead elements size from the chip height, and all are\\n `aria-hidden` so the chip's text stays its accessible name.\\n- **Glyphs are theme icon primitives, not Material ligatures.** The remove and\\n selected affordances resolve through the new `removeIcon` / `selectedIcon`\\n theme options (defaulting to the built-in `close` and `check`), so they mask\\n `currentColor`, recolour with the chip's tone, and can be swapped per theme.\\n They also contribute no text to the DOM, which a ligature does — one less way\\n for an accessible name to be polluted. `symbolName` remains as the escape\\n hatch for glyphs the theme's icon set doesn't carry.\\n- **`invalid`** sets `aria-invalid` and a dashed underline, so the state does\\n not rely on colour alone (WCAG 1.4.1); `disabled`, `maxWidth` truncation with\\n a `title`, and `removeLabel` for overriding the remove button's name.\\n- The component ships with 21 specs, having previously had none.\",\n \"commit\": \"760b761\"\n },\n {\n \"bump\": \"major\",\n \"title\": \"`ThemeService`: validated writes, runtime theme registration, live options\",\n \"body\": \"The theme registry was bootstrap-frozen and nothing validated theme writes —\\nand a brand theme applied via `applyPalette` never appeared in\\n`uni-theme-switch`, leaving the select on a bogus value with no way back.\\n\\n**Breaking**\\n- `ThemeService.theme` is now a **readonly signal**. Direct `theme.set(...)`\\n calls (already discouraged in the docs) must move to `setTheme(input)`,\\n which validates and returns `ThemeParseResult` — acceptance or the complete\\n list of rejection reasons — leaving the active theme untouched on rejection.\\n- `selectTheme(name)` now returns `boolean` and, for an unknown name, **does\\n nothing** — previously it silently kept the old theme while still recording\\n the bad key in `selectedThemeKey` and localStorage.\\n- `themeOptions` is now a `computed` (was a once-written writable signal).\\n\\n**New**\\n- **`registerTheme(input, { select? })`** validates and adds a theme to the\\n live registry — it appears in `themeOptions`/`uni-theme-switch` immediately.\\n **`unregisterTheme(id)`** removes it, falling back to the first remaining\\n theme when it was active. Themes injected via `UNI_THEMES` are validated at\\n startup; malformed entries are excluded with a console warning listing every\\n reason.\\n- **`applyPalette` registers the generated theme under `CustomTheme`**, so\\n \\\"Your Brand\\\" is an ordinary, selectable option: it shows in the switcher,\\n survives switching away and back, and `clearCustomPalette` unregisters it.\\n- **`uni-select` fix:** a selection pointing at an option added in the same\\n change-detection pass now applies (per-option `[selected]` binding; the\\n select-level `[value]` write landed before new options existed and was\\n ignored by the browser) — any consumer with a growing options list was\\n affected.\",\n \"commit\": \"6a4c7da\"\n },\n {\n \"bump\": \"minor\",\n \"title\": \"`uni-multi-select-dropdown`: a real accessible name, keyboard navigation, debounced filtering — and its first specs\",\n \"body\": \"This was the weakest component in the library on exactly the axes the roadmap's\\ncombobox item names, and it had **no spec file at all**, which is why the\\nmissing accessible name survived since it was written.\\n- **New `label` input, and the trigger finally names the field.** Its\\n accessible name now reads \\\"Fruits, 2 selected, Apple, Cherry\\\". Previously it\\n announced only the current selection — a screen reader user heard\\n \\\"Option 1, Option 3\\\" with no way to tell which field it belonged to. The\\n selection count comes along, so \\\"how many did I pick\\\" is not left to counting\\n commas.\\n- **Arrow keys, Home and End walk the options** from anywhere in the panel,\\n including the filter box. Reaching the last of thirty options previously\\n meant thirty `Tab` presses. Wrapping and the index arithmetic come from the\\n CDK's shared `ListboxNavigation`, so the keys behave exactly as they do in\\n `uni-search-input` and `uni-tag-input`.\\n- **The filter is debounced** (new `debounceTime`, default 200ms) instead of\\n re-filtering on every keystroke — the open item in TODO.md.\\n- **An empty filter result says so** through `role=\\\"status\\\"`, rather than\\n leaving the panel blank.\\n- **The options are grouped** as a `role=\\\"group\\\"` labelled from `label`.\\n- **20 specs**, covering the accessible name, selection and toggling, disabled\\n behaviour, filtering and debounce, keyboard navigation, and the form-control\\n contract.\\n\\n**A deliberate non-change:** the options stay real checkboxes rather than\\nbecoming a multi-selectable `listbox`. APG notes that multi-select listboxes are\\nhandled inconsistently across screen readers and suggests a checkbox group\\ninstead, and real checkboxes keep each option's state announced natively — so\\nconverting would have traded a well-supported pattern for a fashionable one,\\nand duplicated the checkbox's animated visual into this component where it\\nwould drift.\",\n \"commit\": \"970c36d\"\n },\n {\n \"bump\": \"minor\",\n \"title\": \"New `uni-tag-input`, plus a shared listbox contract in the CDK\",\n \"body\": \"The type-to-add chip field — recipients, filters, labels. It is the **open-set**\\ncontrol: anything typed can become a token, whether or not it matches a\\nsuggestion. Closed-set picking stays with `uni-select` /\\n`uni-multi-select-dropdown`, which is the deliberate split — the two look alike\\nbut differ on the one thing that decides the value type, so a single component\\nwould force one of them to carry an API it can never use.\\n- **`FormValueControl<UniTagItem[]>`.** `{ value: 'a@b.com' }` is a complete\\n item; `label`, `avatarSrc`, `invalid` and `disabled` are optional enrichment.\\n- **Invalid entries stay in the value, flagged**, rather than being dropped — a\\n field that silently swallows a typo'd address is worse than one that shows it\\n in red, and Enter on the chip lifts it back into the input to fix. Duplicates\\n and over-`max` entries are refused through `(rejected)` with a reason.\\n- **Full keyboard contract**: separators commit, Tab commits without trapping,\\n Backspace on an empty field _focuses_ the last chip rather than deleting it\\n blind, and on a chip Backspace and Delete both remove but move focus in\\n opposite directions — what makes pruning a list feel right.\\n- **The whole field is one tab stop.** Chips carry `tabindex=\\\"-1\\\"`, so Tab never\\n walks through eight recipients to reach the next control.\\n- **Announces through a `role=\\\"status\\\"` live region** on every add, remove and\\n rejection; the removal route is described once per field rather than by every\\n chip.\\n- **`preset=\\\"email\\\"`** wires an address validator, a paste parser that unwraps\\n `Name <a@b.com>` and keeps an unterminated tail in the field, and Space as a\\n separator.\\n- **`'tagInput'` joins core's `ComponentName`** with a theme entry for the chip\\n field's own tokens. Field chrome is not duplicated — it comes from `input` via\\n `uni-input-box`, so a tag input restyles with every other field.\\n\\n**Also in this release**\\n- **`ListboxNavigation` in the CDK** (`createListboxNavigation`) owns the\\n combobox bookkeeping every type-ahead control needs: open state, active\\n option, wrap-around arithmetic, Home/End, and `aria-activedescendant` wiring\\n that can never point at an option a narrowing filter has removed.\\n `uni-search-input` now uses it — behaviour unchanged, and it gains Home/End\\n for free — and the multi-select combobox upgrade will too. Three hand-rolled\\n copies of one keyboard contract is how they drift.\\n- **`uni-tag` gains `controlTabIndex`**, so a composite that owns its own roving\\n focus can take its chips out of the tab order, and **`selected` is now\\n optional**: an interactive chip carries `aria-pressed` only when it is\\n genuinely a toggle. Announcing \\\"not pressed\\\" on a recipient chip is worse than\\n announcing nothing.\",\n \"commit\": \"de83fe4\"\n },\n {\n \"bump\": \"minor\",\n \"title\": \"Themes registered from JSON get the built-in icons back\",\n \"body\": \"`registerTheme` and `setTheme` now hydrate a theme's icons on the way in: the\\nbuilt-in set is merged _under_ whatever icons the payload carries, so the\\ntheme's own icons still win.\\n\\nThis is what makes a theme fetched as JSON usable. Transports elide `BaseIcons`\\n— roughly 71% of a serialized theme, and bytes the consumer already ships — so\\nwithout hydration a fetched theme would validate cleanly and then render no\\nicons at all. The rule is the same one `createTheme` already applies at\\nconstruction (`{...BaseIcons, ...icons}`), so a theme behaves identically\\nwhether it was built in-process or arrived over the wire.\\n\\nThemes provided through `UNI_THEMES` are unaffected: they already carry the full\\nset, so hydration is a no-op.\",\n \"commit\": \"5414517\"\n },\n {\n \"bump\": \"patch\",\n \"title\": \"Menu items no longer look preselected when opened with the mouse\",\n \"body\": \"Opening a `uni-menu` by click left the first item highlighted before the\\npointer had touched it, reading as a preselected default. Two correct\\nbehaviours combined badly: `onOpened()` implements ARIA roving focus by calling\\n`.focus()` on an item every open, and the item styles deliberately painted\\n`:focus` the same as `:hover`. Nothing was wrong with the focus itself — only\\nwith painting it after a pointer open.\\n- **The highlight now keys on `:focus-visible`.** Programmatic focus following a\\n click doesn't match it, while keyboard-driven focus does — so mouse users get\\n no phantom highlight, and keyboard users keep the focus cursor. Roving-focus\\n bookkeeping is untouched: a mouse open still moves focus to the first item, so\\n screen readers announce it exactly as before.\\n- **New `HOVER_OR_KEYBOARD_FOCUS` constant exported from uni-core**, holding\\n that selector. Emotion merges styles by _exact selector text_, so a component's\\n base rule and any theme variant restyling it have to agree character for\\n character — a variant keyed `'&:hover, &:focus'` would both fail to override\\n and reintroduce the phantom highlight. Naming the selector once removes the\\n trap; the base theme's `menuItem.warn` tone and the Carbon/Wellsourced\\n showcase themes now use it.\\n\\nThemes with their own `menuItem` variants should key the highlight with\\n`HOVER_OR_KEYBOARD_FOCUS`. Note that `:focus-visible` is a browser heuristic:\\nafter a user has been navigating by keyboard, a subsequent click may still show\\nthe highlight, which is the intended \\\"this person is using the keyboard\\\"\\nbehaviour rather than a regression.\",\n \"commit\": \"3279186\"\n }\n ],\n \"dependencyBumps\": [\n \"@uni-design-system/uni-core@8.0.0\"\n ]\n },\n {\n \"version\": \"7.3.0\",\n \"entries\": [\n {\n \"bump\": \"minor\",\n \"title\": \"`expand` gains a themable, size-aware speed\",\n \"body\": \"The reveal/collapse duration was hardcoded at 350ms, so a consumer wanting a\\nsnappier disclosure — or wanting adjacent styling to fade on the same clock —\\nhad nothing to reference. A fixed duration also reads differently at different\\nsizes: sluggish on a two-line region, rushed on a full-page one.\\n- **New `transitionSpeed` option in the `expand` theme options** (seconds,\\n default `0.35`, matching alert/card `transitionSpeed`) sets the base\\n duration. `'expand'` joins core's `ComponentName` union, so custom and\\n derived themes can type an `expand` entry.\\n- **Duration scales with content height.** The actual duration is\\n `transitionSpeed × √(height ÷ 240px)`, clamped to ~0.15–0.6s at the default\\n speed (the envelope scales proportionally with a themed speed), so perceived\\n speed stays steady across region sizes. The curve and its constants\\n (`expandDuration`, `EXPAND_DEFAULT_SPEED`, `EXPAND_MIN_DURATION`,\\n `EXPAND_MAX_DURATION`, `EXPAND_REFERENCE_HEIGHT`) are exported from\\n uni-core.\\n- **New per-instance `transitionSpeed` input** sets an exact duration for one\\n region, bypassing the scaling: `<uni-expand [transitionSpeed]=\\\"0.15\\\">`.\\n- **The resolved duration is exposed as the public `duration` signal** on\\n `uni-expand`, so adjacent styling can move on the reveal's clock with a\\n plain binding — `[style.transition-duration]=\\\"expand.duration() + 's'\\\"` —\\n keeping all timing in the theme/signal pipeline, with no custom CSS.\\n- **`expand-toggle` gains a matching `transitionSpeed` input** and otherwise\\n follows the theme token instead of its own hardcoded 350ms. Expand Area\\n binds the region's resolved `duration` to its toggle, keeping chevron and\\n reveal on one clock even when size-scaled or overridden.\\n- **Speed is theme-reactive**: swapping themes at runtime retimes regions and\\n chevrons live.\\n- **Enter/leave easing is now `ease-in-out`** (was `ease-in`), matching the\\n chevron rotation so trigger and region decelerate together.\\n- **`UniExpandOptions` is exported** from uni-angular for\\n `getComponentOptions<UniExpandOptions>('expand')` consumers.\",\n \"commit\": \"c828982\"\n },\n {\n \"bump\": \"minor\",\n \"title\": \"Menus join the theme model: `menu` + `menuItem` component options, item tones, and dividers\",\n \"body\": \"The menu was the only composite component with no theme surface of its own —\\npanel chrome came from the shared `dropdown` entry and every item-level knob\\n(height 38, `primary-container` hover, `check` active symbol, `label` type\\nrole) was hardcoded. Every Uni menu therefore looked identical, and the gaps a\\nreal product hits first (a red Delete, a separator before it, disabled rows)\\nwere only reachable via `::ng-deep`.\\n- **New `menu` theme options** (`'menu'` joins core's `ComponentName` union):\\n `minWidth`, panel `color`/`border`/`borderRadius`/`shadow` (each falling\\n back to the `dropdown` options when unset, so menus follow generic popovers\\n until a theme deliberately splits them), `paddingVertical`/\\n `paddingHorizontal` (panel inset — `xs` inset plus item `borderRadius`\\n yields the \\\"hover pill\\\" look; `none` yields full-bleed rows), and\\n `dividerBorder`/`dividerSpacing` for separators.\\n- **New `menuItem` theme options + variants** (`'menuItem'` joins\\n `ComponentName`): `height`, `paddingHorizontal`, `gap`, `borderRadius`,\\n `typeface`, `textColor`, `hoverColor`, `activeSymbol` (undefined removes the\\n trailing check), and `transitionSpeed`. Theme `variants` on `menuItem` carry\\n tones — the base theme ships a `warn` tone for destructive actions.\\n- **`MenuItem` grows `variant`, `disabled`, and `{ divider: true }`.**\\n `variant: 'warn'` routes through the theme's `menuItem` variants; `disabled`\\n items render in the disabled color, carry `aria-disabled`, and are skipped\\n by keyboard navigation; dividers render as `role=\\\"separator\\\"` rules styled\\n by the `menu` options. `isDivider` and the `UniMenuOptions`/\\n `UniMenuItemOptions` interfaces are exported from uni-angular.\\n- **`uni-dropdown` panel chrome is now input-overridable**\\n (`border`/`borderRadius`/`shadow`/`color`), falling back to the `dropdown`\\n theme options — this is the mechanism `uni-menu` uses; other consumers are\\n unchanged.\\n- **Default-rendering change:** menus now have `minWidth: 184` from the base\\n theme (previously they sized to the widest item). All other defaults\\n reproduce the previous look, including the 0.35s hover transition.\\n- **The Carbon experiment themes gain menu styling** (sharp full-bleed 40px\\n rows, IBM Plex, `$layer-hover`, red danger option, ~110ms motion) with a new\\n Carbon Menu story demonstrating that the same component renders both\\n aesthetics untouched.\",\n \"commit\": \"6e8b429\"\n },\n {\n \"bump\": \"patch\",\n \"title\": \"Tooltip no longer blinks after activating a wrapped control\",\n \"body\": \"Clicking a button inside `uni-tooltip` used to fall through to the bubble's\\ntap-to-toggle handler and then re-show on the still-hovering pointer — a\\nstate-flipping label (\\\"Expand\\\" → \\\"Collapse\\\") visibly blinked off and back on\\nafter the click.\\n- **Activating an interactive element inside the host now hides the bubble\\n and suppresses it** until the pointer leaves and returns (or focus moves\\n away). Tap-to-toggle is unchanged for non-interactive hosts (inline text).\\n- **`expand-toggle` drops its icon-only tooltip.** The rotating chevron plus\\n `aria-expanded` and the button's accessible name already say everything the\\n bubble restated; use the `label` input when a disclosure needs a visible\\n name.\",\n \"commit\": \"ba4e38d\"\n }\n ],\n \"dependencyBumps\": []\n },\n {\n \"version\": \"7.2.0\",\n \"entries\": [\n {\n \"bump\": \"minor\",\n \"title\": \"Centre `icon-button`'s glyph, fix `expand-toggle`'s rotation, make `expand`\",\n \"body\": \"block-level and motion-safe, and give `expand-toggle` a label\\n\\nGaps found while building collapsible sections in a consuming app, where each\\none had to be worked around locally.\\n- **`icon-button` centres its glyph.** Sizing `iconName` from the size token\\n (shipped in the previous release) made the glyph smaller than the button —\\n an `sm` button is a 22px box around an 18px icon — but the button was\\n `display: block`, so the glyph sat in the top-left corner with all the slack\\n on its right and bottom. It is now a centring flex box; flex is still\\n block-level, so the button's own layout is unchanged, and the\\n absolutely-positioned accessible-name span stays out of the flex flow.\\n **Visual change** for every `icon-button`: glyphs shift to the middle of the\\n box. `symbolName` ligatures centre too, which also means the known\\n oversized-ligature case (a 24px glyph in a 22px `sm` box) now clips evenly on\\n all sides instead of only bottom-right. Covered by a test.\\n- **`expand-toggle` rotates the glyph instead of its host.** This is a fix to\\n existing behaviour, visible in 7.1.0 and earlier: the 180° turn was applied to\\n the component host, which is both the tooltip's positioning box (`uni-tooltip`\\n sets `anchor-name` on its own element, nested inside the host) and taller than\\n the glyph, since an inline-level box reserves baseline descender space. So the\\n bubble bobbed along an arc as the chevron turned, and the chevron itself\\n drifted off-centre rather than spinning in place. The transform now lands on\\n `uni-icon` — a centred square sized to the glyph, and the only box here that\\n rotates symmetrically. The host keeps its `toggled` attribute, so any consumer\\n styling keyed on it still works.\\n- **`uni-expand` is now `display: block`.** As a custom element it defaulted to\\n `display: inline`, so its animated grid laid out as a block-in-inline box and\\n the revealed content's spacing came out subtly wrong. Every consumer was\\n writing `uni-expand { display: block }` by hand. **Visual change** for anyone\\n who was relying on the inline default or already shipping that override — the\\n override is now redundant and can be deleted.\\n- **The reveal respects `prefers-reduced-motion`** (WCAG 2.3.3). The\\n expand/collapse keyframes ran unconditionally; they're now wrapped in\\n `motionSafe`, as is `expand-toggle`'s chevron rotation. Under reduced motion\\n the region appears and disappears instantly. `overflow: hidden` moved inside\\n the guard deliberately: it exists to clip the box mid-animation, and leaving\\n it applied at rest would crop decorations that legitimately paint outside the\\n region (focus rings, offset outlines). Angular removes a leaving node on the\\n next frame when it detects no animation, so nothing hangs.\\n- **`expand-toggle` takes `label` and `sublabel`.** It was chevron-only, so any\\n disclosure that names its section — most of them — had to hand-roll the whole\\n trigger row and its styles, which is how consumers end up with a private\\n copy of this component. With `label` set the toggle renders a full-width row\\n (chevron, label, muted qualifier) as a single button whose accessible name is\\n the label, instead of an icon button sitting next to unrelated text. Only the\\n chevron rotates, so the label stays upright. Omit `label` and the icon-only\\n shape is unchanged, tooltip and all — `uni-expand-area` is unaffected.\",\n \"commit\": \"8d77ed7\"\n },\n {\n \"bump\": \"minor\",\n \"title\": \"Size `icon-button`'s `iconName` glyph from its size token\",\n \"body\": \"`icon-button` rendered a `symbolName` ligature at a font size, but an `iconName`\\nmask with no size at all — and the base `iconButton` size tokens carry no\\npadding, so the icon filled the entire button box edge to edge. That made\\n`symbolName` → `iconName` a visual regression rather than a like-for-like swap,\\nwhich matters now that `uni-icon` is the preferred path (a mask paints on the\\nfirst frame, where a ligature waits on the variable font).\\n- `iconName` is now sized from the size token's `fontSize` — the same value that\\n scales the rest of the control — so the glyph sits inside the button and grows\\n with `size`. Concretely, `size=\\\"sm\\\"` renders an 18px glyph in a 22px button\\n instead of a 22px one.\\n- **Visual change** for existing `iconName` call sites: glyphs get slightly\\n smaller and gain breathing room. Themes that size icon-buttons with padding\\n (e.g. the Carbon example) set a matching `fontSize`, so they land on the same\\n glyph size either way and are unaffected.\\n- Known gap, now covered by a test that documents rather than blesses it:\\n `uni-symbol` takes its size from `opticalSize` (default 24) and ignores the\\n button's size token, so a `sm` button renders a 24px ligature in a 22px box.\\n Masked icons do not have that problem — one more reason to prefer `iconName`.\",\n \"commit\": \"c532c95\"\n },\n {\n \"bump\": \"patch\",\n \"title\": \"Fix `uni-icon` ignoring `size=\\\"24\\\"` written as a static attribute\",\n \"body\": \"`size` appended `px` only to numbers, but a static template attribute arrives as\\na string — so `<uni-icon name=\\\"mail\\\" size=\\\"24\\\" />` emitted the invalid\\n`width: 24`. Browsers drop an invalid declaration, which silently fell back to\\nthe stylesheet's `width: 100%; height: 100%`.\\n\\nThat failed in two different ways depending on the container, neither of them\\nobvious: inside a fixed box the icon quietly filled it (a 16px glyph rendering\\nat 30px), and inside a content-sized flex row `height: 100%` collapsed to zero,\\nso the icon vanished while still occupying full width and pushing its label\\nacross the row.\\n\\nA bare numeric string is now treated as px, matching the number form. Genuine\\nCSS lengths (`'1.25rem'`, `'50%'`, `calc(…)`) still pass through untouched.\\n`[size]=\\\"24\\\"` was unaffected throughout, since property binding passes a real\\nnumber.\",\n \"commit\": \"c532c95\"\n }\n ],\n \"dependencyBumps\": []\n },\n {\n \"version\": \"7.1.0\",\n \"entries\": [\n {\n \"bump\": \"minor\",\n \"title\": \"Expand `BaseIcons` to 59 icons and add `uni-icon` sizing\",\n \"body\": \"The 34-icon set shipped in 7.0.0 covered the library's own components but not a\\nreal application — an app migrating off inline `<svg>` (or off `uni-symbol`, in\\nAngular) ran out of names almost immediately. Everything here is additive; all\\n34 existing names are unchanged.\\n- **25 new icons**, same Material Symbols Outlined 300 source and the same\\n `0 -960 960 960` grid as the rest of the set: navigation (`link`, `expand`,\\n `gridView`, `listView`), actions (`moreHorizontal`, `copy`, `send`,\\n `refresh`, `dragHandle`, `qrCode`), feedback (`star`, `verified`) and\\n user/system (`group`, `shieldPerson`, `clock`, `mail`, `chat`, `image`,\\n `document`, `payment`, `bank`, `trendingUp`, `extension`, `webhook`,\\n `logout`).\\n - `moreHorizontal` ships alongside `more` because that one is `more_vert` and\\n row-aligned menus need the horizontal kebab.\\n - `star` is separate from `favorite`, which is the heart.\\n- **`uni-icon` gains an optional `size` input** (`CssLength` — bare numbers are\\n px, strings pass through, so `20` and `'1.25rem'` both work). Left unset,\\n behaviour is unchanged: the icon fills its container, which is what lets a\\n themed control size its own glyph through padding. Set, it applies\\n width/height as inline styles, so an explicit size wins over the\\n fill-the-container rule regardless of style injection order. This removes the\\n per-call-site `width`/`height` CSS rule that replacing an inline `<svg>` with\\n `<uni-icon>` would otherwise need.\\n- The MCP `create-icon-tokens` tool now lists the built-in icon names above the\\n token map it returns. Apps routinely hand-draw their own `close`, `check` or\\n `plus`; encoding those into theme tokens works but adds redundant artwork on a\\n foreign grid when the theme already ships the glyph. The tool cannot recognise\\n a shape, so it hands the caller the list to check against before adding\\n anything.\",\n \"commit\": \"c2421c0\"\n }\n ],\n \"dependencyBumps\": []\n },\n {\n \"version\": \"7.0.0\",\n \"entries\": [\n {\n \"bump\": \"minor\",\n \"title\": \"Replace `BaseIcons` with a normalized 34-icon Material Symbols set\",\n \"body\": \"The built-in icon set was 11 glyphs drawn from four different grids\\n(`0 0 24 24`, `0 0 50 50`, `0 0 64 64`, `0 -960 960 960`), so `checkCircle` and\\n`xCircle` rendered as solid filled discs next to a hairline `alertCircle` and an\\noversized `close` — three optical weights in one set.\\n- `BaseIcons` is now Material Symbols Outlined at weight 300, every glyph on a\\n single `0 -960 960 960` grid, grouped by intent: navigation (`menu`,\\n `chevronUp/Down/Left/Right`, `arrowLeft/Right`, `home`, `externalLink`),\\n actions (`search`, `close`, `plus`, `minus`, `more`, `delete`, `edit`,\\n `download`, `upload`, `share`, `filter`), feedback (`check`, `checkCircle`,\\n `xCircle`, `alertCircle`, `info`, `warning`, `lock`) and user/system\\n (`profile`, `settings`, `notification`, `favorite`, `help`, `calendar`).\\n- All 11 previously shipped names are preserved, so existing `<uni-icon>` call\\n sites and theme overrides keep working. Their **appearance changes**: the\\n filled `checkCircle`/`xCircle` are now outlined, and the set reads lighter\\n overall. `spinner` is carried over verbatim, keyframes intact.\\n- New `IconName` and `BaseIconName` types. `IconName` is\\n `BaseIconName | (string & {})`, so built-ins autocomplete and typos surface\\n while themes can still register arbitrary names via `createTheme({ icons })`.\\n `uni-icon`'s `name` input is typed with it instead of `keyof Icons`.\\n- **Breaking**: removes the unused `IconToken`, `IconStyle`, `ToggleableIcon`\\n and `IconConfig` exports. Nothing in the library referenced them and\\n `IconToken`'s 60-name union contradicted the actual `BaseIcons` keys. Use\\n `IconName` instead.\\n- New exported `svgToIconUri(svg, options?)` — the supported way to bring your\\n own icons (a brand set, a designer handoff) into a theme. It normalizes the\\n source (drops the xml declaration, comments and fixed `width`/`height` so the\\n mask scales), percent-encodes it, and **rejects artwork that cannot survive\\n masking**: no `viewBox`, an embedded raster `<image>`, an external reference,\\n a gradient/pattern fill, or more than one paint color. That last one is the\\n trap worth naming — masks use the alpha channel, so a multi-color logo\\n flattens to a silhouette in `currentColor`; pass `{ allowMultiColor: true }`\\n when that is intended. `createTheme({ icons })` merges the result over\\n `BaseIcons` per name, so a built-in name reskins and a new name is added.\\n- New MCP tool `create-icon-tokens`, the agent-facing front end to\\n `svgToIconUri`: hand it a project's inline `<svg>` (or a brand set) and it\\n returns a paste-ready `icons` map for `uni-theme.ts`. It encodes via the same\\n helper, so tokens are byte-identical to the built-in set, and adds the\\n set-level checks a per-icon helper cannot make — which names override\\n built-ins, and whether the artwork mixes viewBox grids. Bad artwork is\\n reported per icon rather than failing the batch, and re-running is safe\\n (already-encoded URIs pass through). The server instructions now point agents\\n at it whenever they encounter inline SVG.\\n- `BaseIcons` is generated by `scripts/generate-icons.mjs` (`pnpm icons:generate`),\\n which fetches from the canonical Material Symbols source and validates every\\n glyph before writing — a malformed path, an off-grid viewBox or geometry\\n outside the grid aborts the run. `pnpm icons:check` verifies the committed\\n file without writing. Add or change icons in that script's manifest and\\n regenerate; the file is not hand-edited. `icon.records.spec.ts` asserts the\\n same invariants against the committed output.\",\n \"commit\": \"f7727aa\"\n }\n ],\n \"dependencyBumps\": [\n \"@uni-design-system/uni-core@7.0.0\"\n ]\n },\n {\n \"version\": \"6.1.0\",\n \"entries\": [],\n \"dependencyBumps\": []\n },\n {\n \"version\": \"6.0.1\",\n \"entries\": [\n {\n \"bump\": \"patch\",\n \"title\": \"Canonical MDX docs structure across the entire library\",\n \"body\": \"- Component docs pages now follow one flow (spec in AGENTS.md): imports → Overview →\\n Usage (the compact playground: story + source + knobs) → named variation examples →\\n **Theme options** → Accessibility → Do/Don't. Property/API/Methods/Events tables are\\n retired — the playground's controls are the API reference.\\n- New `ThemeOptions` docs block renders a component's per-theme option tokens live from\\n the active Storybook theme (with color swatches), distinguishing per-theme options\\n from per-instance inputs; data-table's raw `ThemeDataBlock` dump is replaced.\\n- All ~55 component pages conform: the 7 form-control pages (200–390 lines of legacy\\n API tables) rewritten; empty Overviews authored (card, tag, icon-button, scroll-area,\\n expand-area, data-table); accessibility bullets added across navigation, feedback,\\n and form components.\\n- The MCP index now carries when-to-use guidance for 55 of 70 components (was 41) and\\n accessibility guidance for 36 (was 21) — the remainder are subcomponents documented\\n on their parent pages and internal directives.\",\n \"commit\": \"4bfb057\"\n }\n ],\n \"dependencyBumps\": []\n },\n {\n \"version\": \"6.0.0\",\n \"entries\": [\n {\n \"bump\": \"major\",\n \"title\": \"Layout components are attribute-only, on any element\",\n \"body\": \"**Breaking:** the shorthand element selectors `Box`, `Stack`, `Row`, `Grid`, `Wrap`,\\nand `GridArea` are removed — a concept inherited from another library that conflicted\\nwith semantic HTML. Migrate to the attribute form: `<Box padding=\\\"md\\\">` →\\n`<div box-layout padding=\\\"md\\\">` (GridArea → `grid-area-layout`).\\n\\nIn exchange, the attribute selectors now apply to **any element**, not just `div` —\\nlayout and semantics compose: `<main box-layout [grow]=\\\"1\\\" padding=\\\"md\\\">`,\\n`<nav stack-layout gap=\\\"sm\\\">`, `<section stack-layout>`.\\n\\nAlso documented, unchanged in behavior: the sizing convention (number = px via\\nbinding, `[height]=\\\"420\\\"`; plain attribute = CSS length, `height=\\\"420px\\\"`) and\\nStack/Row's `fit-content` min-size defaults (set `[minHeight]=\\\"0\\\"` / `[minWidth]=\\\"0\\\"`\\nfor scroll containment). All internal usages, stories, and docs are migrated —\\nincluding the Divider story's `<Center>`, which had silently never rendered (Center\\nnever had an element selector).\",\n \"commit\": \"a02afee\"\n },\n {\n \"bump\": \"major\",\n \"title\": \"Selector unification: one form per component\",\n \"body\": \"**Breaking:** every PascalCase alias selector is removed (`Card`, `Menu`, `Symbol`,\\n`Icon`, `Dialog`, `Button`, `Tabs`, `Snackbar`, `SelectInput`, `Confirmation`, … — a\\nconcept inherited from another library). Each component now has exactly one canonical\\nform, chosen by what the component is:\\n- **Widgets and content-renderers** keep their `uni-*` element: `<uni-card>`,\\n `<uni-menu>`, `<uni-symbol>`, `<uni-icon>`, `<uni-tabs>`, `<uni-select>`,\\n `<uni-confirmation-dialog>`, …\\n- **Decorators of native elements** are attribute-only, and their `div`-locks are\\n lifted: `[uni-badge]`, `[uni-dialog-header]` (e.g. on `<header>`),\\n `[uni-dialog-buttons]`/`[dialog-buttons]` (e.g. on `<footer>`),\\n `[uni-scroll-area]`/`[scroll-area]`, `[uni-menu-item]`/`[menu-item]` (e.g. on\\n `<li>`).\\n- **Host-locked selectors stay host-locked** where the native element carries the\\n behavior: `dialog[uni-dialog]`, `button[uni-text-button]`/`button[text-button]`,\\n `button[uni-icon-button]`/`button[icon-button]`.\\n\\nMigration is mechanical: `<Card>` → `<uni-card>`, `<Button …>` →\\n`<button text-button …>`, `<Dialog …>` → `<dialog uni-dialog …>`, `<Badge …>` →\\n`<div uni-badge …>`, `<ScrollArea …>` → `<div scroll-area …>`. All internal usages,\\nstories, and docs are migrated; `llms.txt` and the MCP index reflect the canonical\\nforms.\",\n \"commit\": \"f1796fb\"\n },\n {\n \"bump\": \"major\",\n \"title\": \"Text is attribute-only, with a value shorthand and element-aware defaults\",\n \"body\": \"**Breaking:** the `uni-text` and `Text` element selectors are removed. Text is now the\\nattribute `[uni-text]` on any element, keeping your HTML semantics:\\n- **Value shorthand** — the attribute value is the typeface:\\n `<h1 uni-text=\\\"display-small\\\">`, `<span uni-text=\\\"caption\\\">`, dynamic via\\n `[uni-text]=\\\"role()\\\"`. The explicit `typeface` input still works (the attribute\\n value wins when both are set).\\n- **Element-aware defaults** — with no value, the typeface is inferred from the host:\\n `h1`→headline-large, `h2`→headline-medium, `h3`→headline-small, `h4`→title-large,\\n `p`→body-1-long, `small`/`figcaption`→caption, `blockquote`→quote, `label`→label,\\n else title-small. Plain semantic markup is correctly set with zero configuration.\\n\\nMigrate `<uni-text typeface=\\\"body-1-long\\\">…</uni-text>` →\\n`<p uni-text>…</p>` (or `<span uni-text=\\\"body-1-long\\\">` where no semantic element\\nfits). All internal usages, stories, and docs are migrated.\",\n \"commit\": \"a62e9b1\"\n },\n {\n \"bump\": \"minor\",\n \"title\": \"Search input stripped back and made generic; debounce input dressed in the shared chrome\",\n \"body\": \"- **`uni-debounce-input`** now wears the themed input chrome via `uni-input-box`\\n (color, border, typeface, focus ring) and gains `label` (accessible name),\\n `placeholder`, `disabled`, `pre-input`/`post-input` attribute slots for adornments,\\n ARIA passthroughs (`role`, `ariaExpanded`, `ariaControls`, `ariaActivedescendant`)\\n for composite widgets, and `clear()`/`focus()` methods. Debounce behavior unchanged.\\n- **`uni-search-input` redesigned**: the opinionated solid-primary pill bar with the\\n embedded `title-large` label is gone. It's now a standard themed field — decorative\\n leading magnifier, clear button while a query exists (refocusing on clear), Enter\\n emits `search`, Escape closes/clears.\\n- **Type-ahead added**: pass `suggestions` (refresh from `change`) and the field\\n becomes an ARIA combobox — keyboard-navigable listbox (ArrowUp/Down, Enter selects,\\n emitting `suggestionSelected` + `search`), `aria-activedescendant` wiring, focus-out\\n closing. New `searchInput` theme options: `searchSymbol`, `clearSymbol`, suggestion\\n list `listColor`/`listShadow`/`listBorderRadius`, `maxSuggestions`.\\n- Visual breaking change for SearchInput consumers (deliberate strip-back); code API\\n is compatible (`label`/`width`/`change`/`search` retained; `label` is now the\\n accessible name + placeholder fallback rather than displayed text).\",\n \"commit\": \"5a6fc60\"\n },\n {\n \"bump\": \"minor\",\n \"title\": \"Checkbox, radio, and toggle conform to theme tokens\",\n \"body\": \"- The last hardcoded control colors (`#FFF`, `#ccc`, `#d0d0d0`, `#e0e0e0`,\\n `rgba(0,0,0,0.2)`) are gone. Chrome now resolves from new option tokens —\\n checkbox `boxColor: 'surface'`; radio `ringColor: 'outline'` / `fillColor:\\n correctly on dark and brand themes.\\n- The checkbox's check/dash strokes wear the variant's paired on-color\\n (`on-primary`, `on-warn`, …) instead of assuming white; disabled states use the\\n `disabled`/`on-disabled` tokens; the toggle knob's shadow is the theme's\\n brand-tinted `raised` stack, and its hover uses the button convention's\\n brightness filter instead of a fixed grey.\",\n \"commit\": \"8953d59\"\n },\n {\n \"bump\": \"minor\",\n \"title\": \"New `uni-stat` KPI tile\",\n \"body\": \"- Muted label + large headline value (numbers auto-compact via\\n `Intl.NumberFormat`: `48234` → \\\"48.2K\\\") set in a new `stat` type-scale role\\n (32px semibold, proportional figures).\\n- Optional signed `delta` whose ink is decided by direction × `upIsGood` — churn\\n going down reads green, tickets going up reads red — with the arrow glyph\\n accompanied by screen-reader \\\"up\\\"/\\\"down\\\" text so state never rides color alone;\\n `caption` names the comparison period.\\n- Optional decorative 12-point sparkline (`trend` input): stroke in the outline hue,\\n endpoint dotted in the accent, `aria-hidden`.\\n- Fully token-driven via `stat.options`: card-recipe frame (`color`/`border`/\\n `borderRadius`), `labelTypeface`/`valueTypeface`, `positiveColor`/`negativeColor`\\n (the semantic inks, AA-guaranteed on surface), `trendColor`/`trendAccent`, spacing.\",\n \"commit\": \"7a6da4f\"\n },\n {\n \"bump\": \"minor\",\n \"title\": \"Fix invisible icons; icons become first-class theme primitives\",\n \"body\": \"- **Bug**: `uni-icon` resolves icons from `theme.icons`, but every theme shipped\\n `icons: {}` — the icon record was never wired in, so all icons (dialog close, button\\n spinner, search/clear affordances) rendered nothing.\\n- **Fix + pattern**: the default icon set now lives in core (`BaseIcons`, in\\n `concepts/iconography`) and `createTheme` merges a theme's `icons` over it — themes\\n can override or add icons under any name (inline SVG data URIs, masked with\\n `currentColor` so they recolor with the theme). The angular `icons` record re-exports\\n `BaseIcons` (deprecated).\\n- `uni-icon` also sets the standard `mask-image` (was webkit-only, so icons were\\n invisible in Firefox regardless) and renders nothing for unknown names instead of a\\n broken `url(\\\"undefined\\\")`.\\n- The emitted `uni-theme.ts` gains an editable `icons` section, and the MCP's\\n `generate-uni-theme` guidance instructs agents: never inline SVG in components —\\n define an icon once in the theme's `icons` map and render it via `<uni-icon>`.\",\n \"commit\": \"fea0b2e\"\n }\n ],\n \"dependencyBumps\": [\n \"@uni-design-system/uni-core@6.0.0\"\n ]\n },\n {\n \"version\": \"5.2.0\",\n \"entries\": [\n {\n \"bump\": \"minor\",\n \"title\": \"New `uni-avatar` and `uni-avatar-group` components\",\n \"body\": \"- Graceful fallback chain: image → initials derived from `name` (first + last) →\\n themed symbol. Accessible by default: `role=\\\"img\\\"` + `aria-label` from the name,\\n `aria-hidden` when purely decorative.\\n- Fully token-driven: variants color from the role's `*-container` tokens, sizes from\\n the theme's `avatar` size records, corner radius from `options.borderRadius`\\n (`max` = circles; a `sharp` theme gets square avatars), initials typeface from\\n `options.typeface`, fallback symbol from `options.fallbackSymbol`.\\n- `uni-avatar-group` stacks avatars with a token-driven overlap (spacing token) and\\n separator ring (`ringColor`/`ringWidth` options); `max` collapses the overflow into\\n a themed \\\"+N\\\" chip that is itself a `uni-avatar` (verbatim `text` input).\",\n \"commit\": \"1f5ee1d\"\n },\n {\n \"bump\": \"minor\",\n \"title\": \"New `uni-breadcrumb` component\",\n \"body\": \"- WAI-ARIA breadcrumb: labelled `nav` landmark wrapping an ordered list, the last item\\n marked `aria-current=\\\"page\\\"`, separators decorative (`aria-hidden`).\\n- Data-driven `items` (root first). Items with `href` render as real anchors; without\\n one they render as link-styled buttons emitting `itemClicked` for SPA routing.\\n- Token-driven via `breadcrumb.options`: `typeface`, link `color`, `currentColor`,\\n `separatorSymbol` (material symbol), and `gap` spacing.\",\n \"commit\": \"dca84b1\"\n },\n {\n \"bump\": \"minor\",\n \"title\": \"Button corner rounding and typography conform to component-options tokens\",\n \"body\": \"- `button` and `iconButton` themes gain `options: { borderRadius: 'max' }`; the hardcoded\\n per-size pixel radii (11/13/18/24) and the icon button's inline `borderRadius: 999` are\\n removed. Components resolve the token through `theme.radius()`, so the theme's radii\\n scale — shape languages (`sharp` → square, `playful` → pill) and custom radii\\n primitives — now restyles buttons like every other tokened component.\\n- Back-compat: the options radius is applied before theme `sizes`/`fixed` styles, so\\n hand-authored themes that still set a size-level `borderRadius` keep winning; icon\\n buttons fall back to the legacy circle when a theme predates iconButton options.\\n- `button` themes also gain `options: { typeface: 'button' }`: the hardcoded\\n `fontFamily: 'Euphemia'` (a font no theme loads) is removed from `fixed` and the sizes;\\n labels now render the type scale's `button` role (Red Hat Display, medium, capitalize),\\n with per-size `fontSize` still applied by `sizes`. Point the token at any typography\\n role — including custom ones — to restyle every button label.\\n- New `UniButtonOptions` interface (`borderRadius`, `typeface`) exported from the button\\n model.\",\n \"commit\": \"7844dde\"\n },\n {\n \"bump\": \"minor\",\n \"title\": \"Card frame conforms to token primitives\",\n \"body\": \"- The card theme's hardcoded frame (`borderStyle`/`borderWidth`/`borderRadius: '8px'` in\\n `fixed`, `borderColor` per variant) is replaced by tokens: the card resolves its border\\n from the **border primitive named by its variant** (`borders.primary` …\\n `borders.success`), its corner radius from the radii scale (`options.borderRadius:\\n- `UniCardOptions` gains `border` (pin every card to one primitive — including a custom\\n one — instead of variant-following) and documents the existing `borderRadius`/\\n `elevation`; redefining a border primitive in a theme now restyles cards and every\\n other component sharing that token.\\n- Token styles apply under the merged theme style, so hand-authored themes that still\\n set card `fixed`/`variants` frame styles keep winning. No visual change for default\\n themes — this is pure tokenization.\",\n \"commit\": \"7844dde\"\n },\n {\n \"bump\": \"minor\",\n \"title\": \"New `uni-drawer` and `uni-app-bar` — the dashboard shell\",\n \"body\": \"- **`uni-drawer`** has two modes sharing one content slot: `side` renders an in-flow\\n `<aside>` that pushes content (width-animated open/close, divider border primitive at\\n its edge, `aria-hidden` while closed); `over` renders a native `<dialog>` in the top\\n layer — focus trap, Escape, and scrim backdrop come from the platform, sliding in\\n from `position` (`start`/`end`). `open` is a two-way `model()`; Escape and backdrop\\n clicks keep it in sync. Tokens: `drawer.options` (`color`, `width`, `divider`,\\n `elevation`, `padding`, `backdrop`).\\n- **`uni-app-bar`**: leading/trailing content projection slots around a `title` (or\\n custom center content), trailing pushed to the far edge; optional `sticky`. Tokens:\\n `appBar.options` (`color`, `height`, `divider`, `typeface`, `padding`, `gap`,\\n optional `elevation`).\\n- The Drawer \\\"DashboardShell\\\" story documents the composition recipe: app bar with a\\n menu toggle + side drawer + content.\",\n \"commit\": \"17cf662\"\n },\n {\n \"bump\": \"minor\",\n \"title\": \"Progress gauge derives from the palette instead of hardcoded pastels\",\n \"body\": \"The gauge's track colors were fixed pastel hexes (`#b3d4ea`, `#b3e7c2`, …) that ignored\\nthe active theme entirely — secondary and success even shared the same green. Tracks now\\nuse the role's `*-container` token (the palette's soft tint of that role) and arcs the\\nrole base, so gauges follow any brand palette, in both light and dark modes.\",\n \"commit\": \"7844dde\"\n },\n {\n \"bump\": \"minor\",\n \"title\": \"New `uni-skeleton` loading placeholder\",\n \"body\": \"- Three shapes: `text` (multi-line, ending on a short line like real copy), `rect`,\\n and `circle`; explicit `width`/`height` accept CSS strings or px numbers.\\n- Painted with surface tokens (`skeleton.options`: `color`, `highlightColor`,\\n `borderRadius`, `gap`) so placeholders sit naturally on light and dark themes; the\\n shimmer sweep (`animation`/`duration` options) only runs when the user allows motion\\n and degrades to static blocks under `prefers-reduced-motion`.\\n- `aria-hidden` — placeholders are invisible to assistive tech by design.\",\n \"commit\": \"4ccf18b\"\n },\n {\n \"bump\": \"minor\",\n \"title\": \"New `uni-slider` component — clears the declared-but-unbuilt `ComponentName` entry\",\n \"body\": \"- Native `<input type=\\\"range\\\">` under the hood: platform keyboard interaction\\n (arrows, Home/End, Page Up/Down) and ARIA slider semantics for free; Signal Forms\\n contract (`FormValueControl<number>`) matching Input/Textarea.\\n- `min`/`max`/`step` inputs (fractional steps supported), required accessible `label`.\\n- Token-driven via `slider.options`: fill/thumb `color`, `trackColor`, `borderRadius`,\\n and geometry (`trackHeight`, `thumbSize`). The fill level rides a CSS custom\\n property, so dragging never regenerates Emotion styles; Firefox uses the native\\n `::-moz-range-progress`, WebKit a gradient stop.\",\n \"commit\": \"5d9062a\"\n },\n {\n \"bump\": \"minor\",\n \"title\": \"New `uni-tabs` / `uni-tab` components\",\n \"body\": \"- Full WAI-ARIA tabs pattern: `tablist`/`tab`/`tabpanel` roles with wired\\n `aria-selected`/`aria-controls`/`aria-labelledby`, roving tabindex, automatic\\n activation on ArrowLeft/ArrowRight (wrapping, disabled tabs skipped), Home/End,\\n and motion-safe transitions.\\n- `selectedIndex` is a two-way `model()`; selection snaps to the nearest enabled tab.\\n Panel content is captured per-tab and only the selected panel is instantiated.\\n- Every visual knob is a theme option token (`tabs.options`): `typeface`, `textColor`,\\n `activeTextColor`, `indicatorColor`, `indicatorThickness` (thickness token),\\n `divider` (border primitive), `gap`/`padding` (spacing tokens), `borderRadius`, and\\n optional `activeColor` — the defaults render underline tabs; `borderRadius: 'max'` +\\n `activeColor` turns them into segmented pills with no component changes.\",\n \"commit\": \"15a8f73\"\n },\n {\n \"bump\": \"minor\",\n \"title\": \"New `uni-textarea` component\",\n \"body\": \"- Multi-line text field with the same Signal Forms contract as `uni-input`\\n (`FormValueControl<string>`: `value` model, `disabled`/`invalid`/`dirty`/`required`,\\n touched-aware error styling, `aria-*` wiring).\\n- Reuses `uni-input-box` for its chrome, so it inherits the input's themed color,\\n border, typeface, focus outline, and disabled treatment automatically; the box's\\n field selectors now cover `textarea` (with auto height and vertical padding), and\\n the box accepts a `height` override.\\n- Theme options follow the token pattern: `textarea: { options: { rows: 3, resize:\\n instance.\",\n \"commit\": \"b04b97b\"\n },\n {\n \"bump\": \"minor\",\n \"title\": \"Theme Builder becomes the full playground (PRD §5.2)\",\n \"body\": \"- **Light & dark side by side**: both palettes generate on every input change,\\n independent of the storybook-wide mode toggle, each rendered in its own panel.\\n- **Contrast report panel**: live pass/fail matrix over all checked pairs (summary +\\n failing rows always visible, full detail on demand). Failures only occur with hard\\n brand pins; the panel says so and points at soft targets.\\n- **Shape language input** (`sharp`/`modern`/`playful`): applies `ShapeRadii` live via\\n the new `radii` pass-through on `BrandPaletteConfig`/`createThemeFromPalette`.\\n- **Export paths**: copy the static `uni-theme.ts` (via `emitThemeFile`), copy a\\n pre-encoded `ng add` command, or copy W3C DTCG JSON for both modes via the new\\n `emitDtcgTokens()` interop emitter in uni-core (Style Dictionary compatible).\",\n \"commit\": \"8f55b4c\"\n }\n ],\n \"dependencyBumps\": []\n },\n {\n \"version\": \"5.1.0\",\n \"entries\": [\n {\n \"bump\": \"patch\",\n \"title\": \"Fix `ng add` against real published packages (found by fresh `ng new` e2e):\",\n \"body\": \"- The schematic bundle is CJS, but ng-packagr stamps `\\\"type\\\": \\\"module\\\"` into the\\n published package.json, so Node loaded it as ESM and the CLI reported \\\"no ng add\\n actions\\\". A nested `schematics/package.json` (`\\\"type\\\": \\\"commonjs\\\"`) scopes the\\n bundle back to CJS.\\n- The emitted `uni-theme.ts` used dot access on `Colors` (which has an index\\n signature), failing under `ng new`'s strict `noPropertyAccessFromIndexSignature`.\\n The emitter (and the MCP tool's guidance) now uses bracket access throughout.\\n- `uni-angular`'s peer range on `uni-core` is now `workspace:^` (publishes as `^5.x`)\\n instead of `workspace:*` (published as an exact pin). Alongside changesets'\\n `onlyUpdatePeerDependentsWhenOutOfRange`, this stops minor releases from being\\n inflated to majors by the peer-dependents rule — the cause of the 4.0.0 and 5.0.0\\n version jumps.\",\n \"commit\": \"f2951db\"\n }\n ],\n \"dependencyBumps\": []\n },\n {\n \"version\": \"5.0.0\",\n \"entries\": [\n {\n \"bump\": \"minor\",\n \"title\": \"OKLCH theme generation engine (`concepts/generation`)\",\n \"body\": \"- New `generateThemes(input)` / `generateUniThemes(input)`: brand seed(s) in, complete\\n WCAG-AA light+dark `Colors` pair out, with a machine-readable `ContrastReport`\\n (110 checked pairs per theme pair). Pure and deterministic.\\n- All palette math moved from HSL to perceptual OKLCH: uniform lightness slots across\\n hues, per-category chroma model (`CategoryChroma`), dark-mode accent chroma decoupling\\n (C ≤ 0.16), and a contrast guard-rail that adjusts lightness only — never hue.\\n- Brand colors ride as soft `targets` (kept verbatim when already AA, lightness-adjusted\\n when not) alongside the existing hard `brand` pins; accepted by `generatePalette`,\\n `createThemeFromPalette`, and Angular's `BrandPaletteConfig`.\\n- Semantic inks re-tuned per role: error 27°/C 0.20, warn 55°/C 0.18 (rotated off amber —\\n dark yellow reads brown), success 152°/C 0.16.\\n- `createTheme` accepts optional `radii`/`shadows` overrides; `ShapeRadii` presets\\n (`sharp` / `modern` / `playful`) emitted via the `shape` generation input.\\n- Theme Builder ships nine curated AA-clean presets built on soft targets.\\n- Deprecated (thin wrappers/tables retained): `uniColor`, `randomRangeValue`,\\n `CategorySaturation`, `CategoryLightness`. `schemeHues` moved to `color.utils`.\\n- `createTheme` deep-merges optional `borders` and `components` overrides over its\\n derived defaults — themes can define custom named primitives and rewire per-component\\n options without restating untouched sections.\\n- New `emitThemeFile()` renders a static `uni-theme.ts` — literal colors, visible border\\n primitives, sparse component overrides — the editable source of truth; the engine\\n never ships to the browser.\\n- New `ng add @uni-design-system/uni-angular` schematic: installs the peer set, writes\\n the generated theme file, registers `UNI_THEMES` in `app.config.ts`, adds typeface\\n links, scaffolds a themed smoke test, and prints the contrast summary.\\n- New MCP tool `generate-uni-theme`: returns the static theme file content, provider\\n snippet, and contrast report, with agent guidance to edit the file for restyling.\\n- `uni-core` gains its first Vitest suite, including a 1,080-seed contrast property\\n corpus with zero tolerance in both modes; the schematic gets its own spec suite.\",\n \"commit\": \"f7f0bdd\"\n }\n ],\n \"dependencyBumps\": [\n \"@uni-design-system/uni-core@5.0.0\"\n ]\n },\n {\n \"version\": \"4.0.0\",\n \"entries\": [\n {\n \"bump\": \"minor\",\n \"title\": \"Porting Components\",\n \"body\": \"\",\n \"commit\": \"ef9b3b5\"\n }\n ],\n \"dependencyBumps\": [\n \"@uni-design-system/uni-core@4.0.0\"\n ]\n },\n {\n \"version\": \"3.0.2\",\n \"entries\": [\n {\n \"bump\": \"patch\",\n \"title\": \"Extending the Symbol component to support theme options.\",\n \"body\": \"\",\n \"commit\": \"dcaf166\"\n }\n ],\n \"dependencyBumps\": [\n \"@uni-design-system/uni-core@3.0.2\"\n ]\n },\n {\n \"version\": \"3.0.1\",\n \"entries\": [\n {\n \"bump\": \"patch\",\n \"title\": \"Exporting new components and formatting.\",\n \"body\": \"\",\n \"commit\": \"fabbb73\"\n }\n ],\n \"dependencyBumps\": [\n \"@uni-design-system/uni-core@3.0.1\"\n ]\n },\n {\n \"version\": \"3.0.0\",\n \"entries\": [\n {\n \"bump\": \"minor\",\n \"title\": \"Exporting Components, Themes, and CDK\",\n \"body\": \"\",\n \"commit\": \"54a945c\"\n }\n ],\n \"dependencyBumps\": [\n \"@uni-design-system/uni-core@3.0.0\"\n ]\n },\n {\n \"version\": \"2.0.4\",\n \"entries\": [\n {\n \"bump\": \"patch\",\n \"title\": \"Exporting multiple Angular Components\",\n \"body\": \"\",\n \"commit\": \"ad5dd15\"\n }\n ],\n \"dependencyBumps\": [\n \"@uni-design-system/uni-core@2.0.4\"\n ]\n },\n {\n \"version\": \"2.0.3\",\n \"entries\": [\n {\n \"bump\": \"patch\",\n \"title\": \"fix: setting dist directory in publishConfig\",\n \"body\": \"\",\n \"commit\": \"eb80cff\"\n }\n ],\n \"dependencyBumps\": [\n \"@uni-design-system/uni-core@2.0.3\"\n ]\n },\n {\n \"version\": \"2.0.2\",\n \"entries\": [],\n \"dependencyBumps\": [\n \"@uni-design-system/uni-core@2.0.2\"\n ]\n },\n {\n \"version\": \"2.0.1\",\n \"entries\": [\n {\n \"bump\": \"patch\",\n \"title\": \"Setting Fixed Versioning for all packages.\",\n \"body\": \"\",\n \"commit\": \"be0fb26\"\n }\n ],\n \"dependencyBumps\": [\n \"@uni-design-system/uni-core@2.0.1\"\n ]\n },\n {\n \"version\": \"2.0.0\",\n \"entries\": [],\n \"dependencyBumps\": [\n \"@uni-design-system/uni-core@1.1.0\"\n ]\n },\n {\n \"version\": \"1.0.0\",\n \"entries\": [\n {\n \"bump\": \"major\",\n \"title\": \"init release\",\n \"body\": \"\",\n \"commit\": \"7d18157\"\n }\n ],\n \"dependencyBumps\": [\n \"@uni-design-system/uni-core@1.0.0\"\n ]\n }\n ]\n },\n {\n \"package\": \"@uni-design-system/uni-core\",\n \"releases\": [\n {\n \"version\": \"8.2.0\",\n \"entries\": [\n {\n \"bump\": \"minor\",\n \"title\": \"`createTheme` accepts a sparse `typography` override, deep-merged over the base type scale — restate only the roles (or the individual `TextStyle` fields within a role) that change, and add product-specific roles under any name. Closes the gap where a derived theme (e.g. the Carbon experiment) had to spread `typography` over the created theme by hand.\",\n \"body\": \"\",\n \"commit\": \"57a8c4c\"\n },\n {\n \"bump\": \"minor\",\n \"title\": \"Input options: `typeFace` → `typeface`, matching the tooltip/button/tabs casing. The base theme now writes `typeface`, and the input box reads the new key with the old one as a deprecated fallback, so themes that still set `typeFace` render unchanged. The `typeFace` key is deprecated and will be removed in the next major.\",\n \"body\": \"\",\n \"commit\": \"57a8c4c\"\n },\n {\n \"bump\": \"patch\",\n \"title\": \"Ship `CHANGELOG.md` in the published packages. The release notes existed only in the repo; an installed package carried no record of what changed, so upgrade questions couldn't be answered from `node_modules`. uni-angular copies it into the ng-packagr `dist` via `assets`; the rest add it to `files`.\",\n \"body\": \"\",\n \"commit\": \"e706e38\"\n }\n ],\n \"dependencyBumps\": []\n },\n {\n \"version\": \"8.1.0\",\n \"entries\": [\n {\n \"bump\": \"minor\",\n \"title\": \"Calendar, date & time entry: `uni-calendar`, `uni-date-input`, `uni-time-input` and `uni-date-time-input`, plus a pure datetime helper layer in the cdk.\",\n \"body\": \"The most-requested form control family anywhere, built native-platform-first with zero runtime dependencies: `Intl` does all formatting and parsing (no date library), the popup rides the native popover top layer with CSS anchor positioning, and every day in the grid is a real `<button>`.\\n- **Values are plain ISO strings, never `Date`s** — `UniDate` (`'YYYY-MM-DD'`), `UniTime` (`'HH:mm'`, always 24-hour), `UniDateTime` (`'YYYY-MM-DDTHH:mm'`), `UniDateRange` (`{ start, end }`). A `Date` is a timestamp with a timezone problem; a calendar date is a label on a wall calendar. Strings are timezone-free, JSON-serializable and sortable with `<`, and `[value]=\\\"'2026-08-20'\\\"` is a complete, correct binding.\\n- **`uni-calendar`** is an inline month grid and a form control in its own right: single and range modes in one component (the value shape switches with `mode`), availability **markers** with screen-reader labels, `minDate`/`maxDate` fences, `disabledDates` as a list or predicate, and a two-way `month` model so an app can drive \\\"jump to June\\\". One tab stop with a roving-tabindex `role=\\\"grid\\\"`; the full APG keyboard map (arrows, week `Home`/`End`, `PageUp`/`PageDown` with `Shift` for years) crosses month edges, skips disabled days directionally, and stops at fences without wrapping. Range selection paints a live preview band, swaps a backwards commit instead of erroring, and narrates every step through a `role=\\\"status\\\"` region.\\n- **`uni-date-input`** is free-typed date entry — no input mask (masks fight paste, IMEs and screen-reader echo). The parser accepts ISO, locale-numeric text with the digit order read from `Intl.DateTimeFormat(locale).formatToParts()`, and the locale's own month names; a missing year resolves to the next occurrence and two-digit years are refused rather than guessed. Unreadable, fenced or unavailable text **stays in the field**, flagged, with a `rejected` event. The popup is the same `uni-calendar`, hosted in a `role=\\\"dialog\\\"` popover via the shared `uni-dropdown`; `↑`/`↓` on a committed value step ±1 day.\\n- **`uni-time-input`** is a combobox over time slots — byte-for-byte the search-input/tag-input listbox contract via the CDK's `ListboxNavigation`. `9` → 09:00, `930` → 09:30, `3p` → 15:00, and a bare `3` leans PM in a 12-hour field (the bias yields when `minTime`/`maxTime` say otherwise). `slots` pins the choices for scheduling, refusing a typed `5pm` as `'unavailable'`; `↑`/`↓` on a committed value step ±`minuteStep`.\\n- **`uni-date-time-input`** seats both parts in one `uni-input-box` chrome under one `role=\\\"group\\\"` label, emitting one combined value only when both parts are set. `slotsFor` is the scheduling flow in one attribute: the time part stays disabled until a day is chosen, then offers exactly that day's slots, and changing the day clears a slot that no longer exists. The parts gained an `embedded` input so the composer renders one shared box instead of nested chrome.\\n- **cdk `datetime` module** (public export): the string-math and `Intl` layer — `addDays`/`addMonths`/`buildMonthGrid`/`parseDateText`/`parseTimeText`/`timeSlots`/`localeWeekStart` and friends — pure functions, unit-tested hard, usable by apps directly.\\n- **uni-core**: `'calendar'`, `'dateInput'`, `'timeInput'`, `'dateTimeInput'` join `ComponentName` with base-theme entries (day geometry per size token, `dayBorderRadius: 'xxs'` for the square look, toggle glyphs, popup/list chrome). Selection, range and today colours are deliberately not options — they are the `primary` role pair, so themes restyle them by restyling the palette.\\n- **Naming note:** the fences are `minDate`/`maxDate`/`minTime`/`maxTime`/`minDateTime`/`maxDateTime` rather than the platform's `min`/`max`, because Signal Forms' `FormUiControl` reserves `min`/`max` as numeric signals on form controls.\",\n \"commit\": \"71bc74c\"\n },\n {\n \"bump\": \"minor\",\n \"title\": \"Themable focus chrome: a shared `focusRing` primitive for every control, plus `focusBorder`/`focusShadow`/`focusColor` options for input boxes.\",\n \"body\": \"**Shared focus ring.** A theme can now restyle the keyboard-focus indicator across the whole library by defining `focusRing` **border** and/or **shadow** primitives: `ThemeService.focusRing()` (and the new selector-less `focusRingStyle()`) replaces its default 2px outline with that border — drawn as an outline hugging the control — plus the ring shadow. A `focusRing` **thickness** primitive sets the ring's outline offset (negative values overlay the control's resting border, reading as a border-color change). Checkbox, radio, toggle and slider now route their hand-rolled focus styles through the shared helper (calendar days and tag chips already did), so one primitive trio gives every control the same focus language. Themes without the primitives render exactly as before.\\n\\n**uni-core:** `Thicknesses` is now an open record like `Borders`/`Shadows` (extra named primitives allowed), and `createTheme` accepts a sparse `thicknesses` override merged over the base scale.\\n\\n**Also in this release:**\\n- Radio and toggle scope their transitions (border/background/transform) instead of `all`, so the focus ring's outline and shadow apply instantly — `transition: all` interpolated the outline from a stale color, flashing a dark ring before the themed ring color landed.\\n- The radio's dot grow/retract animation is a token — `radio.options.transitionSpeed` (seconds, default 0.3 preserving the current feel; 0 switches instantly).\\n- The checkbox focus ring rounds proportionally again (box radius plus its gap) and the gap itself is a new `checkbox.options.focusRingGap` option; a `focusRingStyle` call's explicit gap wins over the theme's `focusRing` thickness, then the branch defaults.\\n\\nThe `input` component options could previously restyle focus only through `focusOutline`/`focusOutlineOffset`. The new optional trio mirrors the error-state trio (`errorBorder`/`errorShadow`/`errorColor`) and applies while any projected control has focus: `focusBorder` swaps the border primitive, `focusShadow` draws a ring (e.g. a soft `0 0 0 3px` spread), and `focusColor` swaps the background. All three default to `undefined`, so existing themes render exactly as before, and they yield to the error state so a flagged field stays visibly flagged while being corrected.\\n\\nThe Wellsourced showcase theme now defines the `focusRing` pair for its app's `.search-input:focus` look — an ochre (`secondary`) 1px border with a 10% ring of the same hue, tinted per palette in light and dark — so text fields (which rest on a canvas tint and snap to the clean surface on focus), checkboxes, radios, toggles, sliders, calendar days and tag chips all share one focus treatment.\",\n \"commit\": \"1a6b382\"\n }\n ],\n \"dependencyBumps\": []\n },\n {\n \"version\": \"8.0.0\",\n \"entries\": [\n {\n \"bump\": \"minor\",\n \"title\": \"Menu items no longer look preselected when opened with the mouse\",\n \"body\": \"Opening a `uni-menu` by click left the first item highlighted before the\\npointer had touched it, reading as a preselected default. Two correct\\nbehaviours combined badly: `onOpened()` implements ARIA roving focus by calling\\n`.focus()` on an item every open, and the item styles deliberately painted\\n`:focus` the same as `:hover`. Nothing was wrong with the focus itself — only\\nwith painting it after a pointer open.\\n- **The highlight now keys on `:focus-visible`.** Programmatic focus following a\\n click doesn't match it, while keyboard-driven focus does — so mouse users get\\n no phantom highlight, and keyboard users keep the focus cursor. Roving-focus\\n bookkeeping is untouched: a mouse open still moves focus to the first item, so\\n screen readers announce it exactly as before.\\n- **New `HOVER_OR_KEYBOARD_FOCUS` constant exported from uni-core**, holding\\n that selector. Emotion merges styles by _exact selector text_, so a component's\\n base rule and any theme variant restyling it have to agree character for\\n character — a variant keyed `'&:hover, &:focus'` would both fail to override\\n and reintroduce the phantom highlight. Naming the selector once removes the\\n trap; the base theme's `menuItem.warn` tone and the Carbon/Wellsourced\\n showcase themes now use it.\\n\\nThemes with their own `menuItem` variants should key the highlight with\\n`HOVER_OR_KEYBOARD_FOCUS`. Note that `:focus-visible` is a browser heuristic:\\nafter a user has been navigating by keyboard, a subsequent click may still show\\nthe highlight, which is the intended \\\"this person is using the keyboard\\\"\\nbehaviour rather than a regression.\",\n \"commit\": \"3279186\"\n },\n {\n \"bump\": \"minor\",\n \"title\": \"New `uni-tag-input`, plus a shared listbox contract in the CDK\",\n \"body\": \"The type-to-add chip field — recipients, filters, labels. It is the **open-set**\\ncontrol: anything typed can become a token, whether or not it matches a\\nsuggestion. Closed-set picking stays with `uni-select` /\\n`uni-multi-select-dropdown`, which is the deliberate split — the two look alike\\nbut differ on the one thing that decides the value type, so a single component\\nwould force one of them to carry an API it can never use.\\n- **`FormValueControl<UniTagItem[]>`.** `{ value: 'a@b.com' }` is a complete\\n item; `label`, `avatarSrc`, `invalid` and `disabled` are optional enrichment.\\n- **Invalid entries stay in the value, flagged**, rather than being dropped — a\\n field that silently swallows a typo'd address is worse than one that shows it\\n in red, and Enter on the chip lifts it back into the input to fix. Duplicates\\n and over-`max` entries are refused through `(rejected)` with a reason.\\n- **Full keyboard contract**: separators commit, Tab commits without trapping,\\n Backspace on an empty field _focuses_ the last chip rather than deleting it\\n blind, and on a chip Backspace and Delete both remove but move focus in\\n opposite directions — what makes pruning a list feel right.\\n- **The whole field is one tab stop.** Chips carry `tabindex=\\\"-1\\\"`, so Tab never\\n walks through eight recipients to reach the next control.\\n- **Announces through a `role=\\\"status\\\"` live region** on every add, remove and\\n rejection; the removal route is described once per field rather than by every\\n chip.\\n- **`preset=\\\"email\\\"`** wires an address validator, a paste parser that unwraps\\n `Name <a@b.com>` and keeps an unterminated tail in the field, and Space as a\\n separator.\\n- **`'tagInput'` joins core's `ComponentName`** with a theme entry for the chip\\n field's own tokens. Field chrome is not duplicated — it comes from `input` via\\n `uni-input-box`, so a tag input restyles with every other field.\\n\\n**Also in this release**\\n- **`ListboxNavigation` in the CDK** (`createListboxNavigation`) owns the\\n combobox bookkeeping every type-ahead control needs: open state, active\\n option, wrap-around arithmetic, Home/End, and `aria-activedescendant` wiring\\n that can never point at an option a narrowing filter has removed.\\n `uni-search-input` now uses it — behaviour unchanged, and it gains Home/End\\n for free — and the multi-select combobox upgrade will too. Three hand-rolled\\n copies of one keyboard contract is how they drift.\\n- **`uni-tag` gains `controlTabIndex`**, so a composite that owns its own roving\\n focus can take its chips out of the tab order, and **`selected` is now\\n optional**: an interactive chip carries `aria-pressed` only when it is\\n genuinely a toggle. Announcing \\\"not pressed\\\" on a recipient chip is worse than\\n announcing nothing.\",\n \"commit\": \"de83fe4\"\n },\n {\n \"bump\": \"minor\",\n \"title\": \"`uni-tag` v2: themable, opt-in removal, two style axes\",\n \"body\": \"v1 was a single hardcoded look with the palette welded into its template, an\\nunconditional remove button, and no theme entry — a filter chip, a status pill\\nand a recipient token all rendered identically. v2 makes the chip a real themed\\ncomponent and the building block `uni-tag-input` composes.\\n\\n**Breaking (uni-angular)**\\n- **`(close)` is now `(removed)`.** The old name shadowed the native `close`\\n event and needed an eslint suppression to compile.\\n- **The remove button is opt-in** — set `[removable]=\\\"true\\\"`. Previously every\\n tag, including a plain category label, shipped a \\\"Remove …\\\" button into the\\n accessibility tree.\\n- Codemod: rename `(close)` → `(removed)` and add `[removable]=\\\"true\\\"` wherever\\n a `(close)` handler exists.\\n\\n**Fixed**\\n- **A falsy value can now be removed.** `handleClose` guarded with `if (v)`, so\\n a tag keyed `''` or `0` silently could not be dismissed. Every defined value\\n emits, and a tag with no value emits `undefined`.\\n- The remove control now sizes from the chip instead of the icon-button's own\\n `sm` size — it was 22px inside a 24px chip, and taller than an `sm` chip\\n entirely.\\n\\n**New**\\n- **Two orthogonal style axes**: `variant` picks the colour role, `tone` picks\\n the archetype (`soft` / `solid` / `outline`). Both resolve from the new `tag`\\n theme entry, with tones as nested `&.tone-*` selectors inside each variant so\\n a theme author restyles both axes in one place.\\n- **`'tag'` joins core's `ComponentName`**, with a `TagTone` type and a full\\n theme entry (`options` for radius/typeface/gap/symbols, `variants` per colour\\n role, `sizes` carrying geometry only).\\n- **`interactive`** turns the chip body into a `<button>` with `selected` mapped\\n to `aria-pressed`, keeping the remove control a sibling — nesting them would\\n be invalid HTML and would strand the inner control for keyboard users.\\n- **Lead slot**: `avatarSrc`, `avatarName` (initials fallback), `iconName`,\\n `symbolName` and `dot` convenience inputs, plus a `[tag-lead]` slot for\\n anything richer. Lead elements size from the chip height, and all are\\n `aria-hidden` so the chip's text stays its accessible name.\\n- **Glyphs are theme icon primitives, not Material ligatures.** The remove and\\n selected affordances resolve through the new `removeIcon` / `selectedIcon`\\n theme options (defaulting to the built-in `close` and `check`), so they mask\\n `currentColor`, recolour with the chip's tone, and can be swapped per theme.\\n They also contribute no text to the DOM, which a ligature does — one less way\\n for an accessible name to be polluted. `symbolName` remains as the escape\\n hatch for glyphs the theme's icon set doesn't carry.\\n- **`invalid`** sets `aria-invalid` and a dashed underline, so the state does\\n not rely on colour alone (WCAG 1.4.1); `disabled`, `maxWidth` truncation with\\n a `title`, and `removeLabel` for overriding the remove button's name.\\n- The component ships with 21 specs, having previously had none.\",\n \"commit\": \"760b761\"\n },\n {\n \"bump\": \"minor\",\n \"title\": \"Theme validation contract: `parseTheme` / `assertTheme` / `isUniTheme`\",\n \"body\": \"Every theme scale is `Partial<Record<…>>`, so a malformed theme — hand\\nwritten, generated, or fetched as JSON — rendered as silent `undefined` CSS\\nwith no diagnosis. Core now ships a **dependency-free** structural validator\\n(core stays zero-dep; no zod outside the MCP):\\n- **`parseTheme(input): ThemeParseResult`** collects every issue rather than\\n failing fast: `{ success, theme?, issues: [{ path, message }] }` with dotted\\n paths like `colors.primary` or `typography.label.fontSize`. Acceptance /\\n rejection **with reasons** is the API.\\n- **`assertTheme(input)`** throws with all reasons; **`isUniTheme`** is the\\n type-guard form; **`formatThemeIssues`** renders issues for logs.\\n- The contract requires what components can't render without: 16\\n `REQUIRED_COLOR_TOKENS`, all 22 canonical `REQUIRED_TEXT_ROLES` (with\\n `fontFamily`/`fontSize`/`lineHeight`), the spacing/radii/shadow/thickness\\n scale keys, and recursively-valid component style expressions. All\\n `REQUIRED_*` sets are exported for tooling (MCP, docs, registries). Themes\\n remain free to add arbitrary named primitives on every scale.\\n- Because a `UniTheme` is plain serializable data, the same contract\\n validates JSON round-trips — the foundation for theme distribution and\\n runtime theme registries (ROADMAP Track 1).\",\n \"commit\": \"6a4c7da\"\n },\n {\n \"bump\": \"minor\",\n \"title\": \"A wire format for themes: `hydrateTheme` / `dehydrateTheme`\",\n \"body\": \"A `UniTheme` is plain serializable data, which makes JSON the natural transport\\nfor distributing themes — but a serialized theme is ~50 KB and **~71% of that is\\nthe 61 built-in icon data URIs that every uni-core consumer already ships**.\\n- **`dehydrateTheme(theme)`** returns the wire form: icons identical to\\n `BaseIcons` are dropped, genuine overrides kept. A theme goes from ~50 KB to\\n ~14 KB, and still passes `parseTheme`.\\n- **`hydrateTheme(theme)`** restores the built-in set on the way in, applying\\n the same `{...BaseIcons, ...icons}` contract `createTheme` applies at\\n construction — the theme's own icons win, built-ins fill the rest.\\n- **`generateUniThemes` now returns the `ContrastReport`** alongside the\\n light/dark pair, so a caller can generate registration-ready themes and their\\n WCAG audit in one call instead of falling back to `emitThemeFile` (which\\n returns TypeScript source) just to see the report.\\n- **`summarizeContrast(report)`** is extracted and exported, so the generated\\n theme file's header and every other consumer word the audit identically.\",\n \"commit\": \"5414517\"\n }\n ],\n \"dependencyBumps\": []\n },\n {\n \"version\": \"7.3.0\",\n \"entries\": [\n {\n \"bump\": \"minor\",\n \"title\": \"`expand` gains a themable, size-aware speed\",\n \"body\": \"The reveal/collapse duration was hardcoded at 350ms, so a consumer wanting a\\nsnappier disclosure — or wanting adjacent styling to fade on the same clock —\\nhad nothing to reference. A fixed duration also reads differently at different\\nsizes: sluggish on a two-line region, rushed on a full-page one.\\n- **New `transitionSpeed` option in the `expand` theme options** (seconds,\\n default `0.35`, matching alert/card `transitionSpeed`) sets the base\\n duration. `'expand'` joins core's `ComponentName` union, so custom and\\n derived themes can type an `expand` entry.\\n- **Duration scales with content height.** The actual duration is\\n `transitionSpeed × √(height ÷ 240px)`, clamped to ~0.15–0.6s at the default\\n speed (the envelope scales proportionally with a themed speed), so perceived\\n speed stays steady across region sizes. The curve and its constants\\n (`expandDuration`, `EXPAND_DEFAULT_SPEED`, `EXPAND_MIN_DURATION`,\\n `EXPAND_MAX_DURATION`, `EXPAND_REFERENCE_HEIGHT`) are exported from\\n uni-core.\\n- **New per-instance `transitionSpeed` input** sets an exact duration for one\\n region, bypassing the scaling: `<uni-expand [transitionSpeed]=\\\"0.15\\\">`.\\n- **The resolved duration is exposed as the public `duration` signal** on\\n `uni-expand`, so adjacent styling can move on the reveal's clock with a\\n plain binding — `[style.transition-duration]=\\\"expand.duration() + 's'\\\"` —\\n keeping all timing in the theme/signal pipeline, with no custom CSS.\\n- **`expand-toggle` gains a matching `transitionSpeed` input** and otherwise\\n follows the theme token instead of its own hardcoded 350ms. Expand Area\\n binds the region's resolved `duration` to its toggle, keeping chevron and\\n reveal on one clock even when size-scaled or overridden.\\n- **Speed is theme-reactive**: swapping themes at runtime retimes regions and\\n chevrons live.\\n- **Enter/leave easing is now `ease-in-out`** (was `ease-in`), matching the\\n chevron rotation so trigger and region decelerate together.\\n- **`UniExpandOptions` is exported** from uni-angular for\\n `getComponentOptions<UniExpandOptions>('expand')` consumers.\",\n \"commit\": \"c828982\"\n },\n {\n \"bump\": \"minor\",\n \"title\": \"Menus join the theme model: `menu` + `menuItem` component options, item tones, and dividers\",\n \"body\": \"The menu was the only composite component with no theme surface of its own —\\npanel chrome came from the shared `dropdown` entry and every item-level knob\\n(height 38, `primary-container` hover, `check` active symbol, `label` type\\nrole) was hardcoded. Every Uni menu therefore looked identical, and the gaps a\\nreal product hits first (a red Delete, a separator before it, disabled rows)\\nwere only reachable via `::ng-deep`.\\n- **New `menu` theme options** (`'menu'` joins core's `ComponentName` union):\\n `minWidth`, panel `color`/`border`/`borderRadius`/`shadow` (each falling\\n back to the `dropdown` options when unset, so menus follow generic popovers\\n until a theme deliberately splits them), `paddingVertical`/\\n `paddingHorizontal` (panel inset — `xs` inset plus item `borderRadius`\\n yields the \\\"hover pill\\\" look; `none` yields full-bleed rows), and\\n `dividerBorder`/`dividerSpacing` for separators.\\n- **New `menuItem` theme options + variants** (`'menuItem'` joins\\n `ComponentName`): `height`, `paddingHorizontal`, `gap`, `borderRadius`,\\n `typeface`, `textColor`, `hoverColor`, `activeSymbol` (undefined removes the\\n trailing check), and `transitionSpeed`. Theme `variants` on `menuItem` carry\\n tones — the base theme ships a `warn` tone for destructive actions.\\n- **`MenuItem` grows `variant`, `disabled`, and `{ divider: true }`.**\\n `variant: 'warn'` routes through the theme's `menuItem` variants; `disabled`\\n items render in the disabled color, carry `aria-disabled`, and are skipped\\n by keyboard navigation; dividers render as `role=\\\"separator\\\"` rules styled\\n by the `menu` options. `isDivider` and the `UniMenuOptions`/\\n `UniMenuItemOptions` interfaces are exported from uni-angular.\\n- **`uni-dropdown` panel chrome is now input-overridable**\\n (`border`/`borderRadius`/`shadow`/`color`), falling back to the `dropdown`\\n theme options — this is the mechanism `uni-menu` uses; other consumers are\\n unchanged.\\n- **Default-rendering change:** menus now have `minWidth: 184` from the base\\n theme (previously they sized to the widest item). All other defaults\\n reproduce the previous look, including the 0.35s hover transition.\\n- **The Carbon experiment themes gain menu styling** (sharp full-bleed 40px\\n rows, IBM Plex, `$layer-hover`, red danger option, ~110ms motion) with a new\\n Carbon Menu story demonstrating that the same component renders both\\n aesthetics untouched.\",\n \"commit\": \"6e8b429\"\n }\n ],\n \"dependencyBumps\": []\n },\n {\n \"version\": \"7.2.0\",\n \"entries\": [\n {\n \"bump\": \"minor\",\n \"title\": \"Add `funnel` and `building` icons\",\n \"body\": \"Two gaps found while migrating a real app off inline SVG — both cases where the\\nexisting set forced the app to keep hand-drawn artwork.\\n- **`funnel`** (`filter_alt`) — `filter` is `filter_list`, the stacked-lines\\n metaphor. Apps that name the feature itself a funnel (\\\"Funnel Analytics\\\") draw\\n the shape, and substituting stacked lines loses the reference.\\n- **`building`** (`apartment`) — pairs with `home` for residential-vs-commercial\\n distinctions, which had no built-in counterpart.\\n\\nBoth are Material Symbols Outlined 300 on the shared `0 -960 960 960` grid, so\\nthe set is now 61 icons. Note `building` carries more internal detail than most\\nof the set; it reads well from ~14px but goes muddy below ~12px, so prefer a\\nlarger size or `home`'s simpler silhouette in very small badges.\",\n \"commit\": \"e72ec94\"\n }\n ],\n \"dependencyBumps\": []\n },\n {\n \"version\": \"7.1.0\",\n \"entries\": [\n {\n \"bump\": \"minor\",\n \"title\": \"Expand `BaseIcons` to 59 icons and add `uni-icon` sizing\",\n \"body\": \"The 34-icon set shipped in 7.0.0 covered the library's own components but not a\\nreal application — an app migrating off inline `<svg>` (or off `uni-symbol`, in\\nAngular) ran out of names almost immediately. Everything here is additive; all\\n34 existing names are unchanged.\\n- **25 new icons**, same Material Symbols Outlined 300 source and the same\\n `0 -960 960 960` grid as the rest of the set: navigation (`link`, `expand`,\\n `gridView`, `listView`), actions (`moreHorizontal`, `copy`, `send`,\\n `refresh`, `dragHandle`, `qrCode`), feedback (`star`, `verified`) and\\n user/system (`group`, `shieldPerson`, `clock`, `mail`, `chat`, `image`,\\n `document`, `payment`, `bank`, `trendingUp`, `extension`, `webhook`,\\n `logout`).\\n - `moreHorizontal` ships alongside `more` because that one is `more_vert` and\\n row-aligned menus need the horizontal kebab.\\n - `star` is separate from `favorite`, which is the heart.\\n- **`uni-icon` gains an optional `size` input** (`CssLength` — bare numbers are\\n px, strings pass through, so `20` and `'1.25rem'` both work). Left unset,\\n behaviour is unchanged: the icon fills its container, which is what lets a\\n themed control size its own glyph through padding. Set, it applies\\n width/height as inline styles, so an explicit size wins over the\\n fill-the-container rule regardless of style injection order. This removes the\\n per-call-site `width`/`height` CSS rule that replacing an inline `<svg>` with\\n `<uni-icon>` would otherwise need.\\n- The MCP `create-icon-tokens` tool now lists the built-in icon names above the\\n token map it returns. Apps routinely hand-draw their own `close`, `check` or\\n `plus`; encoding those into theme tokens works but adds redundant artwork on a\\n foreign grid when the theme already ships the glyph. The tool cannot recognise\\n a shape, so it hands the caller the list to check against before adding\\n anything.\",\n \"commit\": \"c2421c0\"\n }\n ],\n \"dependencyBumps\": []\n },\n {\n \"version\": \"7.0.0\",\n \"entries\": [\n {\n \"bump\": \"major\",\n \"title\": \"Replace `BaseIcons` with a normalized 34-icon Material Symbols set\",\n \"body\": \"The built-in icon set was 11 glyphs drawn from four different grids\\n(`0 0 24 24`, `0 0 50 50`, `0 0 64 64`, `0 -960 960 960`), so `checkCircle` and\\n`xCircle` rendered as solid filled discs next to a hairline `alertCircle` and an\\noversized `close` — three optical weights in one set.\\n- `BaseIcons` is now Material Symbols Outlined at weight 300, every glyph on a\\n single `0 -960 960 960` grid, grouped by intent: navigation (`menu`,\\n `chevronUp/Down/Left/Right`, `arrowLeft/Right`, `home`, `externalLink`),\\n actions (`search`, `close`, `plus`, `minus`, `more`, `delete`, `edit`,\\n `download`, `upload`, `share`, `filter`), feedback (`check`, `checkCircle`,\\n `xCircle`, `alertCircle`, `info`, `warning`, `lock`) and user/system\\n (`profile`, `settings`, `notification`, `favorite`, `help`, `calendar`).\\n- All 11 previously shipped names are preserved, so existing `<uni-icon>` call\\n sites and theme overrides keep working. Their **appearance changes**: the\\n filled `checkCircle`/`xCircle` are now outlined, and the set reads lighter\\n overall. `spinner` is carried over verbatim, keyframes intact.\\n- New `IconName` and `BaseIconName` types. `IconName` is\\n `BaseIconName | (string & {})`, so built-ins autocomplete and typos surface\\n while themes can still register arbitrary names via `createTheme({ icons })`.\\n `uni-icon`'s `name` input is typed with it instead of `keyof Icons`.\\n- **Breaking**: removes the unused `IconToken`, `IconStyle`, `ToggleableIcon`\\n and `IconConfig` exports. Nothing in the library referenced them and\\n `IconToken`'s 60-name union contradicted the actual `BaseIcons` keys. Use\\n `IconName` instead.\\n- New exported `svgToIconUri(svg, options?)` — the supported way to bring your\\n own icons (a brand set, a designer handoff) into a theme. It normalizes the\\n source (drops the xml declaration, comments and fixed `width`/`height` so the\\n mask scales), percent-encodes it, and **rejects artwork that cannot survive\\n masking**: no `viewBox`, an embedded raster `<image>`, an external reference,\\n a gradient/pattern fill, or more than one paint color. That last one is the\\n trap worth naming — masks use the alpha channel, so a multi-color logo\\n flattens to a silhouette in `currentColor`; pass `{ allowMultiColor: true }`\\n when that is intended. `createTheme({ icons })` merges the result over\\n `BaseIcons` per name, so a built-in name reskins and a new name is added.\\n- New MCP tool `create-icon-tokens`, the agent-facing front end to\\n `svgToIconUri`: hand it a project's inline `<svg>` (or a brand set) and it\\n returns a paste-ready `icons` map for `uni-theme.ts`. It encodes via the same\\n helper, so tokens are byte-identical to the built-in set, and adds the\\n set-level checks a per-icon helper cannot make — which names override\\n built-ins, and whether the artwork mixes viewBox grids. Bad artwork is\\n reported per icon rather than failing the batch, and re-running is safe\\n (already-encoded URIs pass through). The server instructions now point agents\\n at it whenever they encounter inline SVG.\\n- `BaseIcons` is generated by `scripts/generate-icons.mjs` (`pnpm icons:generate`),\\n which fetches from the canonical Material Symbols source and validates every\\n glyph before writing — a malformed path, an off-grid viewBox or geometry\\n outside the grid aborts the run. `pnpm icons:check` verifies the committed\\n file without writing. Add or change icons in that script's manifest and\\n regenerate; the file is not hand-edited. `icon.records.spec.ts` asserts the\\n same invariants against the committed output.\",\n \"commit\": \"f7727aa\"\n }\n ],\n \"dependencyBumps\": []\n },\n {\n \"version\": \"6.1.0\",\n \"entries\": [\n {\n \"bump\": \"minor\",\n \"title\": \"TextStyle now accepts CSS length strings, not just px numbers\",\n \"body\": \"- `fontSize`, `lineHeight`, `letterSpacing`, `textIndent`, and `wordSpacing` on\\n `TextStyle` are widened from `number` to the new exported `CssLength`\\n (`number | string`). Bare numbers still mean px, matching Emotion's own\\n convention; strings pass through verbatim, so any unit the CSS engine accepts\\n works — `'1.2rem'`, `'2em'`, `'clamp(1rem, 2vw, 1.5rem)'`, unitless\\n line-height multipliers like `'1.5'`, etc.\\n- `toTypeface` no longer blindly appends `px`: numbers are converted, strings\\n are passed through untouched. Existing numeric themes are unaffected.\",\n \"commit\": \"28323ec\"\n }\n ],\n \"dependencyBumps\": []\n },\n {\n \"version\": \"6.0.1\",\n \"entries\": [],\n \"dependencyBumps\": []\n },\n {\n \"version\": \"6.0.0\",\n \"entries\": [\n {\n \"bump\": \"minor\",\n \"title\": \"Search input stripped back and made generic; debounce input dressed in the shared chrome\",\n \"body\": \"- **`uni-debounce-input`** now wears the themed input chrome via `uni-input-box`\\n (color, border, typeface, focus ring) and gains `label` (accessible name),\\n `placeholder`, `disabled`, `pre-input`/`post-input` attribute slots for adornments,\\n ARIA passthroughs (`role`, `ariaExpanded`, `ariaControls`, `ariaActivedescendant`)\\n for composite widgets, and `clear()`/`focus()` methods. Debounce behavior unchanged.\\n- **`uni-search-input` redesigned**: the opinionated solid-primary pill bar with the\\n embedded `title-large` label is gone. It's now a standard themed field — decorative\\n leading magnifier, clear button while a query exists (refocusing on clear), Enter\\n emits `search`, Escape closes/clears.\\n- **Type-ahead added**: pass `suggestions` (refresh from `change`) and the field\\n becomes an ARIA combobox — keyboard-navigable listbox (ArrowUp/Down, Enter selects,\\n emitting `suggestionSelected` + `search`), `aria-activedescendant` wiring, focus-out\\n closing. New `searchInput` theme options: `searchSymbol`, `clearSymbol`, suggestion\\n list `listColor`/`listShadow`/`listBorderRadius`, `maxSuggestions`.\\n- Visual breaking change for SearchInput consumers (deliberate strip-back); code API\\n is compatible (`label`/`width`/`change`/`search` retained; `label` is now the\\n accessible name + placeholder fallback rather than displayed text).\",\n \"commit\": \"5a6fc60\"\n },\n {\n \"bump\": \"minor\",\n \"title\": \"Checkbox, radio, and toggle conform to theme tokens\",\n \"body\": \"- The last hardcoded control colors (`#FFF`, `#ccc`, `#d0d0d0`, `#e0e0e0`,\\n `rgba(0,0,0,0.2)`) are gone. Chrome now resolves from new option tokens —\\n checkbox `boxColor: 'surface'`; radio `ringColor: 'outline'` / `fillColor:\\n correctly on dark and brand themes.\\n- The checkbox's check/dash strokes wear the variant's paired on-color\\n (`on-primary`, `on-warn`, …) instead of assuming white; disabled states use the\\n `disabled`/`on-disabled` tokens; the toggle knob's shadow is the theme's\\n brand-tinted `raised` stack, and its hover uses the button convention's\\n brightness filter instead of a fixed grey.\",\n \"commit\": \"8953d59\"\n },\n {\n \"bump\": \"minor\",\n \"title\": \"New `uni-stat` KPI tile\",\n \"body\": \"- Muted label + large headline value (numbers auto-compact via\\n `Intl.NumberFormat`: `48234` → \\\"48.2K\\\") set in a new `stat` type-scale role\\n (32px semibold, proportional figures).\\n- Optional signed `delta` whose ink is decided by direction × `upIsGood` — churn\\n going down reads green, tickets going up reads red — with the arrow glyph\\n accompanied by screen-reader \\\"up\\\"/\\\"down\\\" text so state never rides color alone;\\n `caption` names the comparison period.\\n- Optional decorative 12-point sparkline (`trend` input): stroke in the outline hue,\\n endpoint dotted in the accent, `aria-hidden`.\\n- Fully token-driven via `stat.options`: card-recipe frame (`color`/`border`/\\n `borderRadius`), `labelTypeface`/`valueTypeface`, `positiveColor`/`negativeColor`\\n (the semantic inks, AA-guaranteed on surface), `trendColor`/`trendAccent`, spacing.\",\n \"commit\": \"7a6da4f\"\n },\n {\n \"bump\": \"minor\",\n \"title\": \"Fix invisible icons; icons become first-class theme primitives\",\n \"body\": \"- **Bug**: `uni-icon` resolves icons from `theme.icons`, but every theme shipped\\n `icons: {}` — the icon record was never wired in, so all icons (dialog close, button\\n spinner, search/clear affordances) rendered nothing.\\n- **Fix + pattern**: the default icon set now lives in core (`BaseIcons`, in\\n `concepts/iconography`) and `createTheme` merges a theme's `icons` over it — themes\\n can override or add icons under any name (inline SVG data URIs, masked with\\n `currentColor` so they recolor with the theme). The angular `icons` record re-exports\\n `BaseIcons` (deprecated).\\n- `uni-icon` also sets the standard `mask-image` (was webkit-only, so icons were\\n invisible in Firefox regardless) and renders nothing for unknown names instead of a\\n broken `url(\\\"undefined\\\")`.\\n- The emitted `uni-theme.ts` gains an editable `icons` section, and the MCP's\\n `generate-uni-theme` guidance instructs agents: never inline SVG in components —\\n define an icon once in the theme's `icons` map and render it via `<uni-icon>`.\",\n \"commit\": \"fea0b2e\"\n }\n ],\n \"dependencyBumps\": []\n },\n {\n \"version\": \"5.2.0\",\n \"entries\": [\n {\n \"bump\": \"minor\",\n \"title\": \"New `uni-avatar` and `uni-avatar-group` components\",\n \"body\": \"- Graceful fallback chain: image → initials derived from `name` (first + last) →\\n themed symbol. Accessible by default: `role=\\\"img\\\"` + `aria-label` from the name,\\n `aria-hidden` when purely decorative.\\n- Fully token-driven: variants color from the role's `*-container` tokens, sizes from\\n the theme's `avatar` size records, corner radius from `options.borderRadius`\\n (`max` = circles; a `sharp` theme gets square avatars), initials typeface from\\n `options.typeface`, fallback symbol from `options.fallbackSymbol`.\\n- `uni-avatar-group` stacks avatars with a token-driven overlap (spacing token) and\\n separator ring (`ringColor`/`ringWidth` options); `max` collapses the overflow into\\n a themed \\\"+N\\\" chip that is itself a `uni-avatar` (verbatim `text` input).\",\n \"commit\": \"1f5ee1d\"\n },\n {\n \"bump\": \"minor\",\n \"title\": \"New `uni-breadcrumb` component\",\n \"body\": \"- WAI-ARIA breadcrumb: labelled `nav` landmark wrapping an ordered list, the last item\\n marked `aria-current=\\\"page\\\"`, separators decorative (`aria-hidden`).\\n- Data-driven `items` (root first). Items with `href` render as real anchors; without\\n one they render as link-styled buttons emitting `itemClicked` for SPA routing.\\n- Token-driven via `breadcrumb.options`: `typeface`, link `color`, `currentColor`,\\n `separatorSymbol` (material symbol), and `gap` spacing.\",\n \"commit\": \"dca84b1\"\n },\n {\n \"bump\": \"minor\",\n \"title\": \"Button corner rounding and typography conform to component-options tokens\",\n \"body\": \"- `button` and `iconButton` themes gain `options: { borderRadius: 'max' }`; the hardcoded\\n per-size pixel radii (11/13/18/24) and the icon button's inline `borderRadius: 999` are\\n removed. Components resolve the token through `theme.radius()`, so the theme's radii\\n scale — shape languages (`sharp` → square, `playful` → pill) and custom radii\\n primitives — now restyles buttons like every other tokened component.\\n- Back-compat: the options radius is applied before theme `sizes`/`fixed` styles, so\\n hand-authored themes that still set a size-level `borderRadius` keep winning; icon\\n buttons fall back to the legacy circle when a theme predates iconButton options.\\n- `button` themes also gain `options: { typeface: 'button' }`: the hardcoded\\n `fontFamily: 'Euphemia'` (a font no theme loads) is removed from `fixed` and the sizes;\\n labels now render the type scale's `button` role (Red Hat Display, medium, capitalize),\\n with per-size `fontSize` still applied by `sizes`. Point the token at any typography\\n role — including custom ones — to restyle every button label.\\n- New `UniButtonOptions` interface (`borderRadius`, `typeface`) exported from the button\\n model.\",\n \"commit\": \"7844dde\"\n },\n {\n \"bump\": \"minor\",\n \"title\": \"Card frame conforms to token primitives\",\n \"body\": \"- The card theme's hardcoded frame (`borderStyle`/`borderWidth`/`borderRadius: '8px'` in\\n `fixed`, `borderColor` per variant) is replaced by tokens: the card resolves its border\\n from the **border primitive named by its variant** (`borders.primary` …\\n `borders.success`), its corner radius from the radii scale (`options.borderRadius:\\n- `UniCardOptions` gains `border` (pin every card to one primitive — including a custom\\n one — instead of variant-following) and documents the existing `borderRadius`/\\n `elevation`; redefining a border primitive in a theme now restyles cards and every\\n other component sharing that token.\\n- Token styles apply under the merged theme style, so hand-authored themes that still\\n set card `fixed`/`variants` frame styles keep winning. No visual change for default\\n themes — this is pure tokenization.\",\n \"commit\": \"7844dde\"\n },\n {\n \"bump\": \"minor\",\n \"title\": \"New `uni-drawer` and `uni-app-bar` — the dashboard shell\",\n \"body\": \"- **`uni-drawer`** has two modes sharing one content slot: `side` renders an in-flow\\n `<aside>` that pushes content (width-animated open/close, divider border primitive at\\n its edge, `aria-hidden` while closed); `over` renders a native `<dialog>` in the top\\n layer — focus trap, Escape, and scrim backdrop come from the platform, sliding in\\n from `position` (`start`/`end`). `open` is a two-way `model()`; Escape and backdrop\\n clicks keep it in sync. Tokens: `drawer.options` (`color`, `width`, `divider`,\\n `elevation`, `padding`, `backdrop`).\\n- **`uni-app-bar`**: leading/trailing content projection slots around a `title` (or\\n custom center content), trailing pushed to the far edge; optional `sticky`. Tokens:\\n `appBar.options` (`color`, `height`, `divider`, `typeface`, `padding`, `gap`,\\n optional `elevation`).\\n- The Drawer \\\"DashboardShell\\\" story documents the composition recipe: app bar with a\\n menu toggle + side drawer + content.\",\n \"commit\": \"17cf662\"\n },\n {\n \"bump\": \"minor\",\n \"title\": \"Progress gauge derives from the palette instead of hardcoded pastels\",\n \"body\": \"The gauge's track colors were fixed pastel hexes (`#b3d4ea`, `#b3e7c2`, …) that ignored\\nthe active theme entirely — secondary and success even shared the same green. Tracks now\\nuse the role's `*-container` token (the palette's soft tint of that role) and arcs the\\nrole base, so gauges follow any brand palette, in both light and dark modes.\",\n \"commit\": \"7844dde\"\n },\n {\n \"bump\": \"minor\",\n \"title\": \"New `uni-skeleton` loading placeholder\",\n \"body\": \"- Three shapes: `text` (multi-line, ending on a short line like real copy), `rect`,\\n and `circle`; explicit `width`/`height` accept CSS strings or px numbers.\\n- Painted with surface tokens (`skeleton.options`: `color`, `highlightColor`,\\n `borderRadius`, `gap`) so placeholders sit naturally on light and dark themes; the\\n shimmer sweep (`animation`/`duration` options) only runs when the user allows motion\\n and degrades to static blocks under `prefers-reduced-motion`.\\n- `aria-hidden` — placeholders are invisible to assistive tech by design.\",\n \"commit\": \"4ccf18b\"\n },\n {\n \"bump\": \"minor\",\n \"title\": \"New `uni-slider` component — clears the declared-but-unbuilt `ComponentName` entry\",\n \"body\": \"- Native `<input type=\\\"range\\\">` under the hood: platform keyboard interaction\\n (arrows, Home/End, Page Up/Down) and ARIA slider semantics for free; Signal Forms\\n contract (`FormValueControl<number>`) matching Input/Textarea.\\n- `min`/`max`/`step` inputs (fractional steps supported), required accessible `label`.\\n- Token-driven via `slider.options`: fill/thumb `color`, `trackColor`, `borderRadius`,\\n and geometry (`trackHeight`, `thumbSize`). The fill level rides a CSS custom\\n property, so dragging never regenerates Emotion styles; Firefox uses the native\\n `::-moz-range-progress`, WebKit a gradient stop.\",\n \"commit\": \"5d9062a\"\n },\n {\n \"bump\": \"minor\",\n \"title\": \"New `uni-tabs` / `uni-tab` components\",\n \"body\": \"- Full WAI-ARIA tabs pattern: `tablist`/`tab`/`tabpanel` roles with wired\\n `aria-selected`/`aria-controls`/`aria-labelledby`, roving tabindex, automatic\\n activation on ArrowLeft/ArrowRight (wrapping, disabled tabs skipped), Home/End,\\n and motion-safe transitions.\\n- `selectedIndex` is a two-way `model()`; selection snaps to the nearest enabled tab.\\n Panel content is captured per-tab and only the selected panel is instantiated.\\n- Every visual knob is a theme option token (`tabs.options`): `typeface`, `textColor`,\\n `activeTextColor`, `indicatorColor`, `indicatorThickness` (thickness token),\\n `divider` (border primitive), `gap`/`padding` (spacing tokens), `borderRadius`, and\\n optional `activeColor` — the defaults render underline tabs; `borderRadius: 'max'` +\\n `activeColor` turns them into segmented pills with no component changes.\",\n \"commit\": \"15a8f73\"\n },\n {\n \"bump\": \"minor\",\n \"title\": \"New `uni-textarea` component\",\n \"body\": \"- Multi-line text field with the same Signal Forms contract as `uni-input`\\n (`FormValueControl<string>`: `value` model, `disabled`/`invalid`/`dirty`/`required`,\\n touched-aware error styling, `aria-*` wiring).\\n- Reuses `uni-input-box` for its chrome, so it inherits the input's themed color,\\n border, typeface, focus outline, and disabled treatment automatically; the box's\\n field selectors now cover `textarea` (with auto height and vertical padding), and\\n the box accepts a `height` override.\\n- Theme options follow the token pattern: `textarea: { options: { rows: 3, resize:\\n instance.\",\n \"commit\": \"b04b97b\"\n },\n {\n \"bump\": \"minor\",\n \"title\": \"Theme Builder becomes the full playground (PRD §5.2)\",\n \"body\": \"- **Light & dark side by side**: both palettes generate on every input change,\\n independent of the storybook-wide mode toggle, each rendered in its own panel.\\n- **Contrast report panel**: live pass/fail matrix over all checked pairs (summary +\\n failing rows always visible, full detail on demand). Failures only occur with hard\\n brand pins; the panel says so and points at soft targets.\\n- **Shape language input** (`sharp`/`modern`/`playful`): applies `ShapeRadii` live via\\n the new `radii` pass-through on `BrandPaletteConfig`/`createThemeFromPalette`.\\n- **Export paths**: copy the static `uni-theme.ts` (via `emitThemeFile`), copy a\\n pre-encoded `ng add` command, or copy W3C DTCG JSON for both modes via the new\\n `emitDtcgTokens()` interop emitter in uni-core (Style Dictionary compatible).\",\n \"commit\": \"8f55b4c\"\n }\n ],\n \"dependencyBumps\": []\n },\n {\n \"version\": \"5.1.0\",\n \"entries\": [\n {\n \"bump\": \"minor\",\n \"title\": \"Brand-tinted, theme-scoped elevation shadows (PRD §3.5.C)\",\n \"body\": \"- New `generateShadows(colors, mode)`: light themes replace the dead-neutral\\n `rgba(0,0,0,…)` stacks with a shadow ink pulled toward the brand hue; dark themes go\\n near-zero (`raised: none`) with only a faint veil on floating overlays — elevation\\n reads from the surface lightness steps instead. The `warn` glow is tinted with the\\n theme's own error color in both modes.\\n- `generateThemes` now returns `lightShadows`/`darkShadows`; `generateUniThemes`,\\n `createThemeFromPalette` (Theme Builder), the emitted `uni-theme.ts`, and the shipped\\n stock Light/Dark themes all carry them.\",\n \"commit\": \"c1dc853\"\n },\n {\n \"bump\": \"patch\",\n \"title\": \"Fix `ng add` against real published packages (found by fresh `ng new` e2e):\",\n \"body\": \"- The schematic bundle is CJS, but ng-packagr stamps `\\\"type\\\": \\\"module\\\"` into the\\n published package.json, so Node loaded it as ESM and the CLI reported \\\"no ng add\\n actions\\\". A nested `schematics/package.json` (`\\\"type\\\": \\\"commonjs\\\"`) scopes the\\n bundle back to CJS.\\n- The emitted `uni-theme.ts` used dot access on `Colors` (which has an index\\n signature), failing under `ng new`'s strict `noPropertyAccessFromIndexSignature`.\\n The emitter (and the MCP tool's guidance) now uses bracket access throughout.\\n- `uni-angular`'s peer range on `uni-core` is now `workspace:^` (publishes as `^5.x`)\\n instead of `workspace:*` (published as an exact pin). Alongside changesets'\\n `onlyUpdatePeerDependentsWhenOutOfRange`, this stops minor releases from being\\n inflated to majors by the peer-dependents rule — the cause of the 4.0.0 and 5.0.0\\n version jumps.\",\n \"commit\": \"f2951db\"\n }\n ],\n \"dependencyBumps\": []\n },\n {\n \"version\": \"5.0.0\",\n \"entries\": [\n {\n \"bump\": \"minor\",\n \"title\": \"OKLCH theme generation engine (`concepts/generation`)\",\n \"body\": \"- New `generateThemes(input)` / `generateUniThemes(input)`: brand seed(s) in, complete\\n WCAG-AA light+dark `Colors` pair out, with a machine-readable `ContrastReport`\\n (110 checked pairs per theme pair). Pure and deterministic.\\n- All palette math moved from HSL to perceptual OKLCH: uniform lightness slots across\\n hues, per-category chroma model (`CategoryChroma`), dark-mode accent chroma decoupling\\n (C ≤ 0.16), and a contrast guard-rail that adjusts lightness only — never hue.\\n- Brand colors ride as soft `targets` (kept verbatim when already AA, lightness-adjusted\\n when not) alongside the existing hard `brand` pins; accepted by `generatePalette`,\\n `createThemeFromPalette`, and Angular's `BrandPaletteConfig`.\\n- Semantic inks re-tuned per role: error 27°/C 0.20, warn 55°/C 0.18 (rotated off amber —\\n dark yellow reads brown), success 152°/C 0.16.\\n- `createTheme` accepts optional `radii`/`shadows` overrides; `ShapeRadii` presets\\n (`sharp` / `modern` / `playful`) emitted via the `shape` generation input.\\n- Theme Builder ships nine curated AA-clean presets built on soft targets.\\n- Deprecated (thin wrappers/tables retained): `uniColor`, `randomRangeValue`,\\n `CategorySaturation`, `CategoryLightness`. `schemeHues` moved to `color.utils`.\\n- `createTheme` deep-merges optional `borders` and `components` overrides over its\\n derived defaults — themes can define custom named primitives and rewire per-component\\n options without restating untouched sections.\\n- New `emitThemeFile()` renders a static `uni-theme.ts` — literal colors, visible border\\n primitives, sparse component overrides — the editable source of truth; the engine\\n never ships to the browser.\\n- New `ng add @uni-design-system/uni-angular` schematic: installs the peer set, writes\\n the generated theme file, registers `UNI_THEMES` in `app.config.ts`, adds typeface\\n links, scaffolds a themed smoke test, and prints the contrast summary.\\n- New MCP tool `generate-uni-theme`: returns the static theme file content, provider\\n snippet, and contrast report, with agent guidance to edit the file for restyling.\\n- `uni-core` gains its first Vitest suite, including a 1,080-seed contrast property\\n corpus with zero tolerance in both modes; the schematic gets its own spec suite.\",\n \"commit\": \"f7f0bdd\"\n }\n ],\n \"dependencyBumps\": []\n },\n {\n \"version\": \"4.0.0\",\n \"entries\": [\n {\n \"bump\": \"minor\",\n \"title\": \"Porting Components\",\n \"body\": \"\",\n \"commit\": \"ef9b3b5\"\n }\n ],\n \"dependencyBumps\": []\n },\n {\n \"version\": \"3.0.2\",\n \"entries\": [],\n \"dependencyBumps\": []\n },\n {\n \"version\": \"3.0.1\",\n \"entries\": [],\n \"dependencyBumps\": []\n },\n {\n \"version\": \"3.0.0\",\n \"entries\": [],\n \"dependencyBumps\": []\n },\n {\n \"version\": \"2.0.4\",\n \"entries\": [],\n \"dependencyBumps\": []\n },\n {\n \"version\": \"2.0.3\",\n \"entries\": [],\n \"dependencyBumps\": []\n },\n {\n \"version\": \"2.0.2\",\n \"entries\": [],\n \"dependencyBumps\": []\n },\n {\n \"version\": \"2.0.1\",\n \"entries\": [\n {\n \"bump\": \"patch\",\n \"title\": \"Fix: switch to bundled dual-package distribution via Vite to resolve strict ESM relative path failures\",\n \"body\": \"\",\n \"commit\": \"e2cad74\"\n },\n {\n \"bump\": \"patch\",\n \"title\": \"Setting Fixed Versioning for all packages.\",\n \"body\": \"\",\n \"commit\": \"be0fb26\"\n }\n ],\n \"dependencyBumps\": []\n },\n {\n \"version\": \"1.1.0\",\n \"entries\": [\n {\n \"bump\": \"minor\",\n \"title\": \"Adding cjs support\",\n \"body\": \"\",\n \"commit\": \"4a049de\"\n }\n ],\n \"dependencyBumps\": []\n },\n {\n \"version\": \"1.0.0\",\n \"entries\": [\n {\n \"bump\": \"major\",\n \"title\": \"init release\",\n \"body\": \"\",\n \"commit\": \"7d18157\"\n }\n ],\n \"dependencyBumps\": []\n }\n ]\n },\n {\n \"package\": \"@uni-design-system/uni-react\",\n \"releases\": [\n {\n \"version\": \"8.2.0\",\n \"entries\": [\n {\n \"bump\": \"patch\",\n \"title\": \"Ship `CHANGELOG.md` in the published packages. The release notes existed only in the repo; an installed package carried no record of what changed, so upgrade questions couldn't be answered from `node_modules`. uni-angular copies it into the ng-packagr `dist` via `assets`; the rest add it to `files`.\",\n \"body\": \"\",\n \"commit\": \"e706e38\"\n }\n ],\n \"dependencyBumps\": []\n },\n {\n \"version\": \"8.1.0\",\n \"entries\": [],\n \"dependencyBumps\": []\n },\n {\n \"version\": \"8.0.0\",\n \"entries\": [],\n \"dependencyBumps\": []\n },\n {\n \"version\": \"7.3.0\",\n \"entries\": [],\n \"dependencyBumps\": []\n },\n {\n \"version\": \"7.2.0\",\n \"entries\": [],\n \"dependencyBumps\": []\n },\n {\n \"version\": \"7.1.0\",\n \"entries\": [],\n \"dependencyBumps\": []\n },\n {\n \"version\": \"7.0.0\",\n \"entries\": [],\n \"dependencyBumps\": []\n },\n {\n \"version\": \"6.1.0\",\n \"entries\": [],\n \"dependencyBumps\": []\n },\n {\n \"version\": \"6.0.1\",\n \"entries\": [],\n \"dependencyBumps\": []\n },\n {\n \"version\": \"6.0.0\",\n \"entries\": [],\n \"dependencyBumps\": []\n },\n {\n \"version\": \"5.2.0\",\n \"entries\": [],\n \"dependencyBumps\": []\n },\n {\n \"version\": \"5.1.0\",\n \"entries\": [],\n \"dependencyBumps\": []\n },\n {\n \"version\": \"5.0.0\",\n \"entries\": [],\n \"dependencyBumps\": [\n \"@uni-design-system/uni-core@5.0.0\"\n ]\n },\n {\n \"version\": \"4.0.0\",\n \"entries\": [],\n \"dependencyBumps\": [\n \"@uni-design-system/uni-core@4.0.0\"\n ]\n },\n {\n \"version\": \"3.0.2\",\n \"entries\": [],\n \"dependencyBumps\": [\n \"@uni-design-system/uni-core@3.0.2\"\n ]\n },\n {\n \"version\": \"3.0.1\",\n \"entries\": [],\n \"dependencyBumps\": [\n \"@uni-design-system/uni-core@3.0.1\"\n ]\n },\n {\n \"version\": \"3.0.0\",\n \"entries\": [],\n \"dependencyBumps\": [\n \"@uni-design-system/uni-core@3.0.0\"\n ]\n },\n {\n \"version\": \"2.0.4\",\n \"entries\": [],\n \"dependencyBumps\": [\n \"@uni-design-system/uni-core@2.0.4\"\n ]\n },\n {\n \"version\": \"2.0.3\",\n \"entries\": [],\n \"dependencyBumps\": [\n \"@uni-design-system/uni-core@2.0.3\"\n ]\n },\n {\n \"version\": \"2.0.2\",\n \"entries\": [\n {\n \"bump\": \"patch\",\n \"title\": \"Fix: switch React package distribution to bundled multi-format outputs via Vite to resolve strict ESM runtime and source compilation issues inside consumers.\",\n \"body\": \"\",\n \"commit\": \"c5c552a\"\n }\n ],\n \"dependencyBumps\": [\n \"@uni-design-system/uni-core@2.0.2\"\n ]\n },\n {\n \"version\": \"2.0.1\",\n \"entries\": [\n {\n \"bump\": \"patch\",\n \"title\": \"Setting Fixed Versioning for all packages.\",\n \"body\": \"\",\n \"commit\": \"be0fb26\"\n }\n ],\n \"dependencyBumps\": [\n \"@uni-design-system/uni-core@2.0.1\"\n ]\n },\n {\n \"version\": \"2.0.0\",\n \"entries\": [\n {\n \"bump\": \"minor\",\n \"title\": \"Adding cjs support\",\n \"body\": \"\",\n \"commit\": \"4a049de\"\n }\n ],\n \"dependencyBumps\": [\n \"@uni-design-system/uni-core@1.1.0\"\n ]\n },\n {\n \"version\": \"1.0.0\",\n \"entries\": [\n {\n \"bump\": \"major\",\n \"title\": \"init release\",\n \"body\": \"\",\n \"commit\": \"7d18157\"\n }\n ],\n \"dependencyBumps\": [\n \"@uni-design-system/uni-core@1.0.0\"\n ]\n }\n ]\n },\n {\n \"package\": \"@uni-design-system/uni-mcp\",\n \"releases\": [\n {\n \"version\": \"4.7.0\",\n \"entries\": [\n {\n \"bump\": \"minor\",\n \"title\": \"`get-changelog`: release notes as a first-class MCP tool, plus a `uni://changelog/{package}` resource.\",\n \"body\": \"The index now ingests every published package's changesets `CHANGELOG.md` (a new build adapter parses them into structured releases — bump level, headline, full body, commit, dependency bumps). The tool answers \\\"what changed in X?\\\" and \\\"what do I get by upgrading?\\\": `version` returns one release's full notes (`\\\"8.1\\\"` matches every 8.1.x), `since` returns the full notes of every release after an installed version, and no scope returns a compact release digest. `package` accepts npm or short names (`uni-angular` is the default).\",\n \"commit\": \"e706e38\"\n },\n {\n \"bump\": \"minor\",\n \"title\": \"`export-dtcg-tokens`: W3C DTCG JSON (Style Dictionary compatible) for a built-in theme's color, radius, and spacing scales, named with Uni token ids — exposing core's existing `emitDtcgTokens` as an MCP tool for external token pipelines. The `UniTheme` JSON from the theme tools remains the lossless primary format.\",\n \"body\": \"\",\n \"commit\": \"57a8c4c\"\n },\n {\n \"bump\": \"patch\",\n \"title\": \"Ship `CHANGELOG.md` in the published packages. The release notes existed only in the repo; an installed package carried no record of what changed, so upgrade questions couldn't be answered from `node_modules`. uni-angular copies it into the ng-packagr `dist` via `assets`; the rest add it to `files`.\",\n \"body\": \"\",\n \"commit\": \"e706e38\"\n }\n ],\n \"dependencyBumps\": []\n },\n {\n \"version\": \"4.6.0\",\n \"entries\": [\n {\n \"bump\": \"minor\",\n \"title\": \"Runtime theme JSON: `generate-runtime-theme`, `get-runtime-theme`, and a theme registry endpoint\",\n \"body\": \"`generate-uni-theme` returns `uni-theme.ts` **source** — codegen by design, and\\nthe right answer for branding an app permanently. It is the wrong answer when a\\ntheme needs to apply _now_: an agent had to write a file and rebuild. These tools\\nclose that gap (ROADMAP Track 1 item 4).\\n- **`generate-runtime-theme`** — brand hex color(s) in, a WCAG-AA light+dark pair\\n out as validated JSON, ready for `ThemeService.registerTheme(theme, { select:\\n- **`get-runtime-theme`** — a theme that ships with Uni as a registerable\\n `UniTheme`. Distinct from `get-theme-template`, which returns a flat read-only\\n projection of token values rather than the theme object itself.\\n- **Both validate before returning.** Every theme is run through uni-core's\\n `parseTheme`, so \\\"validated\\\" is checked rather than claimed; a failure comes\\n back as a tool error listing every reason.\\n- **First tools with an MCP `outputSchema`**, so agents get a machine-readable\\n contract instead of parsing prose (opens ROADMAP Track 1 item 6). The theme\\n itself is typed as an opaque validated object on purpose — uni-core's\\n `parseTheme` stays the single source of truth for theme shape, and a mirrored\\n schema here would drift from it.\\n- **Payloads elide the built-in icon set** (`dehydrateTheme`), taking a\\n light+dark result from ~100 KB to ~30 KB — roughly 7.6k tokens instead of 25k\\n per call. Consumers restore them on registration.\\n- **New registry endpoint on the HTTP server**: `GET /themes` lists the ids and\\n `GET /themes/{id}.json` returns one registerable theme, for apps that fetch a\\n theme without speaking MCP. These routes are public, read-only and\\n CORS-enabled so a browser can fetch them directly; `/mcp` stays token-guarded\\n and same-origin.\\n- The server's instructions now carry a routing rule for the four theme tools\\n (brand permanently / apply now / inspect values), and the README tool table\\n lists `create-icon-tokens`, which shipped undocumented.\",\n \"commit\": \"5414517\"\n }\n ],\n \"dependencyBumps\": []\n },\n {\n \"version\": \"4.5.0\",\n \"entries\": [\n {\n \"bump\": \"minor\",\n \"title\": \"Expand `BaseIcons` to 59 icons and add `uni-icon` sizing\",\n \"body\": \"The 34-icon set shipped in 7.0.0 covered the library's own components but not a\\nreal application — an app migrating off inline `<svg>` (or off `uni-symbol`, in\\nAngular) ran out of names almost immediately. Everything here is additive; all\\n34 existing names are unchanged.\\n- **25 new icons**, same Material Symbols Outlined 300 source and the same\\n `0 -960 960 960` grid as the rest of the set: navigation (`link`, `expand`,\\n `gridView`, `listView`), actions (`moreHorizontal`, `copy`, `send`,\\n `refresh`, `dragHandle`, `qrCode`), feedback (`star`, `verified`) and\\n user/system (`group`, `shieldPerson`, `clock`, `mail`, `chat`, `image`,\\n `document`, `payment`, `bank`, `trendingUp`, `extension`, `webhook`,\\n `logout`).\\n - `moreHorizontal` ships alongside `more` because that one is `more_vert` and\\n row-aligned menus need the horizontal kebab.\\n - `star` is separate from `favorite`, which is the heart.\\n- **`uni-icon` gains an optional `size` input** (`CssLength` — bare numbers are\\n px, strings pass through, so `20` and `'1.25rem'` both work). Left unset,\\n behaviour is unchanged: the icon fills its container, which is what lets a\\n themed control size its own glyph through padding. Set, it applies\\n width/height as inline styles, so an explicit size wins over the\\n fill-the-container rule regardless of style injection order. This removes the\\n per-call-site `width`/`height` CSS rule that replacing an inline `<svg>` with\\n `<uni-icon>` would otherwise need.\\n- The MCP `create-icon-tokens` tool now lists the built-in icon names above the\\n token map it returns. Apps routinely hand-draw their own `close`, `check` or\\n `plus`; encoding those into theme tokens works but adds redundant artwork on a\\n foreign grid when the theme already ships the glyph. The tool cannot recognise\\n a shape, so it hands the caller the list to check against before adding\\n anything.\",\n \"commit\": \"c2421c0\"\n }\n ],\n \"dependencyBumps\": []\n },\n {\n \"version\": \"4.4.0\",\n \"entries\": [\n {\n \"bump\": \"minor\",\n \"title\": \"Replace `BaseIcons` with a normalized 34-icon Material Symbols set\",\n \"body\": \"The built-in icon set was 11 glyphs drawn from four different grids\\n(`0 0 24 24`, `0 0 50 50`, `0 0 64 64`, `0 -960 960 960`), so `checkCircle` and\\n`xCircle` rendered as solid filled discs next to a hairline `alertCircle` and an\\noversized `close` — three optical weights in one set.\\n- `BaseIcons` is now Material Symbols Outlined at weight 300, every glyph on a\\n single `0 -960 960 960` grid, grouped by intent: navigation (`menu`,\\n `chevronUp/Down/Left/Right`, `arrowLeft/Right`, `home`, `externalLink`),\\n actions (`search`, `close`, `plus`, `minus`, `more`, `delete`, `edit`,\\n `download`, `upload`, `share`, `filter`), feedback (`check`, `checkCircle`,\\n `xCircle`, `alertCircle`, `info`, `warning`, `lock`) and user/system\\n (`profile`, `settings`, `notification`, `favorite`, `help`, `calendar`).\\n- All 11 previously shipped names are preserved, so existing `<uni-icon>` call\\n sites and theme overrides keep working. Their **appearance changes**: the\\n filled `checkCircle`/`xCircle` are now outlined, and the set reads lighter\\n overall. `spinner` is carried over verbatim, keyframes intact.\\n- New `IconName` and `BaseIconName` types. `IconName` is\\n `BaseIconName | (string & {})`, so built-ins autocomplete and typos surface\\n while themes can still register arbitrary names via `createTheme({ icons })`.\\n `uni-icon`'s `name` input is typed with it instead of `keyof Icons`.\\n- **Breaking**: removes the unused `IconToken`, `IconStyle`, `ToggleableIcon`\\n and `IconConfig` exports. Nothing in the library referenced them and\\n `IconToken`'s 60-name union contradicted the actual `BaseIcons` keys. Use\\n `IconName` instead.\\n- New exported `svgToIconUri(svg, options?)` — the supported way to bring your\\n own icons (a brand set, a designer handoff) into a theme. It normalizes the\\n source (drops the xml declaration, comments and fixed `width`/`height` so the\\n mask scales), percent-encodes it, and **rejects artwork that cannot survive\\n masking**: no `viewBox`, an embedded raster `<image>`, an external reference,\\n a gradient/pattern fill, or more than one paint color. That last one is the\\n trap worth naming — masks use the alpha channel, so a multi-color logo\\n flattens to a silhouette in `currentColor`; pass `{ allowMultiColor: true }`\\n when that is intended. `createTheme({ icons })` merges the result over\\n `BaseIcons` per name, so a built-in name reskins and a new name is added.\\n- New MCP tool `create-icon-tokens`, the agent-facing front end to\\n `svgToIconUri`: hand it a project's inline `<svg>` (or a brand set) and it\\n returns a paste-ready `icons` map for `uni-theme.ts`. It encodes via the same\\n helper, so tokens are byte-identical to the built-in set, and adds the\\n set-level checks a per-icon helper cannot make — which names override\\n built-ins, and whether the artwork mixes viewBox grids. Bad artwork is\\n reported per icon rather than failing the batch, and re-running is safe\\n (already-encoded URIs pass through). The server instructions now point agents\\n at it whenever they encounter inline SVG.\\n- `BaseIcons` is generated by `scripts/generate-icons.mjs` (`pnpm icons:generate`),\\n which fetches from the canonical Material Symbols source and validates every\\n glyph before writing — a malformed path, an off-grid viewBox or geometry\\n outside the grid aborts the run. `pnpm icons:check` verifies the committed\\n file without writing. Add or change icons in that script's manifest and\\n regenerate; the file is not hand-edited. `icon.records.spec.ts` asserts the\\n same invariants against the committed output.\",\n \"commit\": \"f7727aa\"\n }\n ],\n \"dependencyBumps\": []\n },\n {\n \"version\": \"4.3.0\",\n \"entries\": [\n {\n \"bump\": \"minor\",\n \"title\": \"MDX guidelines adapter — authored docs now reach AI agents\",\n \"body\": \"- New build adapter parses each component's co-located `.mdx` docs page into the\\n index's previously-empty `guidelines` field: the `## Overview` prose becomes\\n `whenToUse`, and optional `## Do` / `## Don't` / `## Accessibility` bullet sections\\n map to their fields — so guidelines are authored in the same file the Storybook\\n sidebar shows, with JSX/import scaffolding stripped.\\n- 48 components gain guidelines immediately; `get-guidelines` and `uni://guidelines/*`\\n now answer with real when-to-use guidance (including the canonical selector forms\\n from the 6.0 unification).\\n- MDX↔component matching: shared basename first (`tabs.mdx` → `tabs.component.ts`),\\n same-directory fallback for group docs.\",\n \"commit\": \"076202d\"\n },\n {\n \"bump\": \"patch\",\n \"title\": \"Canonical MDX docs structure across the entire library\",\n \"body\": \"- Component docs pages now follow one flow (spec in AGENTS.md): imports → Overview →\\n Usage (the compact playground: story + source + knobs) → named variation examples →\\n **Theme options** → Accessibility → Do/Don't. Property/API/Methods/Events tables are\\n retired — the playground's controls are the API reference.\\n- New `ThemeOptions` docs block renders a component's per-theme option tokens live from\\n the active Storybook theme (with color swatches), distinguishing per-theme options\\n from per-instance inputs; data-table's raw `ThemeDataBlock` dump is replaced.\\n- All ~55 component pages conform: the 7 form-control pages (200–390 lines of legacy\\n API tables) rewritten; empty Overviews authored (card, tag, icon-button, scroll-area,\\n expand-area, data-table); accessibility bullets added across navigation, feedback,\\n and form components.\\n- The MCP index now carries when-to-use guidance for 55 of 70 components (was 41) and\\n accessibility guidance for 36 (was 21) — the remainder are subcomponents documented\\n on their parent pages and internal directives.\",\n \"commit\": \"4bfb057\"\n }\n ],\n \"dependencyBumps\": []\n },\n {\n \"version\": \"4.2.0\",\n \"entries\": [\n {\n \"bump\": \"minor\",\n \"title\": \"Fix invisible icons; icons become first-class theme primitives\",\n \"body\": \"- **Bug**: `uni-icon` resolves icons from `theme.icons`, but every theme shipped\\n `icons: {}` — the icon record was never wired in, so all icons (dialog close, button\\n spinner, search/clear affordances) rendered nothing.\\n- **Fix + pattern**: the default icon set now lives in core (`BaseIcons`, in\\n `concepts/iconography`) and `createTheme` merges a theme's `icons` over it — themes\\n can override or add icons under any name (inline SVG data URIs, masked with\\n `currentColor` so they recolor with the theme). The angular `icons` record re-exports\\n `BaseIcons` (deprecated).\\n- `uni-icon` also sets the standard `mask-image` (was webkit-only, so icons were\\n invisible in Firefox regardless) and renders nothing for unknown names instead of a\\n broken `url(\\\"undefined\\\")`.\\n- The emitted `uni-theme.ts` gains an editable `icons` section, and the MCP's\\n `generate-uni-theme` guidance instructs agents: never inline SVG in components —\\n define an icon once in the theme's `icons` map and render it via `<uni-icon>`.\",\n \"commit\": \"fea0b2e\"\n }\n ],\n \"dependencyBumps\": []\n },\n {\n \"version\": \"4.1.2\",\n \"entries\": [\n {\n \"bump\": \"patch\",\n \"title\": \"Fix published index losing its Storybook examples, and keep the index in sync\",\n \"body\": \"- `uni-mcp@4.1.x` shipped with **0 examples**: the package build regenerated the index in\\n CI, where `storybook-static` (gitignored) doesn't exist, silently overwriting the\\n committed 107-example index before bundling. `build` is now `tsup` only — the committed\\n `uni-index.json` is the single source of truth and is bundled as-is.\\n- The index is regenerated once per release instead: the changesets `version` step\\n (`pnpm version-packages`) builds Storybook and reruns `build-index` after the version\\n bump, so the refreshed index lands reviewably in the Version Packages PR.\\n- `build-index` now fails loudly when it finds zero examples, so an example-less index\\n can never ship silently again.\\n- Index refreshed to v5.1.0: includes the new component option tokens\\n (`button.behavior.borderRadius`/`typeface`, `card.behavior.borderRadius`), the nine\\n Theme Builder presets' generation updates, and all 107 examples.\",\n \"commit\": \"ffb9692\"\n }\n ],\n \"dependencyBumps\": []\n },\n {\n \"version\": \"4.1.1\",\n \"entries\": [\n {\n \"bump\": \"patch\",\n \"title\": \"Fix `ng add` against real published packages (found by fresh `ng new` e2e):\",\n \"body\": \"- The schematic bundle is CJS, but ng-packagr stamps `\\\"type\\\": \\\"module\\\"` into the\\n published package.json, so Node loaded it as ESM and the CLI reported \\\"no ng add\\n actions\\\". A nested `schematics/package.json` (`\\\"type\\\": \\\"commonjs\\\"`) scopes the\\n bundle back to CJS.\\n- The emitted `uni-theme.ts` used dot access on `Colors` (which has an index\\n signature), failing under `ng new`'s strict `noPropertyAccessFromIndexSignature`.\\n The emitter (and the MCP tool's guidance) now uses bracket access throughout.\\n- `uni-angular`'s peer range on `uni-core` is now `workspace:^` (publishes as `^5.x`)\\n instead of `workspace:*` (published as an exact pin). Alongside changesets'\\n `onlyUpdatePeerDependentsWhenOutOfRange`, this stops minor releases from being\\n inflated to majors by the peer-dependents rule — the cause of the 4.0.0 and 5.0.0\\n version jumps.\",\n \"commit\": \"f2951db\"\n }\n ],\n \"dependencyBumps\": []\n },\n {\n \"version\": \"4.1.0\",\n \"entries\": [\n {\n \"bump\": \"minor\",\n \"title\": \"OKLCH theme generation engine (`concepts/generation`)\",\n \"body\": \"- New `generateThemes(input)` / `generateUniThemes(input)`: brand seed(s) in, complete\\n WCAG-AA light+dark `Colors` pair out, with a machine-readable `ContrastReport`\\n (110 checked pairs per theme pair). Pure and deterministic.\\n- All palette math moved from HSL to perceptual OKLCH: uniform lightness slots across\\n hues, per-category chroma model (`CategoryChroma`), dark-mode accent chroma decoupling\\n (C ≤ 0.16), and a contrast guard-rail that adjusts lightness only — never hue.\\n- Brand colors ride as soft `targets` (kept verbatim when already AA, lightness-adjusted\\n when not) alongside the existing hard `brand` pins; accepted by `generatePalette`,\\n `createThemeFromPalette`, and Angular's `BrandPaletteConfig`.\\n- Semantic inks re-tuned per role: error 27°/C 0.20, warn 55°/C 0.18 (rotated off amber —\\n dark yellow reads brown), success 152°/C 0.16.\\n- `createTheme` accepts optional `radii`/`shadows` overrides; `ShapeRadii` presets\\n (`sharp` / `modern` / `playful`) emitted via the `shape` generation input.\\n- Theme Builder ships nine curated AA-clean presets built on soft targets.\\n- Deprecated (thin wrappers/tables retained): `uniColor`, `randomRangeValue`,\\n `CategorySaturation`, `CategoryLightness`. `schemeHues` moved to `color.utils`.\\n- `createTheme` deep-merges optional `borders` and `components` overrides over its\\n derived defaults — themes can define custom named primitives and rewire per-component\\n options without restating untouched sections.\\n- New `emitThemeFile()` renders a static `uni-theme.ts` — literal colors, visible border\\n primitives, sparse component overrides — the editable source of truth; the engine\\n never ships to the browser.\\n- New `ng add @uni-design-system/uni-angular` schematic: installs the peer set, writes\\n the generated theme file, registers `UNI_THEMES` in `app.config.ts`, adds typeface\\n links, scaffolds a themed smoke test, and prints the contrast summary.\\n- New MCP tool `generate-uni-theme`: returns the static theme file content, provider\\n snippet, and contrast report, with agent guidance to edit the file for restyling.\\n- `uni-core` gains its first Vitest suite, including a 1,080-seed contrast property\\n corpus with zero tolerance in both modes; the schematic gets its own spec suite.\",\n \"commit\": \"f7f0bdd\"\n }\n ],\n \"dependencyBumps\": []\n }\n ]\n }\n ]\n}","/**\n * Runtime store - loads the built `uni-index.json` (inlined into the bundle)\n * and exposes typed queries plus AI-optimized markdown formatters. The server\n * layer only calls into here; it never touches raw index shapes.\n */\nimport indexData from '../data/uni-index.json' with { type: 'json' };\nimport type {\n ComponentModel,\n Framework,\n PackageChangelogModel,\n ReleaseModel,\n ThemeTemplateModel,\n TokenModel,\n UniIndex,\n} from '../schema.js';\n\nconst index = indexData as unknown as UniIndex;\n\nexport type ComponentFilter = { framework?: Framework; category?: string; status?: string };\nexport type TokenFilter = { type?: string; theme?: string; kind?: string };\n\nexport const meta = index.meta;\n\nexport function frameworksFor(c: ComponentModel): Framework[] {\n return Object.keys(c.bindings) as Framework[];\n}\n\nexport function listComponents(filter: ComponentFilter = {}): ComponentModel[] {\n return index.components.filter((c) => {\n if (filter.framework && !c.bindings[filter.framework]) return false;\n if (filter.category && c.category !== filter.category) return false;\n if (filter.status && c.status !== filter.status) return false;\n return true;\n });\n}\n\nexport function getComponent(id: string): ComponentModel | undefined {\n return index.components.find((c) => c.id === id);\n}\n\nexport function listTokens(filter: TokenFilter = {}): TokenModel[] {\n return index.tokens.filter((t) => {\n if (filter.type && t.type !== filter.type) return false;\n if (filter.kind && t.kind !== filter.kind) return false;\n if (filter.theme && !(t.themeValues && filter.theme in t.themeValues)) return false;\n return true;\n });\n}\n\nexport function getToken(id: string): TokenModel | undefined {\n return index.tokens.find((t) => t.id === id);\n}\n\nexport function listThemes(): ThemeTemplateModel[] {\n return index.themes;\n}\n\nexport function getTheme(id: string): ThemeTemplateModel | undefined {\n return index.themes.find((t) => t.id === id);\n}\n\nexport function listChangelogs(): PackageChangelogModel[] {\n return index.changelogs ?? [];\n}\n\n/** Resolve a package by npm name or any short form (\"uni-angular\", \"angular\"). */\nexport function getChangelog(pkg = 'uni-angular'): PackageChangelogModel | undefined {\n const q = pkg.trim().toLowerCase();\n return listChangelogs().find((c) => {\n const name = c.package.toLowerCase();\n const short = name.split('/').pop() ?? name;\n return name === q || short === q || short.replace(/^uni-/, '') === q;\n });\n}\n\n/** Numeric compare over dotted segments; non-numeric segments count as 0. */\nexport function compareVersions(a: string, b: string): number {\n const nums = (v: string) => v.trim().replace(/^v/, '').split('.').map((s) => parseInt(s, 10) || 0);\n const [pa, pb] = [nums(a), nums(b)];\n for (let i = 0; i < Math.max(pa.length, pb.length); i++) {\n const d = (pa[i] ?? 0) - (pb[i] ?? 0);\n if (d) return d;\n }\n return 0;\n}\n\n/** `\"8.1\"` matches every 8.1.x release; `\"8.1.0\"` matches exactly. */\nexport function matchesVersion(version: string, query: string): boolean {\n const v = version.split('.');\n const q = query.trim().replace(/^v/, '').split('.');\n return q.every((seg, i) => v[i] === seg);\n}\n\nexport type ChangelogScope = { version?: string; since?: string };\n\nexport function selectReleases(cl: PackageChangelogModel, scope: ChangelogScope): ReleaseModel[] {\n if (scope.version) return cl.releases.filter((r) => matchesVersion(r.version, scope.version!));\n if (scope.since) return cl.releases.filter((r) => compareVersions(r.version, scope.since!) > 0);\n return cl.releases;\n}\n\nexport type SearchKind = 'component' | 'token' | 'theme' | 'guideline';\nexport type SearchHit = { kind: SearchKind; id: string; label: string; snippet: string };\n\n/** Keyword/substring search across the index (semantic is a later drop-in). */\nexport function search(query: string, kind?: SearchKind): SearchHit[] {\n const q = query.toLowerCase().trim();\n if (!q) return [];\n const hits: SearchHit[] = [];\n const match = (...fields: (string | undefined)[]) =>\n fields.some((f) => f?.toLowerCase().includes(q));\n\n if (!kind || kind === 'component') {\n for (const c of index.components) {\n const apiNames = frameworksFor(c).flatMap((f) => c.bindings[f]!.api.map((a) => a.name));\n if (match(c.id, c.name, c.summary, c.description, c.category, ...apiNames)) {\n hits.push({ kind: 'component', id: c.id, label: c.name, snippet: c.summary || c.description.slice(0, 120) });\n }\n }\n }\n if (!kind || kind === 'token') {\n for (const t of index.tokens) {\n if (match(t.id, t.type, t.description, String(t.value))) {\n hits.push({ kind: 'token', id: t.id, label: t.id, snippet: `${t.type} = ${t.value}` });\n }\n }\n }\n if (!kind || kind === 'theme') {\n for (const t of index.themes) {\n if (match(t.id, t.name, t.description)) {\n hits.push({ kind: 'theme', id: t.id, label: t.name, snippet: t.description });\n }\n }\n }\n if (!kind || kind === 'guideline') {\n for (const c of index.components) {\n const g = c.guidelines;\n if (match(g.whenToUse, ...g.dos, ...g.donts, ...g.accessibility)) {\n hits.push({ kind: 'guideline', id: c.id, label: `${c.name} guidelines`, snippet: g.whenToUse.slice(0, 120) });\n }\n }\n }\n return hits;\n}\n\n// ---------------------------------------------------------------------------\n// Markdown formatters - tight cards, not raw dumps, to keep token usage low.\n// ---------------------------------------------------------------------------\n\nexport function formatComponentList(components: ComponentModel[]): string {\n if (!components.length) return 'No components match that filter.';\n const rows = components.map((c) => {\n const fw = frameworksFor(c).join(', ');\n return `- **${c.name}** \\`${c.id}\\` - ${c.summary || '(no summary)'} _(${c.category}; ${fw})_`;\n });\n return `# Uni components (${components.length})\\n\\n${rows.join('\\n')}`;\n}\n\nfunction formatApiTable(members: ComponentModel['bindings'][Framework]): string {\n const api = members?.api ?? [];\n if (!api.length) return '_No documented inputs/props._';\n return api\n .map((m) => {\n const req = m.required ? ' **(required)**' : '';\n const def = m.default ? ` = \\`${m.default}\\`` : '';\n const dep = m.deprecated ? ` (deprecated: ${m.deprecated})` : '';\n const doc = m.description ? ` - ${m.description}` : '';\n return `- \\`${m.name}: ${m.type}\\`${req}${def} _(${m.kind})_${doc}${dep}`;\n })\n .join('\\n');\n}\n\nexport function formatComponent(c: ComponentModel, framework?: Framework): string {\n const frameworks = framework ? [framework] : frameworksFor(c);\n const out: string[] = [`# ${c.name} \\`${c.id}\\``];\n out.push(`_${c.category} · status: ${c.status} · Uni v${c.version}_`);\n if (c.description) out.push(`\\n${c.description}`);\n\n for (const f of frameworks) {\n const b = c.bindings[f];\n if (!b) {\n out.push(`\\n## ${f}\\n_Not yet available for ${f}._`);\n continue;\n }\n out.push(`\\n## ${f}`);\n out.push(`- import: \\`${b.importPath}\\``);\n out.push(`- selector/tag: \\`${b.selectorOrTag}\\``);\n out.push(`\\n**API**\\n${formatApiTable(b)}`);\n }\n\n if (c.relatedTokens.length) out.push(`\\n**Related tokens:** ${c.relatedTokens.map((t) => `\\`${t}\\``).join(', ')}`);\n if (c.examples.length) {\n const ex = c.examples[0];\n out.push(`\\n**Example - ${ex.title} (${ex.framework})**\\n\\`\\`\\`html\\n${ex.code}\\n\\`\\`\\``);\n if (c.examples.length > 1) out.push(`_+${c.examples.length - 1} more via get-component-examples._`);\n }\n return out.join('\\n');\n}\n\nexport function formatExamples(c: ComponentModel, framework?: Framework): string {\n const examples = framework ? c.examples.filter((e) => e.framework === framework) : c.examples;\n if (!examples.length) return `No examples found for \\`${c.id}\\`${framework ? ` (${framework})` : ''}.`;\n const blocks = examples.map((e) => {\n const link = e.storybookUrl ? `\\n[Open in Storybook](${e.storybookUrl})` : '';\n return `### ${e.title} _(${e.framework})_\\n\\`\\`\\`html\\n${e.code}\\n\\`\\`\\`${link}`;\n });\n return `# ${c.name} - examples (${examples.length})\\n\\n${blocks.join('\\n\\n')}`;\n}\n\nexport function formatToken(t: TokenModel): string {\n const out: string[] = [`# Token \\`${t.id}\\``];\n out.push(`- value: \\`${t.value}\\``);\n out.push(`- type: ${t.type}`);\n out.push(`- kind: **${t.kind}** (${t.target})`);\n if (t.appliesTo) out.push(`- applies to component: \\`${t.appliesTo}\\``);\n if (t.aliasOf) out.push(`- alias of: \\`${t.aliasOf}\\``);\n if (t.description) out.push(`\\n${t.description}`);\n if (t.themeValues && Object.keys(t.themeValues).length) {\n out.push('\\n**Per-theme values**');\n for (const [theme, val] of Object.entries(t.themeValues)) out.push(`- ${theme}: \\`${val}\\``);\n }\n const hint =\n t.kind === 'style'\n ? '\\n_Style token - consumed by Emotion to generate CSS. Reference via the theme, not a raw value._'\n : '\\n_Behavioral token - set as a component input/prop, not as CSS._';\n out.push(hint);\n return out.join('\\n');\n}\n\nexport function formatTokenList(tokens: TokenModel[]): string {\n if (!tokens.length) return 'No tokens match that filter.';\n const rows = tokens.map((t) => `- \\`${t.id}\\` - ${t.type} = \\`${t.value}\\` _(${t.kind})_`);\n return `# Uni tokens (${tokens.length})\\n\\n${rows.join('\\n')}`;\n}\n\nexport function formatThemeList(themes: ThemeTemplateModel[]): string {\n if (!themes.length) return 'No theme templates available.';\n const rows = themes.map((t) => `- **${t.name}** \\`${t.id}\\` - ${t.description}`);\n return `# Uni theme templates (${themes.length})\\n\\n${rows.join('\\n')}`;\n}\n\nexport function formatTheme(t: ThemeTemplateModel): string {\n const out: string[] = [`# Theme \\`${t.id}\\` - ${t.name}`];\n if (t.description) out.push(t.description);\n out.push('\\n## Style overrides (-> Emotion CSS)');\n out.push('_Apply through the theme provider. These become CSS._');\n const styleKeys = Object.entries(t.styleOverrides);\n out.push(styleKeys.map(([k, v]) => `- \\`${k}\\`: \\`${v}\\``).join('\\n'));\n\n out.push('\\n## Component options (-> component inputs/props)');\n out.push('_Behavioral preferences. Pass as inputs/props, not CSS._');\n for (const [component, opts] of Object.entries(t.componentOptions)) {\n out.push(`- **${component}**: ${Object.entries(opts).map(([k, v]) => `\\`${k}=${v}\\``).join(', ')}`);\n }\n if (t.usage) out.push(`\\n## How to apply\\n${t.usage}`);\n return out.join('\\n');\n}\n\nexport function formatGuidelines(c: ComponentModel): string {\n const g = c.guidelines;\n const has = g.whenToUse || g.dos.length || g.donts.length || g.accessibility.length;\n if (!has) return `No authored guidelines yet for \\`${c.id}\\`. (Author them in the component's MDX.)`;\n const out: string[] = [`# ${c.name} - guidelines`];\n if (g.whenToUse) out.push(`\\n**When to use**\\n${g.whenToUse}`);\n if (g.dos.length) out.push(`\\n**Do**\\n${g.dos.map((d) => `- ${d}`).join('\\n')}`);\n if (g.donts.length) out.push(`\\n**Don't**\\n${g.donts.map((d) => `- ${d}`).join('\\n')}`);\n if (g.accessibility.length) out.push(`\\n**Accessibility**\\n${g.accessibility.map((a) => `- ${a}`).join('\\n')}`);\n return out.join('\\n');\n}\n\nfunction formatRelease(r: ReleaseModel, full: boolean): string {\n const out = [`## ${r.version}`];\n for (const bump of ['major', 'minor', 'patch'] as const) {\n const entries = r.entries.filter((e) => e.bump === bump);\n if (!entries.length) continue;\n out.push(`\\n### ${bump[0].toUpperCase()}${bump.slice(1)} changes`);\n for (const e of entries) {\n const commit = e.commit ? ` _(${e.commit.slice(0, 7)})_` : '';\n if (full && e.body) out.push(`\\n**${e.title}**${commit}\\n\\n${e.body}`);\n else out.push(`- ${e.title}${commit}`);\n }\n }\n if (r.dependencyBumps.length) {\n out.push(`\\n_Dependency bumps: ${r.dependencyBumps.map((d) => `\\`${d}\\``).join(', ')}_`);\n }\n if (!r.entries.length && !r.dependencyBumps.length) out.push('_No entries._');\n return out.join('\\n');\n}\n\n/** Scoped calls get full entry bodies; the unscoped list stays a compact digest. */\nexport function formatChangelog(cl: PackageChangelogModel, scope: ChangelogScope = {}): string {\n const releases = selectReleases(cl, scope);\n if (!releases.length) {\n const wanted = scope.version ? `release matching \\`${scope.version}\\`` : `releases after \\`${scope.since}\\``;\n return `No ${wanted} found for ${cl.package}. Latest release: ${cl.releases[0]?.version ?? 'none'}.`;\n }\n const full = Boolean(scope.version || scope.since);\n const shown = full ? releases : releases.slice(0, 15);\n const out = [`# ${cl.package} — release notes`, ...shown.map((r) => formatRelease(r, full))];\n if (shown.length < releases.length) {\n out.push(`_...and ${releases.length - shown.length} older releases. Pass \\`version\\` or \\`since\\` to scope._`);\n }\n return out.join('\\n\\n');\n}\n\nexport function formatSearch(query: string, hits: SearchHit[]): string {\n if (!hits.length) return `No results for \"${query}\".`;\n const rows = hits.slice(0, 40).map((h) => `- _[${h.kind}]_ **${h.label}** \\`${h.id}\\` - ${h.snippet}`);\n const more = hits.length > 40 ? `\\n\\n_...and ${hits.length - 40} more. Narrow with \\`kind\\`._` : '';\n return `# Search: \"${query}\" (${hits.length})\\n\\n${rows.join('\\n')}${more}`;\n}\n","/** Duration (seconds) the default theme assigns `expand`'s `transitionSpeed`. */\nexport const EXPAND_DEFAULT_SPEED = 0.35;\n\n/**\n * Content height (px) at which a reveal runs at exactly its `transitionSpeed`.\n * Roughly a few lines of card content — the size the default 0.35s was tuned on.\n */\nexport const EXPAND_REFERENCE_HEIGHT = 240;\n\n/**\n * Duration envelope at the default speed. A tiny region never blinks past\n * faster than the min; a full-page region never drags longer than the max.\n * Expressed at `EXPAND_DEFAULT_SPEED` and applied as scale-factor clamps, so a\n * theme that slows `transitionSpeed` down widens its envelope proportionally\n * instead of being capped back to the stock feel.\n */\nexport const EXPAND_MIN_DURATION = 0.15;\nexport const EXPAND_MAX_DURATION = 0.6;\n\nconst MIN_SCALE = EXPAND_MIN_DURATION / EXPAND_DEFAULT_SPEED;\nconst MAX_SCALE = EXPAND_MAX_DURATION / EXPAND_DEFAULT_SPEED;\n\n/**\n * Size-aware reveal duration: `speed × √(height ÷ reference)`, clamped.\n *\n * A fixed duration reads as sluggish on a short region and rushed on a tall\n * one; scaling by the square root of height keeps perceived speed steady —\n * bigger reveals get more time, but sublinearly.\n */\nexport const expandDuration = (\n contentHeight: number,\n speed: number = EXPAND_DEFAULT_SPEED,\n): number => {\n const height = Number.isFinite(contentHeight) ? Math.max(contentHeight, 0) : 0;\n const scale = Math.sqrt(height / EXPAND_REFERENCE_HEIGHT);\n return speed * Math.min(Math.max(scale, MIN_SCALE), MAX_SCALE);\n};\n","import type { StyleExpression } from '../style/style.types';\n\nexport type PercentageString = `${number}%`;\nexport type KeyframesExpression = Record<PercentageString, StyleExpression>;\n\nexport const fadeIn: KeyframesExpression = {\n '0%': {\n opacity: 0,\n },\n '100%': {\n opacity: 1,\n },\n};\n\nexport const fadeOut: KeyframesExpression = {\n '0%': {\n opacity: 1,\n },\n '100%': {\n opacity: 0,\n },\n};\n\nexport const expandFadeIn = {\n '0%': {\n gridTemplateRows: '0fr',\n opacity: 0,\n },\n '100%': {\n gridTemplateRows: '1fr',\n opacity: 1,\n },\n};\n\nexport const collapseFadeOut = {\n '0%': {\n gridTemplateRows: '1fr',\n opacity: 1,\n },\n '100%': {\n gridTemplateRows: '0fr',\n opacity: 0,\n },\n};\n","import { Range } from './color.model';\nimport { ColorCategory, ColorRole, UtilityColorRole } from './color.types';\n\n/**\n * @deprecated HSL saturation ranges are superseded by the perceptual OKLCH\n * chroma model inside `concepts/generation` (see `generateThemes`). Kept for\n * legacy callers of `uniColor`; removal follows the changeset major process.\n */\nexport const CategorySaturation: Record<ColorCategory, Range> = {\n jewel: { low: 73, high: 83 },\n pastel: { low: 14, high: 21 },\n earth: { low: 36, high: 41 },\n neutral: { low: 1, high: 10 },\n florescent: { low: 63, high: 100 },\n shades: { low: 0, high: 0 },\n};\n\n/**\n * @deprecated HSL lightness ranges are superseded by the perceptual OKLCH\n * tone slots inside `concepts/generation` (see `generateThemes`).\n */\nexport const CategoryLightness: Record<ColorCategory, Range> = {\n jewel: { low: 56, high: 76 },\n pastel: { low: 89, high: 96 },\n earth: { low: 36, high: 77 },\n neutral: { low: 70, high: 99 },\n florescent: { low: 82, high: 100 },\n shades: { low: 0, high: 100 },\n};\n\nexport const RoleHues: Record<ColorRole | UtilityColorRole, Range> = {\n primary: { low: 73, high: 83, default: 0 },\n secondary: { low: 14, high: 21, default: 0 },\n tertiary: { low: 36, high: 41, default: 0 },\n inverse: { low: 63, high: 100, default: 0 },\n ghost: { low: 0, high: 0, default: 0 },\n warn: { low: 320, high: 20, default: 0 }, // red\n alert: { low: 40, high: 70, default: 60 }, // yellow\n success: { low: 90, high: 150, default: 120 }, // green\n info: { low: 200, high: 260, default: 240 }, // blue\n};\n","import { Range } from './color.model';\nimport type { ColorScheme } from './color.types';\n\n/**\n * @deprecated Randomized generation is superseded by the deterministic OKLCH\n * engine in `concepts/generation` — same input, same theme. Seeded \"surprise\n * me\" behavior belongs in the consumer (playground), not the engine.\n */\nexport const randomRangeValue = ({ low, high }: Range): number => {\n low = Math.ceil(low);\n high = Math.floor(high);\n return Math.floor(Math.random() * (high - low + 1)) + low;\n};\n\nexport const cycle = (angle: number): number => {\n if (angle > 360) return angle - 360;\n if (angle < 0) return angle + 360;\n return angle;\n};\n\nexport const getAnalogousHues = (hue: number): number[] => [cycle(hue + 30), cycle(hue + 60)];\nexport const getComplimentaryHue = (hue: number): number => cycle(hue + 180);\nexport const getTriadicHues = (hue: number): number[] => [cycle(hue + 120), cycle(hue - 120)];\nexport const getSplitComplimentaryHues = (hue: number): number[] => [\n cycle(hue + 150),\n cycle(hue - 150),\n];\n\nexport interface RoleHueSet {\n primary: number;\n secondary: number;\n tertiary: number;\n}\n\n/**\n * Derive the primary/secondary/tertiary hues from a seed hue using the color\n * wheel relationships in {@link ColorScheme}. Pure angle math — works in any\n * hue space (HSL historically, OKLCH in the generation engine).\n */\nexport const schemeHues = (hue: number, scheme: ColorScheme): RoleHueSet => {\n switch (scheme) {\n case 'monochromatic':\n return { primary: hue, secondary: hue, tertiary: hue };\n case 'analogous': {\n const [a, b] = getAnalogousHues(hue);\n return { primary: hue, secondary: a, tertiary: b };\n }\n case 'complimentary': {\n const [a] = getAnalogousHues(hue);\n return { primary: hue, secondary: getComplimentaryHue(hue), tertiary: a };\n }\n case 'splitComplimentary': {\n const [a, b] = getSplitComplimentaryHues(hue);\n return { primary: hue, secondary: a, tertiary: b };\n }\n case 'triadic': {\n const [a, b] = getTriadicHues(hue);\n return { primary: hue, secondary: a, tertiary: b };\n }\n }\n};\n","import { HSL, HSLA, RGB, UniColor } from './color.model';\nimport { CategoryLightness, CategorySaturation, RoleHues } from './color.records';\nimport { randomRangeValue } from './color.utils';\n\nexport function HSLAToString({ hue, saturation, lightness, alpha = 1 }: HSLA): string {\n return `hsla(${hue}, ${saturation}%, ${lightness}%, ${alpha})`;\n}\n\nexport function RGBToString({ red, green, blue }: RGB): string {\n return `rgb(${red}, ${green}, ${blue})`;\n}\n\n/**\n * @deprecated Random HSL generation produces non-deterministic, perceptually\n * uneven colors. Use the OKLCH engine (`generateThemes` in\n * `concepts/generation`) or `generatePalette` instead.\n */\nexport function uniColor({ role, category, alpha = 1 }: UniColor): string {\n const hue = randomRangeValue(RoleHues[role]);\n const saturation = randomRangeValue(CategorySaturation[category]);\n const lightness = randomRangeValue(CategoryLightness[category]);\n\n return HSLAToString({ hue, saturation, lightness, alpha });\n}\n\nexport const RGBToHSL = ({ red, green, blue }: RGB): HSL => {\n red /= 255;\n green /= 255;\n blue /= 255;\n const l = Math.max(red, green, blue);\n const s = l - Math.min(red, green, blue);\n const h = s\n ? l === red\n ? (green - blue) / s\n : l === green\n ? 2 + (blue - red) / s\n : 4 + (red - green) / s\n : 0;\n return {\n hue: 60 * h < 0 ? 60 * h + 360 : 60 * h,\n saturation: 100 * (s ? (l <= 0.5 ? s / (2 * l - s) : s / (2 - (2 * l - s))) : 0),\n lightness: (100 * (2 * l - s)) / 2,\n };\n};\n\n// ── Conversions & contrast (used by the palette factory) ────────────────────\n\nconst clamp = (value: number, min: number, max: number): number =>\n Math.min(max, Math.max(min, value));\n\nconst toHex2 = (value: number): string => clamp(Math.round(value), 0, 255).toString(16).padStart(2, '0');\n\nexport const rgbToHex = ({ red, green, blue }: RGB): string =>\n `#${toHex2(red)}${toHex2(green)}${toHex2(blue)}`.toUpperCase();\n\nexport const hexToRgb = (hex: string): RGB => {\n let h = hex.replace('#', '').trim();\n if (h.length === 3) h = h.split('').map((c) => c + c).join('');\n const int = parseInt(h, 16);\n return { red: (int >> 16) & 255, green: (int >> 8) & 255, blue: int & 255 };\n};\n\nexport const HSLToRGB = ({ hue = 0, saturation = 0, lightness = 0 }: HSL): RGB => {\n const s = clamp(saturation, 0, 100) / 100;\n const l = clamp(lightness, 0, 100) / 100;\n const c = (1 - Math.abs(2 * l - 1)) * s;\n const hp = (((hue % 360) + 360) % 360) / 60;\n const x = c * (1 - Math.abs((hp % 2) - 1));\n const [r1, g1, b1] =\n hp < 1\n ? [c, x, 0]\n : hp < 2\n ? [x, c, 0]\n : hp < 3\n ? [0, c, x]\n : hp < 4\n ? [0, x, c]\n : hp < 5\n ? [x, 0, c]\n : [c, 0, x];\n const m = l - c / 2;\n return {\n red: (r1 + m) * 255,\n green: (g1 + m) * 255,\n blue: (b1 + m) * 255,\n };\n};\n\n/** Build an sRGB hex string straight from HSL channel values. */\nexport const HSLToHex = (hsl: HSL): string => rgbToHex(HSLToRGB(hsl));\n\nexport const hexToHSL = (hex: string): HSL => RGBToHSL(hexToRgb(hex));\n\n/** WCAG relative luminance of an sRGB color (0 = black, 1 = white). */\nexport const relativeLuminance = ({ red, green, blue }: RGB): number => {\n const channel = (value: number): number => {\n const v = value / 255;\n return v <= 0.03928 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\n };\n return 0.2126 * channel(red) + 0.7152 * channel(green) + 0.0722 * channel(blue);\n};\n\n/** WCAG contrast ratio between two colors (1:1 – 21:1). Accepts RGB or hex. */\nexport const contrastRatio = (a: RGB | string, b: RGB | string): number => {\n const la = relativeLuminance(typeof a === 'string' ? hexToRgb(a) : a);\n const lb = relativeLuminance(typeof b === 'string' ? hexToRgb(b) : b);\n const [hi, lo] = la > lb ? [la, lb] : [lb, la];\n return (hi + 0.05) / (lo + 0.05);\n};\n\n// Future Methods - https://codepen.io/jkantner/pen/VVEMRK\n","import type { RGB } from '../color/color.model';\nimport { hexToRgb, rgbToHex } from '../color/color.helper';\n\n/**\n * A color in OKLCH: perceptual lightness `l` (0–1), chroma `c` (0 = grey,\n * ~0.37 = max sRGB vividness) and hue angle `h` in degrees (0–360).\n *\n * Unlike HSL lightness, OKLCH `l` is perceptually uniform — a blue and a\n * yellow at the same `l` *look* equally light — which is what makes derived\n * tonal scales consistent across hues.\n */\nexport interface Oklch {\n l: number;\n c: number;\n h: number;\n}\n\nconst clamp = (value: number, min: number, max: number): number =>\n Math.min(max, Math.max(min, value));\n\n// sRGB transfer function and its inverse (gamma ↔ linear light).\nconst srgbToLinear = (channel: number): number =>\n channel <= 0.04045 ? channel / 12.92 : Math.pow((channel + 0.055) / 1.055, 2.4);\n\nconst linearToSrgb = (channel: number): number =>\n channel <= 0.0031308 ? 12.92 * channel : 1.055 * Math.pow(channel, 1 / 2.4) - 0.055;\n\ninterface LinearRGB {\n r: number;\n g: number;\n b: number;\n}\n\n// OKLab ↔ linear sRGB matrices (Björn Ottosson's reference constants).\nconst linearRgbToOklab = ({ r, g, b }: LinearRGB): { l: number; a: number; b: number } => {\n const l = Math.cbrt(0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b);\n const m = Math.cbrt(0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b);\n const s = Math.cbrt(0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b);\n return {\n l: 0.2104542553 * l + 0.793617785 * m - 0.0040720468 * s,\n a: 1.9779984951 * l - 2.428592205 * m + 0.4505937099 * s,\n b: 0.0259040371 * l + 0.7827717662 * m - 0.808675766 * s,\n };\n};\n\nconst oklabToLinearRgb = (l: number, a: number, b: number): LinearRGB => {\n const l_ = Math.pow(l + 0.3963377774 * a + 0.2158037573 * b, 3);\n const m_ = Math.pow(l - 0.1055613458 * a - 0.0638541728 * b, 3);\n const s_ = Math.pow(l - 0.0894841775 * a - 1.291485548 * b, 3);\n return {\n r: 4.0767416621 * l_ - 3.3077115913 * m_ + 0.2309699292 * s_,\n g: -1.2684380046 * l_ + 2.6097574011 * m_ - 0.3413193965 * s_,\n b: -0.0041960863 * l_ - 0.7034186147 * m_ + 1.707614701 * s_,\n };\n};\n\nconst oklchToLinearRgb = ({ l, c, h }: Oklch): LinearRGB => {\n const rad = (h * Math.PI) / 180;\n return oklabToLinearRgb(l, c * Math.cos(rad), c * Math.sin(rad));\n};\n\nconst GAMUT_EPSILON = 1e-4;\n\nconst inSrgbGamut = ({ r, g, b }: LinearRGB): boolean =>\n r >= -GAMUT_EPSILON &&\n r <= 1 + GAMUT_EPSILON &&\n g >= -GAMUT_EPSILON &&\n g <= 1 + GAMUT_EPSILON &&\n b >= -GAMUT_EPSILON &&\n b <= 1 + GAMUT_EPSILON;\n\n/** Parse a hex color (`#RGB` or `#RRGGBB`) into OKLCH. */\nexport const hexToOklch = (hex: string): Oklch => {\n const { red, green, blue } = hexToRgb(hex);\n const { l, a, b } = linearRgbToOklab({\n r: srgbToLinear(red / 255),\n g: srgbToLinear(green / 255),\n b: srgbToLinear(blue / 255),\n });\n const c = Math.hypot(a, b);\n const h = c < 1e-6 ? 0 : (Math.atan2(b, a) * 180) / Math.PI;\n return { l, c, h: h < 0 ? h + 360 : h };\n};\n\n/**\n * Render OKLCH as an sRGB hex string. Out-of-gamut colors are mapped back\n * into sRGB by reducing chroma only — lightness and hue are preserved, so\n * vivid seeds desaturate gracefully instead of shifting hue or clipping.\n */\nexport const oklchToHex = (color: Oklch): string => {\n const target: Oklch = { l: clamp(color.l, 0, 1), c: Math.max(color.c, 0), h: color.h };\n let rgb = oklchToLinearRgb(target);\n if (!inSrgbGamut(rgb)) {\n let low = 0;\n let high = target.c;\n for (let i = 0; i < 24; i++) {\n const mid = (low + high) / 2;\n if (inSrgbGamut(oklchToLinearRgb({ ...target, c: mid }))) low = mid;\n else high = mid;\n }\n rgb = oklchToLinearRgb({ ...target, c: low });\n }\n // Scale *after* the transfer function: 255 × transfer(channel), rounded once\n // inside rgbToHex. Rounding before scaling collapses every channel to 0/1.\n return rgbToHex(toSrgb255(rgb));\n};\n\nconst toSrgb255 = ({ r, g, b }: LinearRGB): RGB => ({\n red: 255 * linearToSrgb(clamp(r, 0, 1)),\n green: 255 * linearToSrgb(clamp(g, 0, 1)),\n blue: 255 * linearToSrgb(clamp(b, 0, 1)),\n});\n","import type { Colors } from '../theme/theme.model';\nimport type { BrandRole, PaletteConfig } from '../color/color.factory';\nimport type { ColorCategory } from '../color/color.types';\nimport { contrastRatio, hexToRgb, relativeLuminance } from '../color/color.helper';\nimport { schemeHues } from '../color/color.utils';\nimport { hexToOklch, oklchToHex, type Oklch } from './oklch.helper';\nimport type { ContrastCheck } from './generation.types';\n\nexport interface GenerateColorsConfig extends PaletteConfig {\n /**\n * Soft brand anchors, per role: the palette starts from these exact colors\n * but the WCAG guard-rail may adjust lightness (never hue) to reach AA.\n * Contrast-safe counterpart to the hard `brand` pins, which are emitted\n * verbatim even when they fail.\n */\n targets?: Partial<Record<BrandRole, string>>;\n /** Sink for the contrast checks performed while building this palette. */\n checks?: ContrastCheck[];\n}\n\n// ── Tonal architecture ──────────────────────────────────────────────────────\n// Every token maps onto one of these OKLCH lightness slots. Because OKLCH L\n// is perceptually uniform, a slot renders equally light for every hue — the\n// property HSL lacked, and the root fix for muddy derived palettes.\nconst toneMap = (dark: boolean) =>\n dark\n ? {\n accent: 0.78,\n container: 0.42,\n roleSurface: 0.26,\n background: 0.18,\n surface: 0.21,\n surfaceVariant: 0.32,\n outline: 0.66,\n onSurface: 0.93,\n mutedText: 0.76,\n inverse: 0.93,\n onInverse: 0.25,\n onDeep: 0.2,\n onLight: 0.985,\n grey: 0.72,\n disabledContainer: 0.3,\n }\n : {\n accent: 0.55,\n container: 0.9,\n roleSurface: 0.97,\n background: 0.995,\n surface: 0.985,\n surfaceVariant: 0.94,\n outline: 0.6,\n onSurface: 0.25,\n mutedText: 0.48,\n inverse: 0.3,\n onInverse: 0.97,\n onDeep: 0.24,\n onLight: 0.985,\n grey: 0.5,\n disabledContainer: 0.96,\n };\n\n// OKLCH chroma per tonal category — the perceptual successor to the HSL\n// `CategorySaturation` table. Values are accent-level chroma; container and\n// surface chroma are derived fractions.\nexport const CategoryChroma: Record<ColorCategory, number> = {\n jewel: 0.17,\n pastel: 0.055,\n earth: 0.08,\n neutral: 0.03,\n florescent: 0.26,\n shades: 0,\n};\n\n/** Dark-mode accents cap chroma so they don't vibrate on dark surfaces. */\nconst DARK_ACCENT_CHROMA_CAP = 0.16;\n\n// Semantic feedback roles in OKLCH: hue + chroma per role. Chroma differs per\n// role because sRGB gamut room differs by hue at the AA-dark lightness light\n// mode forces on ink tokens: red holds 0.20; amber sits at 55° (not 70° —\n// dark yellow reads brown, dark orange stays lively) with 0.18; green 0.16.\nconst SemanticColors = {\n error: { hue: 27, chroma: 0.2 },\n warn: { hue: 55, chroma: 0.18 },\n success: { hue: 152, chroma: 0.16 },\n} as const;\n\nconst clamp = (value: number, min: number, max: number): number =>\n Math.min(max, Math.max(min, value));\n\n/**\n * Generate a complete {@link Colors} token set in OKLCH. Same contract as\n * `generatePalette` (which delegates here), plus soft brand targets and a\n * contrast-check sink for {@link ContrastReport} consumers.\n */\nexport const generateColors = (config: GenerateColorsConfig): Colors => {\n const {\n seed,\n scheme,\n category,\n mode = 'light',\n accentSaturationFloor = 18,\n brand = {},\n targets = {},\n checks,\n } = config;\n const dark = mode === 'dark';\n const t = toneMap(dark);\n\n // The primary anchor (hard pin > soft target > seed) sets the neutral hue.\n const anchor = hexToOklch(brand.primary ?? targets.primary ?? seed);\n const hues = schemeHues(anchor.h, scheme);\n\n // Chroma model. The floor keeps the brand hue perceptible even for the\n // near-grey `neutral` category (0–100 legacy scale → OKLCH chroma).\n const chromaFloor = (accentSaturationFloor / 100) * 0.28;\n let accentC = Math.max(CategoryChroma[category], chromaFloor);\n if (dark) accentC = Math.min(accentC, DARK_ACCENT_CHROMA_CAP);\n const containerC = Math.max(CategoryChroma[category] * 0.45, accentC * 0.35);\n const surfaceC = Math.min(CategoryChroma[category], 0.012);\n\n const tone = (hue: number, c: number, l: number): string => oklchToHex({ l, c, h: hue });\n\n /**\n * The WCAG guard-rail: walk the foreground's OKLCH lightness away from the\n * background until the pair meets `target` (≤ 50 steps). Hue is never\n * touched; chroma only shrinks as a last resort when L runs out of room.\n */\n const ensureContrast = (fg: Oklch, bg: string, target: number): Oklch => {\n const out: Oklch = { ...fg };\n let hex = oklchToHex(out);\n if (contrastRatio(hex, bg) >= target) return out;\n // Pick the direction that can actually reach the target: each side has a\n // hard ceiling — black tops out at (Ybg + 0.05) / 0.05, white at\n // 1.05 / (Ybg + 0.05) — so staying on the foreground's current side is\n // only right when that side has enough headroom.\n const bgY = relativeLuminance(hexToRgb(bg));\n const darkCeiling = (bgY + 0.05) / 0.05;\n const lightCeiling = 1.05 / (bgY + 0.05);\n let lighten = relativeLuminance(hexToRgb(hex)) >= bgY;\n if (lighten && lightCeiling < target && darkCeiling >= target) lighten = false;\n if (!lighten && darkCeiling < target && lightCeiling >= target) lighten = true;\n const step = lighten ? 0.015 : -0.015;\n for (let i = 0; i < 50 && contrastRatio(hex, bg) < target; i++) {\n if ((step > 0 && out.l < 0.995) || (step < 0 && out.l > 0.02)) {\n out.l = clamp(out.l + step, 0, 1);\n } else {\n out.c = Math.max(0, out.c - 0.02);\n }\n hex = oklchToHex(out);\n }\n return out;\n };\n\n /** Guard-railed token: adjust toward `target` contrast, then record the pair. */\n const contrasted = (fg: Oklch, bgHex: string, target: number): string =>\n oklchToHex(ensureContrast(fg, bgHex, target));\n\n const record = (\n foreground: string,\n background: string,\n foregroundColor: string,\n backgroundColor: string,\n required: number\n ): void => {\n if (!checks) return;\n const ratio = contrastRatio(foregroundColor, backgroundColor);\n checks.push({\n mode,\n foreground,\n background,\n foregroundColor,\n backgroundColor,\n ratio: Math.round(ratio * 100) / 100,\n required,\n pass: ratio >= required,\n level: ratio < required ? 'fail' : ratio >= 7 ? 'AAA' : 'AA',\n });\n };\n\n const background = tone(anchor.h, surfaceC, t.background);\n const surface = tone(anchor.h, surfaceC, t.surface);\n const surfaceVariant = tone(anchor.h, surfaceC, t.surfaceVariant);\n\n // Legible foreground for a given ground: whichever of the tonal near-black /\n // near-white starts closer to AA, then guard-railed the rest of the way.\n const onColor = (hue: number, bg: string, c: number): string => {\n const deep: Oklch = { l: t.onDeep, c: Math.min(c, 0.05), h: hue };\n const light: Oklch = { l: t.onLight, c: Math.min(c, 0.02), h: hue };\n const pick =\n contrastRatio(oklchToHex(deep), bg) >= contrastRatio(oklchToHex(light), bg) ? deep : light;\n return contrasted(pick, bg, 4.5);\n };\n\n // Dark-mode counterpart of a *hard-pinned* brand color: lift lightness only\n // (hue and chroma preserved) until it clears 3:1 on the dark ground.\n const adaptPinForDark = (hex: string): string => {\n const pin = hexToOklch(hex);\n pin.l = Math.max(pin.l, 0.6);\n return oklchToHex(ensureContrast(pin, background, 3));\n };\n\n /**\n * Resolve a role's base color: hard pins are verbatim in light mode and\n * lightness-lifted in dark; soft targets and generated tones are pulled to\n * ≥ 4.5:1 as standalone ink on `background` and `surface` (§3.6).\n */\n const baseFor = (name: BrandRole, hue: number, c: number): string => {\n const pinned = brand[name];\n if (pinned) return dark ? adaptPinForDark(pinned) : pinned;\n const target = targets[name];\n let base: Oklch;\n if (target) {\n // Soft targets keep their own chroma — brand fidelity beats category.\n // Callers that want a vibe cap applied clamp the target before passing\n // it in (see `generateThemes`). Dark mode still decouples chroma.\n base = hexToOklch(target);\n if (dark) {\n base.c = Math.min(base.c, DARK_ACCENT_CHROMA_CAP);\n base.l = Math.max(base.l, t.accent - 0.08);\n }\n } else {\n base = { l: t.accent, c, h: hue };\n }\n return oklchToHex(ensureContrast(ensureContrast(base, background, 4.5), surface, 4.5));\n };\n\n const disabled = dark ? 'rgba(255,255,255,0.12)' : 'rgba(0,0,0,0.12)';\n const onDisabled = dark ? 'rgba(255,255,255,0.38)' : 'rgba(0,0,0,0.38)';\n\n // An accent role's base drives its container/surface/on satellites. Every\n // content satellite passes through the guard-rail and is recorded.\n const role = (name: string, base: string, cC: number = containerC) => {\n const { h, c } = hexToOklch(base);\n const container = tone(h, cC, t.container);\n const roleSurface = tone(h, surfaceC, t.roleSurface);\n const onBase = onColor(h, base, c);\n const onContainer = onColor(h, container, c);\n const onContainerVariant = contrasted({ l: t.mutedText, c: Math.min(cC, 0.06), h }, container, 4.5);\n const border = ensureContrast(ensureContrast(hexToOklch(base), container, 3), surface, 3);\n const borderHex = oklchToHex(border);\n const onRoleSurface = onColor(h, roleSurface, surfaceC);\n const onRoleSurfaceVariant = contrasted(hexToOklch(base), roleSurface, 4.5);\n\n record(`on-${name}`, name, onBase, base, 4.5);\n record(`on-${name}-container`, `${name}-container`, onContainer, container, 4.5);\n record(`on-${name}-container-variant`, `${name}-container`, onContainerVariant, container, 4.5);\n record(`on-${name}-container-border`, `${name}-container`, borderHex, container, 3);\n record(`on-${name}-container-border`, 'surface', borderHex, surface, 3);\n record(`on-${name}-surface`, `${name}-surface`, onRoleSurface, roleSurface, 4.5);\n record(`on-${name}-surface-variant`, `${name}-surface`, onRoleSurfaceVariant, roleSurface, 4.5);\n record(name, 'background', base, background, 4.5);\n record(name, 'surface', base, surface, 4.5);\n\n return {\n [name]: base,\n [`on-${name}`]: onBase,\n [`${name}-container`]: container,\n [`on-${name}-container`]: onContainer,\n [`on-${name}-container-variant`]: onContainerVariant,\n [`on-${name}-container-border`]: borderHex,\n [`${name}-surface`]: roleSurface,\n [`on-${name}-surface`]: onRoleSurface,\n [`on-${name}-surface-variant`]: onRoleSurfaceVariant,\n };\n };\n\n const primaryBase = baseFor('primary', hues.primary, accentC);\n const secondaryBase = baseFor('secondary', hues.secondary, accentC);\n const tertiaryBase = baseFor('tertiary', hues.tertiary, accentC);\n\n // Quaternary is a neutral, near-grey accent tied to the brand hue.\n const quaternaryGrey = brand.quaternary\n ? dark\n ? adaptPinForDark(brand.quaternary)\n : brand.quaternary\n : oklchToHex(ensureContrast({ l: t.grey, c: surfaceC, h: anchor.h }, surface, 3));\n const quaternarySurface = tone(anchor.h, surfaceC, t.roleSurface);\n const onQuaternary = onColor(anchor.h, quaternaryGrey, surfaceC);\n const onQuaternarySurface = onColor(anchor.h, quaternarySurface, surfaceC);\n const onQuaternarySurfaceVariant = contrasted(hexToOklch(primaryBase), quaternarySurface, 4.5);\n const onQuaternaryContainerVariant = contrasted(\n { l: t.mutedText, c: Math.min(containerC, 0.06), h: anchor.h },\n quaternarySurface,\n 4.5\n );\n record('on-quaternary', 'quaternary', onQuaternary, quaternaryGrey, 4.5);\n record('on-quaternary-surface', 'quaternary-surface', onQuaternarySurface, quaternarySurface, 4.5);\n record(\n 'on-quaternary-surface-variant',\n 'quaternary-surface',\n onQuaternarySurfaceVariant,\n quaternarySurface,\n 4.5\n );\n\n // Semantic feedback roles keep colorful, recognizable hues in every category.\n const semantic = (name: 'error' | 'warn' | 'success') => {\n const { hue, chroma } = SemanticColors[name];\n const base = baseFor(name, hue, dark ? Math.min(chroma, DARK_ACCENT_CHROMA_CAP) : chroma);\n const { h } = hexToOklch(base);\n const container = tone(h, containerC + 0.04, t.container);\n const onBase = onColor(h, base, chroma);\n const onContainer = onColor(h, container, chroma);\n record(`on-${name}`, name, onBase, base, 4.5);\n record(`on-${name}-container`, `${name}-container`, onContainer, container, 4.5);\n record(name, 'background', base, background, 4.5);\n record(name, 'surface', base, surface, 4.5);\n return { base, container, onBase, onContainer, h };\n };\n\n const error = semantic('error');\n const warn = semantic('warn');\n const success = semantic('success');\n\n const semanticExtras = (name: 'warn' | 'success', s: ReturnType<typeof semantic>) => {\n const variant = contrasted({ l: t.mutedText, c: 0.06, h: s.h }, s.container, 4.5);\n const border = oklchToHex(\n ensureContrast(ensureContrast(hexToOklch(s.base), s.container, 3), surface, 3)\n );\n record(`on-${name}-container-variant`, `${name}-container`, variant, s.container, 4.5);\n record(`on-${name}-container-border`, `${name}-container`, border, s.container, 3);\n return { variant, border };\n };\n const warnExtras = semanticExtras('warn', warn);\n const successExtras = semanticExtras('success', success);\n\n // Neutral text tokens.\n const onBackground = tone(anchor.h, surfaceC, t.onSurface);\n const onBackgroundVariant = contrasted({ l: t.mutedText, c: surfaceC, h: anchor.h }, background, 4.5);\n const onSurface = tone(anchor.h, surfaceC, t.onSurface);\n const onSurfaceVariant = contrasted(\n { l: dark ? t.mutedText : t.mutedText - 0.14, c: surfaceC, h: anchor.h },\n surfaceVariant,\n 4.5\n );\n record('on-background', 'background', onBackground, background, 4.5);\n record('on-background-variant', 'background', onBackgroundVariant, background, 4.5);\n record('on-surface', 'surface', onSurface, surface, 4.5);\n record('on-surface-variant', 'surface-variant', onSurfaceVariant, surfaceVariant, 4.5);\n\n // Inverse surfaces flip the ground; their accents must stay legible there.\n const inverseSurface = tone(anchor.h, surfaceC, t.inverse);\n const onInverse = tone(anchor.h, surfaceC, t.onInverse);\n const inversePrimary = contrasted(hexToOklch(primaryBase), inverseSurface, 4.5);\n record('on-inverse-surface', 'inverse-surface', onInverse, inverseSurface, 4.5);\n record('on-inverse-surface-primary', 'inverse-surface', inversePrimary, inverseSurface, 4.5);\n record('on-inverse-container', 'inverse-container', onInverse, inverseSurface, 4.5);\n\n const outline = oklchToHex(\n ensureContrast(\n ensureContrast({ l: t.outline, c: Math.min(surfaceC, 0.02), h: hues.primary }, surface, 3),\n background,\n 3\n )\n );\n record('outline', 'surface', outline, surface, 3);\n record('outline', 'background', outline, background, 3);\n\n return {\n ...role('primary', primaryBase),\n ...role('secondary', secondaryBase),\n ...role('tertiary', tertiaryBase),\n\n quaternary: quaternaryGrey,\n 'on-quaternary': onQuaternary,\n 'quaternary-surface': quaternarySurface,\n 'on-quaternary-surface': onQuaternarySurface,\n 'on-quaternary-surface-variant': onQuaternarySurfaceVariant,\n 'on-quaternary-container-variant': onQuaternaryContainerVariant,\n 'on-quaternary-container-border': quaternaryGrey,\n\n // Semantic\n error: error.base,\n 'on-error': error.onBase,\n 'error-container': error.container,\n 'on-error-container': error.onContainer,\n\n warn: warn.base,\n 'on-warn': warn.onBase,\n 'warn-container': warn.container,\n 'on-warn-container': warn.onContainer,\n 'on-warn-container-variant': warnExtras.variant,\n 'on-warn-container-border': warnExtras.border,\n\n success: success.base,\n 'on-success': success.onBase,\n 'success-container': success.container,\n 'on-success-container': success.onContainer,\n 'on-success-container-variant': successExtras.variant,\n 'on-success-container-border': successExtras.border,\n\n // Neutral surfaces\n background,\n 'on-background': onBackground,\n 'on-background-variant': onBackgroundVariant,\n surface,\n 'on-surface': onSurface,\n 'surface-variant': surfaceVariant,\n 'on-surface-variant': onSurfaceVariant,\n\n // Inverse\n 'inverse-surface': inverseSurface,\n 'on-inverse-surface': onInverse,\n 'on-inverse-surface-primary': inversePrimary,\n 'on-inverse-surface-variant': inversePrimary,\n 'inverse-container': inverseSurface,\n 'on-inverse-container': onInverse,\n\n // Utility\n outline,\n shadow: '#000000',\n scrim: '#000000',\n 'surface-tint': primaryBase,\n transparent: 'rgba(0,0,0,0)',\n ghost: 'rgba(0,0,0,0)',\n\n // Disabled (deliberate alpha overlays — excluded from the contrast report)\n disabled,\n 'on-disabled': onDisabled,\n 'disabled-container': tone(hues.primary, surfaceC, t.disabledContainer),\n 'on-disabled-container': onDisabled,\n 'disabled-surface': disabled,\n 'on-disabled-surface': dark ? 'rgba(255,255,255,0.5)' : 'rgba(0,0,0,0.5)',\n 'on-disabled-surface-variant': dark ? 'rgba(255,255,255,0.4)' : 'rgba(0,0,0,0.4)',\n };\n};\n","import type { Colors } from '../theme';\nimport { generateColors, type GenerateColorsConfig } from '../generation/palette.factory';\nimport type { ColorCategory, ColorScheme } from './color.types';\n\n/** Roles whose base color can be pinned to an exact brand hex. */\nexport type BrandRole =\n | 'primary'\n | 'secondary'\n | 'tertiary'\n | 'quaternary'\n | 'error'\n | 'warn'\n | 'success';\n\nexport interface PaletteConfig {\n /**\n * Seed brand color as a hex string, e.g. '#4F46E5'. Anchors the neutral\n * hue and every role you don't pin via `brand`. When `brand.primary` is\n * set, that color anchors instead.\n */\n seed: string;\n /** How secondary/tertiary hues relate to the anchor, for unpinned roles. */\n scheme: ColorScheme;\n /** Saturation / tonal character of the generated (unpinned) colors. */\n category: ColorCategory;\n /** Light or dark rendering of the same palette. Defaults to 'light'. */\n mode?: 'light' | 'dark';\n /**\n * Minimum accent saturation (0–100 scale) so the brand hue stays perceptible\n * even for the `neutral` category (which is otherwise near-grey). Set to 0\n * to honor the category saturation exactly.\n */\n accentSaturationFloor?: number;\n /**\n * Exact brand colors, pinned per role. A pinned color is emitted verbatim as\n * that role's base token in **light** mode (\"cannot shift\"); in **dark** mode\n * it is lifted in lightness only — hue and chroma preserved — so it stays\n * legible on a dark ground. Its on/container/surface satellites are derived\n * from it. Unpinned roles are generated from the seed + scheme as usual, so an\n * arbitrary brand pair (e.g. forest green + ochre) can be reproduced exactly.\n */\n brand?: Partial<Record<BrandRole, string>>;\n}\n\n/**\n * Generate a complete {@link Colors} token set from a single seed color, a\n * {@link ColorScheme} and a {@link ColorCategory}. Produces a light or dark\n * variant of the same palette; `on-*` colors are driven to WCAG AA contrast\n * so text stays legible for any seed.\n *\n * Delegates to the OKLCH engine in `concepts/generation` — all lightness and\n * chroma math is perceptual, and every derived pair passes through the WCAG\n * guard-rail. Accepts the engine's extended config, so callers may also pass\n * soft `targets` (brand-faithful but guard-railed) and a `checks` sink. Use\n * `generateThemes()` for the light+dark pair plus a {@link ContrastReport}.\n */\nexport const generatePalette = (config: GenerateColorsConfig): Colors => generateColors(config);\n","export type ZIndexableElements =\n | 'dropdown'\n | 'sticky'\n | 'fixed'\n | 'backdrop'\n | 'dialog'\n | 'popover'\n | 'tooltip'\n | 'overlay';\n\nexport const Z_INDEX: Record<ZIndexableElements, number> = {\n dropdown: 1000,\n sticky: 1020,\n fixed: 1030,\n backdrop: 1040,\n dialog: 1050,\n popover: 1060,\n tooltip: 1070,\n overlay: 1080,\n};\n","import type { Colors, Radii, Spacing } from '../theme/theme.model';\n\n/** A single W3C DTCG design token. */\nexport interface DtcgToken {\n $value: string;\n $type: 'color' | 'dimension';\n}\n\n/** DTCG-format token document (Style Dictionary compatible), per PRD §6. */\nexport interface DtcgTokens {\n color: Record<string, DtcgToken>;\n size: {\n radius: Record<string, DtcgToken>;\n spacing: Record<string, DtcgToken>;\n };\n}\n\nconst dimensionEntries = (record: Radii | Spacing | undefined): Record<string, DtcgToken> =>\n Object.fromEntries(\n Object.entries(record ?? {})\n .filter(([, value]) => value !== undefined && value !== 'none')\n .map(([key, value]) => [key, { $value: String(value), $type: 'dimension' as const }])\n );\n\n/**\n * Render one theme mode's tokens as W3C DTCG JSON for external pipelines\n * (Style Dictionary etc.). Token names are exactly Uni's `ColorToken` strings —\n * one vocabulary everywhere. The native `UniTheme` object remains the primary,\n * lossless output; this is the interop layer.\n */\nexport const emitDtcgTokens = (input: {\n colors: Colors;\n radii?: Radii;\n spacing?: Spacing;\n}): DtcgTokens => ({\n color: Object.fromEntries(\n Object.entries(input.colors)\n .filter(([, value]) => value !== undefined)\n .map(([key, value]) => [key, { $value: value as string, $type: 'color' as const }])\n ),\n size: {\n radius: dimensionEntries(input.radii),\n spacing: dimensionEntries(input.spacing),\n },\n});\n","import type { Colors, Shadows } from '../theme/theme.model';\nimport { hexToRgb } from '../color/color.helper';\nimport { hexToOklch, oklchToHex } from './oklch.helper';\n\nconst rgba = (hex: string, alpha: number): string => {\n const { red, green, blue } = hexToRgb(hex);\n return `rgba(${red}, ${green}, ${blue}, ${alpha})`;\n};\n\n/**\n * Brand-tinted, theme-scoped elevation shadows (PRD §3.5.C).\n *\n * Light mode replaces the dead-neutral black stacks with a shadow ink pulled\n * toward the brand hue — dark and low-chroma enough to read as shadow, tinted\n * enough to kill the grey \"mud\" where shadows meet brand surfaces. Dark mode\n * goes near-zero: elevation is carried by the surface lightness steps, with\n * only a faint veil kept on floating overlays (menus/dialogs genuinely need\n * separation) and the `warn` glow tinted by the theme's own error color.\n */\nexport const generateShadows = (colors: Colors, mode: 'light' | 'dark' = 'light'): Shadows => {\n const error = colors['error'] ?? '#CC2827';\n\n if (mode === 'dark') {\n return {\n raised: 'none',\n menu: `0px 4px 12px ${rgba('#000000', 0.45)}`,\n dialog: `0px 8px 28px ${rgba('#000000', 0.55)}`,\n warn: `0 0 5px ${rgba(error, 0.55)}, inset 0 0 5px ${rgba(error, 0.35)}`,\n };\n }\n\n // Shadow ink: near-black carrying ~6–8% of the brand hue's chroma.\n const { h } = hexToOklch(colors['primary'] ?? '#000000');\n const ink = oklchToHex({ l: 0.22, c: 0.035, h });\n return {\n raised: `${rgba(ink, 0.2)} 0px 2px 1px -1px, ${rgba(ink, 0.14)} 0px 1px 1px 0px, ${rgba(ink, 0.12)} 0px 1px 3px 0px`,\n menu: `${rgba(ink, 0.2)} 0px 3px 3px -2px, ${rgba(ink, 0.14)} 0px 3px 4px 0px, ${rgba(ink, 0.12)} 0px 1px 8px 0px`,\n dialog: `${rgba(ink, 0.2)} 0px 3px 5px -1px, ${rgba(ink, 0.14)} 0px 6px 10px 0px, ${rgba(ink, 0.12)} 0px 1px 18px 0px`,\n warn: `0 0 5px ${rgba(error, 0.5)}, inset 0 0 5px ${rgba(error, 0.3)}`,\n };\n};\n","import type { Icons } from '../theme/theme.model';\n\n/**\n * Default icon primitives shipped with every theme. Each icon is an inline\n * SVG data URI rendered as a CSS mask over `currentColor`, so icons recolor\n * with the theme automatically. `createTheme` merges a theme's own `icons`\n * over this set — add or override under any name; components render them by\n * token via `uni-icon`, never by inlining SVG.\n *\n * The set is Material Symbols Outlined at weight 300, normalized to a\n * single `0 -960 960 960` grid so every glyph shares one optical weight.\n *\n * Generated by scripts/generate-icons.mjs (pnpm icons:generate). Do not edit\n * by hand — add or change icons in that script's manifest and regenerate.\n */\nexport const BaseIcons = {\n // Navigation & layout\n menu: \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M140-254.62v-59.99h680v59.99H140ZM140-450v-60h680v60H140Zm0-195.39v-59.99h680v59.99H140Z'/%3e%3c/svg%3e\",\n chevronUp:\n \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='m480-541.85-184 184L253.85-400 480-626.15 706.15-400 664-357.85l-184-184Z'/%3e%3c/svg%3e\",\n chevronDown:\n \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M480-357.85 253.85-584 296-626.15l184 184 184-184L706.15-584 480-357.85Z'/%3e%3c/svg%3e\",\n chevronLeft:\n \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M560-253.85 333.85-480 560-706.15 602.15-664l-184 184 184 184L560-253.85Z'/%3e%3c/svg%3e\",\n chevronRight:\n \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='m517.85-480-184-184L376-706.15 602.15-480 376-253.85 333.85-296l184-184Z'/%3e%3c/svg%3e\",\n arrowLeft:\n \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='m294.92-450 227.85 227.85L480-180 180-480l300-300 42.77 42.15L294.92-510H780v60H294.92Z'/%3e%3c/svg%3e\",\n arrowRight:\n \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M665.08-450H180v-60h485.08L437.23-737.85 480-780l300 300-300 300-42.77-42.15L665.08-450Z'/%3e%3c/svg%3e\",\n home: \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M240-200h133.85v-237.69h212.3V-200H720v-360L480-740.77 240-560v360Zm-60 60v-450l300-225.77L780-590v450H526.15v-237.69h-92.3V-140H180Zm300-330.38Z'/%3e%3c/svg%3e\",\n building:\n \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M130-136.92v-540h160v-160h380v320h160v380H530v-160H430v160H130Zm60-60h100v-100H190v100Zm0-160h100v-100H190v100Zm0-160h100v-100H190v100Zm160 160h100v-100H350v100Zm0-160h100v-100H350v100Zm0-160h100v-100H350v100Zm160 320h100v-100H510v100Zm0-160h100v-100H510v100Zm0-160h100v-100H510v100Zm160 480h100v-100H670v100Zm0-160h100v-100H670v100Z'/%3e%3c/svg%3e\",\n externalLink:\n \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M212.31-140Q182-140 161-161q-21-21-21-51.31v-535.38Q140-778 161-799q21-21 51.31-21h252.3v60h-252.3q-4.62 0-8.46 3.85-3.85 3.84-3.85 8.46v535.38q0 4.62 3.85 8.46 3.84 3.85 8.46 3.85h535.38q4.62 0 8.46-3.85 3.85-3.84 3.85-8.46v-252.3h60v252.3Q820-182 799-161q-21 21-51.31 21H212.31Zm176.46-206.62-42.15-42.15L717.85-760H560v-60h260v260h-60v-157.85L388.77-346.62Z'/%3e%3c/svg%3e\",\n link: \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M432.31-298.46H281.54q-75.34 0-128.44-53.1Q100-404.65 100-479.98q0-75.33 53.1-128.44 53.1-53.12 128.44-53.12h150.77v60H281.54q-50.39 0-85.96 35.58Q160-530.38 160-480q0 50.38 35.58 85.96 35.57 35.58 85.96 35.58h150.77v60ZM330-450v-60h300v60H330Zm197.69 151.54v-60h150.77q50.39 0 85.96-35.58Q800-429.62 800-480q0-50.38-35.58-85.96-35.57-35.58-85.96-35.58H527.69v-60h150.77q75.34 0 128.44 53.1Q860-555.35 860-480.02q0 75.33-53.1 128.44-53.1 53.12-128.44 53.12H527.69Z'/%3e%3c/svg%3e\",\n expand:\n \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M140-140v-300h60v198.23L718.23-760H520v-60h300v300h-60v-198.23L241.77-200H440v60H140Z'/%3e%3c/svg%3e\",\n gridView:\n \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M140-520v-300h300v300H140Zm0 380v-300h300v300H140Zm380-380v-300h300v300H520Zm0 380v-300h300v300H520ZM200-580h180v-180H200v180Zm380 0h180v-180H580v180Zm0 380h180v-180H580v180Zm-380 0h180v-180H200v180Zm380-380Zm0 200Zm-200 0Zm0-200Z'/%3e%3c/svg%3e\",\n listView:\n \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M293.08-597.69v-60H820v60H293.08Zm0 147.69v-60H820v60H293.08Zm0 147.69v-60H820v60H293.08ZM172.31-595.38q-13.73 0-23.02-9.4t-9.29-23.3q0-13.56 9.29-22.74 9.29-9.18 23.02-9.18t23.02 9.18q9.29 9.18 9.29 22.74 0 13.9-9.29 23.3t-23.02 9.4Zm0 147.3q-13.73 0-23.02-9.18Q140-466.43 140-480q0-14.31 9.29-23.5t23.02-9.19q13.73 0 23.02 9.19t9.29 23.5q0 13.57-9.29 22.74-9.29 9.18-23.02 9.18Zm0 148.08q-13.73 0-23.02-9.4T140-332.69q0-13.57 9.29-22.75t23.02-9.18q13.73 0 23.02 9.18t9.29 22.75q0 13.89-9.29 23.29-9.29 9.4-23.02 9.4Z'/%3e%3c/svg%3e\",\n\n // Actions & controls\n search:\n \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M781.69-136.92 530.46-388.16q-30 24.77-69 38.77-39 14-80.69 14-102.46 0-173.54-71.07-71.07-71.08-71.07-173.54t71.07-173.54q71.08-71.07 173.54-71.07t173.54 71.07q71.07 71.08 71.07 173.54 0 42.85-14.38 81.85-14.39 39-38.39 67.84l251.23 251.23-42.15 42.16ZM380.77-395.38q77.31 0 130.96-53.66 53.66-53.65 53.66-130.96t-53.66-130.96q-53.65-53.66-130.96-53.66t-130.96 53.66Q196.15-657.31 196.15-580t53.66 130.96q53.65 53.66 130.96 53.66Z'/%3e%3c/svg%3e\",\n close:\n \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M256-213.85 213.85-256l224-224-224-224L256-746.15l224 224 224-224L746.15-704l-224 224 224 224L704-213.85l-224-224-224 224Z'/%3e%3c/svg%3e\",\n plus: \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M450-450H220v-60h230v-230h60v230h230v60H510v230h-60v-230Z'/%3e%3c/svg%3e\",\n minus:\n \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M220-450v-60h520v60H220Z'/%3e%3c/svg%3e\",\n more: \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M480-189.23q-24.75 0-42.37-17.63Q420-224.48 420-249.23q0-24.75 17.63-42.38 17.62-17.62 42.37-17.62 24.75 0 42.37 17.62Q540-273.98 540-249.23q0 24.75-17.63 42.37-17.62 17.63-42.37 17.63ZM480-420q-24.75 0-42.37-17.63Q420-455.25 420-480q0-24.75 17.63-42.37Q455.25-540 480-540q24.75 0 42.37 17.63Q540-504.75 540-480q0 24.75-17.63 42.37Q504.75-420 480-420Zm0-230.77q-24.75 0-42.37-17.62Q420-686.02 420-710.77q0-24.75 17.63-42.37 17.62-17.63 42.37-17.63 24.75 0 42.37 17.63Q540-735.52 540-710.77q0 24.75-17.63 42.38-17.62 17.62-42.37 17.62Z'/%3e%3c/svg%3e\",\n moreHorizontal:\n \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M249.23-420q-24.75 0-42.37-17.63-17.63-17.62-17.63-42.37 0-24.75 17.63-42.37Q224.48-540 249.23-540q24.75 0 42.38 17.63 17.62 17.62 17.62 42.37 0 24.75-17.62 42.37Q273.98-420 249.23-420ZM480-420q-24.75 0-42.37-17.63Q420-455.25 420-480q0-24.75 17.63-42.37Q455.25-540 480-540q24.75 0 42.37 17.63Q540-504.75 540-480q0 24.75-17.63 42.37Q504.75-420 480-420Zm230.77 0q-24.75 0-42.38-17.63-17.62-17.62-17.62-42.37 0-24.75 17.62-42.37Q686.02-540 710.77-540q24.75 0 42.37 17.63 17.63 17.62 17.63 42.37 0 24.75-17.63 42.37Q735.52-420 710.77-420Z'/%3e%3c/svg%3e\",\n delete:\n \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M292.31-140q-29.92 0-51.12-21.19Q220-182.39 220-212.31V-720h-40v-60h180v-35.38h240V-780h180v60h-40v507.69Q740-182 719-161q-21 21-51.31 21H292.31ZM680-720H280v507.69q0 5.39 3.46 8.85t8.85 3.46h375.38q4.62 0 8.46-3.85 3.85-3.84 3.85-8.46V-720ZM376.16-280h59.99v-360h-59.99v360Zm147.69 0h59.99v-360h-59.99v360ZM280-720v520-520Z'/%3e%3c/svg%3e\",\n edit: \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M200-200h50.46l409.46-409.46-50.46-50.46L200-250.46V-200Zm-60 60v-135.38l527.62-527.39q9.07-8.24 20.03-12.73 10.97-4.5 23-4.5t23.3 4.27q11.28 4.27 19.97 13.58l48.85 49.46q9.31 8.69 13.27 20 3.96 11.31 3.96 22.62 0 12.07-4.12 23.03-4.12 10.97-13.11 20.04L275.38-140H140Zm620.38-570.15-50.23-50.23 50.23 50.23Zm-126.13 75.9-24.79-25.67 50.46 50.46-25.67-24.79Z'/%3e%3c/svg%3e\",\n copy: \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M362.31-260Q332-260 311-281q-21-21-21-51.31v-455.38Q290-818 311-839q21-21 51.31-21h335.38Q728-860 749-839q21 21 21 51.31v455.38Q770-302 749-281q-21 21-51.31 21H362.31Zm0-60h335.38q4.62 0 8.46-3.85 3.85-3.84 3.85-8.46v-455.38q0-4.62-3.85-8.46-3.84-3.85-8.46-3.85H362.31q-4.62 0-8.46 3.85-3.85 3.84-3.85 8.46v455.38q0 4.62 3.85 8.46 3.84 3.85 8.46 3.85Zm-140 200Q192-120 171-141q-21-21-21-51.31v-515.38h60v515.38q0 4.62 3.85 8.46 3.84 3.85 8.46 3.85h395.38v60H222.31ZM350-320v-480 480Z'/%3e%3c/svg%3e\",\n download:\n \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M480-328.46 309.23-499.23l42.16-43.38L450-444v-336h60v336l98.61-98.61 42.16 43.38L480-328.46ZM252.31-180Q222-180 201-201q-21-21-21-51.31v-108.46h60v108.46q0 4.62 3.85 8.46 3.84 3.85 8.46 3.85h455.38q4.62 0 8.46-3.85 3.85-3.84 3.85-8.46v-108.46h60v108.46Q780-222 759-201q-21 21-51.31 21H252.31Z'/%3e%3c/svg%3e\",\n upload:\n \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M450-328.46v-336l-98.61 98.61-42.16-43.38L480-780l170.77 170.77-42.16 43.38L510-664.46v336h-60ZM252.31-180Q222-180 201-201q-21-21-21-51.31v-108.46h60v108.46q0 4.62 3.85 8.46 3.84 3.85 8.46 3.85h455.38q4.62 0 8.46-3.85 3.85-3.84 3.85-8.46v-108.46h60v108.46Q780-222 759-201q-21 21-51.31 21H252.31Z'/%3e%3c/svg%3e\",\n share:\n \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M672.22-100q-44.91 0-76.26-31.41-31.34-31.41-31.34-76.28 0-6 4.15-29.16L284.31-404.31q-14.46 15-34.36 23.5t-42.64 8.5q-44.71 0-76.01-31.54Q100-435.39 100-480q0-44.61 31.3-76.15 31.3-31.54 76.01-31.54 22.74 0 42.64 8.5 19.9 8.5 34.36 23.5l284.46-167.08q-2.38-7.38-3.27-14.46-.88-7.08-.88-15.08 0-44.87 31.43-76.28Q627.49-860 672.4-860t76.25 31.44Q780-797.13 780-752.22q0 44.91-31.41 76.26-31.41 31.34-76.28 31.34-22.85 0-42.5-8.69Q610.15-662 595.69-677L311.23-509.54q2.38 7.39 3.27 14.46.88 7.08.88 15.08t-.88 15.08q-.89 7.07-3.27 14.46L595.69-283q14.46-15 34.12-23.69 19.65-8.69 42.5-8.69 44.87 0 76.28 31.43Q780-252.51 780-207.6t-31.44 76.25Q717.13-100 672.22-100Zm.09-60q20.27 0 33.98-13.71Q720-187.42 720-207.69q0-20.27-13.71-33.98-13.71-13.72-33.98-13.72-20.27 0-33.98 13.72-13.72 13.71-13.72 33.98 0 20.27 13.72 33.98Q652.04-160 672.31-160Zm-465-272.31q20.43 0 34.25-13.8 13.83-13.81 13.83-33.89t-13.83-33.89q-13.82-13.8-34.25-13.8-20.11 0-33.71 13.8Q160-500.08 160-480t13.6 33.89q13.6 13.8 33.71 13.8Zm498.88-286.02Q720-732.04 720-752.31q0-20.27-13.71-33.98Q692.58-800 672.31-800q-20.27 0-33.98 13.71-13.72 13.71-13.72 33.98 0 20.27 13.81 33.98 13.81 13.72 33.89 13.72 20.07 0 33.88-13.72Zm-33.88 510.64ZM207.69-480Zm464.62-272.31Z'/%3e%3c/svg%3e\",\n send: \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M140-190v-580l688.46 290L140-190Zm60-90 474-200-474-200v147.69L416.92-480 200-427.69V-280Zm0 0v-400 400Z'/%3e%3c/svg%3e\",\n filter:\n \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M411.15-260v-60h137.31v60H411.15ZM256.16-450v-60h447.3v60h-447.3ZM140-640v-60h680v60H140Z'/%3e%3c/svg%3e\",\n funnel:\n \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M455.39-180q-15.08 0-25.23-10.16Q420-200.31 420-215.39v-231.53L196.08-731.38q-11.54-15.39-3.35-32 8.2-16.62 27.66-16.62h519.22q19.46 0 27.66 16.62 8.19 16.61-3.35 32L540-446.92v231.53q0 15.08-10.16 25.23Q519.69-180 504.61-180h-49.22ZM480-468l198-252H282l198 252Zm0 0Z'/%3e%3c/svg%3e\",\n refresh:\n \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M481.54-180q-125.63 0-212.81-87.17-87.19-87.17-87.19-212.77 0-125.6 87.19-212.83Q355.91-780 481.54-780q70.15 0 132.77 31.19 62.61 31.2 104.15 88.04V-780h60v244.61H533.85v-59.99h158q-31.62-57.93-87.7-91.27Q548.08-720 481.54-720q-100 0-170 70t-70 170q0 100 70 170t170 70q77 0 139-44t87-116h63.23q-27.23 97.92-107.27 158.96Q583.46-180 481.54-180Z'/%3e%3c/svg%3e\",\n dragHandle:\n \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M360-175.39q-26.65 0-45.63-18.98-18.98-18.98-18.98-45.63 0-26.65 18.98-45.63 18.98-18.98 45.63-18.98 26.65 0 45.63 18.98 18.98 18.98 18.98 45.63 0 26.65-18.98 45.63-18.98 18.98-45.63 18.98Zm240 0q-26.65 0-45.63-18.98-18.98-18.98-18.98-45.63 0-26.65 18.98-45.63 18.98-18.98 45.63-18.98 26.65 0 45.63 18.98 18.98 18.98 18.98 45.63 0 26.65-18.98 45.63-18.98 18.98-45.63 18.98Zm-240-240q-26.65 0-45.63-18.98-18.98-18.98-18.98-45.63 0-26.65 18.98-45.63 18.98-18.98 45.63-18.98 26.65 0 45.63 18.98 18.98 18.98 18.98 45.63 0 26.65-18.98 45.63-18.98 18.98-45.63 18.98Zm240 0q-26.65 0-45.63-18.98-18.98-18.98-18.98-45.63 0-26.65 18.98-45.63 18.98-18.98 45.63-18.98 26.65 0 45.63 18.98 18.98 18.98 18.98 45.63 0 26.65-18.98 45.63-18.98 18.98-45.63 18.98Zm-240-240q-26.65 0-45.63-18.98-18.98-18.98-18.98-45.63 0-26.65 18.98-45.63 18.98-18.98 45.63-18.98 26.65 0 45.63 18.98 18.98 18.98 18.98 45.63 0 26.65-18.98 45.63-18.98 18.98-45.63 18.98Zm240 0q-26.65 0-45.63-18.98-18.98-18.98-18.98-45.63 0-26.65 18.98-45.63 18.98-18.98 45.63-18.98 26.65 0 45.63 18.98 18.98 18.98 18.98 45.63 0 26.65-18.98 45.63-18.98 18.98-45.63 18.98Z'/%3e%3c/svg%3e\",\n qrCode:\n \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M140-520v-300h300v300H140Zm60-60h180v-180H200v180Zm-60 440v-300h300v300H140Zm60-60h180v-180H200v180Zm320-320v-300h300v300H520Zm60-60h180v-180H580v180Zm165 440v-75h75v75h-75ZM520-365v-75h75v75h-75Zm75 75v-75h75v75h-75Zm-75 75v-75h75v75h-75Zm75 75v-75h75v75h-75Zm75-75v-75h75v75h-75Zm0-150v-75h75v75h-75Zm75 75v-75h75v75h-75Z'/%3e%3c/svg%3e\",\n\n // Status & feedback\n check:\n \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M382-253.85 168.62-467.23 211.38-510 382-339.38 748.62-706l42.76 42.77L382-253.85Z'/%3e%3c/svg%3e\",\n checkCircle:\n \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='m423.23-309.85 268.92-268.92L650-620.92 423.23-394.15l-114-114L267.08-466l156.15 156.15ZM480.07-100q-78.84 0-148.21-29.92t-120.68-81.21q-51.31-51.29-81.25-120.63Q100-401.1 100-479.93q0-78.84 29.92-148.21t81.21-120.68q51.29-51.31 120.63-81.25Q401.1-860 479.93-860q78.84 0 148.21 29.92t120.68 81.21q51.31 51.29 81.25 120.63Q860-558.9 860-480.07q0 78.84-29.92 148.21t-81.21 120.68q-51.29 51.31-120.63 81.25Q558.9-100 480.07-100Zm-.07-60q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z'/%3e%3c/svg%3e\",\n xCircle:\n \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='m336-293.85 144-144 144 144L666.15-336l-144-144 144-144L624-666.15l-144 144-144-144L293.85-624l144 144-144 144L336-293.85ZM480.07-100q-78.84 0-148.21-29.92t-120.68-81.21q-51.31-51.29-81.25-120.63Q100-401.1 100-479.93q0-78.84 29.92-148.21t81.21-120.68q51.29-51.31 120.63-81.25Q401.1-860 479.93-860q78.84 0 148.21 29.92t120.68 81.21q51.31 51.29 81.25 120.63Q860-558.9 860-480.07q0 78.84-29.92 148.21t-81.21 120.68q-51.29 51.31-120.63 81.25Q558.9-100 480.07-100Zm-.07-60q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z'/%3e%3c/svg%3e\",\n alertCircle:\n \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M502.92-300.15q9.39-9.39 9.39-22.93T502.92-346q-9.38-9.38-22.92-9.38-13.54 0-22.92 9.38-9.39 9.38-9.39 22.92 0 13.54 9.39 22.93 9.38 9.38 22.92 9.38 13.54 0 22.92-9.38ZM450-436.92h60v-240h-60v240ZM480.07-100q-78.84 0-148.21-29.92t-120.68-81.21q-51.31-51.29-81.25-120.63Q100-401.1 100-479.93q0-78.84 29.92-148.21t81.21-120.68q51.29-51.31 120.63-81.25Q401.1-860 479.93-860q78.84 0 148.21 29.92t120.68 81.21q51.31 51.29 81.25 120.63Q860-558.9 860-480.07q0 78.84-29.92 148.21t-81.21 120.68q-51.29 51.31-120.63 81.25Q558.9-100 480.07-100Zm-.07-60q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z'/%3e%3c/svg%3e\",\n info: \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M450-290h60v-230h-60v230Zm52.92-307.75q9.39-9.29 9.39-23.02t-9.29-23.02q-9.29-9.28-23.02-9.28t-23.02 9.28q-9.29 9.29-9.29 23.02t9.39 23.02q9.38 9.29 22.92 9.29 13.54 0 22.92-9.29ZM480.07-100q-78.84 0-148.21-29.92t-120.68-81.21q-51.31-51.29-81.25-120.63Q100-401.1 100-479.93q0-78.84 29.92-148.21t81.21-120.68q51.29-51.31 120.63-81.25Q401.1-860 479.93-860q78.84 0 148.21 29.92t120.68 81.21q51.31 51.29 81.25 120.63Q860-558.9 860-480.07q0 78.84-29.92 148.21t-81.21 120.68q-51.29 51.31-120.63 81.25Q558.9-100 480.07-100Zm-.07-60q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z'/%3e%3c/svg%3e\",\n warning:\n \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M74.62-140 480-840l405.38 700H74.62ZM178-200h604L480-720 178-200Zm324.92-57.08q9.39-9.38 9.39-22.92 0-13.54-9.39-22.92-9.38-9.39-22.92-9.39-13.54 0-22.92 9.39-9.39 9.38-9.39 22.92 0 13.54 9.39 22.92 9.38 9.39 22.92 9.39 13.54 0 22.92-9.39ZM450-352.31h60v-200h-60v200ZM480-460Z'/%3e%3c/svg%3e\",\n lock: \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M252.31-100q-29.92 0-51.12-21.19Q180-142.39 180-172.31v-375.38q0-29.92 21.19-51.12Q222.39-620 252.31-620H300v-80q0-74.92 52.54-127.46Q405.08-880 480-880q74.92 0 127.46 52.54Q660-774.92 660-700v80h47.69q29.92 0 51.12 21.19Q780-577.61 780-547.69v375.38q0 29.92-21.19 51.12Q737.61-100 707.69-100H252.31Zm0-60h455.38q5.39 0 8.85-3.46t3.46-8.85v-375.38q0-5.39-3.46-8.85t-8.85-3.46H252.31q-5.39 0-8.85 3.46t-3.46 8.85v375.38q0 5.39 3.46 8.85t8.85 3.46Zm277.27-150.42Q550-330.85 550-360t-20.42-49.58Q509.15-430 480-430t-49.58 20.42Q410-389.15 410-360t20.42 49.58Q450.85-290 480-290t49.58-20.42ZM360-620h240v-80q0-50-35-85t-85-35q-50 0-85 35t-35 85v80ZM240-160v-400 400Z'/%3e%3c/svg%3e\",\n star: \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='m354-287 126-76 126 77-33-144 111-96-146-13-58-136-58 135-146 13 111 97-33 143Zm-91 125.46 57.31-246.77-191.46-165.92 252.61-21.92L480-828.84l98.54 232.69 252.61 21.92-191.46 165.92L697-161.54 480-292.46 263-161.54ZM480-470Z'/%3e%3c/svg%3e\",\n verified:\n \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='m352.46-85.39-71.38-120.3-135.54-29.7 13.23-139.53L66.93-480l91.84-105.08-13.23-139.53 135.54-29.7 71.38-120.3L480-820.46l127.54-54.15 71.38 120.3 135.54 29.7-13.23 139.53L893.07-480l-91.84 105.08 13.23 139.53-135.54 29.7-71.38 120.3L480-139.54 352.46-85.39ZM378-162l102-43.23L583.23-162 640-258l110-25.23L740-396l74-84-74-85.23L750-678l-110-24-58-96-102 43.23L376.77-798 320-702l-110 24 10 112.77L146-480l74 84-10 114 110 24 58 96Zm102-318Zm-42 128.15L650.15-564 608-607.38l-170 170-86-84.77L309.85-480 438-351.85Z'/%3e%3c/svg%3e\",\n\n // User & system\n profile:\n \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M381.04-533.35Q340-574.38 340-632.31q0-57.92 41.04-98.96 41.04-41.04 98.96-41.04 57.92 0 98.96 41.04Q620-690.23 620-632.31q0 57.93-41.04 98.96-41.04 41.04-98.96 41.04-57.92 0-98.96-41.04ZM180-187.69v-88.93q0-29.38 15.96-54.42 15.96-25.04 42.66-38.5 59.3-29.07 119.65-43.61 60.35-14.54 121.73-14.54t121.73 14.54q60.35 14.54 119.65 43.61 26.7 13.46 42.66 38.5Q780-306 780-276.62v88.93H180Zm60-60h480v-28.93q0-12.15-7.04-22.5-7.04-10.34-19.11-16.88-51.7-25.46-105.42-38.58Q534.7-367.69 480-367.69q-54.7 0-108.43 13.11-53.72 13.12-105.42 38.58-12.07 6.54-19.11 16.88-7.04 10.35-7.04 22.5v28.93Zm296.5-328.12q23.5-23.5 23.5-56.5t-23.5-56.5q-23.5-23.5-56.5-23.5t-56.5 23.5q-23.5 23.5-23.5 56.5t23.5 56.5q23.5 23.5 56.5 23.5t56.5-23.5Zm-56.5-56.5Zm0 384.62Z'/%3e%3c/svg%3e\",\n group:\n \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M71.93-187.69v-88.93q0-30.92 15.96-55.19 15.96-24.27 42.63-37.76 57.02-27.89 114.67-43.01 57.66-15.11 126.73-15.11 69.08 0 126.73 15.11 57.66 15.12 114.68 43.01 26.67 13.49 42.63 37.76 15.96 24.27 15.96 55.19v88.93H71.93Zm679.99 0v-93.85q0-39.38-19.28-75.07-19.29-35.68-54.72-61.23 40.23 6 76.39 18.57 36.15 12.58 69 29.73 31 16.54 47.88 38.99 16.88 22.44 16.88 49.01v93.85H751.92ZM272.96-533.35q-41.03-41.03-41.03-98.96 0-57.92 41.03-98.96 41.04-41.04 98.96-41.04 57.93 0 98.96 41.04 41.04 41.04 41.04 98.96 0 57.93-41.04 98.96-41.03 41.04-98.96 41.04-57.92 0-98.96-41.04Zm403.22 0q-41.12 41.04-98.87 41.04-6.77 0-17.23-1.54-10.47-1.54-17.23-3.38 23.66-28.45 36.37-63.12 12.7-34.67 12.7-72 0-37.34-12.96-71.73-12.96-34.38-36.11-63.3 8.61-3.08 17.23-4 8.61-.93 17.23-.93 57.75 0 98.87 41.04 41.12 41.04 41.12 98.96 0 57.93-41.12 98.96ZM131.92-247.69h480v-28.93q0-12.53-6.27-22.3-6.26-9.77-19.88-17.08-49.38-25.46-101.69-38.58-52.31-13.11-112.16-13.11-59.84 0-112.15 13.11-52.31 13.12-101.69 38.58-13.62 7.31-19.89 17.08-6.27 9.77-6.27 22.3v28.93Zm296.5-328.12q23.5-23.5 23.5-56.5t-23.5-56.5q-23.5-23.5-56.5-23.5t-56.5 23.5q-23.5 23.5-23.5 56.5t23.5 56.5q23.5 23.5 56.5 23.5t56.5-23.5Zm-56.5 328.12Zm0-384.62Z'/%3e%3c/svg%3e\",\n shieldPerson:\n \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M387.62-487.62Q350-525.23 350-580q0-54.77 37.62-92.38Q425.23-710 480-710q54.77 0 92.38 37.62Q610-634.77 610-580q0 54.77-37.62 92.38Q534.77-450 480-450q-54.77 0-92.38-37.62Zm142.3-42.46Q550-550.15 550-580t-20.08-49.92Q509.85-650 480-650t-49.92 20.08Q410-609.85 410-580t20.08 49.92Q450.15-510 480-510t49.92-20.08ZM480-100.77q-129.77-35.39-214.88-152.77Q180-370.92 180-516v-230.15l300-112.31 300 112.31V-516q0 145.08-85.12 262.46Q609.77-136.16 480-100.77Zm0-378.85Zm0-315L240-705v189q0 57.08 16.35 110.39 16.34 53.3 45.42 99.46 40.46-20.62 84.73-32.23Q430.77-350 480-350t93.5 11.62q44.27 11.61 84.73 32.23 29.08-46.16 45.42-99.46Q720-458.92 720-516v-189l-240-89.62Zm-74.42 513q-35.73 8.39-67.5 23.54 29.77 33.08 65.5 57.2Q439.31-176.77 480-164q40.69-12.77 76.23-36.88 35.54-24.12 65.31-57.2-31.77-15.15-67.31-23.54Q518.69-290 480-290q-38.69 0-74.42 8.38Z'/%3e%3c/svg%3e\",\n settings:\n \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='m387.69-100-15.23-121.85q-16.07-5.38-32.96-15.07-16.88-9.7-30.19-20.77L196.46-210l-92.3-160 97.61-73.77q-1.38-8.92-1.96-17.92-.58-9-.58-17.93 0-8.53.58-17.34t1.96-19.27L104.16-590l92.3-159.23 112.46 47.31q14.47-11.46 30.89-20.96t32.27-15.27L387.69-860h184.62l15.23 122.23q18 6.54 32.57 15.27 14.58 8.73 29.43 20.58l114-47.31L855.84-590l-99.15 74.92q2.15 9.69 2.35 18.12.19 8.42.19 16.96 0 8.15-.39 16.58-.38 8.42-2.76 19.27L854.46-370l-92.31 160-112.61-48.08q-14.85 11.85-30.31 20.96-15.46 9.12-31.69 14.89L572.31-100H387.69ZM440-160h78.62L533-267.15q30.62-8 55.96-22.73 25.35-14.74 48.89-37.89L737.23-286l39.39-68-86.77-65.38q5-15.54 6.8-30.47 1.81-14.92 1.81-30.15 0-15.62-1.81-30.15-1.8-14.54-6.8-29.7L777.38-606 738-674l-100.54 42.38q-20.08-21.46-48.11-37.92-28.04-16.46-56.73-23.31L520-800h-79.38l-13.24 106.77q-30.61 7.23-56.53 22.15-25.93 14.93-49.47 38.46L222-674l-39.38 68L269-541.62q-5 14.24-7 29.62t-2 32.38q0 15.62 2 30.62 2 15 6.62 29.62l-86 65.38L222-286l99-42q22.77 23.38 48.69 38.31 25.93 14.92 57.31 22.92L440-160Zm40.46-200q49.92 0 84.96-35.04 35.04-35.04 35.04-84.96 0-49.92-35.04-84.96Q530.38-600 480.46-600q-50.54 0-85.27 35.04T360.46-480q0 49.92 34.73 84.96Q429.92-360 480.46-360ZM480-480Z'/%3e%3c/svg%3e\",\n notification:\n \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M180-204.62v-59.99h72.31v-298.47q0-80.69 49.81-142.69 49.8-62 127.88-79.31V-810q0-20.83 14.57-35.42Q459.14-860 479.95-860q20.82 0 35.43 14.58Q530-830.83 530-810v24.92q78.08 17.31 127.88 79.31 49.81 62 49.81 142.69v298.47H780v59.99H180Zm300-293.07Zm-.07 405.38q-29.85 0-51.04-21.24-21.2-21.24-21.2-51.07h144.62q0 29.93-21.26 51.12-21.26 21.19-51.12 21.19Zm-167.62-172.3h335.38v-298.47q0-69.46-49.11-118.57-49.12-49.12-118.58-49.12-69.46 0-118.58 49.12-49.11 49.11-49.11 118.57v298.47Z'/%3e%3c/svg%3e\",\n favorite:\n \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='m480-146.93-44.15-39.69q-99.46-90.23-164.5-155.07-65.04-64.85-103.08-115.43-38.04-50.57-53.15-92.27Q100-591.08 100-634q0-85.15 57.42-142.58Q214.85-834 300-834q52.38 0 99 24.5t81 70.27q34.38-45.77 81-70.27 46.62-24.5 99-24.5 85.15 0 142.58 57.42Q860-719.15 860-634q0 42.92-15.12 84.61-15.11 41.7-53.15 92.27-38.04 50.58-102.89 115.43Q624-276.85 524.15-186.62L480-146.93Zm0-81.07q96-86.38 158-148.08 62-61.69 98-107.19t50-80.81q14-35.3 14-69.92 0-60-40-100t-100-40q-47.38 0-87.58 26.88-40.19 26.89-63.65 74.81h-57.54q-23.85-48.31-63.85-75Q347.38-774 300-774q-59.62 0-99.81 40Q160-694 160-634q0 34.62 14 69.92 14 35.31 50 80.81t98 107q62 61.5 158 148.27Zm0-273Z'/%3e%3c/svg%3e\",\n help: \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M508.5-267.21q11.81-11.83 11.81-28.97 0-17.13-11.83-28.94-11.83-11.8-28.96-11.8-17.13 0-28.94 11.83-11.81 11.83-11.81 28.96 0 17.13 11.83 28.94 11.83 11.8 28.96 11.8 17.13 0 28.94-11.82Zm-57.27-131.41h56.31q.77-29.53 8.65-47.19 7.89-17.65 38.27-46.8 26.39-26.39 40.42-48.74 14.04-22.34 14.04-52.77 0-51.65-37.11-80.69-37.12-29.03-87.81-29.03-50.08 0-82.88 26.73-32.81 26.73-46.81 62.96l51.38 20.61q7.31-19.92 25-38.81 17.69-18.88 52.54-18.88 35.46 0 52.42 19.42 16.97 19.43 16.97 42.73 0 20.39-11.62 37.31-11.61 16.92-29.61 32.69-39.39 35.54-49.77 56.7-10.39 21.15-10.39 63.76ZM480.07-100q-78.84 0-148.21-29.92t-120.68-81.21q-51.31-51.29-81.25-120.63Q100-401.1 100-479.93q0-78.84 29.92-148.21t81.21-120.68q51.29-51.31 120.63-81.25Q401.1-860 479.93-860q78.84 0 148.21 29.92t120.68 81.21q51.31 51.29 81.25 120.63Q860-558.9 860-480.07q0 78.84-29.92 148.21t-81.21 120.68q-51.29 51.31-120.63 81.25Q558.9-100 480.07-100Zm-.07-60q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z'/%3e%3c/svg%3e\",\n calendar:\n \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M212.31-100Q182-100 161-121q-21-21-21-51.31v-535.38Q140-738 161-759q21-21 51.31-21h55.38v-84.61h61.54V-780h303.08v-84.61h60V-780h55.38Q778-780 799-759q21 21 21 51.31v535.38Q820-142 799-121q-21 21-51.31 21H212.31Zm0-60h535.38q4.62 0 8.46-3.85 3.85-3.84 3.85-8.46v-375.38H200v375.38q0 4.62 3.85 8.46 3.84 3.85 8.46 3.85ZM200-607.69h560v-100q0-4.62-3.85-8.46-3.84-3.85-8.46-3.85H212.31q-4.62 0-8.46 3.85-3.85 3.84-3.85 8.46v100Zm0 0V-720v112.31Zm280 210.77q-14.69 0-25.04-10.35-10.34-10.34-10.34-25.04 0-14.69 10.34-25.04 10.35-10.34 25.04-10.34t25.04 10.34q10.34 10.35 10.34 25.04 0 14.7-10.34 25.04-10.35 10.35-25.04 10.35Zm-185.04-10.35q-10.34-10.34-10.34-25.04 0-14.69 10.34-25.04 10.35-10.34 25.04-10.34t25.04 10.34q10.34 10.35 10.34 25.04 0 14.7-10.34 25.04-10.35 10.35-25.04 10.35t-25.04-10.35ZM640-396.92q-14.69 0-25.04-10.35-10.34-10.34-10.34-25.04 0-14.69 10.34-25.04 10.35-10.34 25.04-10.34t25.04 10.34q10.34 10.35 10.34 25.04 0 14.7-10.34 25.04-10.35 10.35-25.04 10.35ZM480-240q-14.69 0-25.04-10.35-10.34-10.34-10.34-25.03 0-14.7 10.34-25.04 10.35-10.35 25.04-10.35t25.04 10.35q10.34 10.34 10.34 25.04 0 14.69-10.34 25.03Q494.69-240 480-240Zm-185.04-10.35q-10.34-10.34-10.34-25.03 0-14.7 10.34-25.04 10.35-10.35 25.04-10.35t25.04 10.35q10.34 10.34 10.34 25.04 0 14.69-10.34 25.03Q334.69-240 320-240t-25.04-10.35ZM640-240q-14.69 0-25.04-10.35-10.34-10.34-10.34-25.03 0-14.7 10.34-25.04 10.35-10.35 25.04-10.35t25.04 10.35q10.34 10.34 10.34 25.04 0 14.69-10.34 25.03Q654.69-240 640-240Z'/%3e%3c/svg%3e\",\n clock:\n \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='m618.92-298.92 42.16-42.16L510-492.16V-680h-60v212.15l168.92 168.93ZM480.07-100q-78.84 0-148.21-29.92t-120.68-81.21q-51.31-51.29-81.25-120.63Q100-401.1 100-479.93q0-78.84 29.92-148.21t81.21-120.68q51.29-51.31 120.63-81.25Q401.1-860 479.93-860q78.84 0 148.21 29.92t120.68 81.21q51.31 51.29 81.25 120.63Q860-558.9 860-480.07q0 78.84-29.92 148.21t-81.21 120.68q-51.29 51.31-120.63 81.25Q558.9-100 480.07-100ZM480-480Zm0 320q133 0 226.5-93.5T800-480q0-133-93.5-226.5T480-800q-133 0-226.5 93.5T160-480q0 133 93.5 226.5T480-160Z'/%3e%3c/svg%3e\",\n mail: \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M172.31-180Q142-180 121-201q-21-21-21-51.31v-455.38Q100-738 121-759q21-21 51.31-21h615.38Q818-780 839-759q21 21 21 51.31v455.38Q860-222 839-201q-21 21-51.31 21H172.31ZM480-457.69 160-662.31v410q0 5.39 3.46 8.85t8.85 3.46h615.38q5.39 0 8.85-3.46t3.46-8.85v-410L480-457.69Zm0-62.31 313.85-200h-627.7L480-520ZM160-662.31V-720v467.69q0 5.39 3.46 8.85t8.85 3.46H160v-422.31Z'/%3e%3c/svg%3e\",\n chat: \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M250-410h300v-60H250v60Zm0-120h460v-60H250v60Zm0-120h460v-60H250v60ZM100-118.46v-669.23Q100-818 121-839q21-21 51.31-21h615.38Q818-860 839-839q21 21 21 51.31v455.38Q860-302 839-281q-21 21-51.31 21H241.54L100-118.46ZM216-320h571.69q4.62 0 8.46-3.85 3.85-3.84 3.85-8.46v-455.38q0-4.62-3.85-8.46-3.84-3.85-8.46-3.85H172.31q-4.62 0-8.46 3.85-3.85 3.84-3.85 8.46v523.08L216-320Zm-56 0v-480 480Z'/%3e%3c/svg%3e\",\n image:\n \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M212.31-140Q182-140 161-161q-21-21-21-51.31v-535.38Q140-778 161-799q21-21 51.31-21h535.38Q778-820 799-799q21 21 21 51.31v535.38Q820-182 799-161q-21 21-51.31 21H212.31Zm0-60h535.38q4.62 0 8.46-3.85 3.85-3.84 3.85-8.46v-535.38q0-4.62-3.85-8.46-3.84-3.85-8.46-3.85H212.31q-4.62 0-8.46 3.85-3.85 3.84-3.85 8.46v535.38q0 4.62 3.85 8.46 3.84 3.85 8.46 3.85ZM270-290h423.07L561.54-465.38 449.23-319.23l-80-102.31L270-290Zm-70 90v-560 560Z'/%3e%3c/svg%3e\",\n document:\n \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M330-250h300v-60H330v60Zm0-160h300v-60H330v60Zm-77.69 310Q222-100 201-121q-21-21-21-51.31v-615.38Q180-818 201-839q21-21 51.31-21H570l210 210v477.69Q780-142 759-121q-21 21-51.31 21H252.31ZM540-620v-180H252.31q-4.62 0-8.46 3.85-3.85 3.84-3.85 8.46v615.38q0 4.62 3.85 8.46 3.84 3.85 8.46 3.85h455.38q4.62 0 8.46-3.85 3.85-3.84 3.85-8.46V-620H540ZM240-800v180-180V-160v-640Z'/%3e%3c/svg%3e\",\n payment:\n \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M550-451.54q-41.92 0-70.96-29.04Q450-509.62 450-551.54q0-41.92 29.04-70.96 29.04-29.04 70.96-29.04 41.92 0 70.96 29.04Q650-593.46 650-551.54q0 41.92-29.04 70.96-29.04 29.04-70.96 29.04ZM286.15-327.69q-29.82 0-51.06-21.24-21.24-21.24-21.24-51.07v-303.08q0-29.82 21.24-51.06 21.24-21.24 51.06-21.24h527.69q29.83 0 51.07 21.24 21.24 21.24 21.24 51.06V-400q0 29.83-21.24 51.07-21.24 21.24-51.07 21.24H286.15Zm60-60h407.7q0-29.92 21.24-51.12Q796.33-460 826.15-460v-183.08q-29.92 0-51.11-21.24-21.19-21.24-21.19-51.06h-407.7q0 29.92-21.24 51.11-21.24 21.19-51.06 21.19V-460q29.92 0 51.11 21.24 21.19 21.24 21.19 51.07Zm420.77 200H146.16q-29.83 0-51.07-21.24Q73.85-230.17 73.85-260v-396.15h60V-260q0 4.61 3.84 8.46 3.85 3.85 8.47 3.85h620.76v60Zm-480.77-200h-12.3V-715.38h12.3q-5 0-8.65 3.65-3.65 3.65-3.65 8.65V-400q0 5 3.65 8.65 3.65 3.66 8.65 3.66Z'/%3e%3c/svg%3e\",\n bank: \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M230-280v-300h60v300h-60Zm220 0v-300h60v300h-60ZM110.77-140v-60h738.46v60H110.77ZM670-280v-300h60v300h-60ZM110.77-660v-56.92L480-897.69l369.23 180.77V-660H110.77Zm141.84-60h454.78-454.78Zm0 0h454.78L480-830 252.61-720Z'/%3e%3c/svg%3e\",\n trendingUp:\n \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M142.15-258.08 100-300.23l274.08-276.08 160 160 224.54-221.77H640v-60h220v220h-60v-117.84L534.08-330l-160-160-231.93 231.92Z'/%3e%3c/svg%3e\",\n extension:\n \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M208.85-197.69h504.61q3.85 0 6.35-2.69 2.5-2.7 2.5-6.54v-176.31l36.92-15.85q18.31-6.84 29.54-23.53Q800-439.31 800-461.15q0-21.62-11.23-38.43t-29.54-24.04l-36.92-15.23v-176.53q0-4.24-2.5-6.74t-6.35-2.5H534.92l-7.3-51.07q-3.77-25.85-22.39-43.92-18.61-18.08-44.08-18.08-26.07 0-44.69 18.08-18.61 18.07-22.38 43.92l-7.31 51.07H208.46q-3.46 0-5.96 2.5t-2.5 6.74V-624q51.77 17.15 84.15 62.04 32.39 44.88 32.39 100.81 0 57.3-32.19 102.19-32.2 44.88-84.35 61.27v90.77q0 3.84 2.5 6.54 2.5 2.69 6.35 2.69Zm0 60q-29 0-48.93-20.12Q140-177.92 140-206.92V-347q48-1.54 82.27-33.58 34.27-32.04 34.27-80.57 0-45.62-34.46-78.12-34.46-32.5-82.08-36.42v-139.69q0-28.77 20.04-49t48.42-20.23h126.23q6.62-47.93 42.16-80.5 35.54-32.58 84.3-32.58 48.16 0 83.7 32.58 35.53 32.57 42.76 80.5h125.85q28.39 0 48.62 20.23 20.23 20.23 20.23 49v136.69q34.84 14.15 56.27 46.23Q860-500.38 860-461.15q0 39.07-21.42 70.96-21.43 31.88-56.27 46.57v136.7q0 29-20.23 49.11-20.23 20.12-48.62 20.12H208.85ZM500-461.15Z'/%3e%3c/svg%3e\",\n webhook:\n \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M280-130q-78.77 0-134.38-55.62Q90-241.23 90-320q0-66.08 39.54-116.35 39.54-50.26 100.46-66.19v63q-35 14.31-57.5 46.85T150-320q0 53.85 38.08 91.92Q226.15-190 280-190t91.92-38.08Q410-266.15 410-320v-30h225.38q6.85-10.92 18.54-17.77 11.7-6.84 26.08-6.84 22.69 0 38.65 15.96 15.96 15.96 15.96 38.65 0 22.69-15.96 38.65-15.96 15.96-38.65 15.96-14.77 0-26.27-6.65T635.38-290H467.54q-11.69 71.31-65.04 115.65Q349.15-130 280-130Zm400 0q-49.08 0-89.96-22.89-40.88-22.88-67.27-61.72h81.61q15.16 11.53 34.85 18.07Q658.92-190 680-190q53.85 0 91.92-38.08Q810-266.15 810-320t-38.08-91.92Q733.85-450 680-450q-18.85 0-34.88 4.73-16.04 4.73-30.66 13.81l-117-194.93q-21-.53-36.54-15.57Q445.39-657 445.39-680q0-22.69 15.96-38.65 15.96-15.96 38.65-15.96 22.69 0 38.65 15.96 15.96 15.96 15.96 38.65 0 6.15-1.15 11.38-1.15 5.24-4.31 10.24L640-505.85q9.15-2 19.12-3.07Q669.08-510 680-510q78.77 0 134.38 55.62Q870-398.77 870-320t-55.62 134.38Q758.77-130 680-130ZM280-265.39q-22.69 0-38.65-15.96-15.96-15.96-15.96-38.65 0-21.23 14.57-36.85 14.58-15.61 36.89-16.76l98.23-163.31q-31.31-26.62-48.19-63.73Q310-637.77 310-680q0-78.77 55.62-134.38Q421.23-870 500-870t134.38 55.62Q690-758.77 690-680h-60q0-53.85-38.08-91.92Q553.85-810 500-810t-91.92 38.08Q370-733.85 370-680q0 42.62 24.08 75.5 24.07 32.88 63.3 46.89L328.54-342.62q3.15 5.39 4.61 10.93 1.46 5.54 1.46 11.69 0 22.69-15.96 38.65-15.96 15.96-38.65 15.96Z'/%3e%3c/svg%3e\",\n logout:\n \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3e%3cpath d='M212.31-140Q182-140 161-161q-21-21-21-51.31v-535.38Q140-778 161-799q21-21 51.31-21h268.07v60H212.31q-4.62 0-8.46 3.85-3.85 3.84-3.85 8.46v535.38q0 4.62 3.85 8.46 3.84 3.85 8.46 3.85h268.07v60H212.31Zm436.92-169.23-41.54-43.39L705.08-450H363.85v-60h341.23l-97.39-97.38 41.54-43.39L820-480 649.23-309.23Z'/%3e%3c/svg%3e\",\n\n // Hand-authored: animated, no Material Symbols equivalent\n spinner:\n \"data:image/svg+xml;charset=UTF-8,%3csvg stroke='%23000' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg' %3e%3cstyle%3e .oui_spinner %7b transform-origin: center; animation: rotate_360 2s linear infinite;%7d .oui_spinner circle %7b stroke-linecap: round; animation: dash 1.5s ease-in-out infinite;%7d %40keyframes rotate_360 %7b 100%25 %7b transform: rotate(360deg);%7d %7d %40keyframes dash %7b 0%25 %7b stroke-dasharray: 0 150; stroke-dashoffset: 0;%7d 47.5%25 %7b stroke-dasharray: 42 150; stroke-dashoffset: -16;%7d 95%25, 100%25 %7b stroke-dasharray: 42 150; stroke-dashoffset: -59;%7d %7d %3c/style%3e%3cg class='oui_spinner'%3e%3ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3'%3e%3c/circle%3e%3c/g%3e%3c/svg%3e \",\n} satisfies Icons;\n\n/** Names guaranteed present on every theme. */\nexport type BaseIconName = keyof typeof BaseIcons;\n\n/**\n * An icon name. Autocompletes the built-in set while still allowing any name a\n * theme registers through `createTheme({ icons })`.\n */\nexport type IconName = BaseIconName | (string & {});\n","/**\n * The highlight state for roving-focus composites (menus, and any other widget\n * that moves focus programmatically): pointer hover, or focus the user drove\n * from the keyboard.\n *\n * Why not plain `:focus` — a roving-focus composite calls `.focus()` on an item\n * every time it opens, including pointer opens, and `:focus` would paint that\n * as a highlight the mouse user never asked for, reading as a preselected\n * item. `:focus-visible` excludes programmatic focus that follows a click while\n * still matching keyboard navigation.\n *\n * Shared as a constant because Emotion merges styles by **exact selector\n * text**: a component's base rule and any theme variant restyling that rule\n * must key both with this value, or the variant silently fails to override and\n * reintroduces the phantom highlight.\n */\nexport const HOVER_OR_KEYBOARD_FOCUS = '&:hover, &:focus-visible';\n","import type { ComponentThemes } from '../../component';\nimport { generatePalette, type PaletteConfig } from '../../color';\nimport type { GenerateColorsConfig } from '../../generation/palette.factory';\nimport { generateShadows } from '../../generation/shadow.generator';\nimport { BaseIcons } from '../../iconography/icon.records';\nimport { HOVER_OR_KEYBOARD_FOCUS } from '../../style/selectors.constants';\nimport type { TextRole, TextStyle } from '../../typography';\nimport type {\n Borders,\n Colors,\n Icons,\n Radii,\n Shadows,\n Spacing,\n Thicknesses,\n Typography,\n UniTheme,\n} from '../theme.model';\n\n// ==========================================\n// Type scale — the single source of type truth.\n// CSS-ready `typefaces` are derived from this on read (toTypefaces).\n// ==========================================\nconst BaseTypography: Typography = {\n 'display-large': {\n fontFamily: 'Red Hat Display',\n fontSize: 57,\n lineHeight: 64,\n fontWeight: 'normal',\n letterSpacing: -0.25,\n },\n 'display-medium': {\n fontFamily: 'Red Hat Display',\n fontSize: 45,\n lineHeight: 52,\n fontWeight: 'normal',\n },\n 'display-small': {\n fontFamily: 'Red Hat Display',\n fontSize: 36,\n lineHeight: 44,\n fontWeight: 'normal',\n },\n 'headline-large': {\n fontFamily: 'Red Hat Display',\n fontSize: 32,\n lineHeight: 40,\n fontWeight: 'normal',\n },\n 'headline-medium': {\n fontFamily: 'Red Hat Display',\n fontSize: 28,\n lineHeight: 36,\n fontWeight: 'normal',\n },\n 'headline-small': {\n fontFamily: 'Red Hat Display',\n fontSize: 24,\n lineHeight: 32,\n fontWeight: 'normal',\n },\n 'title-large': {\n fontFamily: 'Red Hat Display',\n fontSize: 22,\n lineHeight: 28,\n fontWeight: 'normal',\n },\n 'title-medium': {\n fontFamily: 'Red Hat Display',\n fontSize: 16,\n lineHeight: 24,\n fontWeight: 'medium',\n letterSpacing: 0.15,\n },\n 'title-small': {\n fontFamily: 'Red Hat Display',\n fontWeight: 'medium',\n fontSize: 14,\n lineHeight: 20,\n letterSpacing: 0.1,\n },\n 'body-1-long': { fontFamily: 'Roboto', fontSize: 16, lineHeight: 22 },\n 'body-1-short': { fontFamily: 'Roboto', fontSize: 16, lineHeight: 24 },\n 'body-2-long': { fontFamily: 'Roboto', fontSize: 14, lineHeight: 18 },\n 'body-2-short': { fontFamily: 'Roboto', fontSize: 14, lineHeight: 20 },\n 'subtitle-1': {\n fontFamily: 'Red Hat Display',\n fontSize: 16,\n lineHeight: 24,\n letterSpacing: 0.15,\n },\n 'subtitle-2': {\n fontFamily: 'Red Hat Display',\n fontSize: 14,\n lineHeight: 20,\n fontWeight: 'medium',\n letterSpacing: 0.1,\n },\n label: { fontFamily: 'Roboto', fontSize: 14, lineHeight: 20 },\n button: {\n fontFamily: 'Red Hat Display',\n fontSize: 14,\n lineHeight: 20,\n fontWeight: 'medium',\n textTransform: 'capitalize',\n },\n caption: { fontFamily: 'Roboto', fontSize: 12, lineHeight: 18, letterSpacing: 0.4 },\n overline: {\n fontFamily: 'Red Hat Display',\n fontSize: 10,\n lineHeight: 18,\n letterSpacing: 1.5,\n textTransform: 'uppercase',\n },\n paragraph: { fontFamily: 'Roboto', fontSize: 16, lineHeight: 24 },\n quote: { fontFamily: 'Roboto', fontSize: 16, lineHeight: 24 },\n note: { fontFamily: 'Roboto', fontSize: 14, lineHeight: 22, fontStyle: 'italic' },\n // Product-specific extras (were duplicated into `typefaces` before).\n badge: { fontFamily: 'Red Hat Display', fontSize: 16, lineHeight: 24 },\n // Stat-tile value: large, semibold, slightly tightened. Proportional\n // figures on purpose — tabular-nums is for columns, not display numbers.\n stat: {\n fontFamily: 'Red Hat Display',\n fontSize: 32,\n lineHeight: 38,\n fontWeight: 600,\n letterSpacing: -0.32,\n },\n tag: { fontFamily: 'Red Hat Display', fontSize: 15, lineHeight: 20, fontWeight: 600 },\n input: { fontFamily: 'Red Hat Display', fontSize: 14, lineHeight: 24 },\n} as Record<TextRole, TextStyle> & Record<string, TextStyle>;\n\n// ==========================================\n// Shared token scales — theme-agnostic.\n// ==========================================\nconst BaseShadows: Shadows = {\n raised:\n 'rgba(0, 0, 0, 0.2) 0px 2px 1px -1px, rgba(0, 0, 0, 0.14) 0px 1px 1px 0px, rgba(0, 0, 0, 0.12) 0px 1px 3px 0px',\n menu: 'rgba(0, 0, 0, 0.2) 0px 3px 3px -2px, rgba(0, 0, 0, 0.14) 0px 3px 4px 0px, rgba(0, 0, 0, 0.12) 0px 1px 8px 0px;',\n dialog:\n 'rgba(0, 0, 0, 0.2) 0px 3px 5px -1px, rgba(0, 0, 0, 0.14) 0px 6px 10px 0px, rgba(0, 0, 0, 0.12) 0px 1px 18px 0px',\n warn: '0 0 5px rgba(255, 0, 0, 0.5), inset 0 0 5px rgba(255, 0, 0, 0.3)',\n};\n\nconst BaseSpacing: Spacing = {\n // 0, not 'none': `padding: none` is invalid CSS and gets dropped, which let\n // user-agent defaults (e.g. <dialog>'s 1em padding) leak through the token.\n none: 0,\n xxs: '2px',\n xs: '4px',\n sm: '8px',\n md: '16px',\n lg: '32px',\n xl: '64px',\n};\n\nconst BaseThicknesses: Thicknesses = { thin: 1, standard: 2, thick: 4 };\n\nconst BaseRadii: Radii = {\n none: 'none',\n xxs: '4px',\n xs: '8px',\n sm: '16px',\n md: '24px',\n lg: '32px',\n max: '999px',\n};\n\n// ==========================================\n// Color-derived token builders — the reason a custom theme\n// only has to supply `colors`.\n// ==========================================\nconst buildBorders = (c: Colors): Borders => ({\n primary: `1px solid ${c.primary}`,\n secondary: `1px solid ${c.secondary}`,\n tertiary: `1px solid ${c.tertiary}`,\n quaternary: `1px solid ${c.quaternary}`,\n warn: `1px solid ${c.warn}`,\n success: `1px solid ${c.success}`,\n light: `1px solid ${c.outline}`,\n dark: `1px solid ${c['on-background']}`,\n dotted: `1px dotted ${c['on-background']}`,\n});\n\n/**\n * One tag colour role across all three tones. `soft` is the resting look (the\n * container pair), `solid` fills with the role itself, `outline` keeps the\n * surface and draws the edge — so every role stays consistent and a theme can\n * still override any single cell.\n */\nconst tagVariant = (\n c: Colors,\n role: 'primary' | 'secondary' | 'tertiary' | 'warn' | 'success'\n) => ({\n [role]: {\n backgroundColor: c[`${role}-container`],\n color: c[`on-${role}-container`],\n '&.tone-solid': { backgroundColor: c[role], color: c[`on-${role}`] },\n '&.tone-outline': {\n backgroundColor: 'transparent',\n color: c[role],\n borderColor: c[`on-${role}-container-border`] ?? c[role],\n },\n },\n});\n\nconst buildComponents = (c: Colors): ComponentThemes => ({\n alert: {\n options: { topPosition: 40, borderRadius: 'sm', transitionSpeed: 0.35, elevation: 'md' },\n },\n // Trail typography, link/current colors, separator symbol and spacing are\n // tokens; the current page reads in the stronger ink.\n breadcrumb: {\n options: {\n typeface: 'label',\n color: 'on-background-variant',\n currentColor: 'on-background',\n separatorSymbol: 'chevron_right',\n gap: 'xs',\n },\n },\n // App shell: bar surface, divider, title type and spacing are all tokens.\n appBar: {\n options: {\n color: 'surface',\n height: 56,\n divider: 'light',\n typeface: 'title-large',\n padding: 'md',\n gap: 'md',\n elevation: undefined,\n },\n },\n // Navigation drawer: shares the dialog's native-<dialog> machinery in\n // 'over' mode (elevation + scrim backdrop); 'side' mode is an in-flow\n // aside separated by the divider border primitive.\n drawer: {\n options: {\n color: 'surface',\n width: 280,\n divider: 'light',\n elevation: 'menu',\n padding: 'md',\n backdrop: { background: 'rgba(0, 0, 0, 0.4)' },\n },\n },\n // Initials/icon avatars color from the role's container tokens; the radius\n // token makes them circles by default and squares under a 'sharp' theme.\n avatar: {\n options: { borderRadius: 'max', typeface: 'subtitle-2', fallbackSymbol: 'person' },\n variants: {\n primary: { backgroundColor: c['primary-container'], color: c['on-primary-container'] },\n secondary: { backgroundColor: c['secondary-container'], color: c['on-secondary-container'] },\n tertiary: { backgroundColor: c['tertiary-container'], color: c['on-tertiary-container'] },\n quaternary: { backgroundColor: c['surface-variant'], color: c['on-surface-variant'] },\n warn: { backgroundColor: c['warn-container'], color: c['on-warn-container'] },\n success: { backgroundColor: c['success-container'], color: c['on-success-container'] },\n },\n sizes: {\n sm: { height: 24, width: 24, fontSize: 10 },\n md: { height: 32, width: 32, fontSize: 13 },\n lg: { height: 40, width: 40, fontSize: 16 },\n xl: { height: 56, width: 56, fontSize: 22 },\n },\n },\n // Overlap is a spacing token; the ring separates stacked avatars using the\n // surface color so groups read on any background.\n avatarGroup: { options: { overlap: 'sm', ringColor: 'surface', ringWidth: 2 } },\n // Search field: chrome comes from the shared `input` options via\n // uni-input-box; these tokens style the affordances and suggestion list.\n searchInput: {\n options: {\n searchSymbol: 'search',\n clearSymbol: 'close',\n listColor: 'primary-surface',\n listShadow: 'menu',\n listBorderRadius: 'xs',\n maxSuggestions: 8,\n },\n },\n // Selection controls: chrome colors are tokens (accent fill/ring follows the\n // component's variant; its on-color pairs are derived in the component).\n checkbox: {\n options: {\n size: 20,\n boxColor: 'surface',\n borderRadius: 2,\n focusRingGap: 2,\n },\n },\n radio: {\n options: { size: 20, ringColor: 'outline', fillColor: 'surface', transitionSpeed: 0.3 },\n },\n dialog: {\n options: {\n borderRadius: 'lg',\n color: 'primary-surface',\n border: 'quaternary',\n padding: 'sm',\n elevation: 'dialog',\n backdrop: { background: 'rgba(255, 255, 255, 0.6)', backdropFilter: 'blur(2px)' },\n },\n },\n // Footer action row: every layout knob is a token so a theme can move from\n // the default centered pill pair to e.g. Carbon-style full-bleed halves\n // (stretch + reverseOrder + 'none' spacing) without touching the component.\n dialogButtons: {\n options: {\n gap: 'md',\n padding: 'md',\n paddingBottom: 'lg',\n justifyContent: 'center',\n confirmButtonVariant: 'primary',\n cancelButtonVariant: 'warn',\n buttonSize: 'lg',\n stretch: false,\n reverseOrder: false,\n },\n },\n dialogHeader: {\n options: {\n borderRadius: 'max',\n color: 'primary',\n height: 48,\n textRole: 'title-large',\n textAlign: 'center',\n closeButtonIcon: 'close',\n closeButtonSize: 'md',\n },\n },\n dropdown: {\n options: { border: 'none', borderRadius: 'xxs', color: 'primary-surface', shadow: 'menu' },\n },\n // Menu panel chrome. The undefined color/border/borderRadius/shadow fall\n // back to the `dropdown` options above, so menus follow generic popovers\n // until a theme deliberately splits them. Panel padding + item borderRadius\n // together select the archetype: full-bleed rows (padding none) vs. the\n // inset \"hover pill\" look (padding xs + menuItem borderRadius).\n menu: {\n options: {\n minWidth: 184,\n color: undefined,\n border: undefined,\n borderRadius: undefined,\n shadow: undefined,\n paddingVertical: 'xs',\n paddingHorizontal: 'none',\n dividerBorder: 'light',\n dividerSpacing: 'xs',\n },\n },\n // Item anatomy: every density/shape/type knob is a token, and `variants`\n // carry tones — an item declares `variant: 'warn'` and the theme decides\n // what a destructive action looks like. `activeSymbol` marks the selected\n // item; set it to undefined to drop the trailing symbol entirely.\n menuItem: {\n options: {\n height: 38,\n paddingHorizontal: 'md',\n gap: 'md',\n borderRadius: 'none',\n typeface: 'label',\n textColor: undefined,\n hoverColor: 'primary-container',\n activeSymbol: 'check',\n transitionSpeed: 0.35,\n },\n variants: {\n warn: {\n color: c.warn,\n // Must key the highlight with the shared constant — see its doc.\n [HOVER_OR_KEYBOARD_FOCUS]: {\n backgroundColor: c['warn-container'],\n color: c['on-warn-container'],\n },\n },\n },\n },\n // Base reveal/collapse duration (seconds, matching alert/card\n // `transitionSpeed`) at a 240px-tall region; actual duration scales with\n // content height (√-of-height, clamped ~0.15–0.6s at this speed — see\n // `expandDuration`). The toggle's chevron rotation shares the clock.\n expand: { options: { transitionSpeed: 0.35 } },\n footer: { options: { height: 52, color: 'primary', logoHeight: 18.6, logoPadding: 'md' } },\n input: {\n options: {\n typeface: 'input',\n color: 'primary-surface',\n textColor: 'on-primary-surface',\n disabledColor: 'disabled-surface',\n disabledTextColor: 'on-disabled-surface',\n border: 'light',\n borderRadius: 'xs',\n errorShadow: 'warn',\n errorBorder: 'warn',\n height: 32,\n paddingLeft: 'sm',\n focusOutline: `2px solid ${c.primary}`,\n focusOutlineOffset: 2,\n },\n },\n // Field chrome (color/border/typeface/focus) comes from the shared `input`\n // options via uni-input-box; these are the textarea-specific behaviors.\n textarea: { options: { rows: 3, resize: 'vertical' } },\n // Every visual knob is a token, so a theme can turn the default underline\n // tabs into pills (borderRadius 'max' + activeColor) or restyle the\n // indicator without touching component code.\n tabs: {\n options: {\n typeface: 'title-small',\n textColor: 'on-surface-variant',\n activeTextColor: 'primary',\n indicatorColor: 'primary',\n indicatorThickness: 'standard',\n divider: 'light',\n gap: 'sm',\n borderRadius: 'none',\n padding: 'md',\n activeColor: undefined,\n },\n },\n multiSelectDropdown: {\n options: {\n textRole: 'input',\n textColor: 'on-primary-surface',\n dividerBorder: 'light',\n searchInputBorder: 'light',\n searchInputBorderRadius: 'xxs',\n focusOutline: `2px solid ${c.primary}`,\n focusOutlineOffset: 2,\n },\n },\n badge: { options: { borderRadius: 'xxs' } },\n\n // Chips. Two orthogonal axes: `variant` picks the colour role, `tone` picks\n // the archetype (soft fill / solid fill / outline). Tones are nested\n // `&.tone-*` selectors inside each variant so a theme author restyles both\n // axes in one place — the same trick `button` uses for `&:hover` — rather\n // than hunting for colour decisions inside `options`.\n tag: {\n options: {\n borderRadius: 'max', // 'xs' switches the whole set to rectangular labels\n typeface: 'tag',\n gap: 'xs',\n // Icon primitives, not Material ligatures: they mask `currentColor`, so\n // they recolour with the chip's tone and a theme can swap the artwork.\n removeIcon: 'close',\n selectedIcon: 'check',\n },\n fixed: {\n display: 'inline-flex',\n alignItems: 'center',\n maxWidth: '100%',\n border: '1px solid transparent',\n transition: 'background-color .2s ease, color .2s ease',\n },\n variants: {\n ...tagVariant(c, 'primary'),\n ...tagVariant(c, 'secondary'),\n ...tagVariant(c, 'tertiary'),\n ...tagVariant(c, 'warn'),\n ...tagVariant(c, 'success'),\n ghost: {\n backgroundColor: 'transparent',\n color: c['on-background'],\n '&.tone-solid': { backgroundColor: c['surface-variant'], color: c['on-surface-variant'] },\n '&.tone-outline': { backgroundColor: 'transparent', borderColor: c.outline },\n },\n disabled: {\n backgroundColor: c['disabled-container'],\n color: c['on-disabled'],\n '&.tone-solid': { backgroundColor: c.disabled, color: c['on-disabled'] },\n '&.tone-outline': { backgroundColor: 'transparent', borderColor: c.disabled },\n },\n },\n // Geometry only — family and weight come from the `typeface` option.\n sizes: {\n sm: { height: 20, fontSize: 12, padding: '0 8px' },\n md: { height: 24, fontSize: 13, padding: '0 10px' },\n lg: { height: 32, fontSize: 15, padding: '0 12px' },\n },\n },\n // Chip field. Field chrome (colour, border, radius, focus outline) is NOT\n // duplicated here — it comes from `input` via uni-input-box, so a tag input\n // restyles with every other field. These are the chip-field specifics.\n tagInput: {\n options: {\n chipGap: 'xs',\n chipSize: 'md',\n // The text input never collapses to a sliver next to wrapped chips.\n minInputWidth: '12ch',\n listColor: 'primary-surface',\n listShadow: 'menu',\n listBorderRadius: 'xs',\n maxSuggestions: 8,\n },\n },\n\n // Month grid. Selection/range/today colours are deliberately NOT options —\n // they are the `primary` role pair, so a theme restyles them by restyling\n // its palette, the same rule every other component follows.\n calendar: {\n options: {\n dayBorderRadius: 'max', // 'xxs' gives the square/GitHub-contributions look\n typeface: 'label',\n gap: 'xxs', // grid gutter\n navPrevSymbol: 'chevron_left',\n navNextSymbol: 'chevron_right',\n weekdayFormat: 'short', // Intl weekday: 'narrow' | 'short'\n showOutsideDays: false,\n todayStyle: 'outline', // 'outline' | 'dot'\n },\n fixed: {\n display: 'inline-block',\n userSelect: 'none',\n },\n // Geometry only, like tag: day cell square + font size per size token.\n sizes: {\n sm: { width: 28, height: 28, fontSize: 12 },\n md: { width: 34, height: 34, fontSize: 13 },\n lg: { width: 40, height: 40, fontSize: 15 },\n },\n },\n // Date field. Field chrome comes from `input` via uni-input-box; these\n // style the popup-calendar affordance and panel only.\n dateInput: {\n options: {\n toggleSymbol: 'calendar_month',\n popupShadow: 'menu',\n popupBorderRadius: 'xs',\n popupColor: 'primary-surface',\n },\n },\n // Time field. Same listbox trio as tagInput/searchInput.\n timeInput: {\n options: {\n toggleSymbol: 'schedule',\n listColor: 'primary-surface',\n listShadow: 'menu',\n listBorderRadius: 'xs',\n maxVisibleOptions: 7,\n },\n },\n // Composer seating a date + time part in one field chrome.\n dateTimeInput: {\n options: { partGap: 'sm', dividerColor: 'outline' },\n },\n\n // ---- Buttons: variants are structural archetypes with interaction states ----\n button: {\n // Radius and typeface are tokens, not baked values: `max` renders the\n // classic pill and the type scale's `button` role carries the label\n // typography, so shape languages, custom radii, and typography edits\n // restyle every button by re-pointing or redefining a token.\n options: { borderRadius: 'max', typeface: 'button' },\n fixed: {\n position: 'relative',\n overflow: 'hidden',\n outline: '0',\n border: '0',\n cursor: 'pointer',\n transition: 'all 0.28s ease',\n },\n variants: {\n ghost: {\n backgroundColor: 'transparent',\n color: 'currentcolor',\n '&:hover': { backgroundColor: 'rgba(0,0,0,0.06)' },\n },\n // Solid\n primary: {\n backgroundColor: c.primary,\n color: c['on-primary'],\n border: '0',\n '&:hover': { filter: 'brightness(0.92)' },\n },\n // Hollow\n secondary: {\n backgroundColor: 'transparent',\n color: c.secondary,\n border: `1px solid ${c.secondary}`,\n '&:hover': { backgroundColor: c.secondary, color: c['on-secondary'] },\n },\n // Solid\n tertiary: {\n backgroundColor: c.tertiary,\n color: c['on-tertiary'],\n border: '0',\n '&:hover': { filter: 'brightness(0.92)' },\n },\n warn: {\n backgroundColor: c.warn,\n color: c['on-warn'],\n border: '0',\n '&:hover': { filter: 'brightness(0.92)' },\n },\n success: {\n backgroundColor: c.success,\n color: c['on-success'],\n border: '0',\n '&:hover': { filter: 'brightness(0.92)' },\n },\n disabled: {\n backgroundColor: `${c.disabled} !important`,\n color: `${c['on-disabled']} !important`,\n border: '0',\n },\n },\n // Sizes are geometry only (height/padding/fontSize); families, weights and\n // transforms come from the `typeface` option's type-scale role.\n sizes: {\n sm: { height: 22, fontSize: 12, padding: '0 12px', fontWeight: 600 },\n md: { height: 26, fontSize: 16, padding: '0 16px' },\n lg: { height: 36, fontSize: 18, padding: '0 18px' },\n xl: { height: 48, fontSize: 24, padding: '0 22px' },\n },\n },\n iconButton: {\n options: { borderRadius: 'max' },\n variants: {\n ghost: { backgroundColor: 'transparent', color: 'currentcolor' },\n primary: { backgroundColor: c.primary, color: c['on-primary'] },\n secondary: { backgroundColor: c.secondary, color: c['on-secondary'] },\n tertiary: { backgroundColor: c.tertiary, color: c['on-tertiary'] },\n warn: { backgroundColor: c.warn, color: c['on-warn'] },\n success: { backgroundColor: c.success, color: c['on-success'] },\n disabled: {\n backgroundColor: 'transparent !important',\n color: `${c['on-disabled']} !important`,\n },\n },\n sizes: {\n sm: { height: 22, minHeight: 22, width: 22, minWidth: 22, fontSize: 18 },\n md: { height: 26, minHeight: 26, width: 26, minWidth: 26, fontSize: 22 },\n lg: { height: 36, minHeight: 36, width: 36, minWidth: 36, fontSize: 30 },\n xl: { height: 40, minHeight: 40, width: 40, minWidth: 40, fontSize: 34 },\n },\n },\n progressGauge: {\n fixed: { textFill: c['on-background'] },\n // Track = the role's container token (the palette's soft tint of that\n // role), arc = the role base — so gauges follow any brand palette instead\n // of the fixed pastels they used to hardcode.\n variants: {\n primary: { backgroundColor: c['primary-container'], color: c.primary },\n secondary: { backgroundColor: c['secondary-container'], color: c.secondary },\n tertiary: { backgroundColor: c['tertiary-container'], color: c.tertiary },\n warn: { backgroundColor: c['warn-container'], color: c.warn },\n success: { backgroundColor: c['success-container'], color: c.success },\n },\n sizes: {\n sm: { height: '54px' },\n md: { height: '68px' },\n lg: { height: '82px' },\n xl: { height: '104px' },\n },\n },\n card: {\n // The frame is tokens: the border primitive named by the active variant\n // (borders.primary … borders.success — override with `border` to pin all\n // cards to one primitive, e.g. a custom 'brush-stroke'), the radii scale\n // (`xs` = the classic 8px), and an optional elevation shadow.\n options: { borderRadius: 'xs' },\n fixed: { overflow: 'hidden', backgroundColor: c.background },\n },\n cardHeader: {\n fixed: { padding: '12px 24px' },\n variants: {\n primary: { backgroundColor: c.primary, color: c['on-primary'] },\n secondary: { backgroundColor: c.secondary, color: c['on-secondary'] },\n tertiary: { backgroundColor: c.tertiary, color: c['on-tertiary'] },\n warn: { backgroundColor: c.warn, color: c['on-warn'] },\n success: { backgroundColor: c.success, color: c['on-success'] },\n },\n },\n cardContent: { fixed: { padding: '12px 24px' } },\n dataSearch: {\n options: {\n border: 'light',\n borderRadius: 'xs',\n color: 'primary-surface',\n placeholderColor: 'disabled',\n },\n },\n dataTable: {\n options: {\n color: 'primary-surface',\n border: 'light',\n borderRadius: 'sm',\n elevation: undefined,\n headerPadding: 'sm',\n footerPadding: 'sm',\n thTextRole: 'headline-small',\n thColor: 'primary-container',\n thVerticalBorder: 'dotted',\n thHorizontalBorder: 'light',\n thPadding: 'sm',\n tdTextRole: 'title-small',\n tdColor: 'primary-surface',\n tdStickyColor: 'primary-container',\n tdPadding: 'sm',\n tdVerticalBorder: 'dotted',\n tdHorizontalBorder: 'light',\n rowHoverColor: 'primary-container',\n loadingOverlayColor: 'scrim',\n loadingSpinnerColor: 'primary',\n loadingSpinnerSize: 40,\n },\n },\n notificationBadge: { options: { borderRadius: 'sm', offset: -10 } },\n paginator: {\n options: {\n gap: 'xs',\n textRole: 'label',\n inputBorder: 'light',\n inputBorderRadius: 'xs',\n pageBorderRadius: 'xs',\n currentPageBorder: 'light',\n currentPageBorderRadius: 'xs',\n },\n },\n // KPI tile: card-recipe frame, muted label over a large `stat`-role value;\n // delta inks are the semantic success/error (direction × goodness decided\n // by the component); sparkline in the outline hue, endpoint in the accent.\n stat: {\n options: {\n labelTypeface: 'label',\n valueTypeface: 'stat',\n color: 'surface',\n border: 'light',\n borderRadius: 'xs',\n positiveColor: 'success',\n negativeColor: 'error',\n trendColor: 'outline',\n trendAccent: 'primary',\n padding: 'md',\n gap: 'xxs',\n },\n },\n // Range input: fill/thumb in the accent, track in the muted surface, both\n // radius-tokened — geometry knobs are plain numbers.\n slider: {\n options: {\n color: 'primary',\n trackColor: 'surface-variant',\n borderRadius: 'max',\n trackHeight: 4,\n thumbSize: 16,\n },\n },\n // Loading placeholders paint with surface tokens so they sit naturally on\n // any theme; the shimmer highlight sweeps in the lighter surface color.\n skeleton: {\n options: {\n color: 'surface-variant',\n highlightColor: 'surface',\n borderRadius: 'xs',\n animation: 'shimmer',\n duration: 1.4,\n gap: 'sm',\n },\n },\n snackbar: {\n options: { bottomPosition: 40, transitionDelay: '0.35s', autoCloseDelay: 35000 },\n },\n symbol: { options: { fill: 0, weight: 400, grade: 0, opticalSize: 24 } },\n toggle: { options: { size: 20, trackColor: 'surface-variant', knobColor: 'surface' } },\n tooltip: {\n options: {\n border: undefined,\n borderRadius: 'xs',\n shadow: 'raised',\n color: 'inverse-surface',\n typeface: 'label',\n },\n },\n});\n\n// ==========================================\n// Theme factory. A custom theme = a name + a `colors` map.\n// Everything color-dependent (borders, component variants) is derived;\n// `borders`/`components` overrides deep-merge over the derived defaults, so a\n// theme file can define its own named primitives and rewire per-component\n// options without restating anything it doesn't touch.\n// ==========================================\nexport interface ThemeConfig {\n id: string;\n name: string;\n colors: Colors;\n /**\n * Named icon primitives (inline SVG data URIs, masked with `currentColor`),\n * merged over {@link BaseIcons}. Add or override under any name; components\n * render them by token via the icon component, never by inlining SVG.\n */\n icons?: Icons;\n /** Override the radii scale, e.g. a generated shape-language preset. */\n radii?: Radii;\n /** Override the elevation shadows, e.g. brand-tinted generated stacks. */\n shadows?: Shadows;\n /**\n * Sparse typography overrides, deep-merged over the base type scale:\n * restate only the roles — or the individual {@link TextStyle} fields\n * within a role — that change, and add product-specific roles under any\n * name. Untouched roles keep tracking the library defaults.\n */\n typography?: Record<TextRole | string, Partial<TextStyle>>;\n /**\n * Named border primitives, merged over the derived defaults. New tokens may\n * use any name — point component options (or `components` overrides) at\n * them and every consumer of the shared token picks up the change.\n */\n borders?: Borders;\n /**\n * Named thickness primitives, merged over the base scale (`thin`/`standard`/\n * `thick` stay unless restated). Extra tokens may use any name — e.g. a\n * `focusRing` thickness sets the shared focus ring's outline offset.\n */\n thicknesses?: Thicknesses;\n /**\n * Sparse per-component overrides, deep-merged over the derived component\n * themes: only the sections you provide (fixed/variants/sizes/options keys)\n * are replaced; everything else keeps tracking the library defaults.\n */\n components?: ComponentThemes;\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nconst deepMerge = <T>(base: T, override: Partial<T> | undefined): T => {\n if (!override) return base;\n const out = { ...base } as Record<string, unknown>;\n for (const [key, value] of Object.entries(override)) {\n out[key] = isRecord(value) && isRecord(out[key]) ? deepMerge(out[key], value) : value;\n }\n return out as T;\n};\n\nexport const createTheme = ({\n id,\n name,\n colors,\n icons = {},\n radii = BaseRadii,\n shadows = BaseShadows,\n typography,\n borders,\n thicknesses,\n components,\n}: ThemeConfig): UniTheme => ({\n id,\n name,\n colors,\n typography: deepMerge(BaseTypography, typography as Partial<Typography> | undefined),\n borders: deepMerge(buildBorders(colors), borders),\n radii,\n shadows,\n spacing: BaseSpacing,\n thicknesses: { ...BaseThicknesses, ...thicknesses },\n icons: { ...BaseIcons, ...icons },\n components: deepMerge(buildComponents(colors), components),\n});\n\n/**\n * Re-attach the built-in icon set to a theme that traveled without it.\n *\n * A serialized theme is ~50 KB, ~71% of which is {@link BaseIcons} — bytes\n * every uni-core consumer already ships. Transports (MCP tool results, theme\n * JSON over HTTP) send the {@link dehydrateTheme} form and the receiver\n * hydrates, applying exactly the `{...BaseIcons, ...icons}` contract\n * {@link createTheme} applies at construction: the theme's own icons win,\n * built-ins fill the rest.\n */\nexport const hydrateTheme = (theme: UniTheme): UniTheme => ({\n ...theme,\n icons: { ...BaseIcons, ...theme.icons },\n});\n\n/**\n * The wire form of a theme: icons identical to the built-in set are dropped,\n * so only genuine overrides travel. Reverse with {@link hydrateTheme}.\n */\nexport const dehydrateTheme = (theme: UniTheme): UniTheme => ({\n ...theme,\n icons: Object.fromEntries(\n Object.entries(theme.icons).filter(([name, uri]) => BaseIcons[name as never] !== uri)\n ),\n});\n\n/**\n * Build a full {@link UniTheme} straight from a {@link PaletteConfig} — the\n * one-call path a theme builder uses to turn a brand color (or a seed +\n * scheme + category) into a complete, ready-to-apply theme.\n */\nexport const createThemeFromPalette = (\n config: GenerateColorsConfig & { id?: string; name?: string; icons?: Icons; radii?: Radii }\n): UniTheme => {\n const colors = generatePalette(config);\n return createTheme({\n id: config.id ?? 'CustomTheme',\n name: config.name ?? 'Custom Theme',\n colors,\n radii: config.radii,\n shadows: generateShadows(colors, config.mode ?? 'light'),\n icons: config.icons,\n });\n};\n\n/**\n * Seed for the shipped Light/Dark themes. Swap these three values (or call\n * `generatePalette` with your own) to reskin the entire system — every color\n * token is derived, so there is nothing else to hand-author.\n */\nexport const BASE_PALETTE_CONFIG: Pick<PaletteConfig, 'seed' | 'scheme' | 'category'> = {\n seed: '#4F46E5', // indigo\n scheme: 'triadic',\n category: 'neutral',\n};\n\nexport const lightColors: Colors = generatePalette({ ...BASE_PALETTE_CONFIG, mode: 'light' });\n\nexport const BaseTheme: UniTheme = createTheme({\n id: 'BaseTheme',\n name: 'Base Theme',\n colors: lightColors,\n});\n","import type { ColorCategory, ColorScheme } from '../color/color.types';\nimport type { Radii, UniTheme } from '../theme/theme.model';\nimport type { BrandRole } from '../color/color.factory';\nimport { createTheme } from '../theme/themes/base.theme';\nimport { hexToOklch, oklchToHex } from './oklch.helper';\nimport { CategoryChroma, generateColors } from './palette.factory';\nimport { generateShadows } from './shadow.generator';\nimport type {\n ContrastCheck,\n ContrastReport,\n GeneratedThemeConfig,\n GenerationInput,\n ThemeShape,\n} from './generation.types';\n\n/** Radii presets per shape language (PRD §3.5.A). Same keys as `BaseRadii`. */\nexport const ShapeRadii: Record<ThemeShape, Radii> = {\n sharp: { none: 'none', xxs: '0px', xs: '0px', sm: '0px', md: '0px', lg: '0px', max: '0px' },\n modern: { none: 'none', xxs: '4px', xs: '8px', sm: '16px', md: '24px', lg: '32px', max: '999px' },\n playful: { none: 'none', xxs: '8px', xs: '16px', sm: '24px', md: '32px', lg: '48px', max: '9999px' },\n};\n\n/** Shortest angular distance between two hue angles, in degrees (0–180). */\nconst hueDistance = (a: number, b: number): number => {\n const d = Math.abs(a - b) % 360;\n return d > 180 ? 360 - d : d;\n};\n\n/**\n * Classify 2–3 brand hues against {@link ColorScheme} by their angular\n * distances from the primary hue. Heuristic bands, widest match wins.\n */\nexport const classifyScheme = (primaryHue: number, otherHues: number[]): ColorScheme => {\n const distances = otherHues.map((h) => hueDistance(primaryHue, h));\n if (distances.length === 0) return 'analogous';\n if (distances.every((d) => d < 15)) return 'monochromatic';\n if (distances.every((d) => d <= 65)) return 'analogous';\n if (distances.some((d) => d >= 165)) return 'complimentary';\n if (distances.length > 1 && distances.every((d) => d >= 130)) return 'splitComplimentary';\n return 'triadic';\n};\n\n/**\n * Infer a tonal category from the seed's own chroma, so an unstated \"vibe\"\n * preserves the brand's character — vivid stays vivid, muted stays muted.\n */\nexport const inferCategory = (seedHex: string): ColorCategory => {\n const { c } = hexToOklch(seedHex);\n if (c >= 0.13) return 'jewel';\n if (c >= 0.07) return 'earth';\n if (c >= 0.03) return 'pastel';\n return 'neutral';\n};\n\n/**\n * The theme generation engine (PRD §3.3): brand seed(s) in, complete WCAG-AA\n * light+dark {@link Colors} pair out, with a machine-readable contrast report.\n * Pure and deterministic — identical input yields identical output.\n */\nexport const generateThemes = (input: GenerationInput): GeneratedThemeConfig => {\n const seeds = (Array.isArray(input.seed) ? input.seed : [input.seed]).slice(0, 3);\n const [primary, secondary, tertiary] = seeds;\n const scheme =\n input.scheme ??\n (seeds.length > 1\n ? classifyScheme(hexToOklch(primary).h, seeds.slice(1).map((s) => hexToOklch(s).h))\n : 'analogous');\n const category = input.vibe ?? inferCategory(primary);\n\n // Seeds pass through as soft targets with their own chroma (brand fidelity).\n // Only an *explicit* vibe caps them to the category's chroma ceiling.\n const applyVibe = (hex: string): string => {\n if (!input.vibe) return hex;\n const color = hexToOklch(hex);\n return oklchToHex({ ...color, c: Math.min(color.c, CategoryChroma[input.vibe]) });\n };\n const targets: Partial<Record<BrandRole, string>> = { primary: applyVibe(primary) };\n if (secondary) targets.secondary = applyVibe(secondary);\n if (tertiary) targets.tertiary = applyVibe(tertiary);\n\n const checks: ContrastCheck[] = [];\n const base = { seed: primary, scheme, category, targets, checks };\n const lightColors = generateColors({ ...base, mode: 'light' });\n const darkColors = generateColors({ ...base, mode: 'dark' });\n\n const worstRatio = checks.reduce((worst, check) => Math.min(worst, check.ratio), 21);\n return {\n lightColors,\n darkColors,\n radii: input.shape ? ShapeRadii[input.shape] : undefined,\n lightShadows: generateShadows(lightColors, 'light'),\n darkShadows: generateShadows(darkColors, 'dark'),\n report: { checks, worstRatio, pass: checks.every((check) => check.pass) },\n };\n};\n\n/**\n * One-line human summary of a {@link ContrastReport}. Shared so the generated\n * theme file's header and the MCP's theme tools report identical wording.\n */\nexport const summarizeContrast = (report: ContrastReport): string =>\n `${report.checks.length} contrast pairs checked · worst ${report.worstRatio}:1 · ${\n report.pass ? 'all AA' : `${report.checks.filter((check) => !check.pass).length} failing`\n }`;\n\n/**\n * Convenience wrapper: {@link generateThemes} piped through `createTheme()`,\n * returning a registration-ready light/dark {@link UniTheme} pair alongside\n * the contrast report the colors were audited against.\n */\nexport const generateUniThemes = (\n input: GenerationInput\n): { light: UniTheme; dark: UniTheme; report: ContrastReport } => {\n const { lightColors, darkColors, radii, lightShadows, darkShadows, report } =\n generateThemes(input);\n const name = input.name ?? 'Brand';\n const id = name.replace(/\\W+/g, '') || 'Brand';\n return {\n light: createTheme({\n id: `${id}Light`,\n name: `${name} Light`,\n colors: lightColors,\n radii,\n shadows: lightShadows,\n }),\n dark: createTheme({\n id: `${id}Dark`,\n name: `${name} Dark`,\n colors: darkColors,\n radii,\n shadows: darkShadows,\n }),\n report,\n };\n};\n","import type { Colors, Shadows } from '../theme/theme.model';\nimport { generateThemes, summarizeContrast } from './theme.generator';\nimport type { ContrastReport, GenerationInput } from './generation.types';\n\nexport interface ThemeFileInput extends GenerationInput {\n /** Emit the dark theme alongside the light one. Defaults to true. */\n darkMode?: boolean;\n}\n\n/** A rendered static theme file plus everything a consumer needs to wire it. */\nexport interface EmittedThemeFile {\n /** TypeScript source for a static `uni-theme.ts` — plain, reviewable data. */\n content: string;\n /** Registration snippet for the consumer's `app.config.ts`. */\n providerSnippet: string;\n report: ContrastReport;\n /** One-line human summary of the contrast report. */\n reportSummary: string;\n}\n\nconst IDENT = /^[A-Za-z_$][A-Za-z0-9_$]*$/;\nconst asKey = (k: string): string => (IDENT.test(k) ? k : `'${k}'`);\n\nconst recordLiteral = (record: Record<string, string | undefined>, indent: string): string =>\n Object.entries(record)\n .map(([k, v]) => `${indent}${asKey(k)}: '${v}',`)\n .join('\\n');\n\n// The derived border primitives, spelled out as template literals over the\n// colors const — visible, editable, and edits to a color propagate. Access is\n// bracket-only: `Colors` carries an index signature, and consumer tsconfigs\n// with `noPropertyAccessFromIndexSignature` (ng new strict default) reject\n// dot access on it.\nconst bordersLiteral = (): string =>\n [\n '/**',\n ' * Named border primitives. These mirror the derived defaults — edit them, or',\n ' * add your own under any token name and point component options (or the',\n ' * `components` overrides below) at it. Every component deriving from a',\n ' * shared token picks up the change.',\n ' */',\n 'const borders = (colors: Colors): Borders => ({',\n \" primary: `1px solid ${colors['primary']}`,\",\n \" secondary: `1px solid ${colors['secondary']}`,\",\n \" tertiary: `1px solid ${colors['tertiary']}`,\",\n \" quaternary: `1px solid ${colors['quaternary']}`,\",\n \" warn: `1px solid ${colors['warn']}`,\",\n \" success: `1px solid ${colors['success']}`,\",\n \" light: `1px solid ${colors['outline']}`,\",\n \" dark: `1px solid ${colors['on-background']}`,\",\n \" dotted: `1px dotted ${colors['on-background']}`,\",\n '});',\n ].join('\\n');\n\nconst themeExport = (\n exportName: string,\n displayName: string,\n colorsConst: string,\n shadowsConst: string,\n radii: boolean\n): string =>\n [\n `export const ${exportName}: UniTheme = createTheme({`,\n ` id: '${exportName}',`,\n ` name: '${displayName}',`,\n ` colors: ${colorsConst},`,\n ` borders: borders(${colorsConst}),`,\n ` components: components(${colorsConst}),`,\n ` shadows: ${shadowsConst},`,\n ' icons,',\n ...(radii ? [' radii,'] : []),\n '});',\n ].join('\\n');\n\n/**\n * Render a static `uni-theme.ts` from a brand seed — the file the `ng add`\n * schematic writes and the MCP `generate_uni_theme` tool returns.\n *\n * The file is the system's **source of truth**: literal colors, the border\n * primitives spelled out, and a sparse `components` override section — so a\n * human (or an AI agent) can retheme by editing tokens in place, with no\n * runtime generation. Deterministic: same input, same file.\n */\nexport const emitThemeFile = (input: ThemeFileInput): EmittedThemeFile => {\n const { darkMode = true, name = 'Brand' } = input;\n const { lightColors, darkColors, radii, lightShadows, darkShadows, report } =\n generateThemes(input);\n const id = (name.replace(/\\W+/g, '') || 'Brand') as string;\n\n const seeds = Array.isArray(input.seed) ? input.seed : [input.seed];\n const regenerate = [\n `--brand=${seeds.join(',')}`,\n input.vibe && `--vibe=${input.vibe}`,\n input.scheme && `--scheme=${input.scheme}`,\n input.shape && `--shape=${input.shape}`,\n !darkMode && '--dark-mode=false',\n ]\n .filter(Boolean)\n .join(' ');\n\n const reportSummary = summarizeContrast(report);\n\n const modes: {\n exportName: string;\n displayName: string;\n colorsConst: string;\n colors: Colors;\n shadowsConst: string;\n shadows: Shadows;\n }[] = [\n {\n exportName: `${id}Light`,\n displayName: `${name} Light`,\n colorsConst: 'lightColors',\n colors: lightColors,\n shadowsConst: 'lightShadows',\n shadows: lightShadows,\n },\n ...(darkMode\n ? [\n {\n exportName: `${id}Dark`,\n displayName: `${name} Dark`,\n colorsConst: 'darkColors',\n colors: darkColors,\n shadowsConst: 'darkShadows',\n shadows: darkShadows,\n },\n ]\n : []),\n ];\n\n const content = [\n '/**',\n ` * ${name} theme for Uni — generated data, yours to edit.`,\n ' *',\n ` * Regenerate colors: ng add @uni-design-system/uni-angular ${regenerate}`,\n ' * (or the `generate-uni-theme` MCP tool). Edits are never overwritten silently —',\n ' * regeneration rewrites this file, so commit before regenerating.',\n ` * ${reportSummary}.`,\n ' */',\n 'import {',\n ' createTheme,',\n ' type Borders,',\n ' type Colors,',\n ' type ComponentThemes,',\n ' type Icons,',\n ' type Shadows,',\n ' type UniTheme,',\n \"} from '@uni-design-system/uni-core';\",\n '',\n ...modes.map(\n ({ colorsConst, colors }) =>\n `const ${colorsConst}: Colors = {\\n${recordLiteral(colors as Record<string, string>, ' ')}\\n};\\n`\n ),\n '/** Brand-tinted elevation shadows — theme-scoped, edit freely. */',\n ...modes.map(\n ({ shadowsConst, shadows }) =>\n `const ${shadowsConst}: Shadows = {\\n${recordLiteral(shadows as Record<string, string>, ' ')}\\n};\\n`\n ),\n bordersLiteral(),\n '',\n '/**',\n ' * Sparse component overrides, deep-merged over Uni component defaults: only',\n ' * what you write here changes. Point components at your own primitives, e.g.:',\n \" * button: { variants: { secondary: { border: `2px dashed ${colors['tertiary']}` } } },\",\n \" * input: { options: { borderRadius: 'max' } },\",\n ' */',\n 'const components = (colors: Colors): ComponentThemes => ({});',\n '',\n '/**',\n ' * Icon primitives, merged over the built-in 61-icon set per name: reuse a',\n ' * built-in name to reskin it, or add any new name. Define an icon ONCE here',\n \" * and render it anywhere via `<uni-icon name='…'/>` — never inline SVG in\",\n ' * components.',\n ' *',\n ' * Encode your own SVGs with `svgToIconUri` rather than by hand — it strips',\n ' * fixed width/height, escapes the URI and rejects artwork that cannot',\n ' * survive masking:',\n ' *',\n \" * import { svgToIconUri } from '@uni-design-system/uni-core';\",\n \" * const icons: Icons = { logo: svgToIconUri(readFileSync('logo.svg', 'utf8')) };\",\n ' *',\n ' * Icons are masked with currentColor, so they recolor with the theme — but',\n ' * that also means they are MONOCHROME: the mask uses the alpha channel, so a',\n ' * multi-color mark flattens to its silhouette. Keep one grid (viewBox) across',\n ' * your set, or the glyphs will not share an optical weight.',\n ' */',\n 'const icons: Icons = {};',\n '',\n ...(radii\n ? [\n `/** Shape language: '${input.shape}'. */`,\n `const radii = {\\n${recordLiteral(radii as Record<string, string>, ' ')}\\n};`,\n '',\n ]\n : []),\n ...modes.map(\n ({ exportName, displayName, colorsConst, shadowsConst }) =>\n `${themeExport(exportName, displayName, colorsConst, shadowsConst, !!radii)}\\n`\n ),\n '/** First key wins as the default theme when registered via UNI_THEMES. */',\n `export const ${id}Themes = { ${modes.map((m) => m.exportName).join(', ')} };`,\n '',\n ].join('\\n');\n\n const providerSnippet = [\n `import { UNI_THEMES } from '@uni-design-system/uni-angular';`,\n `import { ${id}Themes } from './uni-theme';`,\n '',\n '// app.config.ts → providers:',\n `{ provide: UNI_THEMES, useValue: ${id}Themes },`,\n ].join('\\n');\n\n return { content, providerSnippet, report, reportSummary };\n};\n","import { Gradient } from './gradient.model';\n\nexport function gradient(config: Gradient): string {\n return ``;\n}\n","/**\n * Turns a raw SVG source string into an icon primitive — the inline data URI\n * form `uni-icon` renders as a CSS mask over `currentColor`.\n *\n * This is the path for bringing your own icons (a brand set, a designer\n * handoff) into a theme. The built-in `BaseIcons` are generated separately\n * from Material Symbols; everything you add goes through here:\n *\n * ```ts\n * const icons: Icons = {\n * acmeLogo: svgToIconUri(readFileSync('brand/logo.svg', 'utf8')),\n * search: svgToIconUri(readFileSync('brand/search.svg', 'utf8')),\n * };\n * createTheme({ id: 'Acme', name: 'Acme', colors, icons });\n * ```\n *\n * `createTheme` merges these over `BaseIcons` per name, so reusing a built-in\n * name reskins it and any new name is simply added.\n */\n\nexport interface SvgToIconUriOptions {\n /**\n * Accept an SVG that paints in more than one color. Masks are monochrome —\n * the artwork is flattened to its silhouette and takes `currentColor` — so\n * this is rejected by default to catch logos that were never going to\n * survive the pipeline. Set this when a silhouette is what you want.\n */\n allowMultiColor?: boolean;\n /** Name used in error messages, so a failing icon in a set is identifiable. */\n name?: string;\n}\n\n/** Paint values that produce no pixels, and so never count as a color. */\nconst BLANK_PAINT = new Set(['none', 'transparent', 'inherit', '']);\n\n/** Collect every distinct paint value the artwork actually renders with. */\nfunction paintValues(svg: string): string[] {\n const found = new Set<string>();\n\n for (const [, value] of svg.matchAll(/\\b(?:fill|stroke)\\s*=\\s*[\"']([^\"']*)[\"']/g)) {\n const paint = value.trim().toLowerCase();\n if (!BLANK_PAINT.has(paint)) found.add(paint);\n }\n // `style=\"fill:#fff\"` — same meaning, different syntax.\n for (const [, , value] of svg.matchAll(/\\b(fill|stroke)\\s*:\\s*([^;\"'}]+)/g)) {\n const paint = value.trim().toLowerCase();\n if (!BLANK_PAINT.has(paint)) found.add(paint);\n }\n\n return [...found];\n}\n\n/**\n * Strip everything that stops an SVG scaling to the box it is masked into, and\n * collapse it to one line. Fixed `width`/`height` are removed rather than\n * rejected — designers export them by default and they carry no information\n * the `viewBox` doesn't already have.\n */\nfunction normalize(svg: string): string {\n return svg\n .replace(/<\\?xml[^>]*\\?>/g, '')\n .replace(/<!DOCTYPE[^>]*>/gi, '')\n .replace(/<!--[\\s\\S]*?-->/g, '')\n .replace(/\\s(width|height)\\s*=\\s*[\"'][^\"']*[\"']/g, '')\n .replace(/\\s+/g, ' ')\n .replace(/>\\s+</g, '><')\n .trim();\n}\n\n/**\n * Percent-encode only what a data URI requires. SVG attributes are switched to\n * single quotes so the result drops straight into a double-quoted TypeScript\n * string with no escaping — and stays readable, unlike base64.\n */\nfunction encode(svg: string): string {\n return (\n 'data:image/svg+xml,' +\n svg\n .replace(/\"/g, \"'\")\n .replace(/%/g, '%25')\n .replace(/#/g, '%23')\n .replace(/</g, '%3c')\n .replace(/>/g, '%3e')\n );\n}\n\n/**\n * Encode an SVG string as a mask-ready icon data URI, validating that it will\n * actually survive the mask pipeline.\n *\n * Throws when the source is not a complete `<svg>` document, has no `viewBox`\n * (it could not scale), references an external or raster image, or paints in\n * more than one color (see {@link SvgToIconUriOptions.allowMultiColor}).\n */\nexport function svgToIconUri(svg: string, options: SvgToIconUriOptions = {}): string {\n const label = options.name ? `${options.name}: ` : '';\n const fail = (message: string): never => {\n throw new Error(`${label}${message}`);\n };\n\n if (typeof svg !== 'string' || !svg.trim()) fail('empty SVG source');\n\n const normalized = normalize(svg);\n\n if (!/^<svg[\\s>]/i.test(normalized) || !/<\\/svg>$/i.test(normalized)) {\n fail('not a complete <svg> document');\n }\n\n // Without a viewBox the mask has no intrinsic ratio to scale by, and\n // `uni-icon` sizes itself from its container.\n if (!/\\bviewBox\\s*=\\s*[\"'][^\"']+[\"']/i.test(normalized)) {\n fail('no viewBox — the icon could not scale to its container');\n }\n\n // A mask is rendered as an isolated image: it cannot fetch anything, so an\n // external reference silently renders nothing.\n if (/<image\\b/i.test(normalized)) {\n fail('contains a raster <image>; masks need vector artwork');\n }\n if (/\\b(?:xlink:)?href\\s*=\\s*[\"'](?!#)/i.test(normalized)) {\n fail('references an external resource, which a masked SVG cannot load');\n }\n\n if (!options.allowMultiColor) {\n const paints = paintValues(normalized);\n if (paints.some((p) => p.startsWith('url('))) {\n fail(\n 'paints with a gradient or pattern — masks use the alpha channel only, ' +\n 'so it would flatten to a silhouette. Pass { allowMultiColor: true } to accept that.'\n );\n }\n if (paints.length > 1) {\n fail(\n `paints in ${paints.length} colors (${paints.join(', ')}) — masks use the alpha ` +\n 'channel only, so it would flatten to a silhouette in currentColor. ' +\n 'Pass { allowMultiColor: true } to accept that.'\n );\n }\n }\n\n return encode(normalized);\n}\n","import { Size } from '../core.types';\nimport { DeviceOrientation } from './layout.types';\n\nexport function getDeviceSize(height: number, width: number): Size {\n if (!height || !width) return 'md';\n\n const max = Math.max(height, width);\n\n if (max <= 600)\n // Small Mobile\n return 'xs';\n\n if (max <= 960)\n // Large Mobile\n return 'sm';\n\n if (max <= 1264)\n // Tablets\n return 'md';\n\n if (max <= 1904)\n // Laptops & Monitors\n return 'lg';\n\n return 'xl'; // Large Monitors\n}\n\nexport function getDeviceOrientation(height: number, width: number): DeviceOrientation {\n if (!height || !width) return 'landscape';\n\n return height > width ? 'portrait' : 'landscape';\n}\n","import { BoxShadow, ShadowDefinition } from './shadow.model';\n\n// box-shadow: none|h-offset v-offset blur spread color\nexport const GetBoxShadow = ({ offset, blur, opacity }: BoxShadow): string => {\n return `0 ${offset}px ${blur}px rgba(0,0,0,0.${opacity})`;\n};\n\nexport const GetBoxShadows = ({ umbra, penumbra }: ShadowDefinition): string => {\n return GetBoxShadow(umbra) + ', ' + GetBoxShadow(penumbra);\n};\n","import { ShadowDefinition } from './shadow.model';\nimport { ShadowElevation } from './shadow.types';\nimport { GetBoxShadows } from './shadow.utils';\n\nexport const ShadowMap: Record<ShadowElevation, ShadowDefinition> = {\n pressed: {\n umbra: {\n offset: 1,\n blur: 2,\n opacity: 24,\n },\n penumbra: {\n offset: 1,\n blur: 3,\n opacity: 12,\n },\n },\n raised: {\n umbra: {\n offset: 3,\n blur: 6,\n opacity: 23,\n },\n penumbra: {\n offset: 3,\n blur: 6,\n opacity: 16,\n },\n },\n focussed: {\n umbra: {\n offset: 6,\n blur: 6,\n opacity: 23,\n },\n penumbra: {\n offset: 10,\n blur: 20,\n opacity: 19,\n },\n },\n navigation: {\n umbra: {\n offset: 10,\n blur: 10,\n opacity: 22,\n },\n penumbra: {\n offset: 14,\n blur: 28,\n opacity: 25,\n },\n },\n modal: {\n umbra: {\n offset: 15,\n blur: 12,\n opacity: 22,\n },\n penumbra: {\n offset: 19,\n blur: 38,\n opacity: 30,\n },\n },\n};\n\nexport const ShadowCssMap: Record<ShadowElevation, string> = {\n pressed: GetBoxShadows(ShadowMap['pressed']),\n raised: GetBoxShadows(ShadowMap['raised']),\n focussed: GetBoxShadows(ShadowMap['focussed']),\n navigation: GetBoxShadows(ShadowMap['navigation']),\n modal: GetBoxShadows(ShadowMap['modal']),\n};\n","import type { StyleExpression } from './style.types';\n\nexport const removeInputPlatformStyling: StyleExpression = {\n appearance: 'none' /* Removes default platform styling */,\n background: 'none' /* Removes default background */,\n border: 'none' /* Removes default gray border */,\n outline: 'none' /* Removes default focus ring */,\n boxShadow: 'none' /* Removes any inner shadows on iOS */,\n padding: 0 /* Resets default spacing */,\n width: '100%' /* Makes it fill the stylized div */,\n};\n","import type { Colors } from '../theme.model';\nimport { generatePalette } from '../../color';\nimport { generateShadows } from '../../generation/shadow.generator';\nimport { BASE_PALETTE_CONFIG, createTheme } from './base.theme';\n\nexport const darkColors: Colors = generatePalette({ ...BASE_PALETTE_CONFIG, mode: 'dark' });\n\nexport const DarkTheme = createTheme({\n id: 'DarkTheme',\n name: 'Dark Theme',\n colors: darkColors,\n shadows: generateShadows(darkColors, 'dark'),\n});\n","import { generateShadows } from '../../generation/shadow.generator';\nimport { createTheme, lightColors } from './base.theme';\n\nexport const LightTheme = createTheme({\n id: 'LightTheme',\n name: 'Light Theme',\n colors: lightColors,\n shadows: generateShadows(lightColors, 'light'),\n});\n","import { type UniTheme } from './theme.model';\nimport { DarkTheme } from './themes/dark.theme';\nimport { LightTheme } from './themes/light.theme';\n\nexport const UniThemes: Record<string, UniTheme> = {\n LightTheme,\n DarkTheme,\n};\n\n// First Theme is default.\nexport const DefaultThemeId = Object.keys(UniThemes)[0];\n","import type { UniTheme } from './theme.model';\nimport type { TextRole } from '../typography';\n\n/**\n * Dependency-free structural validation for {@link UniTheme}.\n *\n * Every theme scale is `Partial<Record<…>>`, so a malformed theme — hand\n * written, generated, or fetched as JSON — renders as silent `undefined` CSS.\n * `parseTheme` is the acceptance/rejection-with-reasons contract that every\n * theme write funnels through: the Angular `ThemeService`, the MCP theme\n * tools, and any future runtime registry all share these rules. It collects\n * every issue rather than failing fast, so a rejected theme comes back with\n * the complete repair list.\n */\n\n/** One reason a candidate theme was rejected, anchored to a dotted path. */\nexport interface ThemeIssue {\n /** Dotted location, e.g. `colors.primary` or `typography.label.fontSize`. */\n path: string;\n message: string;\n}\n\nexport type ThemeParseResult =\n | { success: true; theme: UniTheme; issues: [] }\n | { success: false; theme?: undefined; issues: ThemeIssue[] };\n\n/**\n * Color tokens components cannot render without: the default variant pairs,\n * the base surfaces, and the disabled/warn states. Themes may define any\n * further tokens; these must exist.\n */\nexport const REQUIRED_COLOR_TOKENS = [\n 'primary',\n 'on-primary',\n 'primary-container',\n 'on-primary-container',\n 'primary-surface',\n 'on-primary-surface',\n 'surface',\n 'on-surface',\n 'background',\n 'on-background',\n 'warn',\n 'on-warn',\n 'disabled',\n 'on-disabled',\n 'outline',\n 'transparent',\n] as const;\n\n/** The canonical type scale; every theme must style each role. */\nexport const REQUIRED_TEXT_ROLES: readonly TextRole[] = [\n 'display-large',\n 'display-medium',\n 'display-small',\n 'headline-large',\n 'headline-medium',\n 'headline-small',\n 'title-large',\n 'title-medium',\n 'title-small',\n 'body-1-long',\n 'body-1-short',\n 'body-2-long',\n 'body-2-short',\n 'subtitle-1',\n 'subtitle-2',\n 'label',\n 'button',\n 'caption',\n 'overline',\n 'paragraph',\n 'quote',\n 'note',\n] as const;\n\nexport const REQUIRED_SPACING_SIZES = ['none', 'xxs', 'xs', 'sm', 'md', 'lg', 'xl'] as const;\nexport const REQUIRED_RADII_SIZES = ['none', 'xxs', 'xs', 'sm', 'md', 'lg', 'max'] as const;\nexport const REQUIRED_SHADOWS = ['raised', 'menu', 'dialog', 'warn'] as const;\nexport const REQUIRED_THICKNESSES = ['thin', 'standard', 'thick'] as const;\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nconst isCssValue = (value: unknown): value is string | number =>\n typeof value === 'string' || typeof value === 'number';\n\n/** Nested style expression: string/number leaves, objects for selectors. */\nconst checkStyleExpression = (value: unknown, path: string, issues: ThemeIssue[]): void => {\n if (!isRecord(value)) {\n issues.push({ path, message: 'must be a style object' });\n return;\n }\n for (const [key, entry] of Object.entries(value)) {\n if (entry === undefined || isCssValue(entry)) continue;\n if (isRecord(entry)) {\n checkStyleExpression(entry, `${path}.${key}`, issues);\n } else {\n issues.push({ path: `${path}.${key}`, message: 'must be a string, number, or nested style object' });\n }\n }\n};\n\nconst checkStringRecord = (\n value: unknown,\n path: string,\n issues: ThemeIssue[],\n required: readonly string[] = [],\n allowNumbers = false\n): void => {\n if (!isRecord(value)) {\n issues.push({ path, message: 'must be an object' });\n return;\n }\n for (const key of required) {\n if (!(key in value)) issues.push({ path: `${path}.${key}`, message: 'is required' });\n }\n for (const [key, entry] of Object.entries(value)) {\n if (entry === undefined) continue;\n const ok = allowNumbers ? isCssValue(entry) : typeof entry === 'string';\n if (!ok) {\n issues.push({\n path: `${path}.${key}`,\n message: allowNumbers ? 'must be a string or number' : 'must be a string',\n });\n }\n }\n};\n\nconst checkTypography = (value: unknown, issues: ThemeIssue[]): void => {\n if (!isRecord(value)) {\n issues.push({ path: 'typography', message: 'must be an object' });\n return;\n }\n for (const role of REQUIRED_TEXT_ROLES) {\n if (!(role in value)) issues.push({ path: `typography.${role}`, message: 'is required' });\n }\n for (const [role, style] of Object.entries(value)) {\n if (!isRecord(style)) {\n issues.push({ path: `typography.${role}`, message: 'must be a TextStyle object' });\n continue;\n }\n if (typeof style['fontFamily'] !== 'string') {\n issues.push({ path: `typography.${role}.fontFamily`, message: 'must be a string' });\n }\n for (const field of ['fontSize', 'lineHeight']) {\n if (!isCssValue(style[field])) {\n issues.push({ path: `typography.${role}.${field}`, message: 'must be a string or number' });\n }\n }\n }\n};\n\nconst checkComponents = (value: unknown, issues: ThemeIssue[]): void => {\n if (!isRecord(value)) {\n issues.push({ path: 'components', message: 'must be an object' });\n return;\n }\n for (const [name, entry] of Object.entries(value)) {\n if (entry === undefined) continue;\n if (!isRecord(entry)) {\n issues.push({ path: `components.${name}`, message: 'must be a component theme object' });\n continue;\n }\n if (entry['fixed'] !== undefined) {\n checkStyleExpression(entry['fixed'], `components.${name}.fixed`, issues);\n }\n for (const section of ['variants', 'sizes']) {\n const styles = entry[section];\n if (styles === undefined) continue;\n if (!isRecord(styles)) {\n issues.push({ path: `components.${name}.${section}`, message: 'must be an object' });\n continue;\n }\n for (const [key, style] of Object.entries(styles)) {\n if (style !== undefined) {\n checkStyleExpression(style, `components.${name}.${section}.${key}`, issues);\n }\n }\n }\n if (entry['options'] !== undefined && !isRecord(entry['options'])) {\n issues.push({ path: `components.${name}.options`, message: 'must be an object' });\n }\n }\n};\n\n/**\n * Validate a candidate theme, collecting every structural issue. Never\n * throws; a failed result carries the complete repair list.\n */\nexport const parseTheme = (input: unknown): ThemeParseResult => {\n const issues: ThemeIssue[] = [];\n\n if (!isRecord(input)) {\n return { success: false, issues: [{ path: '', message: 'theme must be an object' }] };\n }\n\n for (const field of ['id', 'name']) {\n if (typeof input[field] !== 'string' || input[field] === '') {\n issues.push({ path: field, message: 'must be a non-empty string' });\n }\n }\n\n checkStringRecord(input['colors'], 'colors', issues, REQUIRED_COLOR_TOKENS);\n checkTypography(input['typography'], issues);\n checkStringRecord(input['borders'], 'borders', issues);\n checkStringRecord(input['radii'], 'radii', issues, REQUIRED_RADII_SIZES);\n checkStringRecord(input['shadows'], 'shadows', issues, REQUIRED_SHADOWS);\n checkStringRecord(input['spacing'], 'spacing', issues, REQUIRED_SPACING_SIZES, true);\n checkStringRecord(input['thicknesses'], 'thicknesses', issues, REQUIRED_THICKNESSES, true);\n checkStringRecord(input['icons'], 'icons', issues);\n checkComponents(input['components'], issues);\n\n return issues.length === 0\n ? { success: true, theme: input as unknown as UniTheme, issues: [] }\n : { success: false, issues };\n};\n\n/** Format issues for logs and error messages. */\nexport const formatThemeIssues = (issues: ThemeIssue[]): string =>\n issues.map(({ path, message }) => (path ? `${path} ${message}` : message)).join('; ');\n\n/** Validate or throw, with every reason in the error message. */\nexport const assertTheme = (input: unknown): UniTheme => {\n const result = parseTheme(input);\n if (!result.success) {\n throw new Error(`Invalid UniTheme: ${formatThemeIssues(result.issues)}`);\n }\n return result.theme;\n};\n\nexport const isUniTheme = (input: unknown): input is UniTheme => parseTheme(input).success;\n","import { FontWeight } from './typography.types';\n\nexport const FontWeightMap: Record<FontWeight, number> = {\n thin: 100,\n 'extra-light': 200,\n light: 200,\n normal: 400,\n medium: 500,\n 'semi-bold': 600,\n bold: 700,\n 'extra-bold': 800,\n black: 900,\n 'extra-black': 950,\n};\n","import type { CssLength, TextStyle, TypeFaceDefinition } from './text.model';\nimport type { FontWeight } from './typography.types';\nimport { FontWeightMap } from './typography.records';\n\nconst px = (value: CssLength): string => (typeof value === 'number' ? `${value}px` : value);\n\n// Keyword weights ('medium', 'semi-bold', …) are design tokens, not valid CSS\n// font-weight values — resolve them to their numeric equivalents.\nconst weight = (value: FontWeight): number =>\n typeof value === 'number' ? value : FontWeightMap[value];\n\n/**\n * Converts a TextStyle (numeric, design-token oriented) into a\n * TypeFaceDefinition (CSS-ready) so a theme's `typefaces` map can be\n * derived from its `typography` block instead of being duplicated.\n */\nexport const toTypeface = (style: TextStyle): TypeFaceDefinition => ({\n fontFamily: style.fontFamily,\n fontSize: px(style.fontSize),\n lineHeight: px(style.lineHeight),\n ...(style.letterSpacing !== undefined && { letterSpacing: px(style.letterSpacing) }),\n ...(style.textTransform === 'uppercase' && { textTransform: 'uppercase' as const }),\n ...(style.fontWeight !== undefined && { fontWeight: weight(style.fontWeight) }),\n ...(style.fontStyle && { fontStyle: style.fontStyle }),\n});\n\nexport const toTypefaces = (\n typography: Record<string, TextStyle>\n): Record<string, TypeFaceDefinition> =>\n Object.fromEntries(Object.entries(typography).map(([role, style]) => [role, toTypeface(style)]));\n","import { GetFieldType } from './types';\n\nexport function getValue<TData, TPath extends string, TDefault = GetFieldType<TData, TPath>>(\n data: TData,\n path: TPath,\n defaultValue?: TDefault\n): GetFieldType<TData, TPath> | TDefault {\n const value = path\n .split(/[.[\\]]/)\n .filter(Boolean)\n .reduce<GetFieldType<TData, TPath>>((value, key) => (value as any)?.[key], data as any);\n\n return value !== undefined ? value : (defaultValue as TDefault);\n}\n","export const debounce = <T extends (...args: any[]) => ReturnType<T>>(\n callback: T,\n timeout: number\n): ((...args: Parameters<T>) => void) => {\n let timer: ReturnType<typeof setTimeout>;\n\n return (...args: Parameters<T>) => {\n clearTimeout(timer);\n timer = setTimeout(() => {\n callback(...args);\n }, timeout);\n };\n};\n","/**\n * `generate-uni-theme` — runs the uni-core OKLCH engine at tool-call time and\n * renders the static `uni-theme.ts` source. The MCP returns *file content*;\n * the calling agent writes it to disk. Per the static-theme-file direction,\n * the generated file is the system's editable source of truth — retheming\n * later means editing that file's tokens, not calling this tool again\n * (regenerate only to re-derive colors from a new brand seed).\n */\nimport { emitThemeFile, type ThemeFileInput } from '@uni-design-system/uni-core';\n\nconst HEX = /^#[0-9a-fA-F]{6}$/;\n\nexport type GenerateThemeArgs = Omit<ThemeFileInput, 'seed'> & { brand: string | string[] };\n\n/**\n * Normalize brand input into the engine's `seed`, or explain what was wrong.\n * Shared by every theme tool so the file and runtime paths accept exactly the\n * same input and reject it with the same message.\n */\nexport type SeedResult =\n | { ok: true; seed: string | string[] }\n | { ok: false; error: string };\n\nexport function resolveSeed(brand: string | string[]): SeedResult {\n const seeds = (Array.isArray(brand) ? brand : [brand]).map((s) =>\n s.startsWith('#') ? s : `#${s}`\n );\n const invalid = seeds.filter((s) => !HEX.test(s));\n if (invalid.length) {\n return {\n ok: false,\n error: `Invalid brand color(s): ${invalid.join(', ')}. Pass 6-digit hex values, e.g. \"#0052FF\" (1–3 colors: primary, secondary, tertiary).`,\n };\n }\n return { ok: true, seed: seeds.length === 1 ? seeds[0] : seeds };\n}\n\nexport function formatGeneratedTheme(args: GenerateThemeArgs): string {\n const resolved = resolveSeed(args.brand);\n if (!resolved.ok) return resolved.error;\n\n const { content, providerSnippet, reportSummary, report } = emitThemeFile({\n ...args,\n seed: resolved.seed,\n });\n\n const failing = report.checks.filter((c) => !c.pass);\n const failLines = failing.length\n ? `\\n\\nFailing pairs:\\n${failing.map((f) => `- ${f.mode} \\`${f.foreground}\\` on \\`${f.background}\\`: ${f.ratio}:1 (needs ${f.required}:1)`).join('\\n')}`\n : '';\n\n return [\n `# ${args.name ?? 'Brand'} theme — generated`,\n '',\n 'Write this file to `src/app/uni-theme.ts`:',\n '',\n '```ts',\n content.trimEnd(),\n '```',\n '',\n '## Register it (app.config.ts)',\n '',\n '```ts',\n providerSnippet,\n '```',\n '',\n '## Contrast report',\n '',\n `${reportSummary}.${failLines}`,\n '',\n '## Retheming later — edit the file, do not regenerate',\n '',\n 'The file above is the source of truth for the whole look and feel:',\n '- **Colors**: edit any token in the `lightColors`/`darkColors` maps; borders and every',\n ' component deriving from that token update automatically.',\n '- **Borders**: add your own primitive under any name in `borders` (e.g.',\n \" `'brush-stroke': `3px dashed ${colors['tertiary']}``) and reference it from `components`\",\n ' overrides — one edit restyles every component sharing the token. Use bracket access',\n ' on `colors` — dot access fails under `noPropertyAccessFromIndexSignature`.',\n '- **Components**: the `components` function returns sparse overrides deep-merged over',\n ' Uni defaults — set only what you change, e.g.',\n \" `button: { variants: { secondary: { border: borders(colors)['brush-stroke'] } } }`.\",\n \"- **Icons**: never inline SVG in components. Define an icon ONCE in the theme file's\",\n ' `icons` map as an inline SVG data URI — it is masked with `currentColor`, so it',\n \" recolors with the theme — then render it anywhere with `<uni-icon name='…'/>`.\",\n ' A built-in set of 61 icons ships with every theme (navigation, actions, feedback,',\n ' user/system) — check `BaseIcons` before adding one; names are flat camelCase',\n ' (`chevronDown`, `checkCircle`, `externalLink`) and `IconName` autocompletes them.',\n ' To add your own, encode with `svgToIconUri` from uni-core rather than hand-writing',\n ' a data URI — it strips fixed width/height, escapes the URI, and throws on artwork',\n ' that cannot be masked. Icons are MONOCHROME (the mask uses the alpha channel), so a',\n ' multi-color logo flattens to a silhouette; keep one viewBox grid across the set.',\n '- Never hardcode hex values in application components: style through `ThemeService`',\n ' accessors and semantic token names so themes stay swappable.',\n ].join('\\n');\n}\n","/**\n * `create-icon-tokens` — turns a consuming project's raw SVGs into theme icon\n * tokens.\n *\n * This is the counterpart to the never-inline-SVG rule the server teaches: an\n * agent that finds inline `<svg>` in a component calls this, gets a paste-ready\n * `icons` map back, and moves the artwork into the theme where it belongs.\n *\n * Encoding is delegated to `svgToIconUri` in uni-core, so tokens produced here\n * are byte-identical to the built-in set. What this adds is the set-level view\n * a single-icon helper cannot have: which names collide with built-ins, and\n * whether the artwork shares one grid.\n */\nimport { BaseIcons, svgToIconUri } from '@uni-design-system/uni-core';\n\nexport interface IconTokenInput {\n /** Token name. Non-camelCase input is converted, and the change reported. */\n name: string;\n /** Raw SVG source, or an already-encoded `data:image/svg+xml,…` URI. */\n svg: string;\n /**\n * Accept artwork that paints in more than one color, knowing it flattens to\n * a silhouette. Off by default so multi-color logos are caught rather than\n * silently reduced.\n */\n allowMultiColor?: boolean;\n}\n\ninterface Encoded {\n name: string;\n originalName: string;\n uri: string;\n viewBox: string;\n}\n\ninterface Rejected {\n name: string;\n reason: string;\n}\n\nconst DATA_URI = /^data:image\\/svg\\+xml[^,]*,/;\n\n/** Flat camelCase is the set convention (`chevronDown`, `externalLink`). */\nfunction toCamelCase(name: string): string {\n const cleaned = name\n .trim()\n .replace(/\\.svg$/i, '')\n .replace(/[^A-Za-z0-9]+(.)?/g, (_, chr: string | undefined) => (chr ? chr.toUpperCase() : ''));\n return cleaned.charAt(0).toLowerCase() + cleaned.slice(1);\n}\n\nconst decode = (uri: string) => decodeURIComponent(uri.replace(DATA_URI, ''));\n\nconst viewBoxOf = (svg: string) => svg.match(/viewBox\\s*=\\s*[\"']([^\"']+)[\"']/i)?.[1] ?? 'unknown';\n\n/** The grid the built-in set is drawn on. */\nconst BASE_GRID = viewBoxOf(decode(BaseIcons.chevronDown));\n\nexport function formatIconTokens(icons: IconTokenInput[]): string {\n if (!icons.length) {\n return 'No icons supplied. Pass `icons: [{ name, svg }]` — `svg` may be raw SVG source or an already-encoded data URI.';\n }\n\n const encoded: Encoded[] = [];\n const rejected: Rejected[] = [];\n\n for (const { name, svg, allowMultiColor } of icons) {\n const tokenName = toCamelCase(name);\n // Accept an already-encoded URI so re-running the tool is harmless.\n const source = DATA_URI.test(svg.trim()) ? decode(svg.trim()) : svg;\n\n try {\n const uri = svgToIconUri(source, { name: tokenName, allowMultiColor });\n encoded.push({ name: tokenName, originalName: name, uri, viewBox: viewBoxOf(decode(uri)) });\n } catch (error) {\n const reason = (error as Error).message\n .replace(`${tokenName}: `, '')\n // The helper's advice names its own option; point at this tool's input\n // instead, so the caller can actually act on it.\n .replace(\n /Pass \\{ allowMultiColor: true \\} to accept that\\./,\n `Set \\`allowMultiColor: true\\` on \\`${tokenName}\\` and call again if a silhouette is intended.`\n );\n rejected.push({ name: tokenName, reason });\n }\n }\n\n const out: string[] = [];\n out.push(`# Icon tokens — ${encoded.length} of ${icons.length} encoded`);\n out.push('');\n\n if (encoded.length) {\n // Apps routinely hand-draw their own `close`, `check` or `plus`. Encoding\n // those into tokens works, but adds redundant artwork on a foreign grid\n // when the theme already ships the glyph. Names alone cannot detect it —\n // the caller has to recognise the shape — so list what is already there.\n out.push('## First: are any of these already built in?');\n out.push('');\n out.push('Every theme ships these icons. If a glyph below *depicts* one of them, do not');\n out.push('add a token — delete the inline `<svg>` and use `<uni-icon name=\"…\" />` with the');\n out.push('built-in name. Only genuinely app-specific artwork belongs in `icons`.');\n out.push('');\n out.push(`> ${Object.keys(BaseIcons).join(', ')}`);\n out.push('');\n\n out.push('## Add to `uni-theme.ts`');\n out.push('');\n out.push('Merge whatever survives that check into the `icons` const. They are merged over');\n out.push('the built-in set per name, then rendered anywhere with `<uni-icon name=\"…\" />` —');\n out.push('delete the inline `<svg>` from the component.');\n out.push('');\n out.push('```ts');\n out.push('const icons: Icons = {');\n for (const { name, uri } of encoded) out.push(` ${name}: \"${uri}\",`);\n out.push('};');\n out.push('```');\n out.push('');\n }\n\n if (rejected.length) {\n out.push('## Not encoded');\n out.push('');\n out.push('These cannot render as a mask. Fix the artwork and call again.');\n out.push('');\n for (const { name, reason } of rejected) out.push(`- \\`${name}\\` — ${reason}`);\n out.push('');\n }\n\n const notes: string[] = [];\n\n const renamed = encoded.filter((e) => e.name !== e.originalName);\n if (renamed.length) {\n notes.push(\n `Renamed to the set's flat camelCase convention: ${renamed\n .map((e) => `\\`${e.originalName}\\` → \\`${e.name}\\``)\n .join(', ')}.`\n );\n }\n\n const overrides = encoded.filter((e) => e.name in BaseIcons);\n if (overrides.length) {\n notes.push(\n `Overrides a built-in icon: ${overrides.map((e) => `\\`${e.name}\\``).join(', ')}. ` +\n 'Intentional for rebranding a standard glyph; rename if you meant to add a new one.'\n );\n }\n\n // The set-level check a per-icon helper cannot make — and the exact defect\n // that made the old built-in set look inconsistent.\n const grids = [...new Set(encoded.map((e) => e.viewBox))];\n if (grids.length > 1) {\n notes.push(\n `Mixed viewBox grids (${grids.map((g) => `\\`${g}\\``).join(', ')}). Icons drawn on ` +\n 'different grids will not share an optical weight or size. Re-export the set on one grid.'\n );\n } else if (grids.length === 1 && grids[0] !== BASE_GRID && overrides.length) {\n notes.push(\n `This set is drawn on \\`${grids[0]}\\` while the built-in set uses \\`${BASE_GRID}\\`. ` +\n 'That is fine on its own, but a glyph overriding a built-in will sit next to ' +\n 'un-overridden built-ins, so check they read at the same weight.'\n );\n }\n\n notes.push(\n 'Icons are masked with `currentColor`, so they are monochrome: the mask uses the ' +\n 'alpha channel and any fill colors in the source are discarded. Color them by ' +\n 'setting text color on the container, or with `<uni-icon color=\"…\" />`.'\n );\n\n out.push('## Notes');\n out.push('');\n for (const note of notes) out.push(`- ${note}`);\n\n return out.join('\\n');\n}\n","/**\n * `generate-runtime-theme` / `get-runtime-theme` — the runtime counterpart to\n * `generate-uni-theme`. Where that tool returns `uni-theme.ts` source for an\n * agent to write and compile (branding an app permanently), these return a\n * validated `UniTheme` as data, for an app or agent to register live:\n * `themeService.registerTheme(theme, { select: true })`.\n *\n * Two contracts make the payload affordable and trustworthy:\n *\n * - **Icons are elided.** A serialized theme is ~50 KB, ~71% of it the 61\n * built-in icon data URIs that every uni-core consumer already ships.\n * `dehydrateTheme` keeps genuine overrides and drops the rest (~14 KB);\n * the receiver restores them (`ThemeService` does it on register, others\n * call `hydrateTheme`).\n * - **Every theme is parsed before it leaves.** `parseTheme` is the same gate\n * the consumer applies, so \"validated\" is checked here rather than claimed.\n */\nimport {\n dehydrateTheme,\n emitDtcgTokens,\n generateUniThemes,\n parseTheme,\n summarizeContrast,\n UniThemes,\n formatThemeIssues,\n type ContrastReport,\n type UniTheme,\n} from '@uni-design-system/uni-core';\n\nimport { resolveSeed, type GenerateThemeArgs } from './generate.js';\n\nexport interface RuntimeTheme {\n id: string;\n name: string;\n mode: 'light' | 'dark';\n /** A validated `UniTheme` with the built-in icon set elided. */\n theme: UniTheme;\n}\n\nexport interface RuntimeThemeEnvelope {\n themes: RuntimeTheme[];\n /** Present when the themes were generated in this call and audited. */\n contrast?: {\n summary: string;\n pass: boolean;\n worstRatio: number;\n /** Token pairs below their WCAG target; named, never hex. */\n failing: {\n mode: string;\n foreground: string;\n background: string;\n ratio: number;\n required: number;\n }[];\n };\n apply: { snippet: string; note: string };\n /** Always true: base icons travel out-of-band. See the module note. */\n iconsElided: true;\n}\n\nexport type BuildResult =\n | { ok: true; envelope: RuntimeThemeEnvelope }\n | { ok: false; error: string };\n\nconst APPLY_SNIPPET = [\n '// Angular — ThemeService from @uni-design-system/uni-angular',\n 'const result = themeService.registerTheme(theme, { select: true });',\n 'if (!result.success) console.warn(result.issues);',\n].join('\\n');\n\nconst APPLY_NOTE =\n 'Each `theme` is a complete, validated UniTheme with the built-in icon set elided. ' +\n \"ThemeService restores it on register (the theme's own icons win). Outside Angular, \" +\n 'call `hydrateTheme(theme)` from @uni-design-system/uni-core before use, and ' +\n '`parseTheme` if the payload crossed a trust boundary.';\n\n/** Validate and package themes, or report why they were rejected. */\nfunction envelope(themes: RuntimeTheme[], report?: ContrastReport): BuildResult {\n for (const { id, theme } of themes) {\n const result = parseTheme(theme);\n if (!result.success) {\n return { ok: false, error: `Generated theme \\`${id}\\` failed validation: ${formatThemeIssues(result.issues)}` };\n }\n }\n\n return {\n ok: true,\n envelope: {\n themes,\n ...(report\n ? {\n contrast: {\n summary: summarizeContrast(report),\n pass: report.pass,\n worstRatio: report.worstRatio,\n failing: report.checks\n .filter((check) => !check.pass)\n .map(({ mode, foreground, background, ratio, required }) => ({\n mode,\n foreground,\n background,\n ratio,\n required,\n })),\n },\n }\n : {}),\n apply: { snippet: APPLY_SNIPPET, note: APPLY_NOTE },\n iconsElided: true,\n },\n };\n}\n\n/** Generate a light(+dark) theme pair from brand seed(s), ready to register. */\nexport function buildGeneratedTheme(args: GenerateThemeArgs): BuildResult {\n const resolved = resolveSeed(args.brand);\n if (!resolved.ok) return resolved;\n\n const { light, dark, report } = generateUniThemes({ ...args, seed: resolved.seed });\n\n const themes: RuntimeTheme[] = [\n { id: light.id, name: light.name, mode: 'light', theme: dehydrateTheme(light) },\n ];\n if (args.darkMode !== false) {\n themes.push({ id: dark.id, name: dark.name, mode: 'dark', theme: dehydrateTheme(dark) });\n }\n\n return envelope(themes, report);\n}\n\n/** The ids `get-runtime-theme` and `GET /themes` serve. */\nexport function listRuntimeThemes(): { id: string; name: string; mode: 'light' | 'dark' }[] {\n return Object.entries(UniThemes).map(([id, theme]) => ({\n id,\n name: theme.name,\n mode: modeOf(id),\n }));\n}\n\nconst modeOf = (id: string): 'light' | 'dark' => (/dark/i.test(id) ? 'dark' : 'light');\n\n/** Serve a theme that ships with Uni (`LightTheme`, `DarkTheme`) as runtime JSON. */\nexport function buildStoredTheme(id: string): BuildResult {\n const theme = (UniThemes as Record<string, UniTheme | undefined>)[id];\n if (!theme) {\n const ids = Object.keys(UniThemes).join(', ');\n return { ok: false, error: `No theme found with id \\`${id}\\`. Available: ${ids}.` };\n }\n\n return envelope([\n { id: theme.id, name: theme.name, mode: modeOf(id), theme: dehydrateTheme(theme) },\n ]);\n}\n\n/**\n * W3C DTCG (Style Dictionary compatible) export of a built-in theme's colors,\n * radius and spacing scales. The interop layer for external token pipelines;\n * the `UniTheme` JSON the runtime-theme tools serve stays the lossless\n * primary format.\n */\nexport function buildDtcgTokens(\n id: string\n): { ok: true; json: string } | { ok: false; error: string } {\n const theme = (UniThemes as Record<string, UniTheme | undefined>)[id];\n if (!theme) {\n const ids = Object.keys(UniThemes).join(', ');\n return { ok: false, error: `No theme found with id \\`${id}\\`. Available: ${ids}.` };\n }\n\n const tokens = emitDtcgTokens({\n colors: theme.colors,\n radii: theme.radii,\n spacing: theme.spacing,\n });\n return { ok: true, json: JSON.stringify(tokens, null, 2) };\n}\n\n/**\n * The text block accompanying `structuredContent`: a compact orientation, not\n * a second copy of the payload — duplicating ~14 KB of JSON per theme would\n * double the cost of every call for clients that read the structured result.\n */\nexport function summarizeEnvelope(env: RuntimeThemeEnvelope): string {\n const list = env.themes.map((t) => `\\`${t.id}\\` (${t.mode})`).join(', ');\n const failing = env.contrast?.failing.length\n ? `\\n\\nFailing pairs:\\n${env.contrast.failing\n .map((f) => `- ${f.mode} \\`${f.foreground}\\` on \\`${f.background}\\`: ${f.ratio}:1 (needs ${f.required}:1)`)\n .join('\\n')}`\n : '';\n\n return [\n `# Runtime theme JSON — ${env.themes.length} theme${env.themes.length === 1 ? '' : 's'}`,\n '',\n `${list}. The full validated theme data is in this result's structured content.`,\n ...(env.contrast ? ['', `${env.contrast.summary}.${failing}`] : []),\n '',\n '## Apply',\n '',\n '```ts',\n env.apply.snippet,\n '```',\n '',\n env.apply.note,\n '',\n 'To brand an app permanently instead, use `generate-uni-theme` — it returns an ' +\n 'editable `uni-theme.ts` that becomes the source of truth. Use this tool when the ' +\n 'theme should apply immediately without a build step.',\n ].join('\\n');\n}\n"],"mappings":"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","names":["background","lightColors","darkColors"]}