{
	"version": "4.6.0",
	"count": 385,
	"groups": [
		{
			"slug": "inputs",
			"first": "001",
			"last": "992",
			"count": 86
		},
		{
			"slug": "surfaces",
			"first": "065",
			"last": "543",
			"count": 17
		},
		{
			"slug": "feedback",
			"first": "080",
			"last": "989",
			"count": 38
		},
		{
			"slug": "display",
			"first": "104",
			"last": "966",
			"count": 64
		},
		{
			"slug": "navigation",
			"first": "146",
			"last": "947",
			"count": 39
		},
		{
			"slug": "layout",
			"first": "165",
			"last": "987",
			"count": 47
		},
		{
			"slug": "charts",
			"first": "190",
			"last": "219",
			"count": 30
		},
		{
			"slug": "foundation",
			"first": "220",
			"last": "861",
			"count": 16
		},
		{
			"slug": "docs-kit",
			"first": "232",
			"last": "236",
			"count": 5
		},
		{
			"slug": "motion",
			"first": "256",
			"last": "386",
			"count": 39
		},
		{
			"slug": "map",
			"first": "800",
			"last": "800",
			"count": 1
		},
		{
			"slug": "concepts",
			"first": "993",
			"last": "995",
			"count": 3
		}
	],
	"elements": [
		{
			"id": "001",
			"group": "inputs",
			"page": "button",
			"variant": "FullWidth",
			"slug": "full-width",
			"title": "Full width",
			"description": "fullWidth stretches the button to its container.",
			"summary": "Two buttons that stretch to the width of their container: a filled primary and an outlined cancel.",
			"use": "Stacked action pairs in forms, dialogs and bottom sheets where the buttons should span the column.",
			"spec": [
				"`fullWidth` on `Button` makes it fill its parent",
				"Primary action keeps the default variant, secondary uses `variant=\"outlined\"`",
				"Wrapper column is `max-width: 320px` with `gap: var(--ca-space-2)`"
			],
			"tags": [
				"button",
				"full-width",
				"stacked",
				"actions",
				"form"
			],
			"shape": "square",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"hover",
					"press",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Button"
				],
				"aliases": [
					"block button",
					"stretch"
				],
				"related": [
					"004",
					"006",
					"902"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Button"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Button"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/button#full-width",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "002",
			"group": "inputs",
			"page": "button",
			"variant": "Icons",
			"slug": "with-icons",
			"title": "With icons",
			"description": "Leading and trailing snippets.",
			"summary": "Buttons with an icon before the label, after the label, and with a ghost download action.",
			"use": "Actions that benefit from an icon cue: favourite, continue to next step, download.",
			"spec": [
				"Leading icon goes in `{#snippet leading()}` (`Star` from `@lucide/svelte`, `size={15}`)",
				"Trailing icon goes in `{#snippet trailing()}` (`ArrowRight`, `size={15}`)",
				"Variants shown: `variant=\"filled\"`, `variant=\"outlined\"`, `variant=\"ghost\"`"
			],
			"tags": [
				"button",
				"icon",
				"leading",
				"trailing",
				"snippet"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"hover",
					"press",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Button"
				],
				"aliases": [
					"icon button",
					"button with icon"
				],
				"related": [
					"006",
					"004",
					"901"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Button"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Button"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/button#with-icons",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "003",
			"group": "inputs",
			"page": "button",
			"variant": "Loading",
			"slug": "loading",
			"title": "Loading",
			"description": "Swaps the leading icon for a spinner, sets aria-busy and blocks clicks while keeping the label.",
			"summary": "Buttons in the loading state, including one that toggles loading for two seconds when clicked.",
			"use": "Submit and save buttons that wait on a request and must block repeat clicks while keeping their label.",
			"spec": [
				"`loading` on `variant=\"filled\"` and `variant=\"outlined\"` shows the spinner in place of the leading icon",
				"Bound to state: `loading={saving}` with `let saving = $state(false)`",
				"`onclick={save}` sets `saving = true` and resets it with `setTimeout(() => (saving = false), 2000)`",
				"Label switches with state: `{saving ? 'Saving…' : 'Save (2s)'}`"
			],
			"tags": [
				"button",
				"loading",
				"spinner",
				"async",
				"submit"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Button"
				],
				"aliases": [
					"spinner",
					"pending",
					"busy"
				],
				"related": [
					"005",
					"006",
					"063"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Button"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Button"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/button#loading",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "004",
			"group": "inputs",
			"page": "button",
			"variant": "Sizes",
			"slug": "sizes",
			"title": "Sizes",
			"description": "",
			"summary": "The three button sizes side by side: small, medium and large.",
			"use": "Choosing button density: `sm` in toolbars and tables, `md` by default, `lg` for hero or touch-first actions.",
			"spec": [
				"`size=\"sm\"` labelled Small",
				"`size=\"md\"` labelled Medium",
				"`size=\"lg\"` labelled Large"
			],
			"tags": [
				"button",
				"size",
				"sm",
				"md",
				"lg"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"hover",
					"press",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Button"
				],
				"aliases": [
					"small medium large"
				],
				"related": [
					"006",
					"001",
					"880"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Button"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Button"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/button#sizes",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "005",
			"group": "inputs",
			"page": "button",
			"variant": "States",
			"slug": "states",
			"title": "States",
			"description": "Disabled buttons, a destructive action and a link rendered as a button.",
			"summary": "Disabled buttons, a destructive action with an icon, and a link rendered as a button.",
			"use": "Showing non-interactive and dangerous actions, or navigating with button styling via `href`.",
			"spec": [
				"`disabled` on `variant=\"filled\"`, `variant=\"outlined\"` and `variant=\"glass\"`",
				"`variant=\"destructive\"` with a `Trash2` icon in `{#snippet leading()}` (`size={15}`)",
				"`href=\"https://github.com/codeatlasdev/ui\"` with `target=\"_blank\"` renders an anchor"
			],
			"tags": [
				"button",
				"disabled",
				"destructive",
				"link",
				"href"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"hover",
					"press",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Button"
				],
				"aliases": [
					"inactive",
					"danger",
					"link"
				],
				"related": [
					"006",
					"003",
					"640"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Button"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Button"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/button#states",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "006",
			"group": "inputs",
			"page": "button",
			"variant": "Variants",
			"slug": "variants",
			"title": "Variants",
			"description": "filled, glass (a tinted surface button that follows the theme: opaque under solid), outlined, ghost and destructive.",
			"summary": "All five button variants in a row: filled, glass, outlined, ghost and destructive.",
			"use": "Picking the emphasis of an action: filled for primary, outlined or ghost for secondary, destructive for irreversible.",
			"spec": [
				"`variant=\"filled\"` labelled Filled",
				"`variant=\"glass\"` labelled Glass",
				"`variant=\"outlined\"` labelled Outlined",
				"`variant=\"ghost\"` labelled Ghost",
				"`variant=\"destructive\"` labelled Destructive"
			],
			"tags": [
				"button",
				"variant",
				"filled",
				"glass",
				"outlined",
				"ghost",
				"destructive"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default",
					"glassmorphism"
				],
				"motion": "subtle",
				"interaction": [
					"hover",
					"press",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Button"
				],
				"aliases": [
					"button styles",
					"primary secondary"
				],
				"related": [
					"004",
					"005",
					"640"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Button"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Button"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/button#variants",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "007",
			"group": "inputs",
			"page": "checkbox",
			"variant": "Disabled",
			"slug": "disabled",
			"title": "Disabled",
			"description": "",
			"summary": "Three disabled checkboxes: unchecked, checked and indeterminate.",
			"use": "Showing a read-only option whose value the user cannot change, such as a setting locked by plan or permission.",
			"spec": [
				"`disabled` with `label=\"Disabled unchecked\"`",
				"`checked disabled` with `label=\"Disabled checked\"`",
				"`indeterminate disabled` with `label=\"Disabled indeterminate\"`",
				"Three `<Checkbox` components, no bound state"
			],
			"tags": [
				"checkbox",
				"disabled",
				"checked",
				"indeterminate",
				"form"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Checkbox"
				],
				"aliases": [
					"tick box"
				],
				"related": [
					"008",
					"009",
					"387"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Checkbox"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Checkbox"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/checkbox#disabled",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "008",
			"group": "inputs",
			"page": "checkbox",
			"variant": "States",
			"slug": "states",
			"title": "States",
			"description": "Unchecked, checked and indeterminate.",
			"summary": "Checkboxes in unchecked, pre-checked and indeterminate states, the first two bound to local state.",
			"use": "Boolean options in a form, such as terms acceptance or feature toggles, including a mixed state for partial selection.",
			"spec": [
				"`bind:checked={basic}` with `let basic = $state(false)` and `label=\"Unchecked (click me)\"`",
				"`bind:checked` bound to `let checked = $state(true)` with `label=\"Pre-checked\"`",
				"`indeterminate` with `label=\"Indeterminate\"`",
				"Three `<Checkbox` components imported from `@codeatlasdev/ui`"
			],
			"tags": [
				"checkbox",
				"checked",
				"indeterminate",
				"bind",
				"form"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Checkbox"
				],
				"aliases": [
					"tick box",
					"tri-state"
				],
				"related": [
					"007",
					"009",
					"387"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Checkbox"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Checkbox"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/checkbox#states",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "009",
			"group": "inputs",
			"page": "checkbox",
			"variant": "WithoutLabel",
			"slug": "without-label",
			"title": "Without label",
			"description": "Bare checkbox for table rows or custom layouts.",
			"summary": "Three checkboxes with no visible label, named only through aria-label: bound, checked and indeterminate.",
			"use": "Row selection checkboxes in tables or lists where the label is implied by the row and only an accessible name is needed.",
			"spec": [
				"`bind:checked={value}` with `aria-label=\"Unlabelled checkbox\"`",
				"`checked` with `aria-label=\"Unlabelled checked checkbox\"`",
				"`indeterminate` with `aria-label=\"Unlabelled indeterminate checkbox\"`",
				"No `label` prop on any of the three"
			],
			"tags": [
				"checkbox",
				"aria-label",
				"accessibility",
				"unlabelled",
				"indeterminate"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Checkbox"
				],
				"aliases": [
					"unlabelled",
					"aria label only"
				],
				"related": [
					"008",
					"007",
					"387"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Checkbox"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Checkbox"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/checkbox#without-label",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "010",
			"group": "inputs",
			"page": "combobox",
			"variant": "Basic",
			"slug": "basic",
			"title": "Basic",
			"description": "Search a list of options and bind the selected value.",
			"summary": "A searchable Combobox over eight frameworks that prints the selected value below the field.",
			"use": "Picking one item from a long list where typing to filter is faster than scrolling a select.",
			"spec": [
				"`<Combobox label=\"Framework\" options={frameworks} bind:value={selected} />`",
				"`const frameworks` has 8 options with `value` and `label` keys, from `svelte` to `sveltekit`",
				"`let selected = $state('')` starts empty",
				"`{#if selected}` renders `Selected:` with the value in `<code>`",
				"Wrapper `.col` has `max-width: 320px`"
			],
			"tags": [
				"combobox",
				"search",
				"autocomplete",
				"options",
				"select",
				"form"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"keyboard",
					"press"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Combobox"
				],
				"aliases": [
					"autocomplete",
					"typeahead",
					"searchable select"
				],
				"related": [
					"011",
					"420",
					"040"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Combobox"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Combobox"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/combobox#basic",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "011",
			"group": "inputs",
			"page": "combobox",
			"variant": "States",
			"slug": "states",
			"title": "States",
			"description": "Description, custom search placeholder and empty text, disabled option, error and disabled.",
			"summary": "Three Combobox states: with description and custom search and empty texts, with error and required, and disabled.",
			"use": "Documenting validation, helper text and unavailable states of a searchable select in a form.",
			"spec": [
				"`frameworks` has 4 options, the last is `{ value: 'astro', label: 'Astro', disabled: true }`",
				"First field: `bind:value`, `description=\"Astro is disabled.\"`, `searchPlaceholder=\"Filter frameworks…\"`, `emptyText=\"No framework matches.\"`",
				"Second field: `error=\"Pick a framework.\"` and `required`",
				"Third field: `disabled` with `placeholder=\"Unavailable\"`",
				"Wrapper `.col` has `max-width: 320px`"
			],
			"tags": [
				"combobox",
				"error",
				"disabled",
				"required",
				"description",
				"empty-state"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"devtools"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"keyboard",
					"press"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Combobox"
				],
				"aliases": [
					"validation",
					"empty results"
				],
				"related": [
					"010",
					"420",
					"043"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Combobox"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Combobox"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/combobox#states",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "012",
			"group": "inputs",
			"page": "copy-button",
			"variant": "Default",
			"slug": "default",
			"title": "Default",
			"description": "",
			"summary": "A default CopyButton that copies an npm install command.",
			"use": "Next to install commands, tokens or IDs so users can copy them in one click.",
			"spec": [
				"`<CopyButton value=\"npm i @codeatlasdev/ui\" />`",
				"Only the `value` prop is set, no other props"
			],
			"tags": [
				"copy-button",
				"clipboard",
				"copy",
				"install",
				"command"
			],
			"shape": "square",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"devtools"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"CopyButton"
				],
				"aliases": [
					"clipboard",
					"copy to clipboard"
				],
				"related": [
					"013",
					"014",
					"983"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"CopyButton"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"CopyButton"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/copy-button#default",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "013",
			"group": "inputs",
			"page": "copy-button",
			"variant": "IconToast",
			"slug": "icon-only-and-toast",
			"title": "Icon only and toast",
			"description": "label=&quot;&quot; renders an icon-only button. toast shows a success message after copying.",
			"summary": "An icon-only CopyButton and a labelled one that shows a toast after copying, with a Toaster mounted.",
			"use": "Copying links or snippets where a compact icon is enough or where a visible confirmation toast is wanted.",
			"spec": [
				"`<Toaster />` is rendered alongside the buttons",
				"`<CopyButton value=\"icon-only\" label=\"\" />` is icon-only via an empty `label`",
				"`<CopyButton value=\"https://ui.codeatlas.com.br\" label=\"Copy link\" toast=\"Link copied\" />`"
			],
			"tags": [
				"copy-button",
				"toast",
				"toaster",
				"icon-only",
				"clipboard",
				"label"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"CopyButton",
					"Toaster"
				],
				"aliases": [
					"copied toast"
				],
				"related": [
					"012",
					"014",
					"983"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"CopyButton",
				"Toaster"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"CopyButton",
						"Toaster"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/copy-button#icon-only-and-toast",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "014",
			"group": "inputs",
			"page": "copy-button",
			"variant": "Variants",
			"slug": "variants-and-sizes",
			"title": "Variants and sizes",
			"description": "",
			"summary": "CopyButton in three variants and two extra sizes, side by side.",
			"use": "Choosing the emphasis and size of a copy action to match the surrounding UI.",
			"spec": [
				"`variant=\"filled\"` with `value=\"filled\"`",
				"`variant=\"glass\"` with `value=\"glass\"`",
				"`variant=\"outlined\"` with `value=\"outlined\"`",
				"`size=\"sm\"` with `value=\"small\"`",
				"`size=\"lg\"` with `value=\"large\"`"
			],
			"tags": [
				"copy-button",
				"variant",
				"size",
				"filled",
				"glass",
				"outlined"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default",
					"glassmorphism"
				],
				"motion": "subtle",
				"interaction": [
					"hover",
					"press",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"CopyButton"
				],
				"aliases": [
					"clipboard"
				],
				"related": [
					"012",
					"013",
					"006"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"CopyButton"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"CopyButton"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/copy-button#variants-and-sizes",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "015",
			"group": "inputs",
			"page": "date-picker",
			"variant": "Calendars",
			"slug": "calendar-and-rangecalendar",
			"title": "Calendar and RangeCalendar",
			"description": "Inline calendars. Click a start date, then an end date for the range.",
			"summary": "An inline single-date Calendar and a RangeCalendar, each printing its selected value below.",
			"use": "Always-visible date selection such as booking a stay or choosing an event day without a popover.",
			"spec": [
				"`<Calendar bind:value label=\"Event date\" locale=\"en-US\" weekStartsOn={0} />`",
				"`let value = $state<DateValue | undefined>(today(getLocalTimeZone()))` preselects today",
				"`<RangeCalendar bind:value={range} label=\"Stay\" locale=\"en-US\" weekStartsOn={0} numberOfMonths={1} />`",
				"`let range = $state<DateRange>({ start: undefined, end: undefined })` starts empty",
				"Output lines show `fmt(value)`, `fmt(range.start)` and `fmt(range.end)`, with `–` when unset"
			],
			"tags": [
				"calendar",
				"range-calendar",
				"date",
				"date-range",
				"inline",
				"locale"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "grid",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Calendar",
					"RangeCalendar"
				],
				"aliases": [
					"month grid",
					"date range",
					"inline calendar"
				],
				"related": [
					"018",
					"016",
					"017"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Calendar",
				"RangeCalendar"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Calendar",
						"RangeCalendar",
						"getLocalTimeZone",
						"today",
						"DateRange",
						"DateValue"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/date-picker#calendar-and-rangecalendar",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "016",
			"group": "inputs",
			"page": "date-picker",
			"variant": "Constraints",
			"slug": "min-max-error-and-disabled",
			"title": "Min, max, error and disabled",
			"description": "Only the next 30 days are selectable. Out-of-range days are disabled and typed values become invalid.",
			"summary": "Date and time inputs with constraints: a bounded DatePicker, a required DatePicker with an error, a disabled DateField and a read-only TimeField.",
			"use": "Forms that limit selectable dates, require a date of birth or show locked date and time values.",
			"spec": [
				"`minValue={min}` and `maxValue={max}` with `const max = today(tz).add({ days: 30 })` and `description=\"Only the next 30 days.\"`",
				"`required` with `error={requiredError}` derived as `'Enter your date of birth.'` while empty",
				"`<DateField label=\"Disabled\" locale=\"en-US\" disabled value={new CalendarDate(2026, 1, 15)} />`",
				"`<TimeField label=\"Read-only\" locale=\"en-US\" readonly value={new Time(9, 0)} />`",
				"Wrapper `.col` has `max-width: 400px`"
			],
			"tags": [
				"date-picker",
				"date-field",
				"time-field",
				"min-max",
				"required",
				"disabled",
				"readonly"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"DateField",
					"DatePicker",
					"TimeField"
				],
				"aliases": [
					"min max date",
					"bounded",
					"readonly"
				],
				"related": [
					"018",
					"017",
					"015"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"DateField",
				"DatePicker",
				"TimeField"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"CalendarDate",
						"DateField",
						"DatePicker",
						"Time",
						"TimeField",
						"getLocalTimeZone",
						"today",
						"DateValue"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/date-picker#min-max-error-and-disabled",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "017",
			"group": "inputs",
			"page": "date-picker",
			"variant": "Fields",
			"slug": "datefield-and-timefield",
			"title": "DateField and TimeField",
			"description": "Segments only, no popover. granularity=&quot;minute&quot; adds a time, and hourCycle switches between 12h and 24h.",
			"summary": "Segmented DateField and TimeField inputs with bound values, minute granularity and 24h and 12h hour cycles.",
			"use": "Typing a date or time directly in a form, such as a birthday or an appointment start time.",
			"spec": [
				"`<DateField label=\"Birthday\" locale=\"en-US\" bind:value={birthday} />` initialised with `new CalendarDate(2026, 10, 10)`",
				"`<DateField label=\"Starts at\" locale=\"en-US\" granularity=\"minute\" />`",
				"`<TimeField label=\"Time (24h)\" locale=\"en-US\" hourCycle={24} bind:value={time} />` initialised with `new Time(14, 30)`",
				"`<TimeField label=\"Time (12h)\" locale=\"en-US\" hourCycle={12} />`",
				"Two `value:` output lines print `birthday.toString()` and `time.toString()`"
			],
			"tags": [
				"date-field",
				"time-field",
				"granularity",
				"hour-cycle",
				"segmented",
				"form"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"DateField",
					"TimeField"
				],
				"aliases": [
					"segmented date",
					"time input",
					"12 hour 24 hour"
				],
				"related": [
					"016",
					"018",
					"015"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"DateField",
				"TimeField"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"CalendarDate",
						"DateField",
						"Time",
						"TimeField",
						"DateValue"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/date-picker#datefield-and-timefield",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "018",
			"group": "inputs",
			"page": "date-picker",
			"variant": "Pickers",
			"slug": "datepicker-and-daterangepicker",
			"title": "DatePicker and DateRangePicker",
			"description": "Editable segments plus a calendar popover. The range picker shows two months.",
			"summary": "A DatePicker and a DateRangePicker with popover calendars, each printing its selected value.",
			"use": "Choosing a delivery date or a reporting period where the user can type or pick from a calendar popover.",
			"spec": [
				"`<DatePicker` with `label=\"Delivery date\"` and `description=\"Type a date or pick one from the calendar.\"`",
				"`bind:value={picked}` with `let picked = $state<DateValue | undefined>()`",
				"`<DateRangePicker label=\"Period\" locale=\"en-US\" weekStartsOn={0} bind:value={range} />`",
				"`let range = $state<DateRange>({ start: undefined, end: undefined })`",
				"Wrappers: `.col` has `max-width: 400px`, `.col--wide` has `max-width: 460px`"
			],
			"tags": [
				"date-picker",
				"date-range-picker",
				"popover",
				"date",
				"date-range",
				"calendar"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"DatePicker",
					"DateRangePicker"
				],
				"aliases": [
					"calendar popover",
					"date range",
					"datepicker"
				],
				"related": [
					"015",
					"016",
					"017"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"DatePicker",
				"DateRangePicker"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"DatePicker",
						"DateRangePicker",
						"DateRange",
						"DateValue"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/date-picker#datepicker-and-daterangepicker",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "019",
			"group": "inputs",
			"page": "export-menu",
			"variant": "Default",
			"slug": "default",
			"title": "Default",
			"description": "Custom column order and headers. onexport receives the generated text, handy for tests or uploads.",
			"summary": "An ExportMenu exporting three domain rows with custom column headers and a status line reporting the last export.",
			"use": "Table toolbars that let users download the current data set as a file in a chosen format.",
			"spec": [
				"`data={rows}` with `const rows` of 3 objects with `domain`, `price` and `available` fields",
				"`filename=\"domains\"`",
				"`columns` has 3 entries with `header` `Domain`, `Price (USD)` and `Available`",
				"`onexport` sets `last` to the exported `e.filename` and `e.rows` count",
				"Idle status text is `Pick a format to download.`"
			],
			"tags": [
				"export-menu",
				"export",
				"download",
				"csv",
				"table",
				"columns"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"ExportMenu"
				],
				"aliases": [
					"download",
					"csv",
					"xlsx",
					"dropdown"
				],
				"related": [
					"981",
					"014",
					"012"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"ExportMenu"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"ExportMenu"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/export-menu#default",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "020",
			"group": "inputs",
			"page": "file-upload",
			"variant": "Basic",
			"slug": "basic",
			"title": "Basic",
			"description": "Multiple files with a size limit and the selected count.",
			"summary": "A multi-file FileUpload with a size limit and hint that reports how many files are selected.",
			"use": "Attachment and document upload areas that accept several files and cap their size.",
			"spec": [
				"`bind:files` with `let files = $state<File[]>([])`",
				"`multiple`",
				"`hint=\"PNG, JPG, PDF up to 10 MB\"`",
				"`maxSize={10 * 1024 * 1024}`",
				"`{#if files.length > 0}` shows the selected file count with a plural `s`",
				"Wrapper `.wrap` has `max-width: 480px`"
			],
			"tags": [
				"file-upload",
				"dropzone",
				"multiple",
				"max-size",
				"files",
				"attachment"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"drag",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"FileUpload"
				],
				"aliases": [
					"dropzone",
					"attachment",
					"drag and drop"
				],
				"related": [
					"021",
					"388",
					"054"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"FileUpload"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"FileUpload"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/file-upload#basic",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "021",
			"group": "inputs",
			"page": "file-upload",
			"variant": "Variants",
			"slug": "images-only-and-disabled",
			"title": "Images only and disabled",
			"description": "",
			"summary": "Two FileUpload dropzones: one restricted to images with custom label and hint, and one disabled.",
			"use": "Image-only upload fields and upload areas that are unavailable to the current user.",
			"spec": [
				"`accept=\"image/*\"` with `label=\"Drop images here\"` and `hint=\"PNG, JPG, GIF, WebP\"`",
				"`disabled` with `label=\"Upload unavailable\"`",
				"Wrapper `.wrap` stacks both with `max-width: 480px`"
			],
			"tags": [
				"file-upload",
				"dropzone",
				"accept",
				"image",
				"disabled",
				"label"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"drag",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"FileUpload"
				],
				"aliases": [
					"image upload",
					"drop area"
				],
				"related": [
					"020",
					"388",
					"054"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"FileUpload"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"FileUpload"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/file-upload#images-only-and-disabled",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "022",
			"group": "inputs",
			"page": "filter-group",
			"variant": "Basic",
			"slug": "role-filter",
			"title": "Role filter",
			"description": "",
			"summary": "A FilterGroup of three role options bound to a value that is printed below.",
			"use": "Filtering a list or table by one category, such as user role, with a short set of choices.",
			"spec": [
				"`<FilterGroup label=\"Role\" options={roles} bind:value={role} />`",
				"`const roles` has 3 options with `value` and `label`: `admin`, `editor`, `viewer`",
				"`let role = $state('all')` starts at `all`, which is not one of the options",
				"`<p>Selected: {role}</p>` prints the current value"
			],
			"tags": [
				"filter-group",
				"filter",
				"options",
				"role",
				"bind",
				"category"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "compact",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"FilterGroup"
				],
				"aliases": [
					"chips",
					"category filter",
					"pill filter"
				],
				"related": [
					"720",
					"060",
					"038"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"FilterGroup"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"FilterGroup"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/filter-group#role-filter",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "023",
			"group": "inputs",
			"page": "masked-field",
			"variant": "Documents",
			"slug": "documents-and-dates",
			"title": "Documents and dates",
			"description": "CPF, CNPJ, a mask that switches after 11 digits, a birth date and RG.",
			"summary": "Five MaskedField inputs for Brazilian documents: CPF, CNPJ, combined CPF or CNPJ, birth date and RG, with validators on three.",
			"use": "Brazilian registration and checkout forms that collect formatted identity documents and dates.",
			"spec": [
				"`mask={maskCPF}` with `validate={(v) => (isValidCPF(v) ? undefined : 'Invalid CPF')}` and `placeholder=\"000.000.000-00\"`",
				"`mask={maskCNPJ}` with `validate={(v) => (isValidCNPJ(v) ? undefined : 'Invalid CNPJ')}` and `placeholder=\"00.000.000/0000-00\"`",
				"`mask={maskCPFCNPJ}` with `description=\"Switches mask after 11 digits.\"`",
				"`mask={maskDateBR}` with `isValidDateBR(v)` validation and `placeholder=\"dd/mm/yyyy\"`",
				"`mask={maskRG}` with `placeholder=\"00.000.000-0\"` and no `validate`",
				"Imports come from `@codeatlasdev/ui/forms`, each field uses `bind:value`"
			],
			"tags": [
				"masked-field",
				"cpf",
				"cnpj",
				"mask",
				"validation",
				"brazil",
				"forms"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"MaskedField"
				],
				"aliases": [
					"cpf",
					"cnpj",
					"input mask",
					"id number"
				],
				"related": [
					"024",
					"025",
					"028"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"MaskedField"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui/forms",
					"names": [
						"MaskedField",
						"isValidCNPJ",
						"isValidCPF",
						"isValidDateBR",
						"maskCNPJ",
						"maskCPF",
						"maskCPFCNPJ",
						"maskDateBR",
						"maskRG"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/masked-field#documents-and-dates",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "024",
			"group": "inputs",
			"page": "masked-field",
			"variant": "MaskAction",
			"slug": "use-mask-action",
			"title": "use:mask action",
			"description": "Apply any pure mask to a plain input. The caret stays on the same digit.",
			"summary": "A native input masked with the mask action, showing the bound value below.",
			"use": "Adding input masking to a custom or third-party input that is not a MaskedField.",
			"spec": [
				"`use:mask={maskCPF}` on a plain `<input` with `bind:value`",
				"`placeholder=\"000.000.000-00\"` and `inputmode=\"numeric\"`",
				"`<label class=\"lbl\" for=\"mask-action-input\">` is linked to `id=\"mask-action-input\"`",
				"Output line prints `value = {value || '–'}`"
			],
			"tags": [
				"mask",
				"action",
				"input-mask",
				"cpf",
				"native-input",
				"forms"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"fintech"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [],
				"aliases": [
					"input mask",
					"action",
					"format as you type"
				],
				"related": [
					"023",
					"025",
					"056"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [],
			"imports": [
				{
					"from": "@codeatlasdev/ui/forms",
					"names": [
						"mask",
						"maskCPF"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/masked-field#use-mask-action",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "025",
			"group": "inputs",
			"page": "masked-field",
			"variant": "PhoneCep",
			"slug": "phone-and-cep",
			"title": "Phone and CEP",
			"description": "PhoneField binds E.164 (+55...) while showing the masked form. CepField resolves an address through onlookup. Try 01310-100.",
			"summary": "A PhoneField and a CepField that looks up an address asynchronously and prints the resolved street, district and city.",
			"use": "Brazilian address and contact forms that autofill street data from a postal code lookup.",
			"spec": [
				"`<PhoneField label=\"WhatsApp\" bind:value={phone} />`",
				"`<CepField` with `label=\"CEP\"` and `description=\"Try 01310-100.\"`",
				"`bind:lookupPending={pending}`, `onlookup={lookup}` and `onresolve={(a) => (address = a)}`",
				"`async function lookup(raw: string)` waits 600 ms and returns a `CepAddress` only for `01310100`, otherwise `null`",
				"Result line shows `Looking up…` while pending, then `logradouro`, `bairro`, `localidade` and `uf`"
			],
			"tags": [
				"phone-field",
				"cep-field",
				"lookup",
				"address",
				"brazil",
				"async",
				"forms"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"CepField",
					"PhoneField"
				],
				"aliases": [
					"phone",
					"postal code",
					"address lookup",
					"zip"
				],
				"related": [
					"023",
					"024",
					"056"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"CepField",
				"PhoneField"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui/forms",
					"names": [
						"CepField",
						"PhoneField",
						"CepAddress"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/masked-field#phone-and-cep",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "026",
			"group": "inputs",
			"page": "money-input",
			"variant": "Constraints",
			"slug": "min-max-negative-error-and-disabled",
			"title": "Min, max, negative, error and disabled",
			"description": "Deposit is clamped between R$ 10,00 and R$ 100,00. Include a minus sign to toggle the sign when allowNegative is set.",
			"summary": "Four MoneyInput fields showing min and max bounds, negative values, an error message and a disabled state.",
			"use": "Amount fields in payment and ledger forms that limit ranges, allow adjustments or lock a value.",
			"spec": [
				"`label=\"Deposit\"` with `min={1000}`, `max={10000}` and `description=\"Between R$ 10,00 and R$ 100,00.\"`",
				"`<MoneyInput label=\"Adjustment\" bind:value={adjustment} allowNegative />` with `let adjustment = $state(-2500)`",
				"`<MoneyInput label=\"Amount\" value={0} error=\"Amount must be greater than zero.\" />`",
				"`<MoneyInput label=\"Locked\" value={99900} disabled />`",
				"Wrapper `.col` has `max-width: 400px`"
			],
			"tags": [
				"money-input",
				"min-max",
				"negative",
				"error",
				"disabled",
				"currency",
				"forms"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"fintech"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"MoneyInput"
				],
				"aliases": [
					"currency input",
					"min max",
					"amount"
				],
				"related": [
					"028",
					"027",
					"029"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"MoneyInput"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui/forms",
					"names": [
						"MoneyInput"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/money-input#min-max-negative-error-and-disabled",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "027",
			"group": "inputs",
			"page": "money-input",
			"variant": "Currency",
			"slug": "currency-and-locale",
			"title": "Currency and locale",
			"description": "currency picks the minor unit (USD 2 decimals, JPY none); locale picks separators and symbol placement.",
			"summary": "MoneyInput in three currencies and locales: USD en-US, JPY without decimals and EUR de-DE.",
			"use": "Price fields in multi-currency products that must format and parse per locale.",
			"spec": [
				"`currency=\"USD\" locale=\"en-US\"` with `bind:value={usd}` starting at `$state(123456)`",
				"`currency=\"JPY\" locale=\"en-US\"` with `bind:value={jpy}` starting at `$state(1234)`",
				"`currency=\"EUR\" locale=\"de-DE\"` with `bind:value={eur}` starting at `$state(123456)`",
				"Labels: `Price (USD, en-US)`, `Price (JPY, no decimals)` and `Preis (EUR, de-DE)`"
			],
			"tags": [
				"money-input",
				"currency",
				"locale",
				"usd",
				"jpy",
				"eur",
				"forms"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"fintech"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"MoneyInput"
				],
				"aliases": [
					"locale",
					"price input",
					"multi currency"
				],
				"related": [
					"028",
					"026",
					"029"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"MoneyInput"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui/forms",
					"names": [
						"MoneyInput"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/money-input#currency-and-locale",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "028",
			"group": "inputs",
			"page": "money-input",
			"variant": "Default",
			"slug": "default",
			"title": "Default",
			"description": "Type 123456 to get R$ 1.234,56.",
			"summary": "A default MoneyInput bound to a cents value, with the raw cents and formatted display printed below.",
			"use": "A price or amount field where the model stores integer cents and the UI shows a formatted amount.",
			"spec": [
				"`<MoneyInput label=\"Price\" bind:value={price} />`",
				"`let price = $state(123456)` holds cents",
				"Output line prints `{price} cents → {centsToDisplay(price)}`",
				"Wrapper `.col` has `max-width: 400px`"
			],
			"tags": [
				"money-input",
				"cents",
				"currency",
				"format",
				"bind",
				"forms"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"fintech"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"MoneyInput"
				],
				"aliases": [
					"price input",
					"cents",
					"currency"
				],
				"related": [
					"027",
					"026",
					"029"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"MoneyInput"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui/forms",
					"names": [
						"MoneyInput",
						"centsToDisplay"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/money-input#default",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "029",
			"group": "inputs",
			"page": "money-input",
			"variant": "Helpers",
			"slug": "helpers",
			"title": "Helpers",
			"description": "Pure functions exported from @codeatlasdev/ui/forms.",
			"summary": "Two money helper functions evaluated inline: centsToDisplay and parseInputToCents.",
			"use": "Formatting stored cents for display or parsing user-typed currency strings outside a MoneyInput.",
			"spec": [
				"`centsToDisplay(123456)` is printed with its result",
				"`parseInputToCents('R$ 1.234,56')` is printed with its result",
				"Both helpers are imported from `@codeatlasdev/ui/forms`",
				"No input component is rendered"
			],
			"tags": [
				"money-input",
				"helpers",
				"cents",
				"parse",
				"format",
				"currency"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"fintech"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [],
				"aliases": [
					"format",
					"parse",
					"utility"
				],
				"related": [
					"028",
					"027",
					"026"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [],
			"imports": [
				{
					"from": "@codeatlasdev/ui/forms",
					"names": [
						"centsToDisplay",
						"parseInputToCents"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/money-input#helpers",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "030",
			"group": "inputs",
			"page": "number-field",
			"variant": "Basic",
			"slug": "basic",
			"title": "Basic",
			"description": "Integer and decimal steps with bounds.",
			"summary": "Two NumberField inputs in a Stack: an integer quantity with bounds and a decimal price with a step.",
			"use": "Quantity and price steppers in order or cart forms.",
			"spec": [
				"`<Stack gap=\"4\">` wraps both fields",
				"`<NumberField label=\"Quantity\" bind:value={qty} min={0} max={99} />` with `let qty = $state(1)`",
				"`<NumberField label=\"Price\" bind:value={price} min={0} step={0.01} />` with `let price = $state(9.99)`"
			],
			"tags": [
				"number-field",
				"stepper",
				"min-max",
				"step",
				"quantity",
				"forms"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"NumberField",
					"Stack"
				],
				"aliases": [
					"stepper",
					"quantity",
					"spinbutton"
				],
				"related": [
					"031",
					"056",
					"046"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"NumberField",
				"Stack"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"NumberField",
						"Stack"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/number-field#basic",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "031",
			"group": "inputs",
			"page": "number-field",
			"variant": "States",
			"slug": "states",
			"title": "States",
			"description": "Helper text, error, disabled and the small size.",
			"summary": "Four NumberField states in a Stack: with description, with error and required, disabled, and small.",
			"use": "Documenting helper text, validation, locked and compact variants of numeric fields such as seat counts.",
			"spec": [
				"`<NumberField label=\"Seats\" value={3} min={1} max={50} description=\"Max 50 seats per plan.\" />`",
				"`bind:value={seats}` with `let seats = $state(60)`, `error=\"Plans support up to 50 seats.\"` and `required`",
				"`<NumberField label=\"Fixed amount\" bind:value={fixed} disabled />`",
				"`<NumberField label=\"Small\" size=\"sm\" value={2} />`",
				"`<Stack gap=\"4\">` wraps the four fields"
			],
			"tags": [
				"number-field",
				"error",
				"disabled",
				"required",
				"size",
				"description",
				"forms"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"NumberField",
					"Stack"
				],
				"aliases": [
					"stepper",
					"validation",
					"seats"
				],
				"related": [
					"030",
					"058",
					"055"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"NumberField",
				"Stack"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"NumberField",
						"Stack"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/number-field#states",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "032",
			"group": "inputs",
			"page": "pin-input",
			"variant": "Default",
			"slug": "default",
			"title": "Default",
			"description": "Six digits by default. oncomplete fires once all cells are filled. A four-digit masked PIN is shown below it.",
			"summary": "A verification-code PinInput that reports its value and completion, plus a masked four-digit PIN.",
			"use": "One-time code entry for sign-in verification, or a short secret PIN that must be hidden.",
			"spec": [
				"`<PinInput label=\"Verification code\" bind:value={code} oncomplete={(v) => (done = v)} />`",
				"Output line prints `value: {code || '–'} · completed: {done || '–'}`",
				"`<PinInput label=\"PIN\" length={4} mask bind:value={pin} />`"
			],
			"tags": [
				"pin-input",
				"otp",
				"verification-code",
				"mask",
				"oncomplete",
				"forms"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"PinInput"
				],
				"aliases": [
					"otp",
					"verification code",
					"one time code",
					"passcode"
				],
				"related": [
					"033",
					"843",
					"841"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"PinInput"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"PinInput"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/pin-input#default",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "033",
			"group": "inputs",
			"page": "pin-input",
			"variant": "States",
			"slug": "states",
			"title": "States",
			"description": "Description, error, disabled and a free-text code.",
			"summary": "Four PinInput states: with description, with error, disabled with a partial value, and a text-type five-character key.",
			"use": "Documenting helper text, error feedback and non-numeric code variants of one-time code inputs.",
			"spec": [
				"`description=\"Check your email.\"` with `bind:value={hinted}` starting at `$state('123')`",
				"`error=\"Invalid or expired code.\"` with `value=\"123456\"`",
				"`disabled` with `value=\"12\"`",
				"`<PinInput label=\"Access key\" type=\"text\" length={5} value=\"\" />`"
			],
			"tags": [
				"pin-input",
				"otp",
				"error",
				"disabled",
				"description",
				"length",
				"forms"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"PinInput"
				],
				"aliases": [
					"otp",
					"error state",
					"access code"
				],
				"related": [
					"032",
					"843",
					"058"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"PinInput"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"PinInput"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/pin-input#states",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "034",
			"group": "inputs",
			"page": "radio",
			"variant": "Cards",
			"slug": "cards",
			"title": "Cards",
			"description": "variant=&quot;cards&quot; renders each option as a selectable card with an optional description.",
			"summary": "Radio group in `cards` variant with three plans, one disabled, bound to a selected plan.",
			"use": "Choosing a subscription plan or any option that needs a title and a short description.",
			"spec": [
				"`<RadioGroup variant=\"cards\"` with `aria-label=\"Plan\"`",
				"`items={plans}` holds 3 entries with `value`, `label`, `description`: Free, Pro, Team",
				"Team entry has `disabled: true`",
				"`bind:value={plan}` with initial `$state('pro')`"
			],
			"tags": [
				"radio-group",
				"radio",
				"cards",
				"plan",
				"disabled",
				"description"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"RadioGroup"
				],
				"aliases": [
					"plan picker",
					"selectable cards",
					"pricing choice"
				],
				"related": [
					"037",
					"036",
					"035"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"RadioGroup"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"RadioGroup"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/radio#cards",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "035",
			"group": "inputs",
			"page": "radio",
			"variant": "Disabled",
			"slug": "disabled",
			"title": "Disabled",
			"description": "Disable a single item, or the whole group.",
			"summary": "Two radio groups: one with a single disabled item and one fully disabled group.",
			"use": "Showing unavailable choices in a form: one option locked, or a whole question locked.",
			"spec": [
				"First group `items={yesNo}` with `orientation=\"horizontal\"` and `bind:value={answer}`",
				"`yesNo` has Yes, No, Maybe, and Maybe carries `disabled: true`",
				"Second group `items={fruits}` with `value=\"banana\"` and `disabled` on the whole group",
				"`fruits` has 3 items: Apple, Banana, Cherry"
			],
			"tags": [
				"radio-group",
				"radio",
				"disabled",
				"horizontal",
				"form"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"RadioGroup"
				],
				"aliases": [
					"inactive options"
				],
				"related": [
					"036",
					"037",
					"034"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"RadioGroup"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"RadioGroup"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/radio#disabled",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "036",
			"group": "inputs",
			"page": "radio",
			"variant": "Horizontal",
			"slug": "horizontal",
			"title": "Horizontal",
			"description": "orientation=&quot;horizontal&quot; lays the options out in a row.",
			"summary": "Radio group laid out in a row with Small, Medium and Large options.",
			"use": "Short choice lists of 2 to 4 options, such as a size picker, where a row fits the layout.",
			"spec": [
				"`<RadioGroup items={sizes}` with `orientation=\"horizontal\"`",
				"`sizes` has 3 items: `value: 'sm'`, `value: 'md'`, `value: 'lg'` labelled Small, Medium, Large",
				"`bind:value={size}` with initial `$state('md')`"
			],
			"tags": [
				"radio-group",
				"radio",
				"horizontal",
				"orientation",
				"size"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"RadioGroup"
				],
				"aliases": [
					"inline radio",
					"row"
				],
				"related": [
					"037",
					"035",
					"034"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"RadioGroup"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"RadioGroup"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/radio#horizontal",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "037",
			"group": "inputs",
			"page": "radio",
			"variant": "Vertical",
			"slug": "vertical",
			"title": "Vertical",
			"description": "The default layout.",
			"summary": "Default vertical radio group of three fruits with the selected value printed below.",
			"use": "Single choice from a short list in a form or settings panel.",
			"spec": [
				"`<RadioGroup items={fruits}` with `bind:value={fruit}` and no orientation prop",
				"`fruits` has 3 items: Apple, Banana, Cherry",
				"Initial value is `$state('apple')`",
				"Selected value is shown in `<code>{fruit}</code>` under the group"
			],
			"tags": [
				"radio-group",
				"radio",
				"vertical",
				"single-choice",
				"bind-value"
			],
			"shape": "square",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"RadioGroup"
				],
				"aliases": [
					"option list",
					"single choice"
				],
				"related": [
					"036",
					"035",
					"034"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"RadioGroup"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"RadioGroup"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/radio#vertical",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "038",
			"group": "inputs",
			"page": "segmented-control",
			"variant": "Default",
			"slug": "default",
			"title": "Default",
			"description": "Text items, and text items with icons.",
			"summary": "Two segmented controls: a text-only Week/Month/Year period and a List/Grid view switch with icons.",
			"use": "Switching a view mode or time range inline above a list, chart or dashboard.",
			"spec": [
				"Period control `aria-label=\"Period\"` with `bind:value={period}` and 3 items: Week, Month, Year",
				"Current value is shown as `value: {period}`",
				"View control `aria-label=\"View\"` with 2 items using `icon: LayoutList` and `icon: LayoutGrid`",
				"Icons come from `@lucide/svelte`"
			],
			"tags": [
				"segmented-control",
				"tabs",
				"icon",
				"view-switch",
				"period"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"SegmentedControl"
				],
				"aliases": [
					"tabs switch",
					"view toggle",
					"period selector"
				],
				"related": [
					"039",
					"060",
					"980"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"SegmentedControl"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"SegmentedControl"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/segmented-control#default",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "039",
			"group": "inputs",
			"page": "segmented-control",
			"variant": "Sizes",
			"slug": "small-full-width-disabled-item",
			"title": "Small, full width, disabled item",
			"description": "",
			"summary": "Small full-width segmented control with four items, one disabled.",
			"use": "Compact filter bar that should stretch to its container, such as a table toolbar.",
			"spec": [
				"`<SegmentedControl` with `size=\"sm\"`, `fullWidth` and `aria-label=\"Size\"`",
				"`bind:value={size}` with initial `$state('b')`",
				"4 items: Alpha, Beta, Gamma, Delta",
				"Gamma has `disabled: true`",
				"Wrapper `.wide` uses `max-width: 420px`"
			],
			"tags": [
				"segmented-control",
				"size",
				"sm",
				"full-width",
				"disabled"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "compact",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"SegmentedControl"
				],
				"aliases": [
					"full width switch",
					"disabled segment"
				],
				"related": [
					"038",
					"060",
					"980"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"SegmentedControl"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"SegmentedControl"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/segmented-control#small-full-width-disabled-item",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "040",
			"group": "inputs",
			"page": "select",
			"variant": "Basic",
			"slug": "basic",
			"title": "Basic",
			"description": "Controlled select with a pre-selected value.",
			"summary": "Select with five framework options and the chosen value printed below.",
			"use": "Picking one value from a known list in a form, such as a framework or category.",
			"spec": [
				"`<Select label=\"Framework\" options={frameworks}` with `bind:value={framework}`",
				"`frameworks` has 5 options: Svelte 5, React 19, Vue 3, SolidJS, Astro",
				"Initial value is `$state('svelte')`",
				"Selected value is shown in `<strong>{framework}</strong>`",
				"Wrapper `.col` uses `max-width: 320px`"
			],
			"tags": [
				"select",
				"dropdown",
				"options",
				"label",
				"bind-value"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"devtools"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Select"
				],
				"aliases": [
					"dropdown",
					"picker",
					"listbox"
				],
				"related": [
					"041",
					"042",
					"043"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Select"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Select"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/select#basic",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "041",
			"group": "inputs",
			"page": "select",
			"variant": "EmptyOption",
			"slug": "empty-value-option",
			"title": "Empty-value option",
			"description": "An option with value '' (such as 'All projects') is a real selection: the trigger shows its label, not the placeholder. Use it for filters instead of a sentinel value.",
			"summary": "Select whose first option has an empty value labelled All projects, with the raw value printed.",
			"use": "Filters where an empty value means no filter, such as All projects.",
			"spec": [
				"`<Select label=\"Project\" placeholder=\"Choose a project…\"` with `options={projects}`",
				"`projects` has 4 options: All projects with `value: ''`, Web app, API, Docs",
				"`bind:value={project}` with initial `$state('')`",
				"Current value is shown as `JSON.stringify(project)`"
			],
			"tags": [
				"select",
				"empty-option",
				"filter",
				"placeholder",
				"all"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Select"
				],
				"aliases": [
					"all option",
					"filter dropdown",
					"reset option"
				],
				"related": [
					"040",
					"042",
					"043"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Select"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Select"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/select#empty-value-option",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "042",
			"group": "inputs",
			"page": "select",
			"variant": "Placeholder",
			"slug": "placeholder",
			"title": "Placeholder",
			"description": "No initial value: the placeholder shows until the user picks an option.",
			"summary": "Select with no initial value that shows placeholder text until a country is chosen.",
			"use": "Required choice in a form where no default should be preselected.",
			"spec": [
				"`<Select label=\"Country\" placeholder=\"Choose a country…\"` with `options={countries}`",
				"`countries` has 5 options: Brazil, United States, Germany, Japan, Australia",
				"`bind:value={country}` with initial `$state('')`"
			],
			"tags": [
				"select",
				"placeholder",
				"country",
				"form",
				"options"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Select"
				],
				"aliases": [
					"country picker",
					"dropdown",
					"empty state"
				],
				"related": [
					"040",
					"041",
					"043"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Select"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Select"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/select#placeholder",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "043",
			"group": "inputs",
			"page": "select",
			"variant": "States",
			"slug": "states",
			"title": "States",
			"description": "Disabled options, description, error and a disabled select.",
			"summary": "Three selects showing a description, an error and a disabled state, with one disabled option.",
			"use": "Showing helper text, validation errors and locked fields on dropdowns in a form.",
			"spec": [
				"Plan select has `description=\"Enterprise is disabled.\"` and `bind:value={plan}`",
				"`plans` has Free, Pro, Enterprise, and Enterprise has `disabled: true`",
				"Region select has `error=\"Pick a region to continue.\"` and no bound value",
				"Size select has `disabled` with `bind:value={size}`",
				"3 selects stacked in `.col` with `max-width: 320px`"
			],
			"tags": [
				"select",
				"error",
				"disabled",
				"description",
				"validation"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Select"
				],
				"aliases": [
					"validation",
					"disabled option",
					"helper text"
				],
				"related": [
					"040",
					"042",
					"011"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Select"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Select"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/select#states",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "044",
			"group": "inputs",
			"page": "setting-item",
			"variant": "Basic",
			"slug": "switch-rows",
			"title": "Switch rows",
			"description": "",
			"summary": "Two setting rows, each with a label, a description and a Switch on the right.",
			"use": "Preference lists such as notification settings, one toggle per row.",
			"spec": [
				"`<SettingItem label=\"Email notifications\" description=\"Receive an email for every mention.\">`",
				"`<SettingItem label=\"Weekly digest\" description=\"One summary every Monday.\">`",
				"Each row wraps `<Switch bind:checked={email} />` or `<Switch bind:checked={digest} />` as children",
				"Initial state: `$state(true)` for email, `$state(false)` for digest"
			],
			"tags": [
				"setting-item",
				"switch",
				"settings",
				"preferences",
				"notifications"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"SettingItem",
					"Switch"
				],
				"aliases": [
					"preference row",
					"settings row",
					"toggle row"
				],
				"related": [
					"052",
					"050",
					"053"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"SettingItem",
				"Switch"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"SettingItem",
						"Switch"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/setting-item#switch-rows",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "045",
			"group": "inputs",
			"page": "slider",
			"variant": "Range",
			"slug": "range",
			"title": "Range",
			"description": "Bind a [min, max] tuple to values for two thumbs.",
			"summary": "Two-thumb range slider from 0 to 100 with the selected price range printed beside it.",
			"use": "Filtering by a numeric range such as price.",
			"spec": [
				"`<Slider bind:values={range} min={0} max={100} />`",
				"`range` is `$state<[number, number]>([20, 75])`",
				"Row shows a Price label and the value `${range[0]} – ${range[1]}`",
				"Wrapper `.row` uses `max-width: 480px`"
			],
			"tags": [
				"slider",
				"range",
				"two-thumb",
				"price",
				"filter"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"drag",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Slider"
				],
				"aliases": [
					"price range",
					"dual thumb",
					"range input"
				],
				"related": [
					"046",
					"047",
					"030"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Slider"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Slider"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/slider#range",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "046",
			"group": "inputs",
			"page": "slider",
			"variant": "Single",
			"slug": "single-value",
			"title": "Single value",
			"description": "Binds a plain number. Default range is 0 to 100.",
			"summary": "Two single-value sliders, Volume and Brightness, each with a live readout.",
			"use": "Adjusting a continuous setting such as volume or brightness.",
			"spec": [
				"Volume: `<Slider bind:value={volume} min={0} max={100} />` with initial `$state(60)`",
				"Brightness: `<Slider bind:value={brightness} min={0} max={100} />` with initial `$state(40)`",
				"Readouts are `{volume}` and `{brightness}%`",
				"Wrapper `.col` uses `max-width: 480px`"
			],
			"tags": [
				"slider",
				"single",
				"volume",
				"brightness",
				"bind-value"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"drag",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Slider"
				],
				"aliases": [
					"volume",
					"brightness",
					"range input"
				],
				"related": [
					"047",
					"045",
					"030"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Slider"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Slider"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/slider#single-value",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "047",
			"group": "inputs",
			"page": "slider",
			"variant": "StepDisabled",
			"slug": "step-and-disabled",
			"title": "Step and disabled",
			"description": "step={10} snaps to increments of 10.",
			"summary": "A slider that snaps in steps of 10 and a disabled slider fixed at 35.",
			"use": "Discrete values such as percentages in tens, or a locked setting.",
			"spec": [
				"Stepped slider: `<Slider bind:value={stepped} min={0} max={100} step={10} />` with initial `$state(50)`",
				"Disabled slider: `<Slider value={35} disabled />`",
				"Rows labelled Step 10 and Disabled with readouts `{stepped}` and 35",
				"Wrapper `.col` uses `max-width: 480px`"
			],
			"tags": [
				"slider",
				"step",
				"disabled",
				"discrete",
				"bind-value"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"drag",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Slider"
				],
				"aliases": [
					"stepped",
					"snap",
					"disabled"
				],
				"related": [
					"046",
					"045",
					"030"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Slider"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Slider"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/slider#step-and-disabled",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "048",
			"group": "inputs",
			"page": "swatch-group",
			"variant": "Custom",
			"slug": "custom-colors",
			"title": "Custom colors",
			"description": "Any CSS color, a small size and a disabled swatch.",
			"summary": "Swatch group with four custom colors where one swatch is disabled.",
			"use": "Letting users pick a label or tag color from a fixed palette.",
			"spec": [
				"`<SwatchGroup` with `size=\"sm\"` and `aria-label=\"Label color\"` and `bind:value={color}`",
				"Items set `value`, `label` and `color`: Blue `#2563eb`, Green `#16a34a`, Red `#dc2626`, Purple `#9333ea`",
				"Purple has `disabled: true`",
				"Initial value is `$state('#2563eb')`",
				"Current value is shown as `value: {color}`"
			],
			"tags": [
				"swatch-group",
				"color-picker",
				"custom",
				"palette",
				"disabled"
			],
			"shape": "square",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "compact",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"SwatchGroup"
				],
				"aliases": [
					"color picker",
					"label color",
					"palette"
				],
				"related": [
					"049",
					"034",
					"060"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"SwatchGroup"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"SwatchGroup"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/swatch-group#custom-colors",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "049",
			"group": "inputs",
			"page": "swatch-group",
			"variant": "Presets",
			"slug": "theme-presets",
			"title": "Theme presets",
			"description": "Swatches without a color paint from the preset named by their value.",
			"summary": "Swatch group of five theme presets: ocean, violet, emerald, rose, amber.",
			"use": "Choosing an accent theme preset in appearance settings.",
			"spec": [
				"`<SwatchGroup` with `aria-label=\"Accent\"` and `bind:value={preset}`",
				"5 items with only `value`: `{ value: 'ocean' }`, `{ value: 'violet' }`, `{ value: 'emerald' }`, `{ value: 'rose' }`, `{ value: 'amber' }`",
				"Initial value is `$state('ocean')`",
				"Current value is shown as `value: {preset}`"
			],
			"tags": [
				"swatch-group",
				"presets",
				"theme",
				"accent",
				"swatch"
			],
			"shape": "square",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "compact",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"SwatchGroup"
				],
				"aliases": [
					"accent color",
					"theme picker",
					"color chooser"
				],
				"related": [
					"048",
					"059",
					"034"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"SwatchGroup"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"SwatchGroup"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/swatch-group#theme-presets",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "050",
			"group": "inputs",
			"page": "switch",
			"variant": "Basic",
			"slug": "basic",
			"title": "Basic",
			"description": "Default off and on states.",
			"summary": "Two labelled switches, one starting off and one starting on.",
			"use": "Boolean settings that take effect immediately, such as notifications.",
			"spec": [
				"`<Switch label=\"Off by default\" bind:checked={darkMode} />` with `$state(false)`",
				"`<Switch label=\"On by default\" bind:checked={notifications} />` with `$state(true)`"
			],
			"tags": [
				"switch",
				"toggle",
				"label",
				"checked",
				"boolean"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Switch"
				],
				"aliases": [
					"toggle",
					"on off"
				],
				"related": [
					"051",
					"053",
					"052"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Switch"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Switch"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/switch#basic",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "051",
			"group": "inputs",
			"page": "switch",
			"variant": "Disabled",
			"slug": "disabled",
			"title": "Disabled",
			"description": "",
			"summary": "Two disabled switches, one off and one on.",
			"use": "Showing a setting that cannot be changed, for example a locked plan feature.",
			"spec": [
				"`<Switch disabled label=\"Disabled off\" />`",
				"`<Switch checked disabled label=\"Disabled on\" />`",
				"No bound state"
			],
			"tags": [
				"switch",
				"disabled",
				"checked",
				"toggle",
				"state"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Switch"
				],
				"aliases": [
					"inactive toggle"
				],
				"related": [
					"050",
					"053",
					"052"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Switch"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Switch"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/switch#disabled",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "052",
			"group": "inputs",
			"page": "switch",
			"variant": "SettingsList",
			"slug": "settings-list",
			"title": "Settings list",
			"description": "Common pattern: a row with title, helper text and a trailing switch.",
			"summary": "Settings list of three rows, each with a title, a subtitle and a Switch.",
			"use": "Account preferences screen with one toggle per setting.",
			"spec": [
				"3 rows in `.settings-list`: Email notifications, Dark mode, Usage analytics",
				"Each row has `settings-item__title` and `settings-item__sub` text",
				"Switches use `bind:checked={email}`, `bind:checked={dark}`, `bind:checked={analytics}`",
				"Each switch has an `aria-label` matching its row title, e.g. `aria-label=\"Dark mode\"`",
				"Initial state: email `$state(true)`, dark and analytics `$state(false)`"
			],
			"tags": [
				"switch",
				"settings-list",
				"preferences",
				"aria-label",
				"toggle"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Switch"
				],
				"aliases": [
					"preferences",
					"settings",
					"toggle list"
				],
				"related": [
					"044",
					"050",
					"053"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Switch"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Switch"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/switch#settings-list",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "053",
			"group": "inputs",
			"page": "switch",
			"variant": "WithoutLabel",
			"slug": "without-label",
			"title": "Without label",
			"description": "Provide aria-label when no visible label is rendered.",
			"summary": "Two switches with no visible label, named only through aria-label.",
			"use": "Compact toggles in table rows or cards where the context already names the setting.",
			"spec": [
				"`<Switch bind:checked={analytics} aria-label=\"Analytics\" />` with `$state(false)`",
				"`<Switch checked aria-label=\"Always on\" />` with no binding",
				"No `label` prop is passed"
			],
			"tags": [
				"switch",
				"aria-label",
				"without-label",
				"toggle",
				"a11y"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Switch"
				],
				"aliases": [
					"unlabelled",
					"aria label only",
					"toggle"
				],
				"related": [
					"050",
					"051",
					"052"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Switch"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Switch"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/switch#without-label",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "054",
			"group": "inputs",
			"page": "text-area",
			"variant": "Basic",
			"slug": "basic",
			"title": "Basic",
			"description": "Empty, with a placeholder, and pre-filled.",
			"summary": "Three text areas: empty, with a placeholder, and with initial content.",
			"use": "Free-form multi-line input such as a message, notes or a description.",
			"spec": [
				"`<TextArea label=\"Message\" bind:value={message} />` starts empty",
				"`<TextArea label=\"Notes\" placeholder=\"Write something…\" bind:value={notes} />`",
				"`<TextArea label=\"Description\" bind:value={description} />` starts as `Some initial content here.`"
			],
			"tags": [
				"text-area",
				"textarea",
				"placeholder",
				"label",
				"bind-value"
			],
			"shape": "tall",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"TextArea"
				],
				"aliases": [
					"multiline",
					"textarea",
					"message box"
				],
				"related": [
					"055",
					"056",
					"064"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"TextArea"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"TextArea"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/text-area#basic",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "055",
			"group": "inputs",
			"page": "text-area",
			"variant": "States",
			"slug": "states",
			"title": "States",
			"description": "Helper text, error, required, read-only, disabled and resize=&quot;none&quot;.",
			"summary": "Six text areas showing description, error, required, read-only, disabled and fixed-size states.",
			"use": "Reference for every validation and availability state of a multi-line field.",
			"spec": [
				"Feedback has `description=\"Max 500 characters.\"`",
				"Bio has `error=\"Bio must be at least 20 characters.\"` and `description=\"Tell us about yourself.\"`",
				"Summary has `required`",
				"Read-only content uses `readonly`; Disabled content uses `disabled`, both `value=\"Cannot be edited.\"`",
				"Fixed uses `resize=\"none\"` and `rows={3}`"
			],
			"tags": [
				"text-area",
				"textarea",
				"error",
				"required",
				"readonly",
				"disabled"
			],
			"shape": "tall",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"TextArea"
				],
				"aliases": [
					"validation",
					"readonly",
					"resize"
				],
				"related": [
					"054",
					"058",
					"064"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"TextArea"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"TextArea"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/text-area#states",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "056",
			"group": "inputs",
			"page": "text-field",
			"variant": "Default",
			"slug": "default",
			"title": "Default",
			"description": "Basic text inputs with a label.",
			"summary": "Two basic text fields: a full name and an email with type email.",
			"use": "Standard single-line inputs in a signup or profile form.",
			"spec": [
				"`<TextField label=\"Full name\" placeholder=\"Jane Smith\" bind:value={name} />`",
				"`<TextField label=\"Email\" placeholder=\"you@example.com\" type=\"email\" bind:value={email} />`",
				"Both values start as `$state('')`"
			],
			"tags": [
				"text-field",
				"input",
				"label",
				"placeholder",
				"email"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"TextField"
				],
				"aliases": [
					"input",
					"form field"
				],
				"related": [
					"058",
					"057",
					"982"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"TextField"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"TextField"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/text-field#default",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "057",
			"group": "inputs",
			"page": "text-field",
			"variant": "Icons",
			"slug": "with-icons",
			"title": "With icons",
			"description": "leading and trailing snippets. Interactive trailing content must be a real button with its own label; for a password reveal use revealable.",
			"summary": "Search field with a leading icon and a revealable password field.",
			"use": "Search boxes and password inputs that need an inline icon or action.",
			"spec": [
				"Search field uses `{#snippet leading()}` with `<Search size={16} stroke-width={2} />`",
				"Password field is `type=\"password\"` with `revealable`: the component renders the show/hide eye button",
				"No local reveal state in the demo"
			],
			"tags": [
				"text-field",
				"icon",
				"leading",
				"trailing",
				"password",
				"search",
				"snippet"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"keyboard",
					"press"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"TextField"
				],
				"aliases": [
					"search input",
					"show password",
					"leading icon"
				],
				"related": [
					"500",
					"056",
					"982"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"TextField"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"TextField"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/text-field#with-icons",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "058",
			"group": "inputs",
			"page": "text-field",
			"variant": "States",
			"slug": "states",
			"title": "States",
			"description": "Helper text, error, required, read-only, disabled and the small size.",
			"summary": "Six text fields showing description, error, required, read-only, disabled and small size.",
			"use": "Reference for validation and availability states of a single-line input.",
			"spec": [
				"Username has `description=\"3–20 characters, letters and underscores only.\"`",
				"Email has `error=\"Please enter a valid email address.\"` and `bind:value={wrong}`",
				"Company has `required`",
				"Read-only field uses `readonly` and Disabled field uses `disabled`, both `value=\"Cannot edit this\"`",
				"Small field uses `size=\"sm\"`"
			],
			"tags": [
				"text-field",
				"error",
				"required",
				"readonly",
				"disabled",
				"size",
				"description"
			],
			"shape": "tall",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"TextField"
				],
				"aliases": [
					"validation",
					"helper text",
					"readonly",
					"disabled"
				],
				"related": [
					"056",
					"057",
					"055"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"TextField"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"TextField"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/text-field#states",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "059",
			"group": "inputs",
			"page": "theme-toggle",
			"variant": "Basic",
			"slug": "basic",
			"title": "Basic",
			"description": "Click it: the whole site flips between light and dark.",
			"summary": "Theme toggle button rendered inside a rail container.",
			"use": "Letting users switch between light and dark appearance from a sidebar or header.",
			"spec": [
				"`<ThemeToggle />` with no props",
				"Wrapped in `<div class=\"rail\">`"
			],
			"tags": [
				"theme-toggle",
				"dark-mode",
				"theme",
				"appearance",
				"rail"
			],
			"shape": "square",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard",
					"hover"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"ThemeToggle"
				],
				"aliases": [
					"dark mode",
					"light mode",
					"color scheme"
				],
				"related": [
					"049",
					"050",
					"038"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"ThemeToggle"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"ThemeToggle"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/theme-toggle#basic",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "060",
			"group": "inputs",
			"page": "toggle-group",
			"variant": "Selection",
			"slug": "single-and-multiple",
			"title": "Single and multiple",
			"description": "type=&quot;single&quot; binds a string and can be cleared. type=&quot;multiple&quot; binds a string array. required keeps one item pressed.",
			"summary": "Single-select alignment group, a required text filter and a multi-select formatting group.",
			"use": "Editor toolbars with exclusive options like alignment and combinable options like bold or italic.",
			"spec": [
				"Alignment: `type=\"single\"` with `aria-label=\"Text alignment\"` and `bind:value={align}`",
				"Alignment items: AlignLeft, AlignCenter, AlignRight with `'aria-label': 'Align left'` etc.",
				"Filter: `type=\"single\"` with `required`, `aria-label=\"Filter\"`, `bind:value={filter}` (starts `'all'`), items All, Open, Closed; pressing the active item keeps it",
				"Formatting: `type=\"multiple\"` with `aria-label=\"Text formatting\"` and `bind:value={format}`",
				"`format` is `$state<string[]>(['bold'])` with items Bold, Italic, Underline",
				"Values are printed as `value: {align || '–'}` and `JSON.stringify(format)`"
			],
			"tags": [
				"toggle-group",
				"single",
				"required",
				"multiple",
				"icon",
				"toolbar",
				"aria-label"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"media"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"ToggleGroup"
				],
				"aliases": [
					"text formatting",
					"alignment",
					"button group"
				],
				"related": [
					"061",
					"038",
					"980"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"ToggleGroup"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"ToggleGroup"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/toggle-group#single-and-multiple",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "061",
			"group": "inputs",
			"page": "toggle-group",
			"variant": "Variants",
			"slug": "variants-and-orientation",
			"title": "Variants and orientation",
			"description": "outlined and ghost variants, sizes, a disabled item and a vertical layout.",
			"summary": "Three toggle groups sharing one value: outlined, ghost and vertical.",
			"use": "Choosing a view such as list, grid or board with a button-style group.",
			"spec": [
				"Outlined group: `variant=\"outlined\"`, `size=\"md\"`, `aria-label=\"Outlined\"`",
				"Outlined items: List, Grid, Board, and Board has `disabled: true`",
				"Ghost group: `variant=\"ghost\"`, `size=\"sm\"`, `aria-label=\"Ghost\"`",
				"Vertical group: `orientation=\"vertical\"`, `aria-label=\"Vertical\"`",
				"All 3 use `bind:value={view}` with initial `$state('list')`"
			],
			"tags": [
				"toggle-group",
				"variant",
				"outlined",
				"ghost",
				"vertical",
				"size"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"ToggleGroup"
				],
				"aliases": [
					"vertical",
					"outlined",
					"ghost"
				],
				"related": [
					"060",
					"038",
					"980"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"ToggleGroup"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"ToggleGroup"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/toggle-group#variants-and-orientation",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "062",
			"group": "inputs",
			"page": "use-form",
			"variant": "NoSchema",
			"slug": "no-schema",
			"title": "No schema",
			"description": "Manual validation on submit. touch() and set() drive the per-field state.",
			"summary": "Form built with useForm and a hand-written validate function, with Validate and Reset buttons.",
			"use": "Small forms where validation runs on demand without a schema.",
			"spec": [
				"`const form = useForm({ name: '', email: '' })`",
				"TextFields use `value={form.fields.name.value}`, `error={form.fields.name.error}`, `oninput={(v) => form.set('name', v)}`, `onblur={() => form.touch('name')}`",
				"Same wiring for `email` with `type=\"email\"`",
				"`validate()` sets `form.fields[k].touched` and `form.fields[k].error` manually",
				"Buttons: Validate with `onclick={validate}`, Reset with `variant=\"outlined\"` calling `form.reset()`",
				"`{#if form.dirty}` shows the hint `dirty: values changed from initial`"
			],
			"tags": [
				"use-form",
				"form",
				"validation",
				"text-field",
				"dirty",
				"reset"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"keyboard",
					"press"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Button",
					"TextField"
				],
				"aliases": [
					"form validation",
					"dirty state"
				],
				"related": [
					"064",
					"063",
					"056"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Button",
				"TextField"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Button",
						"TextField",
						"useForm"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/use-form#no-schema",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "063",
			"group": "inputs",
			"page": "use-form",
			"variant": "Submit",
			"slug": "submit-state",
			"title": "Submit state",
			"description": "validate() gates submission, submitting drives the button loading state, and reset() clears everything after success.",
			"summary": "Form with a schema that simulates a 1.2 second submit, then shows a success message and resets.",
			"use": "Create or edit forms that show a loading state while saving.",
			"spec": [
				"`useForm(` with `schema: (data) => {` requires a non-empty title",
				"`submit()` calls `form.validate()`, sets `form.submitting = true`, waits `setTimeout(r, 1200)`, then `form.reset()`",
				"TextField Title and TextArea Notes use `disabled={form.submitting}`",
				"Submit button uses `loading={form.submitting}`, label is `{form.submitting ? 'Saving…' : 'Submit'}`",
				"Success text renders in `<p class=\"hint hint--success\" role=\"status\">`",
				"Reset button has `variant=\"outlined\"` and clears `result`"
			],
			"tags": [
				"use-form",
				"submit",
				"loading",
				"schema",
				"validation",
				"async"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"keyboard",
					"press"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Button",
					"TextArea",
					"TextField"
				],
				"aliases": [
					"async submit",
					"loading",
					"success message"
				],
				"related": [
					"062",
					"064",
					"003"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Button",
				"TextArea",
				"TextField"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Button",
						"TextArea",
						"TextField",
						"useForm"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/use-form#submit-state",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "064",
			"group": "inputs",
			"page": "use-form",
			"variant": "WithSchema",
			"slug": "with-schema",
			"title": "With schema",
			"description": "A plain-function schema runs on every keystroke once a field is touched.",
			"summary": "Form using a schema for username length and bio length, with a live character count.",
			"use": "Forms with several validation rules that run all at once.",
			"spec": [
				"`useForm(` with `schema: (data) => {` returns `errs`",
				"Username rules: `data.username.length < 3` and `data.username.length > 20`",
				"Bio rule: `data.bio.length > 160` with `Bio must be 160 characters or fewer.`",
				"Bio TextArea shows `description=\"{form.fields.bio.value.length}/160\"`",
				"Buttons: `Validate all` calls `form.validate()`, Reset calls `form.reset()`",
				"Footer prints `valid: {form.valid}`"
			],
			"tags": [
				"use-form",
				"schema",
				"validation",
				"text-area",
				"character-count"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"keyboard",
					"press"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Button",
					"TextArea",
					"TextField"
				],
				"aliases": [
					"schema validation",
					"character count"
				],
				"related": [
					"062",
					"063",
					"055"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Button",
				"TextArea",
				"TextField"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Button",
						"TextArea",
						"TextField",
						"useForm"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/use-form#with-schema",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "065",
			"group": "surfaces",
			"page": "accordion",
			"variant": "Controlled",
			"slug": "controlled",
			"title": "Controlled",
			"description": "",
			"summary": "A single-open Accordion with its open item bound to state and the current value printed below.",
			"use": "FAQ or settings sections where the app needs to read or set which item is open.",
			"spec": [
				"`<Accordion type=\"single\" bind:value>`",
				"State: `let value = $state<string | string[] | undefined>('c1')` opens the first item initially",
				"2 items: `<AccordionItem value=\"c1\" title=\"First section\">` and `<AccordionItem value=\"c2\" title=\"Second section\">`",
				"`Open item: {Array.isArray(value) ? value.join(', ') : (value ?? 'none')}` prints the bound value",
				"Wrapped in `.wrap` with `max-width: 560px`"
			],
			"tags": [
				"accordion",
				"accordion-item",
				"controlled",
				"bind",
				"single",
				"faq"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "surface",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Accordion",
					"AccordionItem"
				],
				"aliases": [
					"bound state",
					"controlled disclosure"
				],
				"related": [
					"067",
					"066",
					"074"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Accordion",
				"AccordionItem"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Accordion",
						"AccordionItem"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/surfaces/accordion#controlled",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "066",
			"group": "surfaces",
			"page": "accordion",
			"variant": "Multiple",
			"slug": "multiple",
			"title": "Multiple",
			"description": "",
			"summary": "An Accordion that lets several of its three items stay open at once.",
			"use": "Reference or feature lists where users compare multiple sections without the others collapsing.",
			"spec": [
				"`<Accordion type=\"multiple\">`",
				"3 items: `<AccordionItem value=\"b1\" title=\"Svelte 5 runes\">`, `value=\"b2\" title=\"Headless primitives\"`, `value=\"b3\" title=\"CSS custom properties\"`",
				"Item content is plain text passed as children",
				"The accordion is uncontrolled, nothing is bound",
				"Wrapped in `.wrap` with `max-width: 560px`"
			],
			"tags": [
				"accordion",
				"accordion-item",
				"multiple",
				"expand",
				"disclosure"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "surface",
				"industry": [
					"devtools"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Accordion",
					"AccordionItem"
				],
				"aliases": [
					"multi open",
					"expand several"
				],
				"related": [
					"067",
					"065",
					"073"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Accordion",
				"AccordionItem"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Accordion",
						"AccordionItem"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/surfaces/accordion#multiple",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "067",
			"group": "surfaces",
			"page": "accordion",
			"variant": "Single",
			"slug": "single",
			"title": "Single",
			"description": "",
			"summary": "A single-open Accordion with three FAQ questions about theming, where opening one closes the others.",
			"use": "FAQ sections where only one answer should be visible at a time.",
			"spec": [
				"`<Accordion type=\"single\">`",
				"3 items: `<AccordionItem value=\"a1\" title=\"What is a surface style?\">`, `value=\"a2\"` and `value=\"a3\"`",
				"Item titles: What is a surface style?, Do I need to change components to restyle the app?, Can I nest a Surface inside a Card?",
				"The accordion is uncontrolled, nothing is bound",
				"Wrapped in `.wrap` with `max-width: 560px`"
			],
			"tags": [
				"accordion",
				"accordion-item",
				"single",
				"faq",
				"disclosure"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "surface",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Accordion",
					"AccordionItem"
				],
				"aliases": [
					"faq",
					"one at a time",
					"collapse panel"
				],
				"related": [
					"066",
					"065",
					"073"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Accordion",
				"AccordionItem"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Accordion",
						"AccordionItem"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/surfaces/accordion#single",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "068",
			"group": "surfaces",
			"page": "card",
			"variant": "Accents",
			"slug": "tone-and-glow",
			"title": "Tone and glow",
			"description": "",
			"summary": "Two Cards side by side: one with a brand tint and one with a brand glow, each with a title and one line of text.",
			"use": "Highlighting a featured or selected card without changing its content layout.",
			"spec": [
				"`<Card tone=\"brand\" class=\"accent\">` titled Tinted",
				"`<Card glow class=\"accent\">` titled Glowing",
				"Both cards share `class=\"accent\"` styled with `flex: 1` and `min-width: 200px`",
				"Card content is a `.title` paragraph and a `.text` paragraph"
			],
			"tags": [
				"card",
				"tone",
				"brand",
				"glow",
				"accent"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "surface",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "grid",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Card"
				],
				"aliases": [
					"highlight card",
					"featured card",
					"halo"
				],
				"related": [
					"069",
					"076",
					"079"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Card"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Card"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/surfaces/card#tone-and-glow",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "069",
			"group": "surfaces",
			"page": "card",
			"variant": "ContentCard",
			"slug": "content-card",
			"title": "Content card",
			"description": "",
			"summary": "A single Card with a Featured eyebrow, a heading, a description and an Explore materials link.",
			"use": "Promo or feature cards in a landing page or dashboard that lead to a detail page.",
			"spec": [
				"`<Card class=\"content-card\">` with `max-width: 360px`",
				"Body is a `<div class=\"body\">` with an eyebrow paragraph, `<h3>Surface materials</h3>`, a description paragraph and a link",
				"Link is `<a href=\"/docs/foundation/materials/\">Explore materials →</a>`",
				"The card itself has no `href`, only the inner anchor is a link"
			],
			"tags": [
				"card",
				"content-card",
				"featured",
				"link",
				"promo"
			],
			"shape": "square",
			"index": {
				"kind": "component",
				"subtype": "surface",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"hover",
					"press",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Card"
				],
				"aliases": [
					"promo card",
					"feature card",
					"teaser"
				],
				"related": [
					"071",
					"068",
					"070"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Card"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Card"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/surfaces/card#content-card",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "070",
			"group": "surfaces",
			"page": "card",
			"variant": "HeaderActions",
			"slug": "header-and-actions",
			"title": "Header and actions",
			"description": "",
			"summary": "A Card with a built-in Team members header and an Invite button supplied through a headerActions snippet.",
			"use": "Panels whose header needs a title and an action, such as team, billing or settings sections.",
			"spec": [
				"`<Card title=\"Team members\" class=\"titled\">` with `max-width: 420px`",
				"`{#snippet headerActions()}` renders `<Button size=\"sm\" variant=\"outlined\">Invite</Button>`",
				"Body is one paragraph explaining `title` and `headerActions`"
			],
			"tags": [
				"card",
				"header-actions",
				"title",
				"snippet",
				"button"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "surface",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Card",
					"Button"
				],
				"aliases": [
					"panel header",
					"card toolbar",
					"titled panel"
				],
				"related": [
					"069",
					"482",
					"072"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Card",
				"Button"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Card",
						"Button"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/surfaces/card#header-and-actions",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "071",
			"group": "surfaces",
			"page": "card",
			"variant": "Link",
			"slug": "link-card",
			"title": "Link card",
			"description": "",
			"summary": "A solid Card that is a link as a whole, with a Surface heading and a one line description.",
			"use": "Clickable cards that navigate to a detail page, such as index tiles or related-article links.",
			"spec": [
				"`<Card href=\"/docs/surfaces/surface/\" title=\"Surface\" headingLevel={3} material=\"solid\" elevation={2}>`",
				"`href` makes the whole card the link",
				"`headingLevel={3}` sets the title heading level",
				"Body is plain text: The one painted container every card is built on"
			],
			"tags": [
				"card",
				"link",
				"href",
				"heading-level",
				"elevation",
				"solid"
			],
			"shape": "square",
			"index": {
				"kind": "component",
				"subtype": "surface",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"hover",
					"press",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Card"
				],
				"aliases": [
					"clickable card",
					"link tile",
					"navigation card"
				],
				"related": [
					"069",
					"077",
					"070"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Card"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Card"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/surfaces/card#link-card",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "072",
			"group": "surfaces",
			"page": "card",
			"variant": "Stats",
			"slug": "stat-cards",
			"title": "Stat cards",
			"description": "",
			"summary": "Three stat Cards in a flex row, each with a label, a large value and a delta line.",
			"use": "Dashboard KPI strips showing a metric, its value and a short qualifier.",
			"spec": [
				"`{#each stats as s}` renders `<Card class=\"stat\">` once per stat",
				"3 stats with `label`, `value`, `delta`: Components 70+, Presets 8, Tokens 80+",
				"Each card has three paragraphs: `{s.label}`, `{s.value}` and `{s.delta}`",
				"`.stat` uses `min-width: 140px` inside a wrapping flex `.grid`"
			],
			"tags": [
				"card",
				"stats",
				"kpi",
				"dashboard",
				"metrics"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "surface",
				"industry": [
					"devtools"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "grid",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Card"
				],
				"aliases": [
					"metric tiles",
					"stat strip",
					"numbers row"
				],
				"related": [
					"642",
					"178",
					"175"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Card"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Card"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/surfaces/card#stat-cards",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "073",
			"group": "surfaces",
			"page": "collapsible",
			"variant": "Default",
			"slug": "default-closed",
			"title": "Default (closed)",
			"description": "",
			"summary": "Three independent Collapsible FAQ panels stacked with a small gap, all closed initially.",
			"use": "Short FAQ or help blocks where each answer expands on its own.",
			"spec": [
				"`<Stack gap=\"2\" class=\"collapsible-faq\">` with `max-width: 560px`",
				"3 `<Collapsible` items with a `title`: What is a surface style?, How do presets work?, Is dark mode automatic?",
				"Each body is a `<p>` child, two of them include a `<code>` token",
				"Nothing is bound to the open state, each panel manages its own"
			],
			"tags": [
				"collapsible",
				"faq",
				"stack",
				"disclosure",
				"expand",
				"title"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "surface",
				"industry": [
					"education"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Collapsible",
					"Stack"
				],
				"aliases": [
					"disclosure",
					"expand collapse",
					"help blocks"
				],
				"related": [
					"074",
					"067",
					"066"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Collapsible",
				"Stack"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Collapsible",
						"Stack"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/surfaces/collapsible#default-closed",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "074",
			"group": "surfaces",
			"page": "collapsible",
			"variant": "Open",
			"slug": "open-by-default",
			"title": "Open by default",
			"description": "",
			"summary": "A Collapsible that starts expanded with its open state bound and printed below it.",
			"use": "Panels that should be visible on first load, or whose open state the app tracks.",
			"spec": [
				"`<Collapsible title=\"Expanded on mount\" bind:open>`",
				"State: `let open = $state(true)` starts the panel open",
				"`<p class=\"state\">open = {open}</p>` prints the bound value",
				"Wrapped in `.wrap` with `max-width: 560px`"
			],
			"tags": [
				"collapsible",
				"open",
				"bind",
				"expanded",
				"controlled"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "surface",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Collapsible"
				],
				"aliases": [
					"open by default",
					"expanded panel",
					"bound open"
				],
				"related": [
					"073",
					"065",
					"067"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Collapsible"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Collapsible"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/surfaces/collapsible#open-by-default",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "075",
			"group": "surfaces",
			"page": "liquid-glass",
			"variant": "Basic",
			"slug": "refraction-layer",
			"title": "Refraction layer",
			"description": "",
			"summary": "A LiquidGlass refraction layer using the regular optics preset behind a line of text in a padded frame.",
			"use": "Adding a real refraction effect to a hero or overlay frame, using a preset from GLASS_OPTICS.",
			"spec": [
				"`<LiquidGlass optics={GLASS_OPTICS.regular} />`",
				"Imports `LiquidGlass` and `GLASS_OPTICS` from `@codeatlasdev/ui`",
				"Sits in `<div class=\"frame\">` with `position: relative` and `overflow: hidden`",
				"Foreground text: Refraction layer behind this text."
			],
			"tags": [
				"liquid-glass",
				"glass-optics",
				"refraction",
				"glass",
				"material",
				"preset"
			],
			"shape": "square",
			"index": {
				"kind": "component",
				"subtype": "surface",
				"industry": [
					"general"
				],
				"style": [
					"liquid",
					"glassmorphism"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "overlay",
				"colorMode": "both",
				"density": "airy",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"LiquidGlass"
				],
				"aliases": [
					"refraction",
					"lens",
					"frosted lens"
				],
				"related": [
					"078",
					"543",
					"076"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"LiquidGlass"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"LiquidGlass",
						"GLASS_OPTICS"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/surfaces/liquid-glass#refraction-layer",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "076",
			"group": "surfaces",
			"page": "surface",
			"variant": "Elevation",
			"slug": "elevation",
			"title": "Elevation",
			"description": "",
			"summary": "Six solid Surface tiles showing elevation levels 0 to 5 in a wrapping row.",
			"use": "Choosing how much depth a card, panel or popover needs.",
			"spec": [
				"`const levels = [0, 1, 2, 3, 4, 5] as const` rendered with `{#each levels as elevation (elevation)}`",
				"`<Surface material=\"solid\" {elevation} p=\"4\" class=\"tile\">`",
				"Each tile prints Elevation 0 to Elevation 5 in a `.name` paragraph",
				"`.tile` uses `min-width: 7rem` in a wrapping flex `.row`"
			],
			"tags": [
				"surface",
				"elevation",
				"shadow",
				"depth",
				"solid",
				"levels"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "surface",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "grid",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Surface"
				],
				"aliases": [
					"shadow depth",
					"z level",
					"drop shadow scale"
				],
				"related": [
					"078",
					"079",
					"077"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Surface"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Surface"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/surfaces/surface#elevation",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "077",
			"group": "surfaces",
			"page": "surface",
			"variant": "Interactive",
			"slug": "interactive",
			"title": "Interactive",
			"description": "",
			"summary": "A Surface rendered as a button that counts how many times it was pressed.",
			"use": "Custom clickable tiles or cards that need hover and press feedback while staying a native button.",
			"spec": [
				"`<Surface` with `as=\"button\"`, `type=\"button\"` and `interactive`",
				"Styling props: `elevation={2}`, `material=\"solid\"`, `radius=\"md\"`, `p=\"4\"`",
				"Handler: `onclick={() => count++}`",
				"State: `let count = $state(0)`",
				"Label: `Pressed {count} times`"
			],
			"tags": [
				"surface",
				"interactive",
				"button",
				"as",
				"onclick",
				"counter"
			],
			"shape": "square",
			"index": {
				"kind": "component",
				"subtype": "surface",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"hover",
					"press",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Surface"
				],
				"aliases": [
					"clickable tile",
					"press feedback",
					"button surface"
				],
				"related": [
					"071",
					"076",
					"079"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Surface"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Surface"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/surfaces/surface#interactive",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "078",
			"group": "surfaces",
			"page": "surface",
			"variant": "Materials",
			"slug": "materials",
			"title": "Materials",
			"description": "",
			"summary": "Five Surface tiles, one per material, over a brand to info to success gradient so the translucency is visible.",
			"use": "Comparing auto, solid, frosted, glass and liquid materials before picking one for a card or panel.",
			"spec": [
				"`const materials = ['auto', 'solid', 'frosted', 'glass', 'liquid'] as const`",
				"`<Surface {material} elevation={3} p=\"4\" class=\"tile\">` rendered with `{#each materials as material (material)}`",
				"Each tile prints its material name in a `.name` paragraph",
				"`.backdrop` paints `linear-gradient(135deg` behind the tiles"
			],
			"tags": [
				"surface",
				"material",
				"glass",
				"frosted",
				"liquid",
				"solid"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "surface",
				"industry": [
					"general"
				],
				"style": [
					"glassmorphism",
					"aurora"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "grid",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Surface"
				],
				"aliases": [
					"translucency",
					"blur",
					"glass vs solid"
				],
				"related": [
					"075",
					"076",
					"543"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Surface"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Surface"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/surfaces/surface#materials",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "079",
			"group": "surfaces",
			"page": "surface",
			"variant": "ToneVariant",
			"slug": "tone-and-variant",
			"title": "Tone and variant",
			"description": "",
			"summary": "An 18 tile grid of solid Surfaces crossing six tones with three variants.",
			"use": "Picking the tone and variant of a surface for status, brand or neutral emphasis.",
			"spec": [
				"`const tones = ['neutral', 'brand', 'success', 'warning', 'error', 'info'] as const`",
				"`const variants = ['filled', 'outlined', 'ghost'] as const`",
				"`<Surface material=\"solid\" elevation={1} {tone} {variant} p=\"3\" class=\"tile\">` in nested `{#each variants as variant (variant)}` and `{#each tones as tone (tone)}` loops",
				"Each tile prints its tone and variant name"
			],
			"tags": [
				"surface",
				"tone",
				"variant",
				"filled",
				"outlined",
				"ghost"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "surface",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "grid",
				"colorMode": "both",
				"density": "compact",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Surface"
				],
				"aliases": [
					"status colors",
					"semantic tint",
					"emphasis variants"
				],
				"related": [
					"076",
					"078",
					"068"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Surface"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Surface"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/surfaces/surface#tone-and-variant",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "080",
			"group": "feedback",
			"page": "alert-dialog",
			"variant": "Async",
			"slug": "async-onconfirm",
			"title": "Async onconfirm",
			"description": "While the promise is pending the confirm button shows a spinner, Cancel is disabled and Escape is ignored. The dialog closes when it resolves and stays open if it throws.",
			"summary": "A destructive alert dialog whose async confirm handler waits 1.5 seconds before an Item removed note appears.",
			"use": "Confirming a delete that calls the server, where the dialog waits for the request before closing.",
			"spec": [
				"`<AlertDialog` with `bind:open`, `title=\"Remove item?\"` and `confirmLabel=\"Remove\"`",
				"`destructive` flag set on the dialog",
				"`onconfirm={removeItem}` is an async function that awaits `wait(1500)` then sets `done = true`",
				"Trigger is `<Button variant=\"destructive\"` labelled Remove item (1.5s)",
				"Result note uses `aria-live=\"polite\"` and shows when `{#if done}`"
			],
			"tags": [
				"alert-dialog",
				"destructive",
				"async",
				"confirm",
				"delete",
				"dialog"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "feedback",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "overlay",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"AlertDialog",
					"Button"
				],
				"aliases": [
					"async confirm",
					"pending action"
				],
				"related": [
					"081",
					"082",
					"462"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"AlertDialog",
				"Button"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"AlertDialog",
						"Button"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/feedback/alert-dialog#async-onconfirm",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "081",
			"group": "feedback",
			"page": "alert-dialog",
			"variant": "Basic",
			"slug": "basic-and-destructive",
			"title": "Basic and destructive",
			"description": "Confirm and cancel, with the destructive variant for irreversible actions.",
			"summary": "Two alert dialogs, a plain sign out confirmation and a destructive project delete, with an event log below.",
			"use": "Asking the user to confirm an interrupting action such as signing out or deleting a project.",
			"spec": [
				"Sign out dialog: `bind:open={signOutOpen}`, `confirmLabel=\"Sign out\"`, `onconfirm` and `oncancel` handlers",
				"Delete dialog: `bind:open={deleteOpen}`, `confirmLabel=\"Delete\"`, `destructive` flag, only `onconfirm`",
				"Triggers are `<Button variant=\"outlined\"` and `<Button variant=\"destructive\"` with `{#snippet leading()}` icons `<LogOut size={14} />` and `<Trash2 size={14} />`",
				"Handlers call `push('Signed out')`, `push('Sign out cancelled')` and `push('Project deleted')`",
				"Log keeps the latest four entries with `slice(0, 4)` in a `<ul class=\"log\" aria-live=\"polite\">`"
			],
			"tags": [
				"alert-dialog",
				"confirm",
				"destructive",
				"sign-out",
				"delete",
				"dialog"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "feedback",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "overlay",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"AlertDialog",
					"Button"
				],
				"aliases": [
					"confirm dialog",
					"destructive confirm"
				],
				"related": [
					"080",
					"084",
					"462"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"AlertDialog",
				"Button"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"AlertDialog",
						"Button"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/feedback/alert-dialog#basic-and-destructive",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "082",
			"group": "feedback",
			"page": "alert-dialog",
			"variant": "Controlled",
			"slug": "controlled-pending",
			"title": "Controlled pending",
			"description": "Pass pending when the loading state lives outside, for example a mutation from your query client.",
			"summary": "An alert dialog driven by parent state: the pending prop is set for 1.5 seconds before the dialog closes itself.",
			"use": "Publishing or saving flows where the confirm button must show progress and the parent decides when to close.",
			"spec": [
				"`<AlertDialog bind:open title=\"Publish changes?\" confirmLabel=\"Publish\"` with no description",
				"`{pending}` shorthand passes `let pending = $state(false)` to the dialog",
				"`onconfirm={publish}` sets `pending = true`, awaits 1500 ms, then sets `pending = false` and `open = false`",
				"Trigger is `<Button variant=\"outlined\"` labelled Open controlled"
			],
			"tags": [
				"alert-dialog",
				"controlled",
				"pending",
				"async",
				"publish"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "feedback",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "overlay",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"AlertDialog",
					"Button"
				],
				"aliases": [
					"pending state",
					"busy confirm"
				],
				"related": [
					"080",
					"081",
					"462"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"AlertDialog",
				"Button"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"AlertDialog",
						"Button"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/feedback/alert-dialog#controlled-pending",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "083",
			"group": "feedback",
			"page": "dialog",
			"variant": "Chromeless",
			"slug": "chromeless",
			"title": "Chromeless",
			"description": "No header, description or actions, and the body has no padding. The title becomes the visually hidden accessible name.",
			"summary": "A medium dialog with the chromeless prop, so the content fills the panel edge to edge with no header or padding.",
			"use": "Previews and media viewers where the content supplies its own layout and close control.",
			"spec": [
				"`<Dialog bind:open title=\"Preview\" size=\"md\" chromeless>`",
				"Body is a `<div class=\"media\">` with a paragraph and a `<Button variant=\"filled\"` labelled Close",
				"Close button runs `onclick={() => (open = false)}`",
				"Trigger is `<Button variant=\"outlined\"` labelled Open chromeless"
			],
			"tags": [
				"dialog",
				"chromeless",
				"modal",
				"preview",
				"media"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "feedback",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "overlay",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Dialog",
					"Button"
				],
				"aliases": [
					"modal",
					"edge to edge"
				],
				"related": [
					"086",
					"087",
					"084"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Dialog",
				"Button"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Dialog",
						"Button"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/feedback/dialog#chromeless",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "084",
			"group": "feedback",
			"page": "dialog",
			"variant": "Confirmation",
			"slug": "confirmation",
			"title": "Confirmation",
			"description": "The destructive confirm and cancel pattern.",
			"summary": "A small dialog asking to delete an item, with Cancel and Delete buttons in the actions snippet.",
			"use": "Confirming a destructive action when you need custom footer buttons instead of the AlertDialog defaults.",
			"spec": [
				"`<Dialog` with `bind:open`, `title=\"Delete this item?\"` and `size=\"sm\"`",
				"`description=` text says the action cannot be undone",
				"`{#snippet actions()}` holds `<Button variant=\"ghost\"` Cancel and `<Button variant=\"destructive\"` Delete",
				"Delete runs `confirmed = true; open = false;` and shows `Item deleted.` with `aria-live=\"polite\"`",
				"Trigger is `<Button variant=\"destructive\"` with a `<Trash2 size={14} />` icon in `{#snippet leading()}`"
			],
			"tags": [
				"dialog",
				"confirmation",
				"destructive",
				"delete",
				"actions"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "feedback",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "overlay",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Dialog",
					"Button"
				],
				"aliases": [
					"delete confirm",
					"modal"
				],
				"related": [
					"081",
					"086",
					"085"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Dialog",
				"Button"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Dialog",
						"Button"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/feedback/dialog#confirmation",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "085",
			"group": "feedback",
			"page": "dialog",
			"variant": "Form",
			"slug": "form",
			"title": "Form",
			"description": "A dialog holding a form, at the md size.",
			"summary": "A medium dialog containing an invite form with name, email and role fields and a Send invite button disabled until name and email are filled.",
			"use": "Short create or invite flows that collect a few fields without leaving the page.",
			"spec": [
				"`<Dialog bind:open title=\"Invite team member\" size=\"md\">`",
				"Fields stacked in `<Stack gap=\"3.5\">`: two `<TextField` (Full name, Email with `type=\"email\"`) using `bind:value={name}` and `bind:value={email}`",
				"`<Select label=\"Role\" bind:value={role} options={roleOpts}` with three options: Admin, Editor, Viewer",
				"`let role = $state('viewer')` is the default role",
				"`{#snippet actions()}`: ghost Cancel and filled Send invite with `disabled={!name || !email}`"
			],
			"tags": [
				"dialog",
				"form",
				"text-field",
				"select",
				"invite",
				"modal"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "feedback",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"keyboard",
					"press"
				],
				"layout": "overlay",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Dialog",
					"Button",
					"TextField",
					"Select",
					"Stack"
				],
				"aliases": [
					"invite form",
					"modal form"
				],
				"related": [
					"086",
					"087",
					"161"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Dialog",
				"Button",
				"TextField",
				"Select",
				"Stack"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Dialog",
						"Button",
						"TextField",
						"Select",
						"Stack"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/feedback/dialog#form",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "086",
			"group": "feedback",
			"page": "dialog",
			"variant": "Info",
			"slug": "info",
			"title": "Info",
			"description": "Informational content with a single action.",
			"summary": "An informational dialog with rich text about how Dialog works and a single Got it action.",
			"use": "Help, about or detail popups that only need to be read and dismissed.",
			"spec": [
				"`<Dialog bind:open title=\"About this component\">` with no `size` prop",
				"Body is two `<p class=\"body\">` paragraphs using `<strong>` and `<code>`",
				"`{#snippet actions()}` has one `<Button variant=\"filled\"` labelled Got it",
				"Trigger is `<Button variant=\"outlined\"` with an `<Info size={14} />` icon in `{#snippet leading()}`"
			],
			"tags": [
				"dialog",
				"info",
				"modal",
				"help",
				"rich-text"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "feedback",
				"industry": [
					"devtools"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "overlay",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Dialog",
					"Button"
				],
				"aliases": [
					"modal",
					"info modal"
				],
				"related": [
					"084",
					"083",
					"085"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Dialog",
				"Button"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Dialog",
						"Button"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/feedback/dialog#info",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "087",
			"group": "feedback",
			"page": "dialog",
			"variant": "Split",
			"slug": "split",
			"title": "Split",
			"description": "",
			"summary": "A split dialog with a media panel beside a lead form containing name, email and a Save button.",
			"use": "Detail or onboarding dialogs that pair an image or summary with a short form.",
			"spec": [
				"`<Dialog bind:open title=\"Lead details\" size=\"split\" chromeless>`",
				"Two direct children: `<div class=\"media\">` labelled Media / summary and `<div class=\"form\">`",
				"Form uses `<Stack gap=\"3.5\">` with `<TextField label=\"Full name\" bind:value={name}` and `<TextField label=\"Email\" type=\"email\" bind:value={email}`",
				"Save is `<Button variant=\"filled\" onclick={() => (open = false)}>`"
			],
			"tags": [
				"dialog",
				"split",
				"chromeless",
				"form",
				"text-field",
				"modal"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "feedback",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"keyboard",
					"press"
				],
				"layout": "overlay",
				"colorMode": "both",
				"density": "airy",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Dialog",
					"Button",
					"TextField",
					"Stack"
				],
				"aliases": [
					"two pane modal",
					"media dialog"
				],
				"related": [
					"910",
					"085",
					"083"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Dialog",
				"Button",
				"TextField",
				"Stack"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Dialog",
						"Button",
						"TextField",
						"Stack"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/feedback/dialog#split",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "088",
			"group": "feedback",
			"page": "drawer",
			"variant": "Notifications",
			"slug": "notification-panel",
			"title": "Notification panel",
			"description": "A real-world use: a 400px wide panel on the right.",
			"summary": "A right drawer, 400px wide, listing four notifications with unread dots and timestamps.",
			"use": "A notifications panel opened from a header bell button.",
			"spec": [
				"`<Drawer bind:open title=\"Notifications\" side=\"right\" width=\"400px\">`",
				"`const items` has four entries with fields `title`, `body`, `time` and `unread`, two unread",
				"Rows rendered with `{#each items as n}` and `class:notif--unread={n.unread}`; unread rows show `<span class=\"dot\">`",
				"`{#snippet actions()}` holds `<Button variant=\"ghost\" size=\"sm\"` labelled Mark all read",
				"Trigger is `<Button variant=\"ghost\"` with a `<Bell size={14} />` icon"
			],
			"tags": [
				"drawer",
				"notifications",
				"side-panel",
				"unread",
				"list"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "feedback",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "overlay",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Drawer",
					"Button",
					"Stack"
				],
				"aliases": [
					"notification panel",
					"side panel",
					"inbox"
				],
				"related": [
					"089",
					"090",
					"103"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Drawer",
				"Button",
				"Stack"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Drawer",
						"Button",
						"Stack"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/feedback/drawer#notification-panel",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "089",
			"group": "feedback",
			"page": "drawer",
			"variant": "Right",
			"slug": "right-default",
			"title": "Right (default)",
			"description": "Slides in from the right, with a footer actions area.",
			"summary": "A default drawer titled Filters with status and role filter groups, two switches and Reset and Apply actions.",
			"use": "Filter panels for tables and lists that would crowd the page if shown inline.",
			"spec": [
				"`<Drawer bind:open title=\"Filters\">` with no side or width prop",
				"Two `<FilterGroup` blocks: status with 2 options (Active, Inactive) and role with 3 options (Admin, Editor, Viewer)",
				"Filter state: `onchange={(v) => (statusF = v)}` and `onchange={(v) => (roleF = v)}`, both starting at `'all'`",
				"Two `<Switch label=\"Show inactive only\" />` and `<Switch label=\"Include archived\" />` inside `<Stack gap=\"4\">`",
				"`{#snippet actions()}` holds ghost Reset and filled Apply buttons"
			],
			"tags": [
				"drawer",
				"filters",
				"filter-group",
				"switch",
				"side-panel"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "feedback",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "overlay",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Drawer",
					"Button",
					"Switch",
					"Stack",
					"FilterGroup"
				],
				"aliases": [
					"filter panel",
					"side panel"
				],
				"related": [
					"088",
					"090",
					"461"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Drawer",
				"Button",
				"Switch",
				"Stack",
				"FilterGroup"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Drawer",
						"Button",
						"Switch",
						"Stack",
						"FilterGroup"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/feedback/drawer#right-default",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "090",
			"group": "feedback",
			"page": "drawer",
			"variant": "Sides",
			"slug": "left-and-bottom",
			"title": "Left and bottom",
			"description": "Left suits mobile navigation. Bottom is a simple bottom panel without gestures.",
			"summary": "Two drawers opened from separate buttons: a 280px left navigation drawer and a bottom sort drawer.",
			"use": "Mobile style navigation from the left and option pickers sliding up from the bottom.",
			"spec": [
				"Left: `<Drawer bind:open={leftOpen} title=\"Navigation\" side=\"left\" width=\"280px\">` with 5 items: Dashboard, Users, Products, Reports, Settings",
				"Bottom: `<Drawer bind:open={bottomOpen} title=\"Sort by\" side=\"bottom\">` with 5 options: Name (A-Z), Name (Z-A), Date joined, Last active, Role",
				"Items are native `<button class=\"item\"` elements inside `<Stack gap=\"1\">` generated by `{#each`",
				"Each item closes its drawer with `onclick={() => (leftOpen = false)}` or `onclick={() => (bottomOpen = false)}`",
				"Triggers are two `<Button variant=\"outlined\"` labelled Open left and Open bottom"
			],
			"tags": [
				"drawer",
				"left",
				"bottom",
				"navigation",
				"sort",
				"side-panel"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "feedback",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "overlay",
				"colorMode": "both",
				"density": "compact",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Drawer",
					"Button",
					"Stack"
				],
				"aliases": [
					"bottom sheet",
					"side panel",
					"off canvas"
				],
				"related": [
					"089",
					"157",
					"096"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Drawer",
				"Button",
				"Stack"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Drawer",
						"Button",
						"Stack"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/feedback/drawer#left-and-bottom",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "091",
			"group": "feedback",
			"page": "lightbox",
			"variant": "Basic",
			"slug": "open-from-a-button",
			"title": "Open from a button",
			"description": "",
			"summary": "A lightbox opened from a button to show a single generated SVG image.",
			"use": "Enlarging one thumbnail or photo to full view on click.",
			"spec": [
				"`<Lightbox bind:open src={photo} alt=\"Gray circle on a dark background\" />`",
				"`photo` is a `data:image/svg+xml;utf8,` URL built with `encodeURIComponent`, 640 by 400 with a circle `r=\"90\"`",
				"Trigger is `<Button variant=\"outlined\" onclick={() => (open = true)}>` labelled View photo"
			],
			"tags": [
				"lightbox",
				"image",
				"preview",
				"modal",
				"alt-text"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "feedback",
				"industry": [
					"media"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "overlay",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Button",
					"Lightbox"
				],
				"aliases": [
					"image viewer",
					"zoom image"
				],
				"related": [
					"242",
					"083"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Button",
				"Lightbox"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Button",
						"Lightbox"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/feedback/lightbox#open-from-a-button",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "092",
			"group": "feedback",
			"page": "progress",
			"variant": "Animated",
			"slug": "animated",
			"title": "Animated",
			"description": "Start a simulated upload.",
			"summary": "A progress bar that fills from 0 to 100 percent in steps of 5 every 100 ms when Start upload is clicked.",
			"use": "Showing upload or export progress that the app updates as work completes.",
			"spec": [
				"`<Progress {value} label=\"Upload progress\" />` with `let value = $state(0)`",
				"`setInterval` runs every `100` ms with `value = Math.min(100, value + 5)` and clears at 100",
				"Percent text `{value}%` shown beside the bar",
				"Button `<Button variant=\"outlined\" size=\"sm\" disabled={running} onclick={start}>` switches label with `{running ? 'Uploading…' : 'Start upload'}`",
				"`onDestroy(() => clearInterval(timer))` cleans the timer",
				"Column wrapper has `max-width: 480px`"
			],
			"tags": [
				"progress",
				"animated",
				"upload",
				"determinate",
				"button"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "feedback",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "expressive",
				"interaction": [
					"press"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Progress",
					"Button"
				],
				"aliases": [
					"upload progress",
					"progress bar"
				],
				"related": [
					"093",
					"094",
					"641"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Progress",
				"Button"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Progress",
						"Button"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/feedback/progress#animated",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "093",
			"group": "feedback",
			"page": "progress",
			"variant": "Determinate",
			"slug": "determinate",
			"title": "Determinate",
			"description": "An explicit value from 0 to max (100 by default).",
			"summary": "Four determinate progress bars at 25, 50, 75 and 100 percent, each with a percent label.",
			"use": "Showing known completion, such as quota used or onboarding steps done.",
			"spec": [
				"`{#each [25, 50, 75, 100] as v}` renders one row per value",
				"`<Progress value={v} label=\"{v} percent\" />` gives each bar an accessible label",
				"Text `{v}%` shown beside each bar",
				"Column has `max-width: 480px`"
			],
			"tags": [
				"progress",
				"determinate",
				"value",
				"percent",
				"label"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "feedback",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Progress"
				],
				"aliases": [
					"progress bar",
					"percent"
				],
				"related": [
					"092",
					"094",
					"641"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Progress"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Progress"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/feedback/progress#determinate",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "094",
			"group": "feedback",
			"page": "progress",
			"variant": "Indeterminate",
			"slug": "indeterminate",
			"title": "Indeterminate",
			"description": "Use when progress cannot be determined.",
			"summary": "Two indeterminate progress bars labelled Loading and Syncing for work of unknown length.",
			"use": "Background loading or syncing where no percentage is available.",
			"spec": [
				"`<Progress indeterminate label=\"Loading content\" />`",
				"`<Progress indeterminate label=\"Syncing data\" />`",
				"Each bar sits in a row next to a text label, Loading and Syncing",
				"Column has `max-width: 480px`"
			],
			"tags": [
				"progress",
				"indeterminate",
				"loading",
				"sync",
				"label"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "feedback",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "expressive",
				"interaction": [
					"none"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Progress"
				],
				"aliases": [
					"loading bar",
					"busy"
				],
				"related": [
					"093",
					"092",
					"641"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Progress"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Progress"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/feedback/progress#indeterminate",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "095",
			"group": "feedback",
			"page": "sheet",
			"variant": "Footer",
			"slug": "footer-and-swipetodismiss",
			"title": "Footer and swipeToDismiss",
			"description": "A pinned footer, and swipeToDismiss set to false so only the close button, Escape and the overlay dismiss it.",
			"summary": "A bottom sheet titled Sessions with a footer button, opened with swipe to dismiss on or off.",
			"use": "Mobile sheets with a pinned primary action that sometimes must not be dismissed by dragging.",
			"spec": [
				"`<Sheet bind:open title=\"Sessions\" swipeToDismiss={swipe} onclose={() => (open = false)}>`",
				"Two triggers set `swipe = true` and `swipe = false` before `open = true`: Sheet with footer and Swipe disabled",
				"Body is `<Stack gap=\"2\">` with a paragraph whose text depends on `swipe`",
				"`{#snippet footer()}` holds `<Button variant=\"filled\"` New session with a `<Plus size={15} />` icon"
			],
			"tags": [
				"sheet",
				"footer",
				"swipe-to-dismiss",
				"bottom-sheet",
				"mobile"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "feedback",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"drag",
					"press",
					"keyboard"
				],
				"layout": "overlay",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Sheet",
					"Button",
					"Stack"
				],
				"aliases": [
					"bottom sheet",
					"action sheet"
				],
				"related": [
					"096",
					"090",
					"089"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Sheet",
				"Button",
				"Stack"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Sheet",
						"Button",
						"Stack"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/feedback/sheet#footer-and-swipetodismiss",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "096",
			"group": "feedback",
			"page": "sheet",
			"variant": "Swipe",
			"slug": "swipe-to-dismiss",
			"title": "Swipe to dismiss",
			"description": "Drag the handle or header down on a viewport below 900px. Above that, it is a centered dialog.",
			"summary": "A sheet titled Switch session with a description and a list of eight accounts that close it on click.",
			"use": "Mobile account or option pickers that slide up and can be dragged down to dismiss.",
			"spec": [
				"`<Sheet bind:open title=\"Switch session\" description=\"Choose the active account\">`",
				"`const accounts` has 8 entries, Account A to Account H, rendered by `{#each accounts as acc}`",
				"Each item is `<button class=\"item\" onclick={() => (open = false)}>` inside `<Stack gap=\"1\">`",
				"Trigger is `<Button variant=\"outlined\"` labelled Open sheet"
			],
			"tags": [
				"sheet",
				"swipe",
				"bottom-sheet",
				"account-switcher",
				"list",
				"mobile"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "feedback",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"drag",
					"press",
					"keyboard"
				],
				"layout": "overlay",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Sheet",
					"Button",
					"Stack"
				],
				"aliases": [
					"bottom sheet",
					"swipe to dismiss",
					"account switcher"
				],
				"related": [
					"095",
					"090"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Sheet",
				"Button",
				"Stack"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Sheet",
						"Button",
						"Stack"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/feedback/sheet#swipe-to-dismiss",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "097",
			"group": "feedback",
			"page": "skeleton",
			"variant": "CardLayout",
			"slug": "card-layout",
			"title": "Card layout",
			"description": "",
			"summary": "A card skeleton with a circular avatar placeholder beside three text lines of different widths.",
			"use": "Loading placeholder for a profile or list card so layout does not jump when data arrives.",
			"spec": [
				"`<Card p=\"5\" full>`",
				"`<Skeleton variant=\"circular\" width=\"48px\" height=\"48px\" />` inside `<Flex gap=\"4\" align=\"start\">`",
				"Three lines in `<Stack gap=\"2\">`: `height=\"16px\" width=\"40%\"`, `height=\"13px\" width=\"70%\"`, `height=\"13px\" width=\"55%\"`"
			],
			"tags": [
				"skeleton",
				"card",
				"loading",
				"avatar",
				"placeholder"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "feedback",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "expressive",
				"interaction": [
					"none"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Skeleton",
					"Card",
					"Stack",
					"Flex"
				],
				"aliases": [
					"placeholder",
					"shimmer",
					"profile card loading"
				],
				"related": [
					"098",
					"099",
					"241"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Skeleton",
				"Card",
				"Stack",
				"Flex"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Skeleton",
						"Card",
						"Stack",
						"Flex"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/feedback/skeleton#card-layout",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "098",
			"group": "feedback",
			"page": "skeleton",
			"variant": "Image",
			"slug": "image-placeholder",
			"title": "Image placeholder",
			"description": "",
			"summary": "A flush card skeleton with a 180px rectangular image placeholder above two caption lines.",
			"use": "Loading placeholder for media cards such as products, posts or galleries.",
			"spec": [
				"`<Card flush full>`",
				"`<Skeleton variant=\"rectangular\" height=\"180px\" />` fills the top of the card",
				"Caption in `<Stack gap=\"2\">`: `height=\"16px\" width=\"50%\"` and `height=\"13px\" width=\"80%\"`",
				"Caption wrapper `<div class=\"caption\">` has `padding: 16px`"
			],
			"tags": [
				"skeleton",
				"image",
				"card",
				"flush",
				"loading",
				"placeholder"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "feedback",
				"industry": [
					"media"
				],
				"style": [
					"default"
				],
				"motion": "expressive",
				"interaction": [
					"none"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Skeleton",
					"Card",
					"Stack"
				],
				"aliases": [
					"placeholder",
					"image loading",
					"shimmer"
				],
				"related": [
					"097",
					"099",
					"241"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Skeleton",
				"Card",
				"Stack"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Skeleton",
						"Card",
						"Stack"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/feedback/skeleton#image-placeholder",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "099",
			"group": "feedback",
			"page": "skeleton",
			"variant": "TextLines",
			"slug": "text-lines",
			"title": "Text lines",
			"description": "With rows, the last line is shortened to 60% for a natural paragraph.",
			"summary": "A card skeleton with a 60% wide heading line above a block of three text lines.",
			"use": "Loading placeholder for an article or description block.",
			"spec": [
				"`<Card p=\"5\" full>` with `<Stack gap=\"3\">`",
				"Heading line `<Skeleton height=\"20px\" width=\"60%\" />`",
				"Body lines `<Skeleton rows={3} height=\"14px\" />` render three rows from one element"
			],
			"tags": [
				"skeleton",
				"text",
				"rows",
				"card",
				"loading"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "feedback",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "expressive",
				"interaction": [
					"none"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Skeleton",
					"Card",
					"Stack"
				],
				"aliases": [
					"placeholder",
					"text loading",
					"shimmer"
				],
				"related": [
					"097",
					"098",
					"241"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Skeleton",
				"Card",
				"Stack"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Skeleton",
						"Card",
						"Stack"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/feedback/skeleton#text-lines",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "100",
			"group": "feedback",
			"page": "spinner",
			"variant": "InButton",
			"slug": "in-a-button",
			"title": "In a button",
			"description": "Use the loading prop of Button instead of placing a Spinner by hand.",
			"summary": "A Button that shows its loading spinner for two seconds after click and changes its label to Saving.",
			"use": "Save or submit buttons that wait on a request.",
			"spec": [
				"`<Button onclick={simulate} {loading}>` with `let loading = $state(false)`",
				"`simulate` sets `loading = true` and resets it with `setTimeout(() => (loading = false), 2000)`",
				"Label is `{loading ? 'Saving…' : 'Save changes'}`"
			],
			"tags": [
				"spinner",
				"button",
				"loading",
				"save",
				"async"
			],
			"shape": "square",
			"index": {
				"kind": "component",
				"subtype": "feedback",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "expressive",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Button"
				],
				"aliases": [
					"loading button",
					"busy button",
					"pending"
				],
				"related": [
					"101",
					"102",
					"094"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Button"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Button"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/feedback/spinner#in-a-button",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "101",
			"group": "feedback",
			"page": "spinner",
			"variant": "SectionLoader",
			"slug": "section-loader",
			"title": "Section loader",
			"description": "",
			"summary": "A card with a centered 40px spinner and a Loading data text.",
			"use": "Loader for a whole section or panel while its data is fetched.",
			"spec": [
				"`<Card p=\"10\" full>`",
				"`<Stack align=\"center\" gap=\"3\">` centers the spinner and text",
				"`<Spinner size={40} />` above `<span class=\"text\">Loading data…</span>`"
			],
			"tags": [
				"spinner",
				"loader",
				"card",
				"section",
				"loading"
			],
			"shape": "square",
			"index": {
				"kind": "component",
				"subtype": "feedback",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "expressive",
				"interaction": [
					"none"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "airy",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Spinner",
					"Card",
					"Stack"
				],
				"aliases": [
					"loading",
					"busy"
				],
				"related": [
					"102",
					"100",
					"097"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Spinner",
				"Card",
				"Stack"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Spinner",
						"Card",
						"Stack"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/feedback/spinner#section-loader",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "102",
			"group": "feedback",
			"page": "spinner",
			"variant": "Sizes",
			"slug": "sizes",
			"title": "Sizes",
			"description": "The size prop takes a number of pixels or any CSS length.",
			"summary": "Three spinners side by side at 16, 24 and 40 pixels.",
			"use": "Choosing a spinner size: small for inline text and buttons, large for page or section loaders.",
			"spec": [
				"`<Spinner size={16} />`",
				"`<Spinner size={24} />`",
				"`<Spinner size={40} />`",
				"Wrapped in `<Flex gap=\"6\" align=\"center\">`"
			],
			"tags": [
				"spinner",
				"size",
				"loading",
				"flex"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "feedback",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "expressive",
				"interaction": [
					"none"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Spinner",
					"Flex"
				],
				"aliases": [
					"loading",
					"busy",
					"sizes"
				],
				"related": [
					"101",
					"100",
					"094"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Spinner",
				"Flex"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Spinner",
						"Flex"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/feedback/spinner#sizes",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "103",
			"group": "feedback",
			"page": "toast",
			"variant": "Toasts",
			"slug": "variants-and-duration",
			"title": "Variants and duration",
			"description": "Five variants, plus persistent (duration 0) and custom durations. The default auto-dismiss is 4 seconds.",
			"summary": "Eight buttons that trigger toasts: five variants and three duration cases, with one Toaster mounted.",
			"use": "Non-blocking feedback after an action, such as saved, failed or an available update.",
			"spec": [
				"`<Toaster />` mounted once, toasts fired with `toast` from `@codeatlasdev/ui`",
				"Variants: `toast.show(`, `toast.success(`, `toast.error(`, `toast.warning(` and `toast.info(` with a message string",
				"Persistent: `{ variant: 'info', duration: 0 }` passed as second argument of `toast.show(`",
				"Timed: `toast.success('Gone in 1 second.', 1000)` and `toast.info('Stays for 8 seconds.', 8000)`",
				"All triggers are `<Button variant=\"outlined\"` in two labelled groups, Variants and Duration"
			],
			"tags": [
				"toast",
				"toaster",
				"notification",
				"success",
				"error",
				"duration"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "feedback",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press"
				],
				"layout": "overlay",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Button",
					"Toaster"
				],
				"aliases": [
					"snackbar",
					"notification",
					"alert message"
				],
				"related": [
					"490",
					"492",
					"088"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Button",
				"Toaster"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Button",
						"Toaster",
						"toast"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/feedback/toast#variants-and-duration",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "104",
			"group": "display",
			"page": "alert",
			"variant": "Closable",
			"slug": "closable",
			"title": "Closable",
			"description": "",
			"summary": "Two dismissible alerts, an info one with a title and a warning one, that are replaced by a short dismissed note once closed.",
			"use": "Inline notices the user can dismiss, such as beta-feature banners or storage warnings.",
			"spec": [
				"`<Alert severity=\"info\" title=\"Heads up\" closable onclose={() => (closedInfo = true)}>` with beta-feature text",
				"`<Alert severity=\"warning\" closable onclose={() => (closedWarn = true)}>` with a storage 85% full message, no title",
				"`let closedInfo = $state(false)` and `let closedWarn = $state(false)` track each alert",
				"`{#if !closedInfo}` and `{#if !closedWarn}` render the alert, `{:else}` renders a `<p class=\"dismissed\">` note",
				"Wrapper `.col` has `max-width: 560px`"
			],
			"tags": [
				"alert",
				"closable",
				"dismiss",
				"onclose",
				"notice",
				"severity"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Alert"
				],
				"aliases": [
					"dismissible banner",
					"beta notice",
					"close message"
				],
				"related": [
					"105",
					"106"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Alert"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Alert"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/display/alert#closable",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "105",
			"group": "display",
			"page": "alert",
			"variant": "Severities",
			"slug": "severities",
			"title": "Severities",
			"description": "",
			"summary": "The four alert severities stacked: success, warning, error and info, each with a one-line message.",
			"use": "Choosing the alert severity for save confirmations, trial warnings, connection errors and update notices.",
			"spec": [
				"`severity=\"success\"` with the saved-changes message",
				"`severity=\"warning\"` with the trial-expires-in-3-days message",
				"`severity=\"error\"` with the failed-to-connect message",
				"`severity=\"info\"` with the new-version message",
				"Wrapper `.col` has `max-width: 560px`"
			],
			"tags": [
				"alert",
				"severity",
				"success",
				"warning",
				"error",
				"info"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Alert"
				],
				"aliases": [
					"status banner",
					"callout",
					"feedback message"
				],
				"related": [
					"106",
					"104"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Alert"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Alert"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/display/alert#severities",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "106",
			"group": "display",
			"page": "alert",
			"variant": "WithTitle",
			"slug": "with-title",
			"title": "With title",
			"description": "",
			"summary": "Two alerts with a bold title above the body text: a success and an error.",
			"use": "Notices that need a headline plus an explanation, such as save confirmations or failed sign-ins.",
			"spec": [
				"`severity=\"success\"` with `title=\"Changes saved\"`",
				"`severity=\"error\"` with `title=\"Authentication failed\"`",
				"Body text is passed as the alert children",
				"Wrapper `.col` has `max-width: 560px`"
			],
			"tags": [
				"alert",
				"title",
				"severity",
				"success",
				"error"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Alert"
				],
				"aliases": [
					"titled callout",
					"error message",
					"success message"
				],
				"related": [
					"105",
					"104"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Alert"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Alert"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/display/alert#with-title",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "107",
			"group": "display",
			"page": "avatar",
			"variant": "Images",
			"slug": "with-image",
			"title": "With image",
			"description": "",
			"summary": "A row of four large avatars loaded from image URLs.",
			"use": "User lists, comments and team pages where members have profile photos.",
			"spec": [
				"Four avatars with `size=\"lg\"`",
				"`src=\"https://i.pravatar.cc/150?img=1\"` with `alt=\"Alice Martin\"`",
				"`src=\"https://i.pravatar.cc/150?img=12\"` with `alt=\"Bob Chen\"`",
				"`src=\"https://i.pravatar.cc/150?img=32\"` with `alt=\"Clara Silva\"`",
				"`src=\"https://i.pravatar.cc/150?img=47\"` with `alt=\"David Kim\"`"
			],
			"tags": [
				"avatar",
				"image",
				"src",
				"alt",
				"profile-photo"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Avatar"
				],
				"aliases": [
					"profile picture",
					"user photo"
				],
				"related": [
					"108",
					"110",
					"111"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Avatar"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Avatar"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/display/avatar#with-image",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "108",
			"group": "display",
			"page": "avatar",
			"variant": "Initials",
			"slug": "initials-fallback",
			"title": "Initials fallback",
			"description": "",
			"summary": "Large avatars with no image source: three given only `alt` names and two given explicit `fallback` text.",
			"use": "Users who have no uploaded photo, shown with initials or a placeholder character.",
			"spec": [
				"`alt=\"Alice Martin\"`, `alt=\"Bob Chen\"` and `alt=\"Clara Silva\"` with no image",
				"`fallback=\"DK\"` sets explicit text",
				"`fallback=\"?\"` sets a placeholder character",
				"All five use `size=\"lg\"`"
			],
			"tags": [
				"avatar",
				"initials",
				"fallback",
				"alt",
				"placeholder"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Avatar"
				],
				"aliases": [
					"monogram",
					"name initials",
					"placeholder user"
				],
				"related": [
					"107",
					"240",
					"110"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Avatar"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Avatar"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/display/avatar#initials-fallback",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "109",
			"group": "display",
			"page": "avatar",
			"variant": "ShapeStatus",
			"slug": "shape-and-status",
			"title": "Shape and status",
			"description": "",
			"summary": "Large avatars showing the rounded shape and the four status indicators: online, busy, away and offline.",
			"use": "Presence in chat, team lists or support queues, plus a rounded avatar shape.",
			"spec": [
				"`shape=\"rounded\"` on `alt=\"Ana Lima\"`",
				"`status=\"online\"` on `alt=\"Online\"`",
				"`status=\"busy\"` on `alt=\"Busy\"`",
				"`status=\"away\"` on `alt=\"Away\"`",
				"`status=\"offline\"` on `alt=\"Offline\"`",
				"All five use `size=\"lg\"`"
			],
			"tags": [
				"avatar",
				"shape",
				"rounded",
				"status",
				"presence",
				"online"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Avatar"
				],
				"aliases": [
					"presence",
					"online indicator",
					"availability dot"
				],
				"related": [
					"114",
					"108",
					"110"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Avatar"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Avatar"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/display/avatar#shape-and-status",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "110",
			"group": "display",
			"page": "avatar",
			"variant": "Sizes",
			"slug": "sizes",
			"title": "Sizes",
			"description": "",
			"summary": "Avatars at every preset size from extra small to extra large, plus a custom numeric size.",
			"use": "Choosing avatar size for dense lists, headers and profile pages.",
			"spec": [
				"`size=\"xs\"` with `alt=\"Extra small\"`",
				"`size=\"sm\"` with `alt=\"Small\"`",
				"`size=\"md\"` with `alt=\"Medium\"`",
				"`size=\"lg\"` with `alt=\"Large\"`",
				"`size=\"xl\"` with `alt=\"Extra large\"`",
				"`size={80}` with `alt=\"Custom\"` is a numeric size"
			],
			"tags": [
				"avatar",
				"size",
				"xs",
				"xl",
				"custom-size"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Avatar"
				],
				"aliases": [
					"avatar scale",
					"user icon size"
				],
				"related": [
					"108",
					"107",
					"109"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Avatar"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Avatar"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/display/avatar#sizes",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "111",
			"group": "display",
			"page": "avatar",
			"variant": "Stack",
			"slug": "avatar-stack",
			"title": "Avatar stack",
			"description": "",
			"summary": "An overlapping avatar stack of three photo avatars and a fourth `+4` overflow avatar.",
			"use": "Showing collaborators on a card, project or document with an overflow count.",
			"spec": [
				"`const people` has 4 entries: Alice, Bob and Clara with `src`, and `{ alt: '+4' }` without one",
				"`{#each people as p, i}` renders `<Avatar src={p.src} alt={p.alt} size=\"md\" />`",
				"Each avatar is wrapped in `<div class=\"item\" style=\"--z:{people.length - i}\">`",
				"Overlap uses `.item { margin-left: -10px; position: relative; z-index: var(--z, 0); }`"
			],
			"tags": [
				"avatar",
				"stack",
				"avatar-group",
				"overlap",
				"overflow",
				"collaborators"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "compact",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Avatar"
				],
				"aliases": [
					"avatar group",
					"overlapping avatars",
					"team members",
					"facepile"
				],
				"related": [
					"107",
					"110",
					"845"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Avatar"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Avatar"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/display/avatar#avatar-stack",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "112",
			"group": "display",
			"page": "badge",
			"variant": "Colors",
			"slug": "colors",
			"title": "Colors",
			"description": "",
			"summary": "A notification bell icon button wrapped in a count badge, shown in the four badge colors.",
			"use": "Telling apart badge meaning on a counter: brand, success, warning and error.",
			"spec": [
				"`<Flex gap=\"4\" align=\"center\" wrap>` wraps four badges",
				"Each is a `<Badge count={5}` around `<IconButton aria-label=\"Notifications\">` with a `<Bell size={20} />`",
				"`color=\"brand\"`, `color=\"success\"`, `color=\"warning\"` and `color=\"error\"` are the four variants"
			],
			"tags": [
				"badge",
				"color",
				"count",
				"icon-button",
				"notification",
				"flex"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Badge",
					"IconButton",
					"Flex"
				],
				"aliases": [
					"notification count",
					"tone",
					"counter bubble"
				],
				"related": [
					"113",
					"114",
					"900"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Badge",
				"IconButton",
				"Flex"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Badge",
						"IconButton",
						"Flex"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/display/badge#colors",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "113",
			"group": "display",
			"page": "badge",
			"variant": "Counts",
			"slug": "dot-and-counts",
			"title": "Dot and counts",
			"description": "",
			"summary": "Four badges on icon buttons: a dot, a count of 3, a count of 99 and a count of 100.",
			"use": "Unread counters on notification, message and cart icons.",
			"spec": [
				"`<Badge dot>` around a Bell `<IconButton aria-label=\"Notifications\">`",
				"`<Badge count={3}>` around a Mail `<IconButton aria-label=\"Messages\">`",
				"`<Badge count={99}>` around a ShoppingCart `<IconButton aria-label=\"Cart\">`",
				"`<Badge count={100}>` around a Bell `<IconButton aria-label=\"Notifications\">`",
				"`<Flex gap=\"4\" align=\"center\" wrap>` lays them out"
			],
			"tags": [
				"badge",
				"count",
				"dot",
				"overflow",
				"icon-button",
				"unread"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"saas",
					"e-commerce"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"keyboard",
					"press"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Badge",
					"IconButton",
					"Flex"
				],
				"aliases": [
					"unread count",
					"cart counter",
					"dot indicator",
					"overflow count"
				],
				"related": [
					"112",
					"114",
					"132"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Badge",
				"IconButton",
				"Flex"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Badge",
						"IconButton",
						"Flex"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/display/badge#dot-and-counts",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "114",
			"group": "display",
			"page": "badge",
			"variant": "OnAvatars",
			"slug": "on-avatars",
			"title": "On avatars",
			"description": "",
			"summary": "Three medium avatars each carrying a status dot in success, warning or error color.",
			"use": "Presence or health indicators on a user avatar.",
			"spec": [
				"`<Badge dot color=\"success\">` around `<Avatar alt=\"Ana Lima\" size=\"md\" />`",
				"`<Badge dot color=\"warning\">` around `<Avatar alt=\"Carlos M\" size=\"md\" />`",
				"`<Badge dot color=\"error\">` around `<Avatar alt=\"Diana K\" size=\"md\" />`",
				"`<Flex gap=\"4\" align=\"center\" wrap>` lays them out"
			],
			"tags": [
				"badge",
				"avatar",
				"dot",
				"status",
				"presence"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Badge",
					"Avatar",
					"Flex"
				],
				"aliases": [
					"status dot",
					"presence badge",
					"user status"
				],
				"related": [
					"109",
					"112",
					"113"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Badge",
				"Avatar",
				"Flex"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Badge",
						"Avatar",
						"Flex"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/display/badge#on-avatars",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "115",
			"group": "display",
			"page": "chip",
			"variant": "Basic",
			"slug": "basic",
			"title": "Basic",
			"description": "",
			"summary": "Three plain chips with text labels.",
			"use": "Static tags or keywords attached to a record.",
			"spec": [
				"`<Chip label=\"Design System\" />`",
				"`<Chip label=\"Svelte 5\" />`",
				"`<Chip label=\"Headless\" />`",
				"No variant, size or handlers are set"
			],
			"tags": [
				"chip",
				"label",
				"tag",
				"basic"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "compact",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Chip"
				],
				"aliases": [
					"tag",
					"label",
					"pill"
				],
				"related": [
					"120",
					"117",
					"119"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Chip"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Chip"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/display/chip#basic",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "116",
			"group": "display",
			"page": "chip",
			"variant": "Deletable",
			"slug": "deletable",
			"title": "Deletable",
			"description": "",
			"summary": "Removable chips: deleting one drops it from the list, and a reset link appears when all are gone.",
			"use": "Tag inputs and filter pills the user can remove, with a way to restore them.",
			"spec": [
				"`const initial = ['Design', 'Svelte', 'Glass']` seeds `let tags = $state([...initial])`",
				"`{#each tags as tag (tag)}` renders `<Chip label={tag} deletable ondelete={() => (tags = tags.filter((t) => t !== tag))} />`",
				"`{#if tags.length === 0}` shows a `<button class=\"reset\" type=\"button\"` labelled Reset tags",
				"The reset button runs `onclick={() => (tags = [...initial])}`"
			],
			"tags": [
				"chip",
				"deletable",
				"ondelete",
				"tags",
				"removable",
				"state"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "compact",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Chip"
				],
				"aliases": [
					"removable tag",
					"dismissible tag",
					"remove token"
				],
				"related": [
					"118",
					"115",
					"117"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Chip"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Chip"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/display/chip#deletable",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "117",
			"group": "display",
			"page": "chip",
			"variant": "Icons",
			"slug": "with-icons",
			"title": "With icons",
			"description": "",
			"summary": "Three chips each with a leading lucide icon: star, zap and tag.",
			"use": "Labelled badges that gain meaning from an icon, such as featured or boosted items.",
			"spec": [
				"`<Chip label=\"Featured\" icon={Star} />`",
				"`<Chip label=\"Boosted\" icon={Zap} />`",
				"`<Chip label=\"Tagged\" icon={Tag} />`",
				"`icon` receives the component itself imported from `@lucide/svelte`"
			],
			"tags": [
				"chip",
				"icon",
				"lucide",
				"label",
				"star"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "compact",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Chip"
				],
				"aliases": [
					"tag with icon",
					"icon label"
				],
				"related": [
					"115",
					"120",
					"119"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Chip"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Chip"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/display/chip#with-icons",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "118",
			"group": "display",
			"page": "chip",
			"variant": "Selectable",
			"slug": "selectable",
			"title": "Selectable",
			"description": "",
			"summary": "Two toggle chips, Filter A starting off and Filter B starting on, that flip on click.",
			"use": "Filter chips that toggle a facet on or off in a list or search view.",
			"spec": [
				"`let a = $state(false)` and `let b = $state(true)` hold the state",
				"`<Chip label=\"Filter A\" selected={a} onclick={() => (a = !a)} />`",
				"`<Chip label=\"Filter B\" selected={b} onclick={() => (b = !b)} />`"
			],
			"tags": [
				"chip",
				"selectable",
				"selected",
				"filter",
				"toggle",
				"onclick"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "compact",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Chip"
				],
				"aliases": [
					"filter chip",
					"toggle tag",
					"choice pill"
				],
				"related": [
					"116",
					"115",
					"120"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Chip"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Chip"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/display/chip#selectable",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "119",
			"group": "display",
			"page": "chip",
			"variant": "Status",
			"slug": "statuschip",
			"title": "StatusChip",
			"description": "",
			"summary": "StatusChip in its five statuses: success, warning, error, info and neutral.",
			"use": "Showing the state of a record, such as active, pending, failed, scheduled or draft, in tables and lists.",
			"spec": [
				"`<StatusChip status=\"success\" label=\"Active\" />`",
				"`<StatusChip status=\"warning\" label=\"Pending\" />`",
				"`<StatusChip status=\"error\" label=\"Failed\" />`",
				"`<StatusChip status=\"info\" label=\"Scheduled\" />`",
				"`<StatusChip status=\"neutral\" label=\"Draft\" />`"
			],
			"tags": [
				"chip",
				"status-chip",
				"status",
				"success",
				"neutral",
				"state"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "compact",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"StatusChip"
				],
				"aliases": [
					"state label",
					"status pill",
					"active pending failed"
				],
				"related": [
					"120",
					"900",
					"115"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"StatusChip"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"StatusChip"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/display/chip#statuschip",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "120",
			"group": "display",
			"page": "chip",
			"variant": "Variants",
			"slug": "variants-and-size",
			"title": "Variants and size",
			"description": "",
			"summary": "Chip color variants (default, brand, success, warning, error, info) plus a small size chip.",
			"use": "Picking the chip tone for categories and semantic labels.",
			"spec": [
				"`<Chip label=\"Default\" />` has no variant",
				"`variant=\"brand\"`, `variant=\"success\"`, `variant=\"warning\"`, `variant=\"error\"` and `variant=\"info\"` each with a matching label",
				"`<Chip label=\"Small\" size=\"sm\" />` shows the small size"
			],
			"tags": [
				"chip",
				"variant",
				"brand",
				"size",
				"sm",
				"color"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "compact",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Chip"
				],
				"aliases": [
					"color tags",
					"semantic pills",
					"tag sizes"
				],
				"related": [
					"115",
					"119",
					"117"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Chip"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Chip"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/display/chip#variants-and-size",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "121",
			"group": "display",
			"page": "code-snippet",
			"variant": "Languages",
			"slug": "languages",
			"title": "Languages",
			"description": "",
			"summary": "Three CodeSnippet blocks highlighting Svelte, TypeScript and CSS sources.",
			"use": "Documentation or settings pages that display code samples with syntax highlighting.",
			"spec": [
				"`import { CodeSnippet } from '@codeatlasdev/ui/code'` is the entry point",
				"`<CodeSnippet code={svelte} language=\"svelte\" />` shows an `AppList` markup sample",
				"`<CodeSnippet code={ts} language=\"typescript\" />` shows a `useListState` call",
				"`<CodeSnippet code={css} language=\"css\" />` shows rules using design tokens",
				"Wrapper `.col` has `width: 100%`"
			],
			"tags": [
				"code-snippet",
				"code",
				"syntax-highlighting",
				"svelte",
				"typescript",
				"css"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"devtools"
				],
				"style": [
					"terminal"
				],
				"motion": "none",
				"interaction": [
					"hover",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"CodeSnippet"
				],
				"aliases": [
					"syntax highlighting",
					"code block",
					"copy code",
					"source listing"
				],
				"related": [
					"129"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"CodeSnippet"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui/code",
					"names": [
						"CodeSnippet"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/display/code-snippet#languages",
			"needs": "@codeatlasdev/ui@4.6.0 + shiki"
		},
		{
			"id": "122",
			"group": "display",
			"page": "data-table",
			"variant": "Controlled",
			"slug": "controlled-mode",
			"title": "Controlled mode",
			"description": "",
			"summary": "A DataTable driven from outside: filter, sort and pagination state live in the page, which slices 12 users into pages of 5.",
			"use": "Server-side or externally managed tables where the page owns search, sort and paging state.",
			"spec": [
				"`let globalFilter = $state('')`, `let pagination = $state<PaginationState>({ pageIndex: 0, pageSize: 5 })` and `let sorting = $state<SortingState>([])`",
				"`const allData: User[]` has 12 rows with `id`, `name`, `email`, `role` and `status`",
				"`<DataTable` receives `data={pageData}`, `total={filtered.length}`, `{globalFilter}`, `{onGlobalFilterChange}`, `{pagination}`, `{onPaginationChange}`, `{sorting}` and `{onSortingChange}`",
				"`searchPlaceholder=\"Search by name, email, role…\"` sets the search input hint",
				"`createCaColumnHelper<User>()` defines 5 columns with `col.accessor`",
				"`onGlobalFilterChange` resets `pageIndex: 0`"
			],
			"tags": [
				"data-table",
				"controlled",
				"pagination",
				"sorting",
				"global-filter",
				"server-side",
				"tanstack"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"keyboard",
					"press",
					"hover"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"DataTable"
				],
				"aliases": [
					"server side table",
					"remote pagination",
					"search sort paginate",
					"user directory"
				],
				"related": [
					"123",
					"433",
					"139"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"DataTable"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui/table",
					"names": [
						"DataTable",
						"createCaColumnHelper"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/display/data-table#controlled-mode",
			"needs": "@codeatlasdev/ui@4.6.0 + @tanstack/svelte-table"
		},
		{
			"id": "123",
			"group": "display",
			"page": "data-table",
			"variant": "Simple",
			"slug": "simple-mode",
			"title": "Simple mode",
			"description": "",
			"summary": "A DataTable with five columns and 12 user rows, passing only `columns` and `data`.",
			"use": "The minimal setup for a table of records defined with a column helper.",
			"spec": [
				"`createCaColumnHelper<User>()` and `col.columns([` define 5 columns: ID, Name, Email, Role, Status",
				"`col.accessor('id', { header: 'ID', meta: { label: 'ID' } })` shows the accessor shape",
				"`const data: User[]` has 12 rows with `id`, `name`, `email`, `role` and `status`",
				"`<DataTable {columns} {data} />` has no other props",
				"Wrapper `.wrap` has `width: 100%`"
			],
			"tags": [
				"data-table",
				"columns",
				"column-helper",
				"tanstack",
				"table",
				"basic"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"keyboard",
					"press",
					"hover"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"DataTable"
				],
				"aliases": [
					"data grid",
					"sortable table",
					"user list"
				],
				"related": [
					"122",
					"433",
					"139"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"DataTable"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui/table",
					"names": [
						"DataTable",
						"createCaColumnHelper"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/display/data-table#simple-mode",
			"needs": "@codeatlasdev/ui@4.6.0 + @tanstack/svelte-table"
		},
		{
			"id": "124",
			"group": "display",
			"page": "divider",
			"variant": "Horizontal",
			"slug": "horizontal",
			"title": "Horizontal",
			"description": "",
			"summary": "Three stacked text sections inside a card separated by horizontal dividers.",
			"use": "Separating sections of content inside a card or panel.",
			"spec": [
				"`<Card p=\"6\" full>` wraps the content",
				"`<Stack gap=\"4\">` stacks Section A, B and C paragraphs",
				"`<Divider />` is placed between them with no props"
			],
			"tags": [
				"divider",
				"horizontal",
				"separator",
				"card",
				"stack"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Divider",
					"Card",
					"Stack"
				],
				"aliases": [
					"separator",
					"horizontal rule",
					"hr"
				],
				"related": [
					"125"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Divider",
				"Card",
				"Stack"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Divider",
						"Card",
						"Stack"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/display/divider#horizontal",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "125",
			"group": "display",
			"page": "divider",
			"variant": "Vertical",
			"slug": "vertical",
			"title": "Vertical",
			"description": "",
			"summary": "Three text items in a row inside a card separated by vertical dividers.",
			"use": "Separating inline items in a toolbar or meta row.",
			"spec": [
				"`<Card p=\"6\" full>` wraps the content",
				"`<Flex gap=\"6\" align=\"center\">` lays out Left, Center and Right",
				"`<Divider orientation=\"vertical\" />` is placed between them"
			],
			"tags": [
				"divider",
				"vertical",
				"orientation",
				"separator",
				"flex"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Divider",
					"Card",
					"Flex"
				],
				"aliases": [
					"separator",
					"vertical rule",
					"inline separator"
				],
				"related": [
					"124"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Divider",
				"Card",
				"Flex"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Divider",
						"Card",
						"Flex"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/display/divider#vertical",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "126",
			"group": "display",
			"page": "external-link",
			"variant": "InTable",
			"slug": "in-a-results-table",
			"title": "In a results table",
			"description": "One link per row. The accessible name of each link is for example “Buy at registrar (opens in a new tab)”.",
			"summary": "A table of three domains where each row ends with an ExternalLink to a registrar URL.",
			"use": "Table cells that link out to a third-party site, with the external-link affordance.",
			"spec": [
				"`<Card flush full>` wraps `<SimpleTable responsive=\"cards\">`",
				"`const rows` has 3 entries with `domain`, `price` and `url`",
				"Header cells are Domain, Price and Registrar",
				"`<ExternalLink href={r.url}>Buy at registrar</ExternalLink>` is rendered in each last cell",
				"`{#each rows as r (r.domain)}` renders one `<tr>` per row"
			],
			"tags": [
				"external-link",
				"link",
				"table",
				"simple-table",
				"responsive-cards",
				"outbound"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"keyboard",
					"press"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"ExternalLink",
					"SimpleTable",
					"Card"
				],
				"aliases": [
					"outbound link",
					"new tab link",
					"domain list",
					"registrar"
				],
				"related": [
					"138",
					"139"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"ExternalLink",
				"SimpleTable",
				"Card"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"ExternalLink",
						"SimpleTable",
						"Card"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/display/external-link#in-a-results-table",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "127",
			"group": "display",
			"page": "image",
			"variant": "Basic",
			"slug": "fixed-ratio",
			"title": "Fixed ratio",
			"description": "",
			"summary": "An Image with an inline 4:3 gradient SVG, constrained to a 360px wrapper.",
			"use": "Content images where width and height are declared so the layout does not shift.",
			"spec": [
				"`<Image {src} alt=\"Gradient placeholder, 4 by 3\" width={800} height={600} />`",
				"`src` is an inlined `data:image/svg+xml;utf8,` gradient, so the demo needs no asset",
				"Wrapper is `<div style=\"max-width: 360px\">`"
			],
			"tags": [
				"image",
				"alt",
				"width",
				"height",
				"aspect-ratio",
				"placeholder"
			],
			"shape": "square",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"media"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Image"
				],
				"aliases": [
					"picture",
					"lazy image",
					"photo"
				],
				"related": [
					"128",
					"960",
					"961"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Image"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Image"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/display/image#fixed-ratio",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "128",
			"group": "display",
			"page": "image",
			"variant": "Responsive",
			"slug": "srcset-and-sizes",
			"title": "srcset and sizes",
			"description": "",
			"summary": "An Image with a two-rendition `srcset` (400w and 800w) and a `sizes` hint, in a 420px wrapper.",
			"use": "Responsive content images where the browser should pick the smaller file on narrow screens.",
			"spec": [
				"`srcset={`${small} 400w, ${large} 800w`}` lists two renditions",
				"`sizes=\"(min-width: 768px) 420px, 100vw\"`",
				"`src={large}` with `width={800}` and `height={450}`",
				"`alt=\"Two renditions of the same 16 by 9 picture\"`",
				"Wrapper is `<div style=\"max-width: 420px\">`"
			],
			"tags": [
				"image",
				"srcset",
				"sizes",
				"responsive",
				"alt",
				"width"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"media"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Image"
				],
				"aliases": [
					"srcset",
					"responsive picture",
					"adaptive image"
				],
				"related": [
					"127",
					"960"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Image"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Image"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/display/image#srcset-and-sizes",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "129",
			"group": "display",
			"page": "kbd",
			"variant": "Basic",
			"slug": "shortcuts-in-text",
			"title": "Shortcuts in text",
			"description": "",
			"summary": "Keyboard key caps inline in a sentence describing the Ctrl+K shortcut to open the command palette and Esc to close it.",
			"use": "Documenting keyboard shortcuts inside help text, tooltips or onboarding hints.",
			"spec": [
				"`<Kbd>Ctrl</Kbd>` and `<Kbd>K</Kbd>` joined by a plus sign inside a paragraph",
				"`<Kbd>Esc</Kbd>` as the second shortcut in the same sentence",
				"Each key is plain text children of `Kbd`, no props"
			],
			"tags": [
				"kbd",
				"keyboard",
				"shortcut",
				"key",
				"command-palette",
				"hint"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Kbd"
				],
				"aliases": [
					"keyboard shortcut",
					"key cap",
					"hotkey hint"
				],
				"related": [
					"121"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Kbd"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Kbd"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/display/kbd#shortcuts-in-text",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "130",
			"group": "display",
			"page": "live-list",
			"variant": "Stream",
			"slug": "streaming-rows",
			"title": "Streaming rows",
			"description": "Start the check, then scroll up while it runs: following pauses and a New button appears.",
			"summary": "A LiveList that streams in 40 simulated domain availability checks, one every 150ms, after a Start bulk check button is pressed.",
			"use": "Bulk jobs such as domain checks, imports or batch validations where results arrive one by one and the user wants to watch progress.",
			"spec": [
				"`<LiveList {items} total={TOTAL} {status} label=\"Domain checks\" height=\"14rem\">` with `const TOTAL = 40`",
				"State: `let items = $state<Check[]>([])` and `let status = $state<'idle' | 'running' | 'done'>('idle')`",
				"Row content rendered with `{#snippet item(row)}`: `row.domain` text plus a `Chip`",
				"`<Chip size=\"sm\" variant={row.free ? 'success' : 'default'}` labelled Available or Taken from `row.free`",
				"`<Button variant=\"filled\" onclick={start} disabled={status === 'running'}>` starts the stream, label becomes Checking… while running",
				"`start()` pushes one item with `domain` and `free` every 150ms with `setInterval` and sets `status = 'done'` at `TOTAL`"
			],
			"tags": [
				"live-list",
				"stream",
				"progress",
				"chip",
				"bulk",
				"status",
				"real-time"
			],
			"shape": "tall",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "expressive",
				"interaction": [
					"press",
					"scroll",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"LiveList",
					"Button",
					"Chip"
				],
				"aliases": [
					"streaming list",
					"live feed",
					"progress stream",
					"bulk check results"
				],
				"related": [
					"254",
					"137"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"LiveList",
				"Button",
				"Chip"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"LiveList",
						"Button",
						"Chip"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/display/live-list#streaming-rows",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "131",
			"group": "display",
			"page": "notification-bell",
			"variant": "Controlled",
			"slug": "controlled",
			"title": "Controlled",
			"description": "",
			"summary": "A NotificationBell whose notifications live in state and are updated by its read, read-all and clear callbacks.",
			"use": "An app header bell where the app owns the notification list and persists read and cleared state itself.",
			"spec": [
				"`let items = $state([` holds 3 notifications with `id`, `title`, `body`, `time` and `read`",
				"Two items set `variant: 'success' as const` and `variant: 'warning' as const`, the New comment item sets none",
				"`notifications={items}` passes the list to `NotificationBell`",
				"`onRead={(id) =>` marks the matching item `read: true`",
				"`onReadAll={() =>` marks every item as read",
				"`onClear={() => (items = [])}` empties the list"
			],
			"tags": [
				"notification-bell",
				"notifications",
				"controlled",
				"unread",
				"header",
				"state"
			],
			"shape": "square",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"devtools",
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard",
					"hover"
				],
				"layout": "overlay",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"NotificationBell"
				],
				"aliases": [
					"alerts popover",
					"inbox dropdown",
					"mark all read",
					"unread notifications"
				],
				"related": [
					"132",
					"113"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"NotificationBell"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"NotificationBell"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/display/notification-bell#controlled",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "132",
			"group": "display",
			"page": "notification-bell",
			"variant": "Default",
			"slug": "default",
			"title": "Default",
			"description": "",
			"summary": "Two NotificationBell triggers side by side: one given three notifications and one given an empty list.",
			"use": "Comparing the populated and empty bell states for an app header or toolbar.",
			"spec": [
				"`<Flex gap=\"6\" align=\"center\">` wraps both bells",
				"`<NotificationBell notifications={items} />` with 3 const items (`id`, `title`, `body`, `time`, `read`), two with `read: false` and one with `read: true`",
				"`<NotificationBell notifications={[]} />` passes an empty list",
				"No callback props are passed to either bell"
			],
			"tags": [
				"notification-bell",
				"notifications",
				"empty-state",
				"unread",
				"badge",
				"header"
			],
			"shape": "square",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard",
					"hover"
				],
				"layout": "overlay",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"NotificationBell",
					"Flex"
				],
				"aliases": [
					"alerts popover",
					"bell icon",
					"empty notifications"
				],
				"related": [
					"131",
					"113"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"NotificationBell",
				"Flex"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"NotificationBell",
						"Flex"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/display/notification-bell#default",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "133",
			"group": "display",
			"page": "pagination",
			"variant": "Basic",
			"slug": "basic",
			"title": "Basic",
			"description": "",
			"summary": "Pagination for 100 items at 10 per page, with the current page bound to state and printed below.",
			"use": "Paged lists and tables where the app needs to know the active page to fetch or slice data.",
			"spec": [
				"`<Pagination count={100} perPage={10} bind:page />`",
				"State: `let page = $state(1)` starts on page 1",
				"A paragraph renders `Current page: {page}` below the control"
			],
			"tags": [
				"pagination",
				"page",
				"bind",
				"count",
				"per-page",
				"navigation"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Pagination"
				],
				"aliases": [
					"page numbers",
					"pager",
					"next previous"
				],
				"related": [
					"134",
					"135"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Pagination"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Pagination"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/display/pagination#basic",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "134",
			"group": "display",
			"page": "pagination",
			"variant": "FewItems",
			"slug": "few-items",
			"title": "Few items",
			"description": "",
			"summary": "Pagination with 30 items at 10 per page and no bound state.",
			"use": "Short result sets with only a few pages.",
			"spec": [
				"`<Pagination count={30} perPage={10} />`",
				"Only `count` and `perPage` are set, nothing is bound"
			],
			"tags": [
				"pagination",
				"few-pages",
				"count",
				"per-page",
				"uncontrolled"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Pagination"
				],
				"aliases": [
					"short pager",
					"few pages"
				],
				"related": [
					"133",
					"135"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Pagination"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Pagination"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/display/pagination#few-items",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "135",
			"group": "display",
			"page": "pagination",
			"variant": "Siblings",
			"slug": "more-siblings",
			"title": "More siblings",
			"description": "",
			"summary": "Pagination for 200 items at 10 per page with two sibling pages shown on each side of the current page.",
			"use": "Long result sets where users need to jump a few pages around the current one.",
			"spec": [
				"`<Pagination count={200} perPage={10} siblingCount={2} />`",
				"`siblingCount={2}` sets how many pages show on each side of the current page",
				"Only `count`, `perPage` and `siblingCount` are set, nothing is bound"
			],
			"tags": [
				"pagination",
				"siblings",
				"sibling-count",
				"many-pages",
				"navigation"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Pagination"
				],
				"aliases": [
					"ellipsis pager",
					"sibling pages",
					"long pager"
				],
				"related": [
					"133",
					"134"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Pagination"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Pagination"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/display/pagination#more-siblings",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "136",
			"group": "display",
			"page": "scroll-area",
			"variant": "Horizontal",
			"slug": "horizontal-scroll",
			"title": "Horizontal scroll",
			"description": "",
			"summary": "A horizontal ScrollArea with an always visible scrollbar holding a row of 24 Tag chips inside a card.",
			"use": "Overflowing chip, tag or filter rows that should scroll sideways instead of wrapping.",
			"spec": [
				"`<Card p=\"2\" full>` wraps the area",
				"`<ScrollArea orientation=\"horizontal\" type=\"always\">`",
				"`{ length: 24 }` builds 24 tags labelled Tag 1 to Tag 24, each rendered as `<Chip label={tag} />`",
				"Chips sit in a `<div class=\"row\">` styled with `width: max-content` so the content overflows"
			],
			"tags": [
				"scroll-area",
				"horizontal",
				"scrollbar",
				"chip",
				"card",
				"overflow"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"scroll",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "compact",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"ScrollArea",
					"Card",
					"Chip"
				],
				"aliases": [
					"horizontal overflow",
					"custom scrollbar",
					"tag strip"
				],
				"related": [
					"137",
					"139"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"ScrollArea",
				"Card",
				"Chip"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"ScrollArea",
						"Card",
						"Chip"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/display/scroll-area#horizontal-scroll",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "137",
			"group": "display",
			"page": "scroll-area",
			"variant": "Vertical",
			"slug": "vertical-scroll",
			"title": "Vertical scroll",
			"description": "",
			"summary": "A vertical ScrollArea capped at 220px tall containing 20 Lorem ipsum rows inside a card.",
			"use": "Bounded panels such as activity logs or long option lists that scroll inside a fixed height.",
			"spec": [
				"`<Card full>` wraps the area",
				"`<ScrollArea maxHeight=\"220px\">`",
				"`Array.from({ length: 20 }, (_, i) =>` builds items labelled Item 1 to Item 20: Lorem ipsum dolor sit amet",
				"Each row is a `<div class=\"item\">` rendered with `{#each items as item}`"
			],
			"tags": [
				"scroll-area",
				"vertical",
				"max-height",
				"scrollbar",
				"card",
				"list"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"scroll",
					"drag",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"ScrollArea",
					"Card"
				],
				"aliases": [
					"vertical overflow",
					"custom scrollbar",
					"scrollable list",
					"max height"
				],
				"related": [
					"136",
					"254"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"ScrollArea",
				"Card"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"ScrollArea",
						"Card"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/display/scroll-area#vertical-scroll",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "138",
			"group": "display",
			"page": "table",
			"variant": "Cards",
			"slug": "cards-on-narrow-containers",
			"title": "Cards on narrow containers",
			"description": "",
			"summary": "A SimpleTable that turns each row into a stacked card on narrow screens, listing three users in a flush card.",
			"use": "Data tables that must stay readable on phones without horizontal scrolling.",
			"spec": [
				"`<Card flush full>` wraps the table",
				"`<SimpleTable responsive=\"cards\">` with plain `thead` and `tbody`",
				"Header columns: Name, Email, Role, Status",
				"3 rows from `rows` with `name`, `email`, `role`, `status`",
				"Each cell carries a label such as `data-label=\"Name\"` for the card layout",
				"The first cell uses `class=\"primary\"`"
			],
			"tags": [
				"table",
				"simple-table",
				"responsive",
				"cards",
				"mobile",
				"data-label"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"SimpleTable",
					"Card"
				],
				"aliases": [
					"responsive table",
					"mobile table",
					"stacked rows",
					"member list"
				],
				"related": [
					"139",
					"491",
					"126"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"SimpleTable",
				"Card"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"SimpleTable",
						"Card"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/display/table#cards-on-narrow-containers",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "139",
			"group": "display",
			"page": "table",
			"variant": "Scroll",
			"slug": "default-scroll",
			"title": "Default (scroll)",
			"description": "",
			"summary": "A default SimpleTable listing three users with name, email, role and status in a flush card.",
			"use": "Compact read-only tables that keep their columns and scroll horizontally when space runs out.",
			"spec": [
				"`<Card flush full>` wraps the table",
				"`<SimpleTable>` with no props, plain `thead` and `tbody`",
				"Header columns: Name, Email, Role, Status",
				"3 rows from `rows` with `name`, `email`, `role`, `status`",
				"The first cell uses `class=\"primary\"`"
			],
			"tags": [
				"table",
				"simple-table",
				"scroll",
				"overflow",
				"card",
				"users"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"scroll"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"SimpleTable",
					"Card"
				],
				"aliases": [
					"overflow table",
					"horizontal scroll table",
					"member list"
				],
				"related": [
					"138",
					"491",
					"123"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"SimpleTable",
				"Card"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"SimpleTable",
						"Card"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/display/table#default-scroll",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "140",
			"group": "display",
			"page": "timeline",
			"variant": "Simple",
			"slug": "simple",
			"title": "Simple",
			"description": "",
			"summary": "A basic Timeline of four project milestones, each with a label and a date.",
			"use": "Roadmaps, changelogs or release histories that need a short vertical sequence of dated events.",
			"spec": [
				"`<Timeline {items} />`",
				"4 items with `label` and `date` only: Project started Jan 2025, Alpha released Mar 2025, Public beta Jun 2025, v1.0 stable Sep 2025",
				"Wrapped in `.wrap` with `max-width: 440px`"
			],
			"tags": [
				"timeline",
				"milestones",
				"roadmap",
				"history",
				"dates"
			],
			"shape": "tall",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Timeline"
				],
				"aliases": [
					"milestones",
					"roadmap",
					"history",
					"release log"
				],
				"related": [
					"141"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Timeline"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Timeline"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/display/timeline#simple",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "141",
			"group": "display",
			"page": "timeline",
			"variant": "Variants",
			"slug": "with-variants",
			"title": "With variants",
			"description": "",
			"summary": "A Timeline of an order's five tracking events, coloured by variant, with descriptions and timestamps.",
			"use": "Order, shipment or ticket status trails where completed, in progress and pending steps need different emphasis.",
			"spec": [
				"`<Timeline items={events} />`",
				"5 events with `label`, `description`, `date` and `variant`; the last, Delivered, has no `description`",
				"`variant: 'success' as const` on Order created and Payment confirmed",
				"`variant: 'info' as const` on Picking",
				"`variant: 'default' as const` on Awaiting shipment and Delivered",
				"Wrapped in `.wrap` with `max-width: 440px`"
			],
			"tags": [
				"timeline",
				"variant",
				"success",
				"info",
				"order-tracking",
				"status"
			],
			"shape": "tall",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"e-commerce"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Timeline"
				],
				"aliases": [
					"order tracking",
					"shipment status",
					"event log",
					"delivery steps"
				],
				"related": [
					"140"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Timeline"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Timeline"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/display/timeline#with-variants",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "142",
			"group": "display",
			"page": "tooltip",
			"variant": "Children",
			"slug": "text-trigger",
			"title": "Text trigger",
			"description": "",
			"summary": "A Tooltip wrapping plain inline text, which becomes the hover and focus trigger.",
			"use": "Adding a short explanation to a term or inline phrase without building a custom trigger.",
			"spec": [
				"`<Tooltip content=\"Wrapped in the tooltip's own button\">` with plain text children",
				"Children text: hover or focus this text",
				"No trigger snippet, the tooltip renders its own trigger",
				"Placed inside a paragraph after the sentence Static text can be a trigger too:"
			],
			"tags": [
				"tooltip",
				"children",
				"inline",
				"text-trigger",
				"hover",
				"focus"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"hover",
					"keyboard"
				],
				"layout": "overlay",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Tooltip"
				],
				"aliases": [
					"hint",
					"inline help",
					"text trigger"
				],
				"related": [
					"143",
					"144",
					"145"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Tooltip"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Tooltip"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/display/tooltip#text-trigger",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "143",
			"group": "display",
			"page": "tooltip",
			"variant": "Delay",
			"slug": "custom-delay",
			"title": "Custom delay",
			"description": "",
			"summary": "Three tooltips with different open delays on buttons: instant, default and slow.",
			"use": "Tuning how quickly a tooltip appears, instant for dense toolbars and slower for hints that should not flash.",
			"spec": [
				"`delay={0}` on the Instant button with `content=\"No delay (delay=0)\"`",
				"No `delay` prop on the Default button, `content=\"Default delay (500ms)\"`",
				"`delay={1000}` on the Slow button",
				"Each trigger uses `{#snippet triggerChild(props)}` with `<Button variant=\"glass\" {...props}>`"
			],
			"tags": [
				"tooltip",
				"delay",
				"button",
				"hover",
				"timing"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"general"
				],
				"style": [
					"glassmorphism"
				],
				"motion": "subtle",
				"interaction": [
					"hover",
					"keyboard"
				],
				"layout": "overlay",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Tooltip",
					"Button"
				],
				"aliases": [
					"hover delay",
					"instant hint",
					"show delay"
				],
				"related": [
					"142",
					"145",
					"144"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Tooltip",
				"Button"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Tooltip",
						"Button"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/display/tooltip#custom-delay",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "144",
			"group": "display",
			"page": "tooltip",
			"variant": "OnIcons",
			"slug": "on-icon-buttons",
			"title": "On icon buttons",
			"description": "",
			"summary": "Four icon-only buttons (Info, Heart, Zap, Star) that each reveal a Tooltip describing the action.",
			"use": "Icon-only toolbar actions that need a visible text label on hover or focus.",
			"spec": [
				"Each `Tooltip` uses `{#snippet triggerChild(props)}` with `<IconButton aria-label=\"Info\" {...props}>`",
				"Icons from `@lucide/svelte`: `<Info size={20} />`, `<Heart size={20} />`, `<Zap size={20} />`, `<Star size={20} />`",
				"Tooltip content: Info, Add to favourites, Boost performance, Rate this component",
				"Other `aria-label` values: `aria-label=\"Favourite\"`, `aria-label=\"Boost\"`, `aria-label=\"Rate\"`"
			],
			"tags": [
				"tooltip",
				"icon-button",
				"icons",
				"aria-label",
				"toolbar",
				"lucide"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"hover",
					"keyboard"
				],
				"layout": "overlay",
				"colorMode": "both",
				"density": "compact",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Tooltip",
					"IconButton"
				],
				"aliases": [
					"icon hint",
					"icon label",
					"toolbar hint"
				],
				"related": [
					"142",
					"143",
					"145"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Tooltip",
				"IconButton"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Tooltip",
						"IconButton"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/display/tooltip#on-icon-buttons",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "145",
			"group": "display",
			"page": "tooltip",
			"variant": "Sides",
			"slug": "all-sides",
			"title": "All sides",
			"description": "",
			"summary": "Four outlined buttons whose tooltips open on the top, right, bottom and left side.",
			"use": "Choosing the tooltip side so it does not cover neighbouring controls or run off the screen.",
			"spec": [
				"`side=\"top\"` with `content=\"Tooltip on top\"`",
				"`side=\"right\"` with `content=\"Tooltip on right\"`",
				"`side=\"bottom\"` with `content=\"Tooltip on bottom\"`",
				"`side=\"left\"` with `content=\"Tooltip on left\"`",
				"Each trigger uses `{#snippet triggerChild(props)}` with `<Button variant=\"outlined\" {...props}>`"
			],
			"tags": [
				"tooltip",
				"side",
				"placement",
				"top",
				"bottom",
				"button"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"hover",
					"keyboard"
				],
				"layout": "overlay",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Tooltip",
					"Button"
				],
				"aliases": [
					"placement",
					"tooltip position",
					"popover side"
				],
				"related": [
					"142",
					"143",
					"144"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Tooltip",
				"Button"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Tooltip",
						"Button"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/display/tooltip#all-sides",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "146",
			"group": "navigation",
			"page": "actions",
			"variant": "Autofocus",
			"slug": "autofocus",
			"title": "autofocus",
			"description": "Focuses the element when it mounts.",
			"summary": "An input that receives focus on mount, with a button that remounts it through a keyed block.",
			"use": "Dialogs, inline editors and search fields where the first field should take focus as soon as it appears.",
			"spec": [
				"`use:autofocus` imported from `@codeatlasdev/ui/actions` on a native `<input`",
				"Input has `placeholder=\"Focused on mount\"` and `aria-label=\"Autofocused input\"`",
				"`let key = $state(0)` drives `{#key key}` around the input",
				"`<Button onclick={() => key++}>Remount input</Button>` remounts the input so focus is applied again"
			],
			"tags": [
				"autofocus",
				"action",
				"focus",
				"input",
				"remount",
				"a11y"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "navigation",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"keyboard",
					"press"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Button"
				],
				"aliases": [
					"focus on mount",
					"auto focus"
				],
				"related": [
					"149",
					"148"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Button"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Button"
					]
				},
				{
					"from": "@codeatlasdev/ui/actions",
					"names": [
						"autofocus"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/navigation/actions#autofocus",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "147",
			"group": "navigation",
			"page": "actions",
			"variant": "ClickOutside",
			"slug": "clickoutside",
			"title": "clickOutside",
			"description": "Calls the handler for every click that lands outside the element. It listens on the capture phase of `document`.",
			"summary": "A box that counts how many clicks land outside it using the clickOutside action.",
			"use": "Closing popovers, dropdowns and inline editors when the user clicks elsewhere on the page.",
			"spec": [
				"`use:clickOutside={() => count++}` imported from `@codeatlasdev/ui/actions` on a `div` with `class=\"box\"`",
				"`let count = $state(0)` is incremented by the callback",
				"Box text: Click inside this area, then click outside.",
				"Counter shown as `Outside clicks: {count}`"
			],
			"tags": [
				"click-outside",
				"action",
				"dismiss",
				"popover",
				"dropdown",
				"event"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "navigation",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"press",
					"cursor"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [],
				"aliases": [
					"outside click",
					"dismiss"
				],
				"related": [
					"149",
					"160"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [],
			"imports": [
				{
					"from": "@codeatlasdev/ui/actions",
					"names": [
						"clickOutside"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/navigation/actions#clickoutside",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "148",
			"group": "navigation",
			"page": "actions",
			"variant": "Clipboard",
			"slug": "clipboard",
			"title": "clipboard",
			"description": "Copies the given text on click and dispatches a copy event (listen with `oncopy`) once the copy succeeded.",
			"summary": "A native button that copies an install command to the clipboard and shows a Copied! label for two seconds.",
			"use": "Copy-to-clipboard affordances for install commands, API keys and share links.",
			"spec": [
				"`use:clipboard={'bun add @codeatlasdev/ui'}` imported from `@codeatlasdev/ui/actions` on a native `<button`",
				"`oncopy={done}` sets `copied = true` and resets it with `setTimeout(() => (copied = false), 2000)`",
				"Label switches with state: `{copied ? 'Copied!' : 'Copy install command'}`",
				"`let copied = $state(false)`"
			],
			"tags": [
				"clipboard",
				"copy",
				"action",
				"button",
				"feedback",
				"install-command"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "navigation",
				"industry": [
					"devtools"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [],
				"aliases": [
					"copy to clipboard",
					"copy text"
				],
				"related": [
					"147",
					"150"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [],
			"imports": [
				{
					"from": "@codeatlasdev/ui/actions",
					"names": [
						"clipboard"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/navigation/actions#clipboard",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "149",
			"group": "navigation",
			"page": "actions",
			"variant": "FocusTrap",
			"slug": "focustrap",
			"title": "focusTrap",
			"description": "Keeps Tab and Shift+Tab inside the element while enabled.",
			"summary": "A button that opens a box where Tab stays trapped among three buttons until Close is pressed.",
			"use": "Modal-like surfaces such as dialogs, drawers and inline panels that must keep keyboard focus inside.",
			"spec": [
				"`use:focusTrap={open}` imported from `@codeatlasdev/ui/actions` on a `div` with `class=\"trap\"`",
				"`let open = $state(false)` toggled by `<Button onclick={() => (open = true)}>Open trap</Button>`",
				"Trap is rendered inside `{#if open}` and holds Button A and Button B with `variant=\"outlined\"`",
				"Close button uses `onclick={() => (open = false)}` to release the trap"
			],
			"tags": [
				"focus-trap",
				"action",
				"keyboard",
				"a11y",
				"modal",
				"tab-order"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "navigation",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"keyboard",
					"press"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Button"
				],
				"aliases": [
					"trap focus",
					"modal accessibility"
				],
				"related": [
					"146",
					"147"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Button"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Button"
					]
				},
				{
					"from": "@codeatlasdev/ui/actions",
					"names": [
						"focusTrap"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/navigation/actions#focustrap",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "150",
			"group": "navigation",
			"page": "actions",
			"variant": "Longpress",
			"slug": "longpress",
			"title": "longpress",
			"description": "Dispatches a longpress event (listen with `onlongpress`) after the pointer is held for the given duration.",
			"summary": "A native button that fires a long-press handler after an 800ms hold and shows Long press! for 1.5 seconds.",
			"use": "Touch and desktop shortcuts for secondary actions, such as selecting a row or opening a context menu.",
			"spec": [
				"`use:longpress={800}` imported from `@codeatlasdev/ui/actions` on a native `<button`",
				"`onlongpress={done}` sets `fired = true` and resets it with `setTimeout(() => (fired = false), 1500)`",
				"Label switches with state: `{fired ? 'Long press!' : 'Press and hold (800ms)'}`",
				"`let fired = $state(false)`"
			],
			"tags": [
				"longpress",
				"action",
				"touch",
				"gesture",
				"button",
				"hold"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "navigation",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [],
				"aliases": [
					"press and hold",
					"long touch"
				],
				"related": [
					"148",
					"147"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [],
			"imports": [
				{
					"from": "@codeatlasdev/ui/actions",
					"names": [
						"longpress"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/navigation/actions#longpress",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "151",
			"group": "navigation",
			"page": "app-bar",
			"variant": "Default",
			"slug": "default",
			"title": "Default",
			"description": "Content in the middle and actions in the trailing slot.",
			"summary": "An app bar with a title on the left and search, notifications and avatar on the right, inside a flush card.",
			"use": "Top bar of a page or panel with a product title and a few global quick actions.",
			"spec": [
				"`<Card full flush>` wraps the bar",
				"`GlassAppBar` content is `<span class=\"title\">My Application</span>`",
				"`{#snippet trailing()}` holds two `IconButton` items with `aria-label=\"Search\"` and `aria-label=\"Notifications\"`",
				"Trailing also has `<Avatar alt=\"Ada L\" size=\"sm\" />`",
				"Icons are `<Search size={18} />` and `<Bell size={18} />` from `@lucide/svelte`"
			],
			"tags": [
				"app-bar",
				"glass-app-bar",
				"header",
				"toolbar",
				"icon-button",
				"avatar"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "navigation",
				"industry": [
					"saas"
				],
				"style": [
					"glassmorphism"
				],
				"motion": "none",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "sticky",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"GlassAppBar",
					"IconButton",
					"Avatar",
					"Card"
				],
				"aliases": [
					"header",
					"top bar",
					"toolbar"
				],
				"related": [
					"152",
					"502",
					"946"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"GlassAppBar",
				"IconButton",
				"Avatar",
				"Card"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"GlassAppBar",
						"IconButton",
						"Avatar",
						"Card"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/navigation/app-bar#default",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "152",
			"group": "navigation",
			"page": "app-bar",
			"variant": "WithLeading",
			"slug": "with-leading-icon",
			"title": "With leading icon",
			"description": "A menu button in the leading slot.",
			"summary": "An app bar with a menu button in the leading slot and an Upgrade button plus avatar in the trailing slot.",
			"use": "Mobile or dashboard headers that need a menu toggle on the left and a primary call to action on the right.",
			"spec": [
				"`<Card full flush>` wraps the bar",
				"`GlassAppBar` content is `<span class=\"title\">Dashboard</span>`",
				"`{#snippet leading()}` holds `<IconButton aria-label=\"Open menu\">` with `<Menu size={20} />`",
				"`{#snippet trailing()}` holds `<Button size=\"sm\" variant=\"filled\">Upgrade</Button>`",
				"Trailing also has `<Avatar alt=\"Carlos M\" size=\"sm\" />`"
			],
			"tags": [
				"app-bar",
				"glass-app-bar",
				"leading",
				"trailing",
				"header",
				"menu-button"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "navigation",
				"industry": [
					"saas"
				],
				"style": [
					"glassmorphism"
				],
				"motion": "none",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "sticky",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"GlassAppBar",
					"Button",
					"IconButton",
					"Avatar",
					"Card"
				],
				"aliases": [
					"header",
					"top bar",
					"hamburger"
				],
				"related": [
					"151",
					"502",
					"946"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"GlassAppBar",
				"Button",
				"IconButton",
				"Avatar",
				"Card"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"GlassAppBar",
						"Button",
						"IconButton",
						"Avatar",
						"Card"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/navigation/app-bar#with-leading-icon",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "153",
			"group": "navigation",
			"page": "breadcrumb",
			"variant": "Levels",
			"slug": "levels",
			"title": "Levels",
			"description": "Two, three and five levels, and a single root item.",
			"summary": "Four stacked breadcrumbs with 2, 3, 5 and 1 levels, where the last item is the current page without a link.",
			"use": "Showing where a page sits in the hierarchy, from a single root page to a deep settings path.",
			"spec": [
				"Four `Breadcrumb` components in a `<div class=\"stack\">`, each with an `items` array of `label` and optional `href`",
				"Two levels: `{ label: 'Home', href: '/' }, { label: 'Components' }`",
				"Three levels end with `{ label: 'Breadcrumb' }` after `href: '/docs/navigation/'`",
				"Five levels run from Home to `{ label: 'Two-Factor Auth' }` via `href: '/settings/account/security'`",
				"Single level: `items={[{ label: 'Home' }]}` with no `href`"
			],
			"tags": [
				"breadcrumb",
				"navigation",
				"hierarchy",
				"levels",
				"path",
				"links"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "navigation",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "compact",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Breadcrumb"
				],
				"aliases": [
					"trail",
					"path",
					"hierarchy"
				],
				"related": [
					"154"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Breadcrumb"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Breadcrumb"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/navigation/breadcrumb#levels",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "154",
			"group": "navigation",
			"page": "breadcrumb",
			"variant": "Separator",
			"slug": "custom-separator",
			"title": "Custom separator",
			"description": "Using › instead of /.",
			"summary": "A breadcrumb with a custom separator character between three items.",
			"use": "Matching breadcrumb punctuation to a product's visual language, for example a chevron between levels.",
			"spec": [
				"`<Breadcrumb` with `items` Docs (`href: '/'`), API Reference (`href: '/api'`) and Components (no `href`)",
				"`separator=\"›\"` sets a single character as the separator"
			],
			"tags": [
				"breadcrumb",
				"separator",
				"navigation",
				"custom",
				"path"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "navigation",
				"industry": [
					"devtools"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "compact",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Breadcrumb"
				],
				"aliases": [
					"trail",
					"path",
					"separator"
				],
				"related": [
					"153"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Breadcrumb"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Breadcrumb"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/navigation/breadcrumb#custom-separator",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "155",
			"group": "navigation",
			"page": "command-palette",
			"variant": "Keys",
			"slug": "keyboard",
			"title": "Keyboard",
			"description": "Type to filter across every module. Queries shorter than minQueryLength keep the full grouped list.",
			"summary": "A static list of four keyboard hints for the command palette, each pairing a Kbd key with a description.",
			"use": "Documenting the shortcuts of a search or command palette next to the feature it belongs to.",
			"spec": [
				"`const keys` has four entries with fields `key` and `desc`",
				"Rendered with `{#each keys as k}` as `<Kbd>{k.key}</Kbd><span>{k.desc}</span>` inside a `<ul class=\"list\">`",
				"Key labels: `Type`, `↑ ↓`, `↵`, `ESC`",
				"Descriptions: `Filter by label or module name`, `Move through the results`, `Navigate to the selected item`, `Close the palette`"
			],
			"tags": [
				"kbd",
				"keyboard",
				"shortcuts",
				"command-palette",
				"hints",
				"legend"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "navigation",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "compact",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Kbd"
				],
				"aliases": [
					"shortcuts",
					"hotkeys",
					"cheat sheet"
				],
				"related": [
					"156",
					"422"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Kbd"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Kbd"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/navigation/command-palette#keyboard",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "156",
			"group": "navigation",
			"page": "command-palette",
			"variant": "Palette",
			"slug": "open-the-palette",
			"title": "Open the palette",
			"description": "Click the button or press Cmd+K / Ctrl+K while this page is focused. Picking an item shows its path instead of navigating.",
			"summary": "A command palette opened by a button, filtering two modules of navigation items and reporting the picked path.",
			"use": "Global quick navigation: jump to any page of a multi-module app by typing its name.",
			"spec": [
				"`<CommandPalette {modules} onNavigate={(path) => (picked = path)} bind:open />`",
				"`const modules: NavModule[]` has two modules, `id: 'app'` with 3 items and `id: 'account'` with 3 items",
				"Items carry `id`, `label`, `icon` and `path`, for example `path: '/app/dashboard'`",
				"`<Button variant=\"filled\" onclick={() => (open = true)}>` with `{#snippet leading()}<Keyboard size={16} />{/snippet}` opens it",
				"A `<Kbd>` hint is shown beside the button",
				"Result shown in `aria-live=\"polite\"` as `Selected: <code>{picked}</code>`"
			],
			"tags": [
				"command-palette",
				"search",
				"navigation",
				"modules",
				"keyboard",
				"kbd",
				"dialog"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "navigation",
				"industry": [
					"saas",
					"devtools"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"keyboard",
					"press"
				],
				"layout": "overlay",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"CommandPalette",
					"Button",
					"Kbd"
				],
				"aliases": [
					"spotlight",
					"quick switcher",
					"cmd k"
				],
				"related": [
					"422",
					"155"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"CommandPalette",
				"Button",
				"Kbd"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"CommandPalette",
						"Button",
						"Kbd",
						"NavModule"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/navigation/command-palette#open-the-palette",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "157",
			"group": "navigation",
			"page": "drawer",
			"variant": "Sides",
			"slug": "left-and-right",
			"title": "Left and right",
			"description": "Left for navigation, right for settings or details.",
			"summary": "Two buttons that open a left navigation drawer and a right settings drawer.",
			"use": "Slide-in panels for site navigation on mobile or for quick settings without leaving the page.",
			"spec": [
				"`<Drawer bind:open={leftOpen} side=\"left\" title=\"Navigation\">` holds a `<nav class=\"nav\" aria-label=\"Demo navigation\">` with 4 links: Home, Components, Foundation, About",
				"Left links close it with `onclick={() => (leftOpen = false)}`",
				"`<Drawer bind:open={rightOpen} side=\"right\" title=\"Settings\">` lists 3 label and value rows: Theme Amber, Language English, Notifications Enabled",
				"Triggers are `Button` with `variant=\"outlined\"`, the second with `{#snippet leading()}<Settings size={16} stroke-width={2} />{/snippet}`"
			],
			"tags": [
				"drawer",
				"side-panel",
				"navigation",
				"settings",
				"overlay",
				"left",
				"right"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "navigation",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "overlay",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Drawer",
					"Button"
				],
				"aliases": [
					"off canvas menu",
					"side nav",
					"hamburger menu"
				],
				"related": [
					"090",
					"089",
					"088"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Drawer",
				"Button"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Drawer",
						"Button"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/navigation/drawer#left-and-right",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "158",
			"group": "navigation",
			"page": "menu",
			"variant": "Default",
			"slug": "default",
			"title": "Default",
			"description": "A button trigger with a label, items, a separator and a destructive item.",
			"summary": "A dropdown menu of file actions with icons, a separator and a destructive Delete item, reporting the last action.",
			"use": "Row or toolbar action menus offering several operations, with the dangerous one set apart.",
			"spec": [
				"`<DropdownMenu>` with `{#snippet triggerChild(props)}` rendering `<Button variant=\"glass\" {...props}>Open menu</Button>`",
				"`<DropdownMenuLabel>File actions</DropdownMenuLabel>` then items Edit, Duplicate, Download",
				"Each item has `{#snippet icon()}` with `<Edit2 />`, `<Copy />`, `<Download />` or `<Trash2 />`",
				"`<DropdownMenuSeparator />` precedes `<DropdownMenuItem variant=\"destructive\"` for Delete",
				"`let last = $state('')` is set per item and shown as `Last action: {last}` with `aria-live=\"polite\"`"
			],
			"tags": [
				"dropdown-menu",
				"menu",
				"actions",
				"destructive",
				"separator",
				"icon",
				"trigger"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "navigation",
				"industry": [
					"general"
				],
				"style": [
					"glassmorphism"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "overlay",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"DropdownMenu",
					"DropdownMenuItem",
					"DropdownMenuSeparator",
					"DropdownMenuLabel",
					"Button"
				],
				"aliases": [
					"context actions",
					"kebab",
					"action menu"
				],
				"related": [
					"159",
					"400",
					"401"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"DropdownMenu",
				"DropdownMenuItem",
				"DropdownMenuSeparator",
				"DropdownMenuLabel",
				"Button"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"DropdownMenu",
						"DropdownMenuItem",
						"DropdownMenuSeparator",
						"DropdownMenuLabel",
						"Button"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/navigation/menu#default",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "159",
			"group": "navigation",
			"page": "menu",
			"variant": "IconTrigger",
			"slug": "icon-trigger",
			"title": "Icon trigger",
			"description": "An IconButton trigger. IconButton needs an aria-label.",
			"summary": "A dropdown menu opened by a three-dot icon button, with Share and Copy link items aligned to the end.",
			"use": "Compact overflow menus on cards and table rows where a full button would take too much space.",
			"spec": [
				"`<DropdownMenu align=\"end\">`",
				"`{#snippet triggerChild(props)}` renders `<IconButton aria-label=\"More options\" {...props}>` with `<MoreHorizontal size={18} />`",
				"`<DropdownMenuLabel>Actions</DropdownMenuLabel>` then 2 items: Share and Copy link",
				"Item content is passed with `{#snippet children()}` using `<Share2 size={14} />` and `<Copy size={14} />`"
			],
			"tags": [
				"dropdown-menu",
				"menu",
				"icon-button",
				"overflow",
				"more-options",
				"align",
				"a11y"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "navigation",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "overlay",
				"colorMode": "both",
				"density": "compact",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"DropdownMenu",
					"DropdownMenuItem",
					"DropdownMenuLabel",
					"IconButton"
				],
				"aliases": [
					"kebab",
					"more actions",
					"overflow menu"
				],
				"related": [
					"158",
					"400"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"DropdownMenu",
				"DropdownMenuItem",
				"DropdownMenuLabel",
				"IconButton"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"DropdownMenu",
						"DropdownMenuItem",
						"DropdownMenuLabel",
						"IconButton"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/navigation/menu#icon-trigger",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "160",
			"group": "navigation",
			"page": "popover",
			"variant": "Basic",
			"slug": "basic",
			"title": "Basic",
			"description": "Text and an action inside the popover.",
			"summary": "A popover opened from a button, containing a sentence of text and a Confirm button.",
			"use": "Short contextual help or a quick confirmation anchored to the element that triggered it.",
			"spec": [
				"`<Popover>` with `{#snippet triggerChild(props)}<Button {...props}>Open popover</Button>{/snippet}`",
				"Content is `<Stack gap=\"3\">` with a paragraph and `<Button size=\"sm\" variant=\"filled\">Confirm</Button>`",
				"Paragraph text: This is a basic popover with some content inside."
			],
			"tags": [
				"popover",
				"trigger",
				"overlay",
				"confirm",
				"stack",
				"contextual"
			],
			"shape": "square",
			"index": {
				"kind": "component",
				"subtype": "navigation",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "overlay",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Popover",
					"Button",
					"Stack"
				],
				"aliases": [
					"floating panel",
					"tooltip panel"
				],
				"related": [
					"161",
					"470",
					"940"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Popover",
				"Button",
				"Stack"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Popover",
						"Button",
						"Stack"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/navigation/popover#basic",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "161",
			"group": "navigation",
			"page": "popover",
			"variant": "Form",
			"slug": "form",
			"title": "Form",
			"description": "A small form anchored to its trigger, aligned to the start.",
			"summary": "A popover anchored below-start of a button that holds a text field with Cancel and Save buttons.",
			"use": "Inline editing of a single value, such as renaming a label, without opening a modal.",
			"spec": [
				"`<Popover side=\"bottom\" align=\"start\">`",
				"`{#snippet triggerChild(props)}` renders `<Button variant=\"filled\" {...props}>Edit label</Button>`",
				"`<TextField label=\"Label name\" placeholder=\"e.g. Priority\" />` inside `<Stack gap=\"3\">`",
				"`<Flex gap=\"2\" justify=\"end\">` holds `<Button size=\"sm\" variant=\"ghost\">Cancel</Button>` and `<Button size=\"sm\" variant=\"filled\">Save</Button>`"
			],
			"tags": [
				"popover",
				"form",
				"text-field",
				"inline-edit",
				"side",
				"align",
				"overlay"
			],
			"shape": "square",
			"index": {
				"kind": "component",
				"subtype": "navigation",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"keyboard",
					"press"
				],
				"layout": "overlay",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Popover",
					"Button",
					"TextField",
					"Stack",
					"Flex"
				],
				"aliases": [
					"inline form",
					"floating form"
				],
				"related": [
					"160",
					"470",
					"085"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Popover",
				"Button",
				"TextField",
				"Stack",
				"Flex"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Popover",
						"Button",
						"TextField",
						"Stack",
						"Flex"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/navigation/popover#form",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "162",
			"group": "navigation",
			"page": "stepper",
			"variant": "Horizontal",
			"slug": "horizontal-stepper",
			"title": "Horizontal stepper",
			"description": "Four steps with Back and Next controls.",
			"summary": "A four-step horizontal stepper inside a card with Back and Next buttons that advance the step.",
			"use": "Multi-step flows such as onboarding or checkout where the user moves through ordered stages.",
			"spec": [
				"`<Stepper {steps} bind:current={step} />` with `let step = $state(0)`",
				"`const steps` has 4 entries with a `label` field: Account, Profile, Billing, Review",
				"Wrapper is `<Card p=\"6\" full>` with `<Stack gap=\"6\">`",
				"Body shows `Step {step + 1}: {steps[step].label}`",
				"Back is `<Button variant=\"ghost\" disabled={step <= 0} onclick={() => step--}>`",
				"Next is `<Button variant=\"filled\" disabled={step >= steps.length - 1} onclick={() => step++}>` and reads Finish on the last step"
			],
			"tags": [
				"stepper",
				"wizard",
				"steps",
				"progress",
				"onboarding",
				"back-next",
				"card"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "navigation",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Stepper",
					"Button",
					"Card",
					"Stack",
					"Flex"
				],
				"aliases": [
					"wizard",
					"multi step",
					"progress steps"
				],
				"related": [
					"164"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Stepper",
				"Button",
				"Card",
				"Stack",
				"Flex"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Stepper",
						"Button",
						"Card",
						"Stack",
						"Flex"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/navigation/stepper#horizontal-stepper",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "163",
			"group": "navigation",
			"page": "tabs",
			"variant": "Controlled",
			"slug": "controlled",
			"title": "Controlled",
			"description": "The parent owns the active tab with bind:value.",
			"summary": "Tabs bound to a state variable with a line below showing the active tab value.",
			"use": "Tabbed views whose active tab must also drive other UI or be read and set from code.",
			"spec": [
				"`<Tabs bind:value={active}>` with `let active = $state('overview')`",
				"`<TabsList>` holds 3 `TabsTrigger` items: `value=\"overview\"`, `value=\"props\"`, `value=\"examples\"`",
				"A matching `TabsContent` per value, each with a one-line `<div class=\"panel\">`",
				"State is echoed as `Active tab: <code>{active}</code>`",
				"Wrapper is `.wrap` with `max-width: 480px`"
			],
			"tags": [
				"tabs",
				"controlled",
				"bind-value",
				"state",
				"tabs-list",
				"tabs-content"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "navigation",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"keyboard",
					"press"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Tabs",
					"TabsList",
					"TabsTrigger",
					"TabsContent"
				],
				"aliases": [
					"tab state",
					"bound tabs"
				],
				"related": [
					"164",
					"460",
					"237"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Tabs",
				"TabsList",
				"TabsTrigger",
				"TabsContent"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Tabs",
						"TabsList",
						"TabsTrigger",
						"TabsContent"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/navigation/tabs#controlled",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "164",
			"group": "navigation",
			"page": "tabs",
			"variant": "Default",
			"slug": "default",
			"title": "Default",
			"description": "Three tabs with content panels.",
			"summary": "An uncontrolled tab set of Overview, Props and Examples, each with a short paragraph of documentation text.",
			"use": "Splitting a detail view into a few peer sections of content without managing state.",
			"spec": [
				"`<Tabs value=\"overview\">` sets the initial tab without binding",
				"`<TabsList>` holds 3 `TabsTrigger` items: `value=\"overview\"`, `value=\"props\"`, `value=\"examples\"`",
				"Each value has a `TabsContent` with a `<div class=\"panel\">` and one paragraph",
				"Wrapper is `.wrap` with `max-width: 560px`"
			],
			"tags": [
				"tabs",
				"uncontrolled",
				"tabs-list",
				"tabs-content",
				"sections",
				"default"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "navigation",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"keyboard",
					"press"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Tabs",
					"TabsList",
					"TabsTrigger",
					"TabsContent"
				],
				"aliases": [
					"tab panel",
					"segmented"
				],
				"related": [
					"163",
					"237",
					"238",
					"460"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Tabs",
				"TabsList",
				"TabsTrigger",
				"TabsContent"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Tabs",
						"TabsList",
						"TabsTrigger",
						"TabsContent"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/navigation/tabs#default",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "165",
			"group": "layout",
			"page": "app-shell",
			"variant": "Anatomy",
			"slug": "anatomy",
			"title": "Anatomy",
			"description": "Rail (52px), panel (200px by default) and the main content area.",
			"summary": "A labelled diagram of the app shell showing a 52px rail, a 200px panel and the main content area.",
			"use": "Explaining how the app shell is divided before wiring navigation into it.",
			"spec": [
				"Root is `role=\"img\"` with `aria-label=\"App shell anatomy: rail, panel and main content\"`",
				"Rail label `Rail<br />52px` over 4 icon blocks, the second marked `class:rail-icon--active={i === 1}`",
				"Panel label `Panel<br />200px` over items Dashboard, Users, Reports, Settings, the first marked `class:panel-item--active={i === 0}`",
				"Main area labelled Main content with a top bar and 3 content blocks, one `content-block--short`",
				"Diagram size is `height: 280px` and `width: 100%`"
			],
			"tags": [
				"app-shell",
				"anatomy",
				"rail",
				"panel",
				"layout",
				"diagram"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "layout",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "split",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [],
				"aliases": [
					"sidebar diagram",
					"navigation anatomy",
					"rail panel main"
				],
				"related": [
					"166",
					"600",
					"481"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [],
			"imports": [],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/layout/app-shell#anatomy",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "166",
			"group": "layout",
			"page": "app-shell",
			"variant": "Shell",
			"slug": "live-shell",
			"title": "Live shell",
			"description": "The real component inside a fixed-height frame. The pathname lives in local state; click the rail and panel to navigate.",
			"summary": "A working app shell with a rail, panel and page content whose pathname lives in local state and updates on navigation.",
			"use": "Wiring the shell into an app: the router owns the URL and the shell receives it as a prop.",
			"spec": [
				"`<AppShellLayout {modules} {pathname} onNavigate={(path) => (pathname = path)} persistPanel={false} mainId={null} skipLink={false}>`",
				"`const modules: NavModule[]` has two modules, `id: 'app'` and `id: 'account'`, with 3 items each",
				"`let pathname = $state('/app/dashboard')` is the only navigation state",
				"`function intercept(e: MouseEvent)` turns in-stage `a[href^=\"/\"]` clicks into `pathname` updates",
				"Page is `<PageShell title={titles[pathname] ?? 'Page'} description={pathname}>` with a `KpiGrid` of 2 `KpiCard` items: Revenue and Users",
				"Stage height is `height: 440px`"
			],
			"tags": [
				"app-shell",
				"app-shell-layout",
				"navigation",
				"rail",
				"sidebar",
				"router-agnostic",
				"page-shell"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "layout",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"hover",
					"keyboard"
				],
				"layout": "split",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"AppShellLayout",
					"PageShell",
					"KpiCard",
					"KpiGrid",
					"Card"
				],
				"aliases": [
					"sidebar navigation",
					"admin layout",
					"dashboard frame"
				],
				"related": [
					"165",
					"601",
					"530",
					"480"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"AppShellLayout",
				"PageShell",
				"KpiCard",
				"KpiGrid",
				"Card"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"AppShellLayout",
						"PageShell",
						"KpiCard",
						"KpiGrid",
						"Card",
						"NavModule"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/layout/app-shell#live-shell",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "167",
			"group": "layout",
			"page": "empty-state",
			"variant": "Basic",
			"slug": "basic",
			"title": "Basic",
			"description": "Icon, title, description and a primary action.",
			"summary": "An empty inbox state with an icon, a title, a description and a Compose message button.",
			"use": "First-run or cleared lists where the user needs a clear next action.",
			"spec": [
				"`<EmptyState icon={Inbox} title=\"No messages yet\" description=\"Your inbox is empty. New messages will appear here.\">`",
				"`{#snippet actions()}` holds `<Button variant=\"filled\" size=\"sm\">Compose message</Button>`"
			],
			"tags": [
				"empty-state",
				"inbox",
				"icon",
				"actions",
				"placeholder"
			],
			"shape": "square",
			"index": {
				"kind": "component",
				"subtype": "layout",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "airy",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"EmptyState",
					"Button"
				],
				"aliases": [
					"blank slate",
					"no data",
					"inbox zero"
				],
				"related": [
					"170",
					"171",
					"168",
					"169"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"EmptyState",
				"Button"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"EmptyState",
						"Button"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/layout/empty-state#basic",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "168",
			"group": "layout",
			"page": "empty-state",
			"variant": "Hero",
			"slug": "hero",
			"title": "Hero",
			"description": "A larger, brand-tinted tile with a glow. On mobile the actions stack full width, so put the primary one first.",
			"summary": "A hero-sized empty state inviting the user to start a first project, with Create project and Import buttons.",
			"use": "Onboarding screens for an empty workspace where the page has nothing else to show.",
			"spec": [
				"`<EmptyState variant=\"hero\" icon={Inbox} title=\"Start your first project\"`",
				"`description=\"Projects keep your sessions, contacts and settings in one place.\"`",
				"`{#snippet actions()}` holds `<Button variant=\"filled\">Create project</Button>` and `<Button variant=\"ghost\">Import</Button>`",
				"Both buttons use the default size, with no size attribute"
			],
			"tags": [
				"empty-state",
				"hero",
				"onboarding",
				"first-run",
				"actions",
				"project"
			],
			"shape": "square",
			"index": {
				"kind": "component",
				"subtype": "layout",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "airy",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"EmptyState",
					"Button"
				],
				"aliases": [
					"onboarding",
					"first run",
					"get started"
				],
				"related": [
					"167",
					"169",
					"881"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"EmptyState",
				"Button"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"EmptyState",
						"Button"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/layout/empty-state#hero",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "169",
			"group": "layout",
			"page": "empty-state",
			"variant": "NoIcon",
			"slug": "no-icon",
			"title": "No icon",
			"description": "A minimal version without an icon.",
			"summary": "An empty state without an icon, showing a title, a description and a Create item button with a Plus icon.",
			"use": "Simple empty lists where an icon adds no meaning and a single create action is enough.",
			"spec": [
				"`<EmptyState title=\"Nothing here yet\" description=\"Create your first item to get started.\">` is passed no icon",
				"`{#snippet actions()}` holds `<Button variant=\"filled\" size=\"sm\">`",
				"Button has `{#snippet leading()}<Plus size={14} />{/snippet}` and the label Create item"
			],
			"tags": [
				"empty-state",
				"no-icon",
				"create",
				"leading-icon",
				"actions"
			],
			"shape": "square",
			"index": {
				"kind": "component",
				"subtype": "layout",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"EmptyState",
					"Button"
				],
				"aliases": [
					"text only empty",
					"nothing yet",
					"create first item"
				],
				"related": [
					"167",
					"168",
					"170"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"EmptyState",
				"Button"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"EmptyState",
						"Button"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/layout/empty-state#no-icon",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "170",
			"group": "layout",
			"page": "empty-state",
			"variant": "NoResults",
			"slug": "no-results",
			"title": "No results",
			"description": "For searches and filters that match nothing.",
			"summary": "A no-results state for search with a magnifier icon and a Clear filters button.",
			"use": "Search and filter screens where the query matched nothing and the user should reset it.",
			"spec": [
				"`<EmptyState icon={Search} title=\"No results found\" description=\"Try adjusting your search terms or filters.\">`",
				"`{#snippet actions()}` holds `<Button variant=\"outlined\" size=\"sm\">Clear filters</Button>`"
			],
			"tags": [
				"empty-state",
				"no-results",
				"search",
				"filters",
				"actions"
			],
			"shape": "square",
			"index": {
				"kind": "component",
				"subtype": "layout",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"EmptyState",
					"Button"
				],
				"aliases": [
					"zero results",
					"search empty",
					"clear filters"
				],
				"related": [
					"167",
					"171",
					"881"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"EmptyState",
				"Button"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"EmptyState",
						"Button"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/layout/empty-state#no-results",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "171",
			"group": "layout",
			"page": "empty-state",
			"variant": "Offline",
			"slug": "error-or-offline",
			"title": "Error or offline",
			"description": "Failed network requests and loading errors.",
			"summary": "A load-failure state with a wifi-off icon and Retry plus Contact support buttons.",
			"use": "Network or fetch errors on a data panel where the user can retry or escalate.",
			"spec": [
				"`<EmptyState icon={WifiOff} title=\"Couldn't load data\" description=\"Check your connection and try again.\">`",
				"`{#snippet actions()}` holds `<Button variant=\"outlined\" size=\"sm\">Retry</Button>` and `<Button variant=\"ghost\" size=\"sm\">Contact support</Button>`"
			],
			"tags": [
				"empty-state",
				"offline",
				"error",
				"retry",
				"network",
				"actions"
			],
			"shape": "square",
			"index": {
				"kind": "component",
				"subtype": "layout",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"EmptyState",
					"Button"
				],
				"aliases": [
					"network error",
					"connection lost",
					"retry state"
				],
				"related": [
					"170",
					"172",
					"167"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"EmptyState",
				"Button"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"EmptyState",
						"Button"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/layout/empty-state#error-or-offline",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "172",
			"group": "layout",
			"page": "error-page",
			"variant": "Statuses",
			"slug": "404-without-actions",
			"title": "404 without actions",
			"description": "hideActions removes the back and home buttons.",
			"summary": "The ErrorPage component rendering a 404 status without its action buttons.",
			"use": "Route-level error screens for not found, forbidden or server errors.",
			"spec": [
				"`<ErrorPage status={404} hideActions />`",
				"Only the `status` prop and `hideActions` are passed, no custom title or actions"
			],
			"tags": [
				"error-page",
				"404",
				"not-found",
				"status",
				"error"
			],
			"shape": "square",
			"index": {
				"kind": "component",
				"subtype": "layout",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "full-bleed",
				"colorMode": "both",
				"density": "airy",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"ErrorPage"
				],
				"aliases": [
					"404",
					"not found",
					"status page"
				],
				"related": [
					"171",
					"167",
					"840"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"ErrorPage"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"ErrorPage"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/layout/error-page#404-without-actions",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "173",
			"group": "layout",
			"page": "form-page",
			"variant": "Basic",
			"slug": "basic-form",
			"title": "Basic form",
			"description": "Header with a back button, a grid of fields, a list of switches and a sticky footer.",
			"summary": "A complete user creation form with a header, two sections, bound fields and a footer with Cancel and Create user.",
			"use": "Create or edit pages that group fields into sections and keep their actions in a footer.",
			"spec": [
				"`<AppForm title=\"New User\" description=\"Fill in the details to create a new user.\">` with `{#snippet leading()}` holding `<Button variant=\"ghost\" size=\"sm\" aria-label=\"Back\">`",
				"`<FormSection title=\"Account details\"` holds `<TextField label=\"Full name\" bind:value={name}`, `<TextField label=\"Work email\" bind:value={email}` and `<Select label=\"Role\" bind:value={role} options={roleOptions} />`",
				"`roleOptions` has 3 entries: Admin, Editor, Viewer, with `let role = $state('viewer')`",
				"`<FormSection title=\"Notifications\" description=\"Email preferences.\" layout=\"list\">` holds `<Switch label=\"Send welcome email\" bind:checked={welcome} />`, `<Divider />` and `<Switch label=\"Weekly digest\" bind:checked={digest} />`",
				"`{#snippet footer()}` has Cancel with `variant=\"ghost\"` and Create user with `disabled={saving || !name || !email}`",
				"`function save()` sets `saving = true` and resets it with `setTimeout(() => (saving = false), 1400)`"
			],
			"tags": [
				"app-form",
				"form-section",
				"form",
				"text-field",
				"select",
				"switch",
				"footer"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "layout",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"keyboard",
					"press"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"AppForm",
					"FormSection",
					"TextField",
					"Select",
					"Switch",
					"Button",
					"Divider"
				],
				"aliases": [
					"create user",
					"settings form",
					"sectioned form"
				],
				"related": [
					"174",
					"184",
					"183"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"AppForm",
				"FormSection",
				"TextField",
				"Select",
				"Switch",
				"Button",
				"Divider"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"AppForm",
						"FormSection",
						"TextField",
						"Select",
						"Switch",
						"Button",
						"Divider"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/layout/form-page#basic-form",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "174",
			"group": "layout",
			"page": "form-page",
			"variant": "NoHeader",
			"slug": "without-header",
			"title": "Without header",
			"description": "Omit title, description, leading, trailing and backHref to drop the header.",
			"summary": "A compact form page with no title or description, one section and a Cancel and Save footer.",
			"use": "Quick edit forms embedded in a larger page that already provides its own heading.",
			"spec": [
				"`<AppForm>` is used with no title or description",
				"`<FormSection title=\"Quick update\">` holds `<TextField label=\"Name\" placeholder=\"Enter name…\" />` and `<TextField label=\"Email\" type=\"email\" placeholder=\"email@example.com\" />`",
				"`{#snippet footer()}` holds `<Button variant=\"ghost\">Cancel</Button>` and `<Button variant=\"filled\">Save</Button>`"
			],
			"tags": [
				"app-form",
				"form-section",
				"form",
				"no-header",
				"text-field",
				"footer"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "layout",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"keyboard",
					"press"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "compact",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"AppForm",
					"FormSection",
					"TextField",
					"Button"
				],
				"aliases": [
					"quick edit",
					"short form",
					"headerless form"
				],
				"related": [
					"173",
					"184",
					"188"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"AppForm",
				"FormSection",
				"TextField",
				"Button"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"AppForm",
						"FormSection",
						"TextField",
						"Button"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/layout/form-page#without-header",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "175",
			"group": "layout",
			"page": "kpi-card",
			"variant": "Metrics",
			"slug": "basic-metrics",
			"title": "Basic metrics",
			"description": "",
			"summary": "Three KPI cards with title, value, an optional unit, a positive or negative trend and an icon, inside a KpiGrid.",
			"use": "Dashboard headline numbers such as revenue, users and conversion with their period-over-period change.",
			"spec": [
				"`<KpiGrid>` with 3 `KpiCard` items",
				"`<KpiCard title=\"Monthly Revenue\" value=\"$48,200\" trend={12.4} icon={DollarSign} />`",
				"`<KpiCard title=\"Active Users\" value=\"3,847\" trend={-2.1} icon={Users} />`",
				"`<KpiCard title=\"Conversion\" value=\"4.8\" unit=\"%\" trend={0.6} icon={TrendingUp} />`"
			],
			"tags": [
				"kpi-card",
				"kpi-grid",
				"metrics",
				"trend",
				"dashboard",
				"unit",
				"icon"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "layout",
				"industry": [
					"saas",
					"fintech"
				],
				"style": [
					"default",
					"bento"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "grid",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"KpiCard",
					"KpiGrid"
				],
				"aliases": [
					"metric card",
					"dashboard stat",
					"trend indicator"
				],
				"related": [
					"176",
					"177",
					"178",
					"984"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"KpiCard",
				"KpiGrid"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"KpiCard",
						"KpiGrid"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/layout/kpi-card#basic-metrics",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "176",
			"group": "layout",
			"page": "kpi-card",
			"variant": "NegativeTrend",
			"slug": "negative-trend",
			"title": "Negative trend",
			"description": "",
			"summary": "Two KPI cards whose trends fall and are good news (`trendTone=\"positive-down\"`), one with an icon and one without.",
			"use": "Metrics where a falling number is good news, such as churn rate and response time.",
			"spec": [
				"`<KpiGrid>` with 2 `KpiCard` items",
				"`<KpiCard title=\"Churn Rate\" value=\"5.2\" unit=\"%\" trend={-1.8} trendTone=\"positive-down\" icon={Activity} />`",
				"`<KpiCard title=\"Response Time\" value=\"1.4\" unit=\"s\" trend={-12.3} trendTone=\"positive-down\" />` has no `icon`"
			],
			"tags": [
				"kpi-card",
				"kpi-grid",
				"negative-trend",
				"metrics",
				"churn",
				"unit"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "layout",
				"industry": [
					"saas"
				],
				"style": [
					"default",
					"bento"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "grid",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"KpiCard",
					"KpiGrid"
				],
				"aliases": [
					"falling is good",
					"churn metric",
					"inverted trend"
				],
				"related": [
					"984",
					"175",
					"177"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"KpiCard",
				"KpiGrid"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"KpiCard",
						"KpiGrid"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/layout/kpi-card#negative-trend",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "177",
			"group": "layout",
			"page": "kpi-card",
			"variant": "NoTrend",
			"slug": "without-trend",
			"title": "Without trend",
			"description": "Omit trend and the indicator disappears.",
			"summary": "Three KPI cards without a trend value, one with an icon and two plain.",
			"use": "Snapshot counters, such as orders today or error rate, that have no comparison period.",
			"spec": [
				"`<KpiGrid>` with 3 `KpiCard` items and no trend value",
				"`<KpiCard title=\"Orders Today\" value=\"124\" icon={ShoppingCart} />`",
				"`<KpiCard title=\"Avg. Session\" value=\"3m 42s\" />`",
				"`<KpiCard title=\"Error Rate\" value=\"0.03\" unit=\"%\" />`"
			],
			"tags": [
				"kpi-card",
				"kpi-grid",
				"no-trend",
				"metrics",
				"counters",
				"unit"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "layout",
				"industry": [
					"e-commerce",
					"saas"
				],
				"style": [
					"default",
					"bento"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "grid",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"KpiCard",
					"KpiGrid"
				],
				"aliases": [
					"plain metric",
					"value only",
					"stat without delta"
				],
				"related": [
					"175",
					"179",
					"642"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"KpiCard",
				"KpiGrid"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"KpiCard",
						"KpiGrid"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/layout/kpi-card#without-trend",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "178",
			"group": "layout",
			"page": "kpi-grid",
			"variant": "Four",
			"slug": "four-cards",
			"title": "Four cards",
			"description": "Four across, then 2 x 2, then one column.",
			"summary": "A KpiGrid holding four KPI cards: Revenue, Users, Growth and Uptime, each with a trend and icon.",
			"use": "A full-width row of headline metrics at the top of a dashboard.",
			"spec": [
				"`<KpiGrid>` with 4 `KpiCard` items",
				"`<KpiCard title=\"Revenue\" value=\"$112k\" trend={18.4} icon={DollarSign} />`",
				"`<KpiCard title=\"Users\" value=\"24.8k\" trend={12.1} icon={Users} />`",
				"`<KpiCard title=\"Growth\" value=\"34\" unit=\"%\" trend={5.6} icon={TrendingUp} />`",
				"`<KpiCard title=\"Uptime\" value=\"99.9\" unit=\"%\" trend={0.1} icon={Activity} />`"
			],
			"tags": [
				"kpi-grid",
				"kpi-card",
				"dashboard",
				"metrics",
				"four-columns",
				"grid"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "layout",
				"industry": [
					"saas",
					"fintech"
				],
				"style": [
					"bento",
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "grid",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"KpiCard",
					"KpiGrid"
				],
				"aliases": [
					"four metrics",
					"dashboard row",
					"stat grid"
				],
				"related": [
					"179",
					"175",
					"187"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"KpiCard",
				"KpiGrid"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"KpiCard",
						"KpiGrid"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/layout/kpi-grid#four-cards",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "179",
			"group": "layout",
			"page": "kpi-grid",
			"variant": "Odd",
			"slug": "three-cards",
			"title": "Three cards",
			"description": "One row when it fits, one column on a phone, never 2 + 1.",
			"summary": "A KpiGrid holding three KPI cards to show how the grid lays out an odd number of items.",
			"use": "Dashboards with three headline metrics, where the grid should still look balanced.",
			"spec": [
				"`<KpiGrid>` with 3 `KpiCard` items",
				"`<KpiCard title=\"Revenue\" value=\"$112k\" trend={18.4} icon={DollarSign} />`",
				"`<KpiCard title=\"Users\" value=\"24.8k\" trend={12.1} icon={Users} />`",
				"`<KpiCard title=\"Growth\" value=\"34\" unit=\"%\" trend={5.6} icon={TrendingUp} />`"
			],
			"tags": [
				"kpi-grid",
				"kpi-card",
				"odd",
				"three-columns",
				"dashboard",
				"grid"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "layout",
				"industry": [
					"saas",
					"fintech"
				],
				"style": [
					"bento",
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "grid",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"KpiCard",
					"KpiGrid"
				],
				"aliases": [
					"three metrics",
					"odd count",
					"uneven grid"
				],
				"related": [
					"178",
					"175",
					"177"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"KpiCard",
				"KpiGrid"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"KpiCard",
						"KpiGrid"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/layout/kpi-grid#three-cards",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "180",
			"group": "layout",
			"page": "layout-primitives",
			"variant": "Page",
			"slug": "container-and-section",
			"title": "Container and Section",
			"description": "",
			"summary": "A Container and Section holding a Stack of two plan cards, showing the page-level layout primitives.",
			"use": "Structuring a marketing or settings page with a centered container, a labelled section and stacked cards.",
			"spec": [
				"`<Container size=\"md\">` wraps `<Section size=\"1\" aria-label=\"Plans\">`",
				"`<Stack gap=\"4\">` holds 2 cards with `material=\"solid\"` and `headingLevel={3}`",
				"Cards are `title=\"Starter\"` (Up to 3 projects.) and `title=\"Team\"` (Unlimited projects and roles.)"
			],
			"tags": [
				"container",
				"section",
				"stack",
				"card",
				"layout",
				"page",
				"heading-level"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "layout",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "airy",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Container",
					"Section",
					"Stack",
					"Card"
				],
				"aliases": [
					"page container",
					"section wrapper",
					"pricing plans"
				],
				"related": [
					"181",
					"182",
					"187"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Container",
				"Section",
				"Stack",
				"Card"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Container",
						"Section",
						"Stack",
						"Card"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/layout/layout-primitives#container-and-section",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "181",
			"group": "layout",
			"page": "layout-primitives",
			"variant": "Responsive",
			"slug": "responsive-grid",
			"title": "Responsive Grid",
			"description": "",
			"summary": "A Grid with responsive column counts and gaps holding eight numbered cells.",
			"use": "Card galleries and dashboards that go from one column on phones to four on large screens.",
			"spec": [
				"`<Grid columns={{ base: 1, sm: 2, lg: 4 }} gap={{ base: '2', md: '4' }} p=\"4\">`",
				"`{#each [1, 2, 3, 4, 5, 6, 7, 8] as n (n)}` renders 8 `<Box class=\"cell\" p=\"4\">` cells labelled by `{n}`"
			],
			"tags": [
				"grid",
				"responsive",
				"columns",
				"gap",
				"breakpoints",
				"box",
				"layout"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "layout",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "grid",
				"colorMode": "both",
				"density": "compact",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Grid",
					"Box"
				],
				"aliases": [
					"breakpoints",
					"responsive columns",
					"media query grid"
				],
				"related": [
					"180",
					"182",
					"178"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Grid",
				"Box"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Grid",
						"Box"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/layout/layout-primitives#responsive-grid",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "182",
			"group": "layout",
			"page": "layout-primitives",
			"variant": "Stack",
			"slug": "flex-stack-and-box",
			"title": "Flex, Stack and Box",
			"description": "",
			"summary": "A Stack with a wrapping Flex row of three chips above a single padded Box.",
			"use": "Composing small layouts with spacing props instead of custom CSS.",
			"spec": [
				"`<Stack gap=\"4\" p=\"4\">` is the root",
				"`<Flex gap=\"3\" align=\"center\" justify=\"between\" wrap>` holds 3 `<Box class=\"chip\" px=\"3\" py=\"1\">` items",
				"Chip labels: Flex, space between; gap 3; wraps",
				"A last `<Box class=\"chip\" p=\"4\">` reads Stack gap 4, Box padding 4"
			],
			"tags": [
				"stack",
				"flex",
				"box",
				"spacing",
				"gap",
				"layout",
				"primitives"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "layout",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "compact",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Stack",
					"Flex",
					"Box"
				],
				"aliases": [
					"flexbox",
					"vertical rhythm",
					"gap spacing"
				],
				"related": [
					"181",
					"180",
					"189"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Stack",
				"Flex",
				"Box"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Stack",
						"Flex",
						"Box"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/layout/layout-primitives#flex-stack-and-box",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "183",
			"group": "layout",
			"page": "list-page",
			"variant": "AppListDemo",
			"slug": "applist",
			"title": "AppList",
			"description": "Pass data and the layout handles search, filters and pagination.",
			"summary": "A searchable, filterable users list with a New user action, a role filter and a table with user cell and status chip.",
			"use": "Admin list pages where the user searches, filters by one field and acts on rows.",
			"spec": [
				"`<AppList title=\"Users\" data={ALL} searchKeys={['name', 'email']} perPage={4}>`",
				"`const ALL` has 4 rows with fields `id`, `name`, `email`, `role`, `status`",
				"`{#snippet actions()}` holds `<Button variant=\"filled\" size=\"sm\">` with `<Plus size={14} />` and the label New user",
				"`{#snippet filters(list)}` renders `<FilterGroup options={roleOpts} value={list.filters['role'] ?? 'all'} onchange={(v) => list.setFilter('role', v)} />`",
				"`{#snippet children(list)}` renders a `SimpleTable` over `{#each list.rows as u (u.id)}` with `<UserCell name={u.name} email={u.email} />` and `<StatusChip`",
				"Frame size is `height: 420px`"
			],
			"tags": [
				"app-list",
				"list-page",
				"search",
				"filter-group",
				"simple-table",
				"status-chip",
				"user-cell"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "layout",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"keyboard",
					"press"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"AppList",
					"Button",
					"FilterGroup",
					"SimpleTable",
					"StatusChip",
					"UserCell"
				],
				"aliases": [
					"users table",
					"searchable list",
					"admin list"
				],
				"related": [
					"184",
					"185",
					"245"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"AppList",
				"Button",
				"FilterGroup",
				"SimpleTable",
				"StatusChip",
				"UserCell"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"AppList",
						"Button",
						"FilterGroup",
						"SimpleTable",
						"StatusChip",
						"UserCell"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/layout/list-page#applist",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "184",
			"group": "layout",
			"page": "list-page",
			"variant": "AppSettingsDemo",
			"slug": "appsettings",
			"title": "AppSettings",
			"description": "Side navigation plus content. The active tab is managed internally.",
			"summary": "A settings page with General and Security tabs, a Save action and form sections with text fields and switches.",
			"use": "Workspace or account settings split into tabs, each with its own grouped form.",
			"spec": [
				"`<AppSettings title=\"Settings\" tabs={TABS}>` with `const TABS` of 2 entries: General (`value: 'general'`) and Security (`value: 'security'`), each with an `icon`",
				"`{#snippet actions()}` holds `<Button variant=\"filled\" size=\"sm\">Save</Button>`",
				"`{#snippet children(tab)}` switches on `{#if tab === 'general'}` and `{:else if tab === 'security'}`",
				"General has `<FormSection title=\"Workspace\">` with `<TextField label=\"Name\" bind:value={wsName} />` and `<TextField label=\"Slug\" value=\"my-workspace\" />`",
				"Security has `<FormSection title=\"Authentication\" layout=\"list\">` with `<Switch label=\"Two-factor authentication\" />` and `<Switch label=\"Single sign-on (SSO)\" />`",
				"Frame size is `height: 380px`"
			],
			"tags": [
				"app-settings",
				"settings",
				"tabs",
				"form-section",
				"switch",
				"text-field",
				"list-page"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "layout",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"keyboard",
					"press"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"AppSettings",
					"Button",
					"FormSection",
					"Switch",
					"TextField"
				],
				"aliases": [
					"preferences",
					"tabbed settings",
					"workspace settings"
				],
				"related": [
					"173",
					"600",
					"183"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"AppSettings",
				"Button",
				"FormSection",
				"Switch",
				"TextField"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"AppSettings",
						"Button",
						"FormSection",
						"Switch",
						"TextField"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/layout/list-page#appsettings",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "185",
			"group": "layout",
			"page": "list-page",
			"variant": "PageShellDemo",
			"slug": "pageshell",
			"title": "PageShell",
			"description": "A scrollable container for dashboards and non-CRUD pages.",
			"summary": "A dashboard page shell with four KPI cards and a placeholder card for a chart or table.",
			"use": "The base page layout of a dashboard: title, headline metrics and a main content area.",
			"spec": [
				"`<PageShell title=\"Dashboard\">` is the root, with no description or actions",
				"`<KpiGrid>` holds 4 `KpiCard` items: Revenue `$118k`, Users `24.8k`, Growth `34%`, Uptime `99.9%`",
				"Each card has a `trend` and an `icon`, for example `trend={23.4} icon={DollarSign}`",
				"`<Card full>` holds the text Chart or data table goes here",
				"Frame size is `height: 420px`"
			],
			"tags": [
				"page-shell",
				"dashboard",
				"kpi-grid",
				"kpi-card",
				"card",
				"list-page"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "layout",
				"industry": [
					"saas",
					"fintech"
				],
				"style": [
					"default",
					"bento"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"PageShell",
					"KpiCard",
					"KpiGrid",
					"Card"
				],
				"aliases": [
					"dashboard page",
					"page header",
					"admin page"
				],
				"related": [
					"187",
					"600",
					"178"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"PageShell",
				"KpiCard",
				"KpiGrid",
				"Card"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"PageShell",
						"KpiCard",
						"KpiGrid",
						"Card"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/layout/list-page#pageshell",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "186",
			"group": "layout",
			"page": "mobile-pane",
			"variant": "Chat",
			"slug": "chat",
			"title": "Chat",
			"description": "Open the pane. On a phone the text field rises with the virtual keyboard.",
			"summary": "A button that opens a full-screen mobile pane titled Maria Souza with a message list, a header action and a composer.",
			"use": "Chat threads and other drill-down detail views on phones, opened from a list and closed again.",
			"spec": [
				"`<MobilePane bind:open title=\"Maria Souza\">` with `let open = $state(false)`",
				"`<Button variant=\"filled\" onclick={() => (open = true)}>Open conversation</Button>` opens it",
				"`{#snippet actions()}` holds `<IconButton variant=\"text\" aria-label=\"More options\">` with `<MoreVertical size={20} aria-hidden=\"true\" />`",
				"`const messages` has 5 strings rendered with `{#each messages as m}<li>{m}</li>{/each}`",
				"Composer is `<TextField label=\"Message\" placeholder=\"Write something…\" />`"
			],
			"tags": [
				"mobile-pane",
				"chat",
				"mobile",
				"icon-button",
				"text-field",
				"conversation"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "layout",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "overlay",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"MobilePane",
					"Button",
					"IconButton",
					"TextField"
				],
				"aliases": [
					"full screen sheet",
					"conversation view",
					"slide in pane"
				],
				"related": [
					"166",
					"188"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"MobilePane",
				"Button",
				"IconButton",
				"TextField"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"MobilePane",
						"Button",
						"IconButton",
						"TextField"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/layout/mobile-pane#chat",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "187",
			"group": "layout",
			"page": "page-shell",
			"variant": "Dashboard",
			"slug": "dashboard-page",
			"title": "Dashboard page",
			"description": "KPI cards and a content card inside a PageShell.",
			"summary": "A page shell inside a flush card with a title, description, New report action, four KPI cards and a placeholder card.",
			"use": "Dashboard pages with a header, a primary action, headline metrics and a content area.",
			"spec": [
				"`<Card flush full>` wraps `<PageShell title=\"Dashboard\" description=\"Overview of this month\">`",
				"`{#snippet actions()}<Button variant=\"filled\" size=\"sm\">New report</Button>{/snippet}`",
				"`<Stack gap=\"6\">` holds a `KpiGrid` and a `<Card full>`",
				"`KpiGrid` has 4 `KpiCard` items: Revenue `$118k`, Users `24.8k`, Growth `34%`, Uptime `99.9%`",
				"Placeholder card text is Chart or data table goes here"
			],
			"tags": [
				"page-shell",
				"dashboard",
				"kpi-grid",
				"card",
				"actions",
				"header"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "layout",
				"industry": [
					"saas",
					"fintech"
				],
				"style": [
					"default",
					"bento"
				],
				"motion": "none",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"PageShell",
					"KpiCard",
					"KpiGrid",
					"Card",
					"Stack",
					"Button"
				],
				"aliases": [
					"overview page",
					"report page",
					"admin dashboard"
				],
				"related": [
					"185",
					"600",
					"178"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"PageShell",
				"KpiCard",
				"KpiGrid",
				"Card",
				"Stack",
				"Button"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"PageShell",
						"KpiCard",
						"KpiGrid",
						"Card",
						"Stack",
						"Button"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/layout/page-shell#dashboard-page",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "188",
			"group": "layout",
			"page": "sticky-actions",
			"variant": "Dirty",
			"slug": "end-aligned",
			"title": "End aligned",
			"description": "Buttons sit on the right. The bar only renders while the form is dirty (show).",
			"summary": "A scrolling form whose sticky Cancel and Save bar only appears once the Name field has text.",
			"use": "Edit forms that reveal a save bar only after the user changes something.",
			"spec": [
				"`let name = $state('')` and `const dirty = $derived(name.length > 0)`",
				"`<StickyActions show={dirty}>` holds `<Button variant=\"ghost\" onclick={() => (name = '')}>Cancel</Button>` and `<Button variant=\"filled\">Save</Button>`",
				"`<TextField label=\"Name\" bind:value={name} placeholder=\"Type to reveal the bar\" />` above a `Long content…` filler",
				"Scroller uses `max-height: 280px` and `overflow-y: auto`"
			],
			"tags": [
				"sticky-actions",
				"dirty",
				"form",
				"save-bar",
				"scroll",
				"text-field"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "layout",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"keyboard",
					"scroll",
					"press"
				],
				"layout": "sticky",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"StickyActions",
					"Button",
					"TextField",
					"Stack"
				],
				"aliases": [
					"unsaved changes",
					"save bar",
					"floating footer"
				],
				"related": [
					"189",
					"173",
					"174"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"StickyActions",
				"Button",
				"TextField",
				"Stack"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"StickyActions",
						"Button",
						"TextField",
						"Stack"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/layout/sticky-actions#end-aligned",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "189",
			"group": "layout",
			"page": "sticky-actions",
			"variant": "Stretch",
			"slug": "stretch",
			"title": "Stretch",
			"description": "On touch screens the primary button fills the width and the ghost button stays compact.",
			"summary": "A scrolling area with a sticky bar whose Back and Continue buttons stretch across the width.",
			"use": "Wizard and checkout steps where a full-width action bar stays visible while the content scrolls.",
			"spec": [
				"`<StickyActions align=\"stretch\">` holds `<Button variant=\"ghost\">Back</Button>` and `<Button variant=\"filled\">Continue</Button>`",
				"Content is a single `<div class=\"filler\">Long content…</div>` taller than the scroller",
				"Scroller uses `max-height: 280px` and `overflow-y: auto`"
			],
			"tags": [
				"sticky-actions",
				"stretch",
				"wizard",
				"action-bar",
				"scroll",
				"align"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "layout",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"scroll",
					"press",
					"keyboard"
				],
				"layout": "sticky",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"StickyActions",
					"Button"
				],
				"aliases": [
					"pinned footer",
					"wizard buttons",
					"bottom bar"
				],
				"related": [
					"188",
					"173",
					"182"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"StickyActions",
				"Button"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"StickyActions",
						"Button"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/layout/sticky-actions#stretch",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "190",
			"group": "charts",
			"page": "bar",
			"variant": "Horizontal",
			"slug": "horizontal-bars",
			"title": "Horizontal bars",
			"description": "Good for long category names and rankings.",
			"summary": "A horizontal bar chart ranking eight products by a single Sales series, with values formatted as thousands.",
			"use": "Ranking items by one metric, such as top products or top accounts, when category labels are long.",
			"spec": [
				"`<BarChart` inside `<Card full>`",
				"One series `{ name: 'Sales', data: [9840, 8720, 7650, 6430, 5980, 4810, 3920, 3140] }`",
				"`categories={products}` with 8 product names",
				"`horizontal` prop",
				"`valueFormatter` renders `${(v / 1000).toFixed(1)}k`",
				"`height=\"300px\"`"
			],
			"tags": [
				"bar-chart",
				"horizontal",
				"ranking",
				"categories",
				"value-formatter",
				"card"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "chart",
				"industry": [
					"e-commerce"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"hover"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Card",
					"BarChart"
				],
				"aliases": [
					"ranking",
					"leaderboard",
					"top products"
				],
				"related": [
					"193",
					"191",
					"192"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Card",
				"BarChart"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Card"
					]
				},
				{
					"from": "@codeatlasdev/ui/charts",
					"names": [
						"BarChart"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/charts/bar#horizontal-bars",
			"needs": "@codeatlasdev/ui@4.6.0 + echarts"
		},
		{
			"id": "191",
			"group": "charts",
			"page": "bar",
			"variant": "Stacked",
			"slug": "stacked-bars",
			"title": "Stacked bars",
			"description": "",
			"summary": "A stacked bar chart splitting six months of revenue into four acquisition channels.",
			"use": "Showing how a total is composed of channels or segments over time.",
			"spec": [
				"`<BarChart` inside `<Card full>`",
				"4 series in `series`: Organic, Paid, Referral, Direct, each with 6 values",
				"`categories={months}` with `'Jan'` to `'Jun'`",
				"`stacked` prop",
				"`valueFormatter={fmt}` renders `$${(v / 1000).toFixed(0)}k`",
				"`height=\"300px\"`"
			],
			"tags": [
				"bar-chart",
				"stacked",
				"series",
				"categories",
				"revenue",
				"card"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "chart",
				"industry": [
					"fintech"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"hover"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Card",
					"BarChart"
				],
				"aliases": [
					"stacked columns",
					"channel mix",
					"breakdown"
				],
				"related": [
					"192",
					"193",
					"190"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Card",
				"BarChart"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Card"
					]
				},
				{
					"from": "@codeatlasdev/ui/charts",
					"names": [
						"BarChart"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/charts/bar#stacked-bars",
			"needs": "@codeatlasdev/ui@4.6.0 + echarts"
		},
		{
			"id": "192",
			"group": "charts",
			"page": "bar",
			"variant": "Toggle",
			"slug": "grouped-and-stacked",
			"title": "Grouped and stacked",
			"description": "Toggling stacked animates between both layouts.",
			"summary": "A bar chart with Grouped and Stacked buttons that switch the same two-year quarterly data between layouts.",
			"use": "Letting users flip between comparing values side by side and seeing the combined total.",
			"spec": [
				"`let mode = $state<'grouped' | 'stacked'>('grouped')` drives the layout",
				"Two `<Button` elements with `size=\"sm\"`, labelled Grouped and Stacked, using `variant={mode === 'grouped' ? 'filled' : 'glass'}` and `variant={mode === 'stacked' ? 'filled' : 'glass'}`",
				"`onclick={() => (mode = 'grouped')}` and `onclick={() => (mode = 'stacked')}` set the mode",
				"`<BarChart` with 2 series `'2025'` and `'2026'`, 4 values each",
				"`categories={['Q1', 'Q2', 'Q3', 'Q4']}`",
				"`stacked={mode === 'stacked'}` and `height=\"300px\"`"
			],
			"tags": [
				"bar-chart",
				"stacked",
				"grouped",
				"toggle",
				"button",
				"state",
				"flex"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "chart",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"hover",
					"press",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Card",
					"Flex",
					"Button",
					"BarChart"
				],
				"aliases": [
					"grouped vs stacked",
					"switch view",
					"year over year"
				],
				"related": [
					"191",
					"193",
					"190"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Card",
				"Flex",
				"Button",
				"BarChart"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Card",
						"Flex",
						"Button"
					]
				},
				{
					"from": "@codeatlasdev/ui/charts",
					"names": [
						"BarChart"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/charts/bar#grouped-and-stacked",
			"needs": "@codeatlasdev/ui@4.6.0 + echarts"
		},
		{
			"id": "193",
			"group": "charts",
			"page": "bar",
			"variant": "Vertical",
			"slug": "vertical-bars",
			"title": "Vertical bars",
			"description": "",
			"summary": "A vertical bar chart of one Revenue series across four quarters.",
			"use": "Comparing a single metric across a few time periods, such as quarterly revenue.",
			"spec": [
				"`<BarChart` inside `<Card full>`",
				"One series `{ name: 'Revenue', data: [38400, 54200, 71600, 89800] }`",
				"`categories={['Q1', 'Q2', 'Q3', 'Q4']}`",
				"`valueFormatter={fmt}` renders `$${(v / 1000).toFixed(0)}k`",
				"`height=\"300px\"`"
			],
			"tags": [
				"bar-chart",
				"vertical",
				"revenue",
				"categories",
				"value-formatter",
				"card"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "chart",
				"industry": [
					"fintech"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"hover"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Card",
					"BarChart"
				],
				"aliases": [
					"column chart",
					"quarterly revenue",
					"histogram"
				],
				"related": [
					"191",
					"192",
					"190"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Card",
				"BarChart"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Card"
					]
				},
				{
					"from": "@codeatlasdev/ui/charts",
					"names": [
						"BarChart"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/charts/bar#vertical-bars",
			"needs": "@codeatlasdev/ui@4.6.0 + echarts"
		},
		{
			"id": "194",
			"group": "charts",
			"page": "gauge",
			"variant": "Counter",
			"slug": "animated-counter",
			"title": "Animated counter",
			"description": "Updating value animates the ring and counts the number.",
			"summary": "A ring gauge that counts up from 0 to 94 on mount, with a text label that changes with the value.",
			"use": "Animating a score or health metric on load and pairing it with a verdict label.",
			"spec": [
				"`let value = $state(0)` incremented in `onMount` by `Math.min(value + 2, 94)` every 40 ms via `setInterval`",
				"`<GaugeChart {value} variant=\"ring\"` with `height=\"260px\"`",
				"`formatter={(v) => String(Math.round(v))}` rounds the displayed number",
				"`const label = $derived(value < 40 ? 'Needs work' : value <= 70 ? 'Good' : 'Excellent')`",
				"`<Stack gap=\"3\">` stacks the gauge above `<p class=\"label\">{label}</p>`",
				"Interval is cleared when `value >= 94` and on unmount"
			],
			"tags": [
				"gauge-chart",
				"ring",
				"counter",
				"animation",
				"onmount",
				"score",
				"stack"
			],
			"shape": "square",
			"index": {
				"kind": "component",
				"subtype": "chart",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "expressive",
				"interaction": [
					"hover"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Card",
					"Stack",
					"GaugeChart"
				],
				"aliases": [
					"animated score",
					"count up gauge",
					"progress ring"
				],
				"related": [
					"195",
					"196",
					"197"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Card",
				"Stack",
				"GaugeChart"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Card",
						"Stack"
					]
				},
				{
					"from": "@codeatlasdev/ui/charts",
					"names": [
						"GaugeChart"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/charts/gauge#animated-counter",
			"needs": "@codeatlasdev/ui@4.6.0 + echarts"
		},
		{
			"id": "195",
			"group": "charts",
			"page": "gauge",
			"variant": "Ring",
			"slug": "progress-ring",
			"title": "Progress ring",
			"description": "variant ring draws a single brand-colored arc with the value in the center.",
			"summary": "A ring gauge controlled by a slider, starting at 65.",
			"use": "Letting users tune a percentage or score and see the gauge respond live.",
			"spec": [
				"`let value = $state(65)` shared by gauge and slider",
				"`<GaugeChart {value} variant=\"ring\" height=\"260px\" />`",
				"`<Slider bind:value min={0} max={100} step={1} />`",
				"`<Stack gap=\"5\">` stacks gauge and slider inside `<Card full>`"
			],
			"tags": [
				"gauge-chart",
				"ring",
				"slider",
				"bind-value",
				"state",
				"interactive"
			],
			"shape": "square",
			"index": {
				"kind": "component",
				"subtype": "chart",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"drag",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Card",
					"Stack",
					"Slider",
					"GaugeChart"
				],
				"aliases": [
					"progress ring",
					"radial progress",
					"slider driven"
				],
				"related": [
					"196",
					"194",
					"197"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Card",
				"Stack",
				"Slider",
				"GaugeChart"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Card",
						"Stack",
						"Slider"
					]
				},
				{
					"from": "@codeatlasdev/ui/charts",
					"names": [
						"GaugeChart"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/charts/gauge#progress-ring",
			"needs": "@codeatlasdev/ui@4.6.0 + echarts"
		},
		{
			"id": "196",
			"group": "charts",
			"page": "gauge",
			"variant": "Simple",
			"slug": "simple-gauge",
			"title": "Simple gauge",
			"description": "",
			"summary": "A single gauge showing a score of 78 with a Score label.",
			"use": "Showing one headline score or health percentage in a compact card.",
			"spec": [
				"`<GaugeChart value={78} label=\"Score\" height=\"280px\" />`",
				"Wrapped in `<Card full>`"
			],
			"tags": [
				"gauge-chart",
				"score",
				"value",
				"label",
				"card"
			],
			"shape": "square",
			"index": {
				"kind": "component",
				"subtype": "chart",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"hover"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Card",
					"GaugeChart"
				],
				"aliases": [
					"dial",
					"speedometer",
					"score meter"
				],
				"related": [
					"195",
					"197",
					"194"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Card",
				"GaugeChart"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Card"
					]
				},
				{
					"from": "@codeatlasdev/ui/charts",
					"names": [
						"GaugeChart"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/charts/gauge#simple-gauge",
			"needs": "@codeatlasdev/ui@4.6.0 + echarts"
		},
		{
			"id": "197",
			"group": "charts",
			"page": "gauge",
			"variant": "Zones",
			"slug": "custom-zones",
			"title": "Custom zones",
			"description": "Reverse the default zones when a high value is bad, such as CPU load.",
			"summary": "Three gauges (CPU 67, Memory 82, Disk 45) that share colour zones for success, warning and error.",
			"use": "Resource or SLA dashboards where thresholds change the gauge colour.",
			"spec": [
				"`const zones: GaugeZone[]` with 3 entries: `{ until: 0.5, color: 'success' }`, `{ until: 0.8, color: 'warning' }`, `{ until: 1, color: 'error' }`",
				"`const metrics` with 3 items: CPU `67`, Memory `82`, Disk `45`, fields `label` and `value`",
				"`{#each metrics as m}` renders `<GaugeChart value={m.value} {zones} height=\"200px\" />`",
				"Each gauge sits in its own `<Card>` inside `<Grid columns={{ base: 1, sm: 3 }} gap=\"4\">`"
			],
			"tags": [
				"gauge-chart",
				"zones",
				"thresholds",
				"grid",
				"metrics",
				"card"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "chart",
				"industry": [
					"devtools"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"hover"
				],
				"layout": "grid",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Card",
					"Grid",
					"GaugeChart"
				],
				"aliases": [
					"thresholds",
					"health status",
					"system monitor",
					"traffic light"
				],
				"related": [
					"196",
					"195",
					"194"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Card",
				"Grid",
				"GaugeChart"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Card",
						"Grid"
					]
				},
				{
					"from": "@codeatlasdev/ui/charts",
					"names": [
						"GaugeChart",
						"GaugeZone"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/charts/gauge#custom-zones",
			"needs": "@codeatlasdev/ui@4.6.0 + echarts"
		},
		{
			"id": "198",
			"group": "charts",
			"page": "heatmap",
			"variant": "Calendar",
			"slug": "calendar-heatmap",
			"title": "Calendar heatmap",
			"description": "Daily commit activity from January to September.",
			"summary": "A calendar heatmap of daily commit counts from 2026-01-01 to 2026-09-15.",
			"use": "Showing activity over a year, like contributions, logins or deploys per day.",
			"spec": [
				"`<HeatmapChart variant=\"calendar\"`",
				"`data` is `CalendarHeatmapPoint[]` built with `Array.from({ length: 258 }` as `[ 'YYYY-MM-DD', value ]` pairs",
				"`range={['2026-01-01', '2026-09-15']}`",
				"`tooltipFormatter={(v) => `${v} commits`}`",
				"`height=\"160px\"` inside `<Card full>`"
			],
			"tags": [
				"heatmap-chart",
				"calendar",
				"activity",
				"range",
				"tooltip-formatter",
				"card"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "chart",
				"industry": [
					"devtools"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"hover"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Card",
					"HeatmapChart"
				],
				"aliases": [
					"contribution graph",
					"activity calendar",
					"commit history"
				],
				"related": [
					"200",
					"199",
					"205"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Card",
				"HeatmapChart"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Card"
					]
				},
				{
					"from": "@codeatlasdev/ui/charts",
					"names": [
						"HeatmapChart",
						"CalendarHeatmapPoint"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/charts/heatmap#calendar-heatmap",
			"needs": "@codeatlasdev/ui@4.6.0 + echarts"
		},
		{
			"id": "199",
			"group": "charts",
			"page": "heatmap",
			"variant": "Matrix",
			"slug": "hour-by-day-matrix",
			"title": "Hour by day matrix",
			"description": "Points are [xIndex, yIndex, value] into xCategories and yCategories.",
			"summary": "A matrix heatmap of task counts by hour of day (24 columns) and weekday (7 rows).",
			"use": "Spotting busy periods in a day-by-hour grid, like support load or traffic.",
			"spec": [
				"`<HeatmapChart variant=\"matrix\"`",
				"`matrixData` is `MatrixHeatmapPoint[]` of `[h, d, Math.max(0, Math.min(10, v))]` triples, 24 hours by 7 days",
				"`xCategories={hours}` built from `String(i).padStart(2, '0') + ':00'` (24 labels)",
				"`yCategories={days}` with `'Mon'` to `'Sun'`",
				"`tooltipFormatter={(v) => `${v} tasks`}`",
				"`height=\"320px\"` inside `<Card full>`"
			],
			"tags": [
				"heatmap-chart",
				"matrix",
				"hours",
				"weekdays",
				"tooltip-formatter",
				"card"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "chart",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"hover"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Card",
					"HeatmapChart"
				],
				"aliases": [
					"hour by day",
					"density map",
					"activity matrix"
				],
				"related": [
					"198",
					"200",
					"205"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Card",
				"HeatmapChart"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Card"
					]
				},
				{
					"from": "@codeatlasdev/ui/charts",
					"names": [
						"HeatmapChart",
						"MatrixHeatmapPoint"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/charts/heatmap#hour-by-day-matrix",
			"needs": "@codeatlasdev/ui@4.6.0 + echarts"
		},
		{
			"id": "200",
			"group": "charts",
			"page": "heatmap",
			"variant": "YearToggle",
			"slug": "year-toggle",
			"title": "Year toggle",
			"description": "Swap data and range to move between years.",
			"summary": "A calendar heatmap with 2026 and 2025 buttons that swap the dataset and date range.",
			"use": "Letting users compare activity across years in the same calendar view.",
			"spec": [
				"`let year = $state<2025 | 2026>(2026)` selects the year",
				"Two `<Button` elements with `size=\"sm\"` labelled 2026 and 2025, `variant={year === 2026 ? 'filled' : 'glass'}` and `variant={year === 2025 ? 'filled' : 'glass'}`",
				"`onclick={() => (year = 2026)}` and `onclick={() => (year = 2025)}`",
				"`data` holds `gen(2026, 258, 1.4)` and `gen(2025, 365, 2.1)`",
				"`<HeatmapChart variant=\"calendar\" data={data[year]} range={ranges[year]}`",
				"`tooltipFormatter={(v) => `${v} commits`}` and `height=\"160px\"`"
			],
			"tags": [
				"heatmap-chart",
				"calendar",
				"year-toggle",
				"button",
				"state",
				"range"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "chart",
				"industry": [
					"devtools"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"hover",
					"press",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Card",
					"Flex",
					"Button",
					"HeatmapChart"
				],
				"aliases": [
					"contribution graph",
					"switch year",
					"activity calendar"
				],
				"related": [
					"198",
					"199",
					"205"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Card",
				"Flex",
				"Button",
				"HeatmapChart"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Card",
						"Flex",
						"Button"
					]
				},
				{
					"from": "@codeatlasdev/ui/charts",
					"names": [
						"HeatmapChart",
						"CalendarHeatmapPoint"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/charts/heatmap#year-toggle",
			"needs": "@codeatlasdev/ui@4.6.0 + echarts"
		},
		{
			"id": "201",
			"group": "charts",
			"page": "line",
			"variant": "Area",
			"slug": "area-with-gradient-fill",
			"title": "Area with gradient fill",
			"description": "area fills under each line with a gradient that fades to transparent.",
			"summary": "A single Revenue line with a filled area under it across nine months.",
			"use": "Emphasizing volume or cumulative growth of one metric over time.",
			"spec": [
				"`<LineChart` with one series `{ name: 'Revenue', data: revenue }`",
				"`revenue` has 9 values from `42000` to `112000`",
				"`categories={months}` with `'Jan'` to `'Sep'`",
				"`area` prop",
				"`valueFormatter={fmt}` renders `$${(v / 1000).toFixed(0)}k`",
				"`height=\"360px\"` inside `<Card full>`"
			],
			"tags": [
				"line-chart",
				"area",
				"revenue",
				"time-series",
				"value-formatter",
				"card"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "chart",
				"industry": [
					"fintech"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"hover"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Card",
					"LineChart"
				],
				"aliases": [
					"filled line",
					"trend",
					"growth curve"
				],
				"related": [
					"203",
					"202",
					"204"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Card",
				"LineChart"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Card"
					]
				},
				{
					"from": "@codeatlasdev/ui/charts",
					"names": [
						"LineChart"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/charts/line#area-with-gradient-fill",
			"needs": "@codeatlasdev/ui@4.6.0 + echarts"
		},
		{
			"id": "202",
			"group": "charts",
			"page": "line",
			"variant": "Multi",
			"slug": "multi-line-comparison",
			"title": "Multi-line comparison",
			"description": "Each series gets its own palette color.",
			"summary": "A line chart with three series, Revenue, Expenses and Profit, across nine months.",
			"use": "Comparing related metrics over time, such as income against cost and the resulting margin.",
			"spec": [
				"`<LineChart` with 3 series: `{ name: 'Revenue', data: revenue }`, `{ name: 'Expenses', data: expenses }`, `{ name: 'Profit', data: profit }`",
				"`const profit = revenue.map((r, i) => r - expenses[i])` derives the third series",
				"`categories={months}` with `'Jan'` to `'Sep'`",
				"`valueFormatter={fmt}` renders `$${(v / 1000).toFixed(0)}k`",
				"`height=\"300px\"` inside `<Card full>`"
			],
			"tags": [
				"line-chart",
				"multi-series",
				"revenue",
				"expenses",
				"time-series",
				"card"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "chart",
				"industry": [
					"fintech"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"hover"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Card",
					"LineChart"
				],
				"aliases": [
					"multi series",
					"profit and loss",
					"compare lines"
				],
				"related": [
					"203",
					"201",
					"204"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Card",
				"LineChart"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Card"
					]
				},
				{
					"from": "@codeatlasdev/ui/charts",
					"names": [
						"LineChart"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/charts/line#multi-line-comparison",
			"needs": "@codeatlasdev/ui@4.6.0 + echarts"
		},
		{
			"id": "203",
			"group": "charts",
			"page": "line",
			"variant": "Simple",
			"slug": "simple-line",
			"title": "Simple line",
			"description": "",
			"summary": "A basic line chart of a single Revenue series over nine months.",
			"use": "Showing the trend of one metric over time, the default time-series view.",
			"spec": [
				"`<LineChart` with one series `{ name: 'Revenue', data: revenue }`",
				"`revenue` has 9 values from `42000` to `112000`",
				"`categories={months}` with `'Jan'` to `'Sep'`",
				"`valueFormatter={fmt}` renders `$${(v / 1000).toFixed(0)}k`",
				"`height=\"300px\"` inside `<Card full>`"
			],
			"tags": [
				"line-chart",
				"simple",
				"revenue",
				"time-series",
				"value-formatter",
				"card"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "chart",
				"industry": [
					"fintech"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"hover"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Card",
					"LineChart"
				],
				"aliases": [
					"trend line",
					"time series",
					"revenue over time"
				],
				"related": [
					"201",
					"202",
					"204"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Card",
				"LineChart"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Card"
					]
				},
				{
					"from": "@codeatlasdev/ui/charts",
					"names": [
						"LineChart"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/charts/line#simple-line",
			"needs": "@codeatlasdev/ui@4.6.0 + echarts"
		},
		{
			"id": "204",
			"group": "charts",
			"page": "line",
			"variant": "Stream",
			"slug": "real-time-stream",
			"title": "Real-time stream",
			"description": "Replace the data array and the chart updates in place.",
			"summary": "A live line chart that shifts in a new Live revenue point every 800 ms over a 20-point window.",
			"use": "Real-time monitoring such as live revenue, traffic or latency streams.",
			"spec": [
				"`let streamData = $state<number[]>` starts with 20 values from `68000` to `115000`",
				"`setInterval` in `onMount` runs every `800` ms and sets `streamData = [...streamData.slice(1), next]`",
				"`next` is clamped with `Math.min(125000, Math.max(42000,`",
				"`series={[{ name: 'Live revenue', data: streamData }]}`",
				"`categories={streamData.map((_, i) => String(i))}`",
				"`valueFormatter={fmt}` and `height=\"300px\"`"
			],
			"tags": [
				"line-chart",
				"streaming",
				"live",
				"realtime",
				"onmount",
				"interval"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "chart",
				"industry": [
					"fintech"
				],
				"style": [
					"default"
				],
				"motion": "expressive",
				"interaction": [
					"hover"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Card",
					"LineChart"
				],
				"aliases": [
					"realtime",
					"live ticker",
					"streaming data",
					"rolling window"
				],
				"related": [
					"203",
					"218",
					"201"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Card",
				"LineChart"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Card"
					]
				},
				{
					"from": "@codeatlasdev/ui/charts",
					"names": [
						"LineChart"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/charts/line#real-time-stream",
			"needs": "@codeatlasdev/ui@4.6.0 + echarts"
		},
		{
			"id": "205",
			"group": "charts",
			"page": "overview",
			"variant": "Dashboard",
			"slug": "dashboard",
			"title": "Dashboard",
			"description": "Every chart type together inside cards.",
			"summary": "An analytics dashboard combining four KPI cards with line, stacked bar, donut, scatter, calendar heatmap, gauge and radar charts.",
			"use": "Building an overview page that puts headline KPIs and several chart types on one screen.",
			"spec": [
				"`<KpiGrid>` with 4 `<KpiCard`: Revenue `$118k`, Users `94.2k`, Growth `34%`, Uptime `99.9%`, each with a `trend` and an `icon`",
				"`<LineChart` with 2 series Revenue and Expenses, `area`, `height=\"280px\"`",
				"Two-column `<Grid columns={{ base: 1, md: 2 }} gap=\"4\">`: `<BarChart` with 4 series and `stacked`, and `<PieChart` with 5 items and `donut`",
				"`<ScatterChart series={[{ name: 'Accounts', data: scatter }]}` with 60 points, `yName=\"Conversion %\"` and `yFormatter`",
				"Second `<Grid columns={{ base: 1, md: 2 }} gap=\"4\">`: `<HeatmapChart variant=\"calendar\"` with `range={['2026-03-01', '2026-09-18']}` and `<GaugeChart value={84} label=\"Score\"`",
				"`<RadarChart` with 5 `indicators` (Speed, Quality, Reliability, Innovation, Support, `max: 100`) and series Team A and Team B"
			],
			"tags": [
				"dashboard",
				"kpi-card",
				"line-chart",
				"bar-chart",
				"pie-chart",
				"scatter-chart",
				"radar-chart"
			],
			"shape": "tall",
			"index": {
				"kind": "component",
				"subtype": "chart",
				"industry": [
					"saas",
					"fintech"
				],
				"style": [
					"default",
					"bento"
				],
				"motion": "subtle",
				"interaction": [
					"hover",
					"scroll"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Card",
					"Grid",
					"KpiCard",
					"KpiGrid",
					"Stack",
					"LineChart",
					"BarChart",
					"PieChart",
					"ScatterChart",
					"HeatmapChart",
					"GaugeChart",
					"RadarChart"
				],
				"aliases": [
					"analytics dashboard",
					"admin overview",
					"reporting",
					"kpi page"
				],
				"related": [
					"217",
					"201",
					"191"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Card",
				"Grid",
				"KpiCard",
				"KpiGrid",
				"Stack",
				"LineChart",
				"BarChart",
				"PieChart",
				"ScatterChart",
				"HeatmapChart",
				"GaugeChart",
				"RadarChart"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Card",
						"Grid",
						"KpiCard",
						"KpiGrid",
						"Stack"
					]
				},
				{
					"from": "@codeatlasdev/ui/charts",
					"names": [
						"LineChart",
						"BarChart",
						"PieChart",
						"ScatterChart",
						"HeatmapChart",
						"GaugeChart",
						"RadarChart",
						"CalendarHeatmapPoint"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/charts/overview#dashboard",
			"needs": "@codeatlasdev/ui@4.6.0 + echarts"
		},
		{
			"id": "206",
			"group": "charts",
			"page": "pie",
			"variant": "Animated",
			"slug": "animated-proportions",
			"title": "Animated proportions",
			"description": "Swap the data and the slices animate to the new proportions.",
			"summary": "A donut chart with Q1, Q2 and Q3 chips that switch which quarter of data the chart shows.",
			"use": "Showing how a share breakdown shifts between periods with a selector.",
			"spec": [
				"`let selected = $state<Quarter>('Q1')` and `const data = $derived(qData[selected])`",
				"`{#each quarters as q}` renders `<Chip label={q} selected={selected === q}` with `variant=\"brand\"` and `size=\"sm\"`",
				"`onclick={() => (selected = q)}` changes the quarter",
				"`qData` has 4 items per quarter: Cloud, Enterprise, SaaS, Other",
				"`<PieChart {data} donut height=\"300px\" />` inside `<Card full>`"
			],
			"tags": [
				"pie-chart",
				"donut",
				"chip",
				"quarters",
				"state",
				"derived"
			],
			"shape": "square",
			"index": {
				"kind": "component",
				"subtype": "chart",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "expressive",
				"interaction": [
					"press",
					"hover",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Card",
					"Flex",
					"Chip",
					"PieChart"
				],
				"aliases": [
					"morphing donut",
					"switch period",
					"animated pie"
				],
				"related": [
					"208",
					"207",
					"209"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Card",
				"Flex",
				"Chip",
				"PieChart"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Card",
						"Flex",
						"Chip"
					]
				},
				{
					"from": "@codeatlasdev/ui/charts",
					"names": [
						"PieChart"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/charts/pie#animated-proportions",
			"needs": "@codeatlasdev/ui@4.6.0 + echarts"
		},
		{
			"id": "207",
			"group": "charts",
			"page": "pie",
			"variant": "CenterLabel",
			"slug": "donut-with-center-kpi",
			"title": "Donut with center KPI",
			"description": "centerLabel overlays a value and caption in the hole of a donut.",
			"summary": "A donut chart with a total value and caption shown in the centre.",
			"use": "Summarising a total inside the donut, like total revenue split by category.",
			"spec": [
				"`<PieChart data={marketData} donut`",
				"`centerLabel={{ value: '$2.4M', label: 'Total Revenue' }}`",
				"`marketData` has 5 items: Cloud Services `38`, Enterprise SW `24`, SaaS Tools `18`, Infrastructure `12`, Other `8`",
				"`height=\"300px\"` inside `<Card full>`"
			],
			"tags": [
				"pie-chart",
				"donut",
				"center-label",
				"total",
				"market-share",
				"card"
			],
			"shape": "square",
			"index": {
				"kind": "component",
				"subtype": "chart",
				"industry": [
					"fintech"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"hover"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Card",
					"PieChart"
				],
				"aliases": [
					"donut total",
					"summary in the hole",
					"market share"
				],
				"related": [
					"208",
					"206",
					"209"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Card",
				"PieChart"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Card"
					]
				},
				{
					"from": "@codeatlasdev/ui/charts",
					"names": [
						"PieChart"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/charts/pie#donut-with-center-kpi",
			"needs": "@codeatlasdev/ui@4.6.0 + echarts"
		},
		{
			"id": "208",
			"group": "charts",
			"page": "pie",
			"variant": "Donut",
			"slug": "basic-donut",
			"title": "Basic donut",
			"description": "",
			"summary": "A donut chart of market share split across five categories.",
			"use": "Showing the proportional split of a total, such as revenue by product line.",
			"spec": [
				"`<PieChart data={marketData} donut height=\"300px\" />`",
				"`marketData` has 5 items with `value` and `name`: Cloud Services `38`, Enterprise SW `24`, SaaS Tools `18`, Infrastructure `12`, Other `8`",
				"Wrapped in `<Card full>`"
			],
			"tags": [
				"pie-chart",
				"donut",
				"market-share",
				"proportions",
				"card"
			],
			"shape": "square",
			"index": {
				"kind": "component",
				"subtype": "chart",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"hover"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Card",
					"PieChart"
				],
				"aliases": [
					"ring chart",
					"share of total",
					"doughnut"
				],
				"related": [
					"207",
					"206",
					"209"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Card",
				"PieChart"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Card"
					]
				},
				{
					"from": "@codeatlasdev/ui/charts",
					"names": [
						"PieChart"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/charts/pie#basic-donut",
			"needs": "@codeatlasdev/ui@4.6.0 + echarts"
		},
		{
			"id": "209",
			"group": "charts",
			"page": "pie",
			"variant": "Rose",
			"slug": "rose-chart",
			"title": "Rose chart",
			"description": "Nightingale rose: the radius of each slice scales with its value.",
			"summary": "A Nightingale rose chart of six product areas, using the rose prop on PieChart.",
			"use": "Comparing category sizes in a rose layout instead of a plain pie.",
			"spec": [
				"`<PieChart data={roseData} rose height=\"340px\" />`",
				"`roseData` has 6 items with `value` and `name`: Analytics `72`, Automation `58`, Security `45`, Integrations `38`, Storage `30`, Support `22`",
				"Wrapped in `<Card full>`"
			],
			"tags": [
				"pie-chart",
				"rose",
				"nightingale",
				"categories",
				"card"
			],
			"shape": "square",
			"index": {
				"kind": "component",
				"subtype": "chart",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"hover"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Card",
					"PieChart"
				],
				"aliases": [
					"nightingale",
					"radial bar",
					"polar area"
				],
				"related": [
					"208",
					"207",
					"206"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Card",
				"PieChart"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Card"
					]
				},
				{
					"from": "@codeatlasdev/ui/charts",
					"names": [
						"PieChart"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/charts/pie#rose-chart",
			"needs": "@codeatlasdev/ui@4.6.0 + echarts"
		},
		{
			"id": "210",
			"group": "charts",
			"page": "radar",
			"variant": "Compare",
			"slug": "comparison",
			"title": "Comparison",
			"description": "Two series with a legend and focus on hover.",
			"summary": "A radar chart comparing Team A and Team B across six dimensions.",
			"use": "Comparing two entities, such as teams or products, on the same set of scores.",
			"spec": [
				"`const indicators` maps 6 names (Speed, Quality, Reliability, Innovation, Support, Coverage) to `{ name, max: 100 }`",
				"`<RadarChart` with `{indicators}` and 2 series",
				"`{ name: 'Team A', values: [88, 92, 76, 85, 94, 79] }`",
				"`{ name: 'Team B', values: [74, 68, 90, 72, 81, 83] }`",
				"`height=\"340px\"` inside `<Card full>`"
			],
			"tags": [
				"radar-chart",
				"compare",
				"series",
				"indicators",
				"scores",
				"card"
			],
			"shape": "square",
			"index": {
				"kind": "component",
				"subtype": "chart",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"hover"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Card",
					"RadarChart"
				],
				"aliases": [
					"spider chart",
					"two teams",
					"skills comparison"
				],
				"related": [
					"212",
					"211",
					"209"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Card",
				"RadarChart"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Card"
					]
				},
				{
					"from": "@codeatlasdev/ui/charts",
					"names": [
						"RadarChart"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/charts/radar#comparison",
			"needs": "@codeatlasdev/ui@4.6.0 + echarts"
		},
		{
			"id": "211",
			"group": "charts",
			"page": "radar",
			"variant": "Interactive",
			"slug": "interactive-team-builder",
			"title": "Interactive team builder",
			"description": "Drag the sliders and the radar updates live.",
			"summary": "A radar chart for My team with six sliders that edit each dimension live.",
			"use": "Letting users build or tweak a skill or score profile and see the shape update.",
			"spec": [
				"`let dims = $state([88, 92, 76, 85, 94, 79])` holds the six scores",
				"`const series = $derived([{ name: 'My team', values: [...dims] }])`",
				"`<RadarChart {indicators} {series} height=\"320px\" />`",
				"`{#each DIMS as dim, i}` renders one `<Slider value={dims[i]} min={0} max={100} step={1}`",
				"`onchange={(v) => { dims[i] = v[0]; }}` writes back the first slider value",
				"Each row shows the dimension name and `{dims[i]}` in a `<Flex justify=\"between\">`"
			],
			"tags": [
				"radar-chart",
				"slider",
				"interactive",
				"derived",
				"state",
				"builder"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "chart",
				"industry": [
					"saas",
					"devtools"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"drag",
					"keyboard",
					"hover"
				],
				"layout": "split",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Card",
					"Stack",
					"Flex",
					"Slider",
					"RadarChart"
				],
				"aliases": [
					"skill builder",
					"editable radar",
					"slider controls"
				],
				"related": [
					"212",
					"210",
					"195"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Card",
				"Stack",
				"Flex",
				"Slider",
				"RadarChart"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Card",
						"Stack",
						"Flex",
						"Slider"
					]
				},
				{
					"from": "@codeatlasdev/ui/charts",
					"names": [
						"RadarChart"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/charts/radar#interactive-team-builder",
			"needs": "@codeatlasdev/ui@4.6.0 + echarts"
		},
		{
			"id": "212",
			"group": "charts",
			"page": "radar",
			"variant": "Simple",
			"slug": "simple-radar",
			"title": "Simple radar",
			"description": "",
			"summary": "A radar chart of one team, Team Alpha, across six dimensions.",
			"use": "Showing a single score profile across several attributes.",
			"spec": [
				"`const indicators` maps 6 names (Speed, Quality, Reliability, Innovation, Support, Coverage) to `{ name, max: 100 }`",
				"`<RadarChart {indicators} series={[{ name: 'Team Alpha', values: [88, 92, 76, 85, 94, 79] }]}`",
				"`height=\"340px\"` inside `<Card full>`"
			],
			"tags": [
				"radar-chart",
				"simple",
				"indicators",
				"scores",
				"single-series",
				"card"
			],
			"shape": "square",
			"index": {
				"kind": "component",
				"subtype": "chart",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"hover"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Card",
					"RadarChart"
				],
				"aliases": [
					"spider chart",
					"web chart",
					"skills profile"
				],
				"related": [
					"210",
					"211",
					"209"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Card",
				"RadarChart"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Card"
					]
				},
				{
					"from": "@codeatlasdev/ui/charts",
					"names": [
						"RadarChart"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/charts/radar#simple-radar",
			"needs": "@codeatlasdev/ui@4.6.0 + echarts"
		},
		{
			"id": "213",
			"group": "charts",
			"page": "scatter",
			"variant": "Basic",
			"slug": "basic-scatter",
			"title": "Basic scatter",
			"description": "Visits against conversion rate.",
			"summary": "A scatter plot of 80 generated points in a single Data points series.",
			"use": "Exploring the relationship between two numeric variables, such as traffic and conversion.",
			"spec": [
				"`<ScatterChart series={[{ name: 'Data points', data }]}`",
				"`data` is 80 `[number, number]` pairs from `Array.from({ length: 80 }`",
				"`yName=\"Conversion %\"`",
				"`yFormatter={(v) => `${v.toFixed(1)}%`}`",
				"`height=\"320px\"` inside `<Card full>`"
			],
			"tags": [
				"scatter-chart",
				"basic",
				"points",
				"y-axis",
				"y-formatter",
				"card"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "chart",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"hover"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Card",
					"ScatterChart"
				],
				"aliases": [
					"correlation",
					"xy plot",
					"dot plot"
				],
				"related": [
					"214",
					"215",
					"203"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Card",
				"ScatterChart"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Card"
					]
				},
				{
					"from": "@codeatlasdev/ui/charts",
					"names": [
						"ScatterChart"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/charts/scatter#basic-scatter",
			"needs": "@codeatlasdev/ui@4.6.0 + echarts"
		},
		{
			"id": "214",
			"group": "charts",
			"page": "scatter",
			"variant": "Bubble",
			"slug": "bubble-chart",
			"title": "Bubble chart",
			"description": "The third value of each point sets the bubble size.",
			"summary": "A bubble chart where each of 50 accounts carries a third value that sets the bubble size.",
			"use": "Adding a third dimension, such as account size, to a two-axis comparison.",
			"spec": [
				"`data` is 50 `[number, number, number]` triples from `Array.from({ length: 50 }`",
				"The third value of each point is the bubble size",
				"`<ScatterChart series={[{ name: 'Accounts', data }]}`",
				"`yName=\"Conversion %\"` and `yFormatter={(v) => `${v.toFixed(1)}%`}`",
				"`height=\"340px\"` inside `<Card full>`"
			],
			"tags": [
				"scatter-chart",
				"bubble",
				"size",
				"three-dimensions",
				"accounts",
				"card"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "chart",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"hover"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Card",
					"ScatterChart"
				],
				"aliases": [
					"weighted scatter",
					"size encoding",
					"three variables"
				],
				"related": [
					"213",
					"215",
					"203"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Card",
				"ScatterChart"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Card"
					]
				},
				{
					"from": "@codeatlasdev/ui/charts",
					"names": [
						"ScatterChart"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/charts/scatter#bubble-chart",
			"needs": "@codeatlasdev/ui@4.6.0 + echarts"
		},
		{
			"id": "215",
			"group": "charts",
			"page": "scatter",
			"variant": "Clusters",
			"slug": "clustered-by-tier",
			"title": "Clustered by tier",
			"description": "One series per group, each with its own palette color.",
			"summary": "A scatter plot with three named series, Premium, Standard and Free, of 30 points each.",
			"use": "Showing segments or clusters of customers as separate colour-coded groups.",
			"spec": [
				"`const series: ScatterSeries[]` with 3 entries: `'Premium'`, `'Standard'`, `'Free'`",
				"Each series uses `cluster(30,` to generate 30 `[number, number]` points",
				"`color` is optional on a series, omitted here so the palette assigns one per series",
				"`<ScatterChart {series} yName=\"Conversion %\"` with `yFormatter={(v) => `${v.toFixed(1)}%`}`",
				"`height=\"340px\"` inside `<Card full>`"
			],
			"tags": [
				"scatter-chart",
				"clusters",
				"segments",
				"multi-series",
				"palette",
				"card"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "chart",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"hover"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Card",
					"ScatterChart"
				],
				"aliases": [
					"segments",
					"grouped points",
					"customer tiers"
				],
				"related": [
					"213",
					"214",
					"210"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Card",
				"ScatterChart"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Card"
					]
				},
				{
					"from": "@codeatlasdev/ui/charts",
					"names": [
						"ScatterChart",
						"ScatterSeries"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/charts/scatter#clustered-by-tier",
			"needs": "@codeatlasdev/ui@4.6.0 + echarts"
		},
		{
			"id": "216",
			"group": "charts",
			"page": "sparklines",
			"variant": "Bars",
			"slug": "bar-sparklines",
			"title": "Bar sparklines",
			"description": "variant bar draws narrow columns instead of a line.",
			"summary": "Three labelled bar sparklines with up, down and neutral trends in a wrapping row.",
			"use": "Showing compact weekly metrics inline where a full chart would be too heavy.",
			"spec": [
				"`items` has 3 entries: Weekly sessions, Bounce rate, Avg pages, each with 7 `data` values",
				"`<Sparkline data={s.data} variant=\"bar\" trend={s.trend} height=\"40px\" />`",
				"`trend` values are `'up' as const`, `'down' as const` and `'neutral' as const`",
				"`<Flex gap=\"6\" wrap align=\"center\">` lays out the items, each in a `<Stack gap=\"1.5\">` with a label"
			],
			"tags": [
				"sparkline",
				"bar",
				"trend",
				"inline-metrics",
				"flex",
				"stack"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "chart",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"hover"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "compact",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Flex",
					"Stack",
					"Sparkline"
				],
				"aliases": [
					"mini bars",
					"inline chart",
					"tiny columns"
				],
				"related": [
					"217",
					"219",
					"218"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Flex",
				"Stack",
				"Sparkline"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Flex",
						"Stack"
					]
				},
				{
					"from": "@codeatlasdev/ui/charts",
					"names": [
						"Sparkline"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/charts/sparklines#bar-sparklines",
			"needs": "@codeatlasdev/ui@4.6.0 + echarts"
		},
		{
			"id": "217",
			"group": "charts",
			"page": "sparklines",
			"variant": "KpiCards",
			"slug": "kpi-cards-with-trend-lines",
			"title": "KPI cards with trend lines",
			"description": "",
			"summary": "Four KPI cards, each with a value, a change percentage and a trend-coloured sparkline.",
			"use": "Dashboard summary tiles where each headline number needs a small history line.",
			"spec": [
				"`kpis` has 4 items: Monthly Revenue `$112k`, Active Users `24.8k`, Churn Rate `2.3%`, Avg Session `4m 12s`",
				"Each item has `label`, `value`, `change`, `trend` and 9 `data` values",
				"`<Sparkline data={k.data} trend={k.trend} height=\"32px\" />`",
				"`<Grid columns={{ base: 1, sm: 2, lg: 4 }} gap=\"4\">` with each KPI in `<Card>`",
				"`class:up={k.trend === 'up'}` and `class:down={k.trend === 'down'}` colour the change text"
			],
			"tags": [
				"sparkline",
				"kpi",
				"card",
				"trend",
				"dashboard",
				"grid"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "chart",
				"industry": [
					"saas",
					"fintech"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"hover"
				],
				"layout": "grid",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Card",
					"Grid",
					"Stack",
					"Flex",
					"Sparkline"
				],
				"aliases": [
					"stat cards",
					"metric tiles",
					"trend cards"
				],
				"related": [
					"205",
					"219",
					"218"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Card",
				"Grid",
				"Stack",
				"Flex",
				"Sparkline"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Card",
						"Grid",
						"Stack",
						"Flex"
					]
				},
				{
					"from": "@codeatlasdev/ui/charts",
					"names": [
						"Sparkline"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/charts/sparklines#kpi-cards-with-trend-lines",
			"needs": "@codeatlasdev/ui@4.6.0 + echarts"
		},
		{
			"id": "218",
			"group": "charts",
			"page": "sparklines",
			"variant": "Live",
			"slug": "live-streaming-micro-charts",
			"title": "Live streaming micro charts",
			"description": "",
			"summary": "Three live sparklines for CPU, Memory and Network that shift in a new value every 600 ms.",
			"use": "Real-time system or traffic monitors showing the current value beside a rolling mini chart.",
			"spec": [
				"`let live = $state({` with `cpu`, `mem` and `net` arrays of 10 values",
				"`setInterval` in `onMount` every `600` ms replaces each array through `next(`",
				"`const metrics = $derived([` maps to labels CPU, Memory, Network",
				"`{m.data[m.data.length - 1].toFixed(0)}%` shows the latest value",
				"`<Sparkline data={m.data} height=\"40px\" />` in a `<Card>`",
				"`<Grid columns={{ base: 1, sm: 3 }} gap=\"4\">` holds the 3 cards"
			],
			"tags": [
				"sparkline",
				"live",
				"realtime",
				"monitoring",
				"onmount",
				"grid"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "chart",
				"industry": [
					"devtools"
				],
				"style": [
					"default"
				],
				"motion": "expressive",
				"interaction": [
					"hover"
				],
				"layout": "grid",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Card",
					"Grid",
					"Stack",
					"Flex",
					"Sparkline"
				],
				"aliases": [
					"realtime monitor",
					"live metrics",
					"streaming sparkline"
				],
				"related": [
					"204",
					"217",
					"219"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Card",
				"Grid",
				"Stack",
				"Flex",
				"Sparkline"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Card",
						"Grid",
						"Stack",
						"Flex"
					]
				},
				{
					"from": "@codeatlasdev/ui/charts",
					"names": [
						"Sparkline"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/charts/sparklines#live-streaming-micro-charts",
			"needs": "@codeatlasdev/ui@4.6.0 + echarts"
		},
		{
			"id": "219",
			"group": "charts",
			"page": "sparklines",
			"variant": "TableRows",
			"slug": "table-row-sparklines",
			"title": "Table row sparklines",
			"description": "",
			"summary": "A table of four products with an inline sparkline per row and a text trend label.",
			"use": "Adding a mini trend line to table rows, such as revenue history per product.",
			"spec": [
				"`<Card flush full>` wraps a plain `<table>`",
				"`rows` has 4 products: Atlas Pro, Nova Suite, Relay SDK, Mesh API, each with 6 `revenue` values and a `trend`",
				"`<Sparkline data={row.revenue} trend={row.trend} height=\"32px\" />` in each row",
				"`labels` maps `up`, `down` and `neutral` to `'▲ Growing'`, `'▼ Declining'` and `'→ Stable'`",
				"Columns: Product, Last 6 months, Trend"
			],
			"tags": [
				"sparkline",
				"table",
				"trend",
				"card",
				"flush",
				"rows"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "chart",
				"industry": [
					"e-commerce"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"hover"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "compact",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Card",
					"Sparkline"
				],
				"aliases": [
					"inline trend",
					"table chart",
					"row sparkline"
				],
				"related": [
					"217",
					"216",
					"218"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Card",
				"Sparkline"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Card"
					]
				},
				{
					"from": "@codeatlasdev/ui/charts",
					"names": [
						"Sparkline"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/charts/sparklines#table-row-sparklines",
			"needs": "@codeatlasdev/ui@4.6.0 + echarts"
		},
		{
			"id": "220",
			"group": "foundation",
			"page": "colors",
			"variant": "Brand",
			"slug": "brand",
			"title": "Brand",
			"description": "Derived from the active preset. brand-fill and brand-text keep contrast in both schemes.",
			"summary": "Six swatches for the brand color tokens, each showing its name and CSS variable.",
			"use": "Picking a brand color token for a fill, a text color or an accent.",
			"spec": [
				"Renders `<Swatches {tokens} />` with 6 tokens",
				"Tokens in order: `--ca-brand-main`, `--ca-brand-light`, `--ca-brand-dark`",
				"Then `--ca-brand-contrast`, `--ca-brand-fill`, `--ca-brand-text`",
				"No bordered prop is passed"
			],
			"tags": [
				"colors",
				"brand",
				"tokens",
				"swatches",
				"theme"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "foundation",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "grid",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [],
				"aliases": [
					"palette",
					"brand colors",
					"color tokens"
				],
				"related": [
					"221",
					"222",
					"223",
					"224"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [],
			"imports": [],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/foundation/colors#brand",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "221",
			"group": "foundation",
			"page": "colors",
			"variant": "Outline",
			"slug": "outline",
			"title": "Outline",
			"description": "Border and divider scale.",
			"summary": "Three swatches for the outline tokens, drawn with a border so they stay visible on the page.",
			"use": "Choosing a divider or border strength from the subtle, default and strong outline tokens.",
			"spec": [
				"Renders `<Swatches {tokens} bordered={true} />` with 3 tokens",
				"Tokens in order: `--ca-outline-subtle`, `--ca-outline-default`, `--ca-outline-strong`"
			],
			"tags": [
				"colors",
				"outline",
				"border",
				"tokens",
				"swatches"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "foundation",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "grid",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [],
				"aliases": [
					"border colors",
					"stroke",
					"divider"
				],
				"related": [
					"220",
					"222",
					"223",
					"224"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [],
			"imports": [],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/foundation/colors#outline",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "222",
			"group": "foundation",
			"page": "colors",
			"variant": "Semantic",
			"slug": "semantic",
			"title": "Semantic",
			"description": "Success, warning, error and info. Semantic colors never change with the preset.",
			"summary": "Four swatches for the semantic status color tokens: success, warning, error and info.",
			"use": "Choosing a status color for alerts, badges and validation states.",
			"spec": [
				"Renders `<Swatches {tokens} bordered={false} />` with 4 tokens",
				"Tokens in order: `--ca-semantic-success`, `--ca-semantic-warning`, `--ca-semantic-error`, `--ca-semantic-info`"
			],
			"tags": [
				"colors",
				"semantic",
				"success",
				"warning",
				"error",
				"info",
				"tokens"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "foundation",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "grid",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [],
				"aliases": [
					"status colors",
					"success warning error",
					"feedback colors"
				],
				"related": [
					"220",
					"221",
					"223",
					"224"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [],
			"imports": [],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/foundation/colors#semantic",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "223",
			"group": "foundation",
			"page": "colors",
			"variant": "Surfaces",
			"slug": "surfaces",
			"title": "Surfaces",
			"description": "A layered scale for depth: sunken, base, raised, overlay.",
			"summary": "Four swatches for the surface tokens from sunken to overlay, drawn with a border.",
			"use": "Choosing the background layer for a page, card, raised panel or popover.",
			"spec": [
				"Renders `<Swatches {tokens} bordered={true} />` with 4 tokens",
				"Tokens in order: `--ca-surface-sunken`, `--ca-surface-base`, `--ca-surface-raised`, `--ca-surface-overlay`"
			],
			"tags": [
				"colors",
				"surface",
				"background",
				"tokens",
				"swatches",
				"elevation"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "foundation",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "grid",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [],
				"aliases": [
					"background colors",
					"elevation colors",
					"layers"
				],
				"related": [
					"220",
					"221",
					"224",
					"226"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [],
			"imports": [],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/foundation/colors#surfaces",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "224",
			"group": "foundation",
			"page": "colors",
			"variant": "Text",
			"slug": "text",
			"title": "Text",
			"description": "text-hint is the lowest readable tier (4.5:1). text-disabled is the label of disabled controls only (3:1 on every surface), never information.",
			"summary": "Four swatches for the text color tokens: primary, secondary, hint and disabled.",
			"use": "Choosing a text color by importance, from main content to hints and disabled labels.",
			"spec": [
				"Renders `<Swatches {tokens} bordered={true} />` with 4 tokens",
				"Tokens in order: `--ca-text-primary`, `--ca-text-secondary`, `--ca-text-hint`, `--ca-text-disabled`"
			],
			"tags": [
				"colors",
				"text",
				"typography",
				"tokens",
				"swatches",
				"contrast"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "foundation",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "grid",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [],
				"aliases": [
					"foreground colors",
					"font colors",
					"text contrast"
				],
				"related": [
					"220",
					"221",
					"222",
					"223"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [],
			"imports": [],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/foundation/colors#text",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "225",
			"group": "foundation",
			"page": "materials",
			"variant": "GlassButtons",
			"slug": "button-glass-variants",
			"title": "Button glass variants",
			"description": "glass-btn, glass-btn-prominent and glass-btn-clear for custom controls. They follow `data-style`, so the halo and blur disappear under `solid`.",
			"summary": "Three native buttons using the glass button classes over a brand to info gradient backdrop.",
			"use": "Choosing between the default, prominent and clear glass button styles on a colorful or image background.",
			"spec": [
				"`<button type=\"button\" class=\"glass-btn\">` labelled glass-btn",
				"`<button type=\"button\" class=\"glass-btn-prominent\">` labelled glass-btn-prominent",
				"`<button type=\"button\" class=\"glass-btn-clear\">` labelled glass-btn-clear",
				"Backdrop is `linear-gradient(135deg, var(--ca-brand-main), var(--ca-semantic-info))`"
			],
			"tags": [
				"materials",
				"glass",
				"button",
				"glass-btn",
				"backdrop"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "foundation",
				"industry": [
					"general"
				],
				"style": [
					"glassmorphism",
					"aurora"
				],
				"motion": "subtle",
				"interaction": [
					"hover",
					"press",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [],
				"aliases": [
					"frosted button",
					"translucent button",
					"blur button"
				],
				"related": [
					"226",
					"227"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [],
			"imports": [],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/foundation/materials#button-glass-variants",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "226",
			"group": "foundation",
			"page": "materials",
			"variant": "Tiers",
			"slug": "material-tiers",
			"title": "Material tiers",
			"description": "All five thickness levels, pinned to glass, on a gradient backdrop.",
			"summary": "Five glass surfaces at elevations 1 to 5, from Ultra thin to Chrome, over a three color gradient.",
			"use": "Choosing the glass tier by how much blur and fill a panel needs over its background.",
			"spec": [
				"`{#each tiers as tier (tier.elevation)}` renders 5 `<Surface material=\"glass\" elevation={tier.elevation} class=\"tier\">`",
				"Tiers: Ultra thin (`elevation: 1`), Thin (`elevation: 2`), Regular (`elevation: 3`), Thick (`elevation: 4`), Chrome (`elevation: 5`)",
				"Each tier shows a `label` and a `desc`, for example Subtle background hint and Heaviest blur and fill",
				"Backdrop gradient uses `var(--ca-brand-main) 0%`, `var(--ca-semantic-info) 50%` and `var(--ca-semantic-success) 100%`"
			],
			"tags": [
				"materials",
				"glass",
				"surface",
				"elevation",
				"blur",
				"tiers"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "foundation",
				"industry": [
					"general"
				],
				"style": [
					"glassmorphism",
					"aurora"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "grid",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Surface"
				],
				"aliases": [
					"frosted glass",
					"blur levels",
					"translucent surface",
					"elevation scale"
				],
				"related": [
					"227",
					"225",
					"223"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Surface"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Surface"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/foundation/materials#material-tiers",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "227",
			"group": "foundation",
			"page": "materials",
			"variant": "Tinted",
			"slug": "tinted-and-glowing",
			"title": "Tinted and glowing",
			"description": "",
			"summary": "Three glass surfaces over a gradient: tinted, glowing, and tinted with glow.",
			"use": "Highlighting a glass chip or panel with a brand tint, a glow, or both.",
			"spec": [
				"`<Surface material=\"glass\" tone=\"brand\" class=\"chip\">` labelled Tinted",
				"`<Surface material=\"glass\" glow class=\"chip\">` labelled Glowing",
				"`<Surface material=\"glass\" tone=\"brand\" glow class=\"chip\">` labelled Tinted + glowing",
				"Backdrop gradient runs `var(--ca-brand-main) 0%` to `var(--ca-semantic-success) 100%`"
			],
			"tags": [
				"materials",
				"glass",
				"surface",
				"tone",
				"glow",
				"tinted"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "foundation",
				"industry": [
					"general"
				],
				"style": [
					"glassmorphism",
					"aurora"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "grid",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Surface"
				],
				"aliases": [
					"colored glass",
					"glow",
					"tinted surface"
				],
				"related": [
					"226",
					"225"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Surface"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Surface"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/foundation/materials#tinted-and-glowing",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "228",
			"group": "foundation",
			"page": "shadows",
			"variant": "Scale",
			"slug": "shadow-scale",
			"title": "Shadow scale",
			"description": "xs for hairline lift up to xl for modal depth.",
			"summary": "Five cards, each with one shadow token from xs to xl, labelled with its name and CSS variable.",
			"use": "Comparing the five shadow sizes before choosing one for a card, popover or floating panel.",
			"spec": [
				"`const sizes = [\"xs\", \"sm\", \"md\", \"lg\", \"xl\"]` rendered by `{#each sizes as size (size)}`",
				"Each card sets `style=\"--card-shadow: var(--ca-shadow-{size})\"`",
				"Labels `shadow-{size}` and `--ca-shadow-{size}` shown in each card",
				"Cards use `background: var(--ca-surface-base)` and `box-shadow: var(--card-shadow)`"
			],
			"tags": [
				"shadows",
				"elevation",
				"tokens",
				"scale",
				"box-shadow"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "foundation",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "grid",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [],
				"aliases": [
					"elevation",
					"drop shadow",
					"box shadow"
				],
				"related": [
					"226",
					"223"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [],
			"imports": [],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/foundation/shadows#shadow-scale",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "229",
			"group": "foundation",
			"page": "typography",
			"variant": "Body",
			"slug": "body-and-ui-scale",
			"title": "Body and UI scale",
			"description": "Body, caption, label and button sizes, plus the micro and nano steps used by badges.",
			"summary": "Seven body text size tokens from Body 1 to Nano, each rendered as a sample line.",
			"use": "Choosing a font size token for body copy, captions, labels and buttons.",
			"spec": [
				"Renders `<TypeRows {rows} />` with 7 rows",
				"Row tokens: `--ca-font-size-body1`, `--ca-font-size-body2`, `--ca-font-size-caption`, `--ca-font-size-label`",
				"Then `--ca-font-size-button`, `--ca-font-size-micro`, `--ca-font-size-nano`",
				"Row labels: Body 1, Body 2, Caption, Label, Button, Micro, Nano"
			],
			"tags": [
				"typography",
				"body",
				"font-size",
				"tokens",
				"caption",
				"label"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "foundation",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [],
				"aliases": [
					"font sizes",
					"text scale",
					"paragraph sizes",
					"caption"
				],
				"related": [
					"231",
					"230",
					"861"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [],
			"imports": [],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/foundation/typography#body-and-ui-scale",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "230",
			"group": "foundation",
			"page": "typography",
			"variant": "Families",
			"slug": "font-families",
			"title": "Font families",
			"description": "",
			"summary": "The three font family tokens, sans, display and mono, each with a sample sentence.",
			"use": "Choosing a font family: sans for UI text, display for headings, mono for code.",
			"spec": [
				"`--ca-font-sans` with The quick brown fox jumps over the lazy dog",
				"`--ca-font-display` with Headings use the display family",
				"`--ca-font-mono` with `const answer = 42;`",
				"Samples use `class=\"sample sample--sans\"`, `class=\"sample sample--display\"` and `class=\"sample sample--mono\"`"
			],
			"tags": [
				"typography",
				"font-family",
				"sans",
				"display",
				"mono",
				"tokens"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "foundation",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [],
				"aliases": [
					"typeface",
					"font stack",
					"sans serif mono"
				],
				"related": [
					"229",
					"231",
					"861"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [],
			"imports": [],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/foundation/typography#font-families",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "231",
			"group": "foundation",
			"page": "typography",
			"variant": "Headings",
			"slug": "heading-scale",
			"title": "Heading scale",
			"description": "--ca-font-size-h1 to h6.",
			"summary": "Six heading size tokens, Heading 1 to Heading 6, each rendered as a bold sample line.",
			"use": "Choosing a heading size token for a page title hierarchy.",
			"spec": [
				"`[1, 2, 3, 4, 5, 6].map((n) =>` builds 6 rows",
				"Each row has label `Heading ${n}` and token `--ca-font-size-h${n}`",
				"Renders `<TypeRows {rows} heading />` with the `heading` flag for bold samples"
			],
			"tags": [
				"typography",
				"headings",
				"font-size",
				"tokens",
				"h1"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "foundation",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [],
				"aliases": [
					"heading sizes",
					"title scale",
					"h1 h6"
				],
				"related": [
					"229",
					"230",
					"861"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [],
			"imports": [],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/foundation/typography#heading-scale",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "232",
			"group": "docs-kit",
			"page": "docs",
			"variant": "Cards",
			"slug": "linkcard-cardgrid-and-methodbadge",
			"title": "LinkCard, CardGrid and MethodBadge",
			"description": "",
			"summary": "A CardGrid with two LinkCards, followed by a row of five MethodBadges for the HTTP verbs.",
			"use": "Docs landing pages linking to guides, and API references that tag endpoints with their HTTP method.",
			"spec": [
				"`<CardGrid>` contains 2 `LinkCard` entries: Quick start and Webhooks",
				"Each `LinkCard` sets `title`, `description` and `href=\"#top\"`",
				"`<MethodBadge method=\"GET\" />`",
				"Other badges: `method=\"POST\"`, `method=\"PUT\"`, `method=\"PATCH\"`, `method=\"DELETE\"`"
			],
			"tags": [
				"card-grid",
				"link-card",
				"method-badge",
				"docs-kit",
				"http-method",
				"api-docs"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"devtools"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"hover",
					"press",
					"keyboard"
				],
				"layout": "grid",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"CardGrid",
					"LinkCard",
					"MethodBadge"
				],
				"aliases": [
					"link cards",
					"http method badge",
					"api verbs",
					"docs landing"
				],
				"related": [
					"234",
					"235"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"CardGrid",
				"LinkCard",
				"MethodBadge"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"CardGrid",
						"LinkCard",
						"MethodBadge"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/docs-kit/docs#linkcard-cardgrid-and-methodbadge",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "233",
			"group": "docs-kit",
			"page": "docs",
			"variant": "CodeTabs",
			"slug": "codetabs",
			"title": "CodeTabs",
			"description": "Language tabs with a copy button. Groups that share a sync key follow each other and persist the choice in localStorage. Highlighting stays with you: wrap each block in .ca-code.",
			"summary": "Two CodeTabs groups, each with cURL and Node.js tabs, that share the selected language through the same sync key.",
			"use": "API docs that show the same request in several languages and keep the choice in sync across the page.",
			"spec": [
				"Two `<CodeTabs sync=\"demo-lang\">` blocks use the same sync key",
				"Each group has `<CodeTab label=\"cURL\">` and `<CodeTab label=\"Node.js\">`",
				"Tab content is `<div class=\"ca-code\"><pre><code>` rendering a string constant such as `{curl}` or `{node}`",
				"First group sends a POST to messages/text, second group lists sessions with `{curlList}` and `{nodeList}`",
				"Wrapped in `<div class=\"ca-prose wrap\">`"
			],
			"tags": [
				"code-tabs",
				"code-tab",
				"docs-kit",
				"sync",
				"curl",
				"api-docs"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"devtools",
					"saas"
				],
				"style": [
					"default",
					"terminal"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"CodeTab",
					"CodeTabs"
				],
				"aliases": [
					"language tabs",
					"code samples",
					"snippet switcher",
					"sdk examples"
				],
				"related": [
					"235",
					"232"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"CodeTab",
				"CodeTabs"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"CodeTab",
						"CodeTabs"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/docs-kit/docs#codetabs",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "234",
			"group": "docs-kit",
			"page": "docs",
			"variant": "NavToc",
			"slug": "docsnav-and-tableofcontents",
			"title": "DocsNav and TableOfContents",
			"description": "The sidebar tree and the page index. The inline variant is shown; DocsShell uses the rail variant on desktop.",
			"summary": "A DocsNav sidebar with two groups and a TableOfContents of four headings rendered side by side.",
			"use": "Documentation pages that need a section navigation tree next to an inline outline of the current page.",
			"spec": [
				"`<DocsNav {groups} pathname=\"/docs/docs-kit/docs/\" onNavigate={() => {}} />`",
				"`groups` typed `DocsNavGroup[]` has 2 groups: Get started with 2 items and Messages with 4 items",
				"Messages items carry a `badge`: `badge: 'POST'`, `badge: 'GET'`, `badge: 'PUT'`, `badge: 'DELETE'`",
				"`<TableOfContents {headings} variant=\"inline\" />`",
				"`headings` typed `DocsHeading[]` has 4 entries with `id`, `text` and `depth` of 2 or 3"
			],
			"tags": [
				"docs-nav",
				"table-of-contents",
				"docs-kit",
				"sidebar",
				"navigation",
				"headings"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"devtools"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"hover",
					"press",
					"keyboard"
				],
				"layout": "split",
				"colorMode": "both",
				"density": "compact",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"DocsNav",
					"TableOfContents"
				],
				"aliases": [
					"docs sidebar",
					"table of contents",
					"outline",
					"page navigation"
				],
				"related": [
					"235",
					"236",
					"232"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"DocsNav",
				"TableOfContents"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"DocsNav",
						"TableOfContents",
						"DocsHeading",
						"DocsNavGroup"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/docs-kit/docs#docsnav-and-tableofcontents",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "235",
			"group": "docs-kit",
			"page": "docs",
			"variant": "Prose",
			"slug": "ca-prose-callout-and-steps",
			"title": "ca-prose, Callout and Steps",
			"description": "Wrap rendered markdown in .ca-prose. Callout is an Alert vocabulary (note, tip, caution, danger); keep two per page. Steps turns an ordered list into a numbered rail.",
			"summary": "A documentation article using the ca-prose wrapper with headings, two Callouts, a Steps list and a request fields table.",
			"use": "Rendering API guide content, with tips, warnings, numbered steps and reference tables, inside a docs page.",
			"spec": [
				"Wrapper `<div class=\"ca-prose prose\">` holds plain `h2`, `h3` and `p` elements with ids like `id=\"demo-auth\"`",
				"`<Callout type=\"tip\">` and `<Callout type=\"caution\">`",
				"`<Steps>` wraps an `<ol>` with 2 items: Create a session and Connect with a QR code",
				"Table sits in `<div class=\"ca-table-wrap\" tabindex=\"0\" role=\"region\" aria-label=\"Request fields\">`",
				"Table columns: Field, Type, Description, with 2 rows for `to` and `text`"
			],
			"tags": [
				"prose",
				"callout",
				"steps",
				"docs-kit",
				"table",
				"api-docs"
			],
			"shape": "tall",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"devtools",
					"saas"
				],
				"style": [
					"default",
					"editorial"
				],
				"motion": "none",
				"interaction": [
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Callout",
					"Steps"
				],
				"aliases": [
					"article",
					"documentation page",
					"callout",
					"markdown content",
					"steps"
				],
				"related": [
					"233",
					"234",
					"232"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Callout",
				"Steps"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Callout",
						"Steps"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/docs-kit/docs#ca-prose-callout-and-steps",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "236",
			"group": "docs-kit",
			"page": "docs",
			"variant": "Search",
			"slug": "docssearch",
			"title": "DocsSearch",
			"description": "Full-text search. A dialog on desktop and a full-height sheet with a 16px input on phones. Pass entries or an async loader.",
			"summary": "A DocsSearch dialog opened from an Open search button over a two-entry index, showing the selected href afterwards.",
			"use": "Docs site search opened by a button or shortcut that jumps to a page or heading.",
			"spec": [
				"`<Button variant=\"outlined\" onclick={() => (open = true)}>` labelled Open search",
				"`<DocsSearch bind:open {index} onselect={(href) => (picked = href)} />`",
				"State: `let open = $state(false)` and `let picked = $state('')`",
				"`index` typed `DocsSearchEntry[]` has 2 entries (Send text, Webhooks) with `href`, `title`, `section`, `description`, `headings` and `text`",
				"`<span class=\"picked\" aria-live=\"polite\">` shows Selected plus the chosen href"
			],
			"tags": [
				"docs-search",
				"search",
				"docs-kit",
				"dialog",
				"command-palette",
				"index"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"devtools"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "overlay",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Button",
					"DocsSearch"
				],
				"aliases": [
					"docs search",
					"site search",
					"find in docs"
				],
				"related": [
					"234",
					"235"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Button",
				"DocsSearch"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Button",
						"DocsSearch",
						"DocsSearchEntry"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/docs-kit/docs#docssearch",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "237",
			"group": "navigation",
			"page": "tabs",
			"variant": "Scrollable",
			"slug": "scrollable",
			"title": "Scrollable",
			"description": "Seven tabs in a narrow column: the list scrolls on its own, the active tab starts in view, and fade marks the edge.",
			"summary": "Seven tabs in a narrow container where the list scrolls horizontally with edge fades.",
			"use": "Settings areas with more sections than fit the width, especially on mobile.",
			"spec": [
				"`<TabsList fade>` over `{#each sections as s (s)}` producing `TabsTrigger` items",
				"`const sections` has 7 labels: General, Billing, Members, Webhooks, Security, Integrations, Danger zone",
				"`<Tabs value=\"integrations\">` starts on the sixth tab",
				"Values come from `const key = (s: string) => s.toLowerCase().replace(' ', '-')`",
				"Wrapper is `.wrap` with `max-width: 360px`"
			],
			"tags": [
				"tabs",
				"scrollable",
				"fade",
				"overflow",
				"settings",
				"tabs-list"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "navigation",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"keyboard",
					"press",
					"scroll"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "compact",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Tabs",
					"TabsList",
					"TabsTrigger",
					"TabsContent"
				],
				"aliases": [
					"overflow tabs",
					"scroll tabs",
					"settings tabs"
				],
				"related": [
					"164",
					"163",
					"460"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Tabs",
				"TabsList",
				"TabsTrigger",
				"TabsContent"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Tabs",
						"TabsList",
						"TabsTrigger",
						"TabsContent"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/navigation/tabs#scrollable",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "238",
			"group": "navigation",
			"page": "tabs",
			"variant": "Icons",
			"slug": "icons",
			"title": "Icons",
			"description": "A leading icon per tab. A brand logo keeps its own colors with brandIcon; SchemeAsset swaps a monochrome mark between light and dark.",
			"summary": "Tabs with a Lucide icon, a brand-colored svg icon and a scheme-aware monochrome icon next to each label.",
			"use": "Tab bars that mix generic and third-party product marks, such as terminal or agent sessions.",
			"spec": [
				"`<Tabs value=\"shell\">` with 3 triggers: `value=\"shell\"`, `value=\"claude\"`, `value=\"codex\"`",
				"Shell uses `{#snippet icon()}<Terminal />{/snippet}`",
				"Claude Code and Codex set `brandIcon` so the inline `svg` keeps its own colors",
				"Codex wraps `<SchemeAsset>` with `{#snippet light()}` and `{#snippet dark()}` svg variants",
				"Wrapper is `.wrap` with `max-width: 480px`"
			],
			"tags": [
				"tabs",
				"icon",
				"brand-icon",
				"scheme-asset",
				"dark-mode",
				"tabs-trigger"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "navigation",
				"industry": [
					"devtools",
					"ai"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"keyboard",
					"press"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Tabs",
					"TabsList",
					"TabsTrigger",
					"TabsContent",
					"SchemeAsset"
				],
				"aliases": [
					"brand logo tabs",
					"icon tabs"
				],
				"related": [
					"164",
					"239",
					"237"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Tabs",
				"TabsList",
				"TabsTrigger",
				"TabsContent",
				"SchemeAsset"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Tabs",
						"TabsList",
						"TabsTrigger",
						"TabsContent",
						"SchemeAsset"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/navigation/tabs#icons",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "239",
			"group": "navigation",
			"page": "menu",
			"variant": "BrandIcons",
			"slug": "leading-icons-and-brand-logos",
			"title": "Leading icons and brand logos",
			"description": "The icon slot gives every item the same box and gap. brandIcon keeps a logo's own colors, and SchemeAsset swaps a monochrome mark between light and dark.",
			"summary": "A dropdown menu of agents where brand-colored icons opt out of the item's text color, including a scheme-aware monochrome mark.",
			"use": "Pickers that list third-party products or agents with their real logos, such as a new-tab or integration menu.",
			"spec": [
				"`<DropdownMenu>` with `{#snippet triggerChild(props)}` rendering `<Button variant=\"glass\" {...props}>New tab</Button>`",
				"`<DropdownMenuLabel>Agents</DropdownMenuLabel>` followed by 4 items: Shell, Claude Code, Codex, Coming soon",
				"Shell uses `{#snippet icon()}<Bot />{/snippet}`; Claude Code and Codex set `brandIcon` so the inline `svg` keeps its own colors",
				"Codex wraps `<SchemeAsset>` with `{#snippet light()}` and `{#snippet dark()}` svg variants",
				"Last item is `brandIcon disabled`",
				"Each item sets `last` through `onclick`, shown as `Opened: {last}` with `aria-live=\"polite\"`"
			],
			"tags": [
				"dropdown-menu",
				"menu",
				"brand-icon",
				"scheme-asset",
				"dark-mode",
				"icon",
				"disabled"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "navigation",
				"industry": [
					"ai"
				],
				"style": [
					"glassmorphism"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "overlay",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"DropdownMenu",
					"DropdownMenuItem",
					"DropdownMenuLabel",
					"SchemeAsset",
					"Button"
				],
				"aliases": [
					"logo menu",
					"brand mark",
					"dark mode icon"
				],
				"related": [
					"238",
					"158",
					"401"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"DropdownMenu",
				"DropdownMenuItem",
				"DropdownMenuLabel",
				"SchemeAsset",
				"Button"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"DropdownMenu",
						"DropdownMenuItem",
						"DropdownMenuLabel",
						"SchemeAsset",
						"Button"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/navigation/menu#leading-icons-and-brand-logos",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "240",
			"group": "display",
			"page": "avatar",
			"variant": "IconFallback",
			"slug": "iconfallback",
			"title": "IconFallback",
			"description": "",
			"summary": "Two large avatars whose fallback is a custom icon: one with an image that fails to decode and one with no image.",
			"use": "Representing groups or bots, where initials do not make sense, with a lucide icon.",
			"spec": [
				"`<Avatar src=\"data:image/png;base64,AAAA\" alt=\"Family\" size=\"lg\" loading=\"lazy\" referrerpolicy=\"no-referrer\">` uses an image that fails to decode",
				"`{#snippet fallback()}<Users size={22} aria-hidden=\"true\" />{/snippet}` renders the Users icon",
				"`<Avatar alt=\"Support bot\" size=\"lg\">` has no `src`",
				"`{#snippet fallback()}<Bot size={22} aria-hidden=\"true\" />{/snippet}` renders the Bot icon"
			],
			"tags": [
				"avatar",
				"fallback",
				"snippet",
				"icon",
				"image-error",
				"lucide"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Avatar"
				],
				"aliases": [
					"icon placeholder",
					"broken image fallback",
					"bot avatar",
					"group avatar"
				],
				"related": [
					"108",
					"107",
					"110"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Avatar"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Avatar"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/display/avatar#iconfallback",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "241",
			"group": "feedback",
			"page": "skeleton",
			"variant": "SkeletonProp",
			"slug": "the-skeleton-prop",
			"title": "The skeleton prop",
			"description": "One flag on the real component keeps its size while data loads.",
			"summary": "Avatar, KpiCard, TextField and Card all switched to their skeleton state by one shared loading flag.",
			"use": "Loading states where real components keep their exact size and show a placeholder until data arrives.",
			"spec": [
				"`let loading = $state(true)` passed as `skeleton={loading}` to four components",
				"`<Avatar alt=\"Ana Lima\" size=\"xl\" skeleton={loading} />` and `<KpiCard title=\"Revenue\" value=\"R$ 12.400\" trend={3.2} skeleton={loading} />`",
				"`<TextField label=\"Email\" description=\"We never share it\" skeleton={loading} />`",
				"`<Card title=\"Overview\" skeleton={loading}>` with one paragraph of content",
				"Toggle `<Button variant=\"outlined\" size=\"sm\"` runs `onclick={() => (loading = !loading)}`"
			],
			"tags": [
				"skeleton",
				"loading",
				"avatar",
				"kpi-card",
				"text-field",
				"card"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "feedback",
				"industry": [
					"fintech"
				],
				"style": [
					"default"
				],
				"motion": "expressive",
				"interaction": [
					"press"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Avatar",
					"Button",
					"Card",
					"Flex",
					"KpiCard",
					"Stack",
					"TextField"
				],
				"aliases": [
					"loading state",
					"placeholder",
					"layout shift"
				],
				"related": [
					"097",
					"098",
					"099",
					"255"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Avatar",
				"Button",
				"Card",
				"Flex",
				"KpiCard",
				"Stack",
				"TextField"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Avatar",
						"Button",
						"Card",
						"Flex",
						"KpiCard",
						"Stack",
						"TextField"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/feedback/skeleton#the-skeleton-prop",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "242",
			"group": "feedback",
			"page": "lightbox",
			"variant": "Gallery",
			"slug": "gallery-with-video-caption-and-download",
			"title": "Gallery with video, caption and download",
			"description": "Arrow keys, buttons and swipe move through the items.",
			"summary": "A lightbox gallery with three items, two images and one video, each with a caption and some with meta text.",
			"use": "Browsing attachments or media in a thread, with captions and authors, using next and previous navigation.",
			"spec": [
				"`<Lightbox bind:open bind:index {items} />` with `items: LightboxItem[]`",
				"Three items: image Moodboard, v1, video `type: 'video'` Short clip with a `poster`, image Moodboard, v2",
				"Fields used: `src`, `alt`, `caption`, `meta`; the third item has no `meta`",
				"Trigger resets `index = 0; open = true;` and is labelled `Open gallery ({items.length})`"
			],
			"tags": [
				"lightbox",
				"gallery",
				"video",
				"caption",
				"carousel",
				"media"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "feedback",
				"industry": [
					"media"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard",
					"drag"
				],
				"layout": "overlay",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Button",
					"Lightbox"
				],
				"aliases": [
					"image gallery",
					"media viewer",
					"video viewer"
				],
				"related": [
					"091",
					"083"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Button",
				"Lightbox"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Button",
						"Lightbox",
						"LightboxItem"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/feedback/lightbox#gallery-with-video-caption-and-download",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "243",
			"group": "feedback",
			"page": "install-prompt",
			"variant": "IosInstructions",
			"slug": "ios-instructions",
			"title": "iOS instructions",
			"description": "What Safari on iPhone and iPad gets: the two steps, no button.",
			"summary": "The install prompt in iOS mode, showing add to home screen instructions inside a reserved stage box.",
			"use": "Prompting Safari on iPhone users, who have no native install event, to install the app to their home screen.",
			"spec": [
				"`<InstallPrompt mode=\"ios\" storageKey=\"demo-install-ios\" />`",
				"Wrapped in `<div class=\"stage\">` with `min-height: calc(var(--ca-space-8) * 3)` so the page does not shift when it appears",
				"No handlers or state in the demo, the prompt renders only after mounting in the browser"
			],
			"tags": [
				"install-prompt",
				"pwa",
				"ios",
				"banner",
				"install"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "feedback",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "compact",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"InstallPrompt"
				],
				"aliases": [
					"add to home screen",
					"pwa",
					"install banner"
				],
				"related": [
					"244",
					"103"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"InstallPrompt"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"InstallPrompt"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/feedback/install-prompt#ios-instructions",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "244",
			"group": "feedback",
			"page": "install-prompt",
			"variant": "NativePrompt",
			"slug": "native-prompt",
			"title": "Native prompt",
			"description": "The Chromium flow: Install opens the browser's install dialog. This demo fires a stand-in event so the banner shows in any browser.",
			"summary": "The install prompt in native mode, triggered by a stand-in beforeinstallprompt event fired on mount.",
			"use": "Offering an install banner on browsers that expose the beforeinstallprompt event, such as Chrome and Edge.",
			"spec": [
				"`<InstallPrompt mode=\"native\" storageKey=\"demo-install-native\" />`",
				"`onMount` dispatches `new Event('beforeinstallprompt', { cancelable: true })` on the window",
				"The fake event gets `prompt: () => Promise.resolve()` and `userChoice: Promise.resolve({ outcome: 'dismissed' })`",
				"Wrapped in `<div class=\"stage\">` with `min-height: calc(var(--ca-space-8) * 3)`"
			],
			"tags": [
				"install-prompt",
				"pwa",
				"native",
				"beforeinstallprompt",
				"banner"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "feedback",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "compact",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"InstallPrompt"
				],
				"aliases": [
					"add to home screen",
					"pwa",
					"install banner"
				],
				"related": [
					"243",
					"103"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"InstallPrompt"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"InstallPrompt"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/feedback/install-prompt#native-prompt",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "245",
			"group": "layout",
			"page": "record-list",
			"variant": "Apps",
			"slug": "apps",
			"title": "Apps",
			"description": "Identity with avatar, status chip and a row menu. Narrow the window or the container to see it stack.",
			"summary": "A record list of three apps with an avatar identity, scopes, install count, status chip, created date and a row menu.",
			"use": "Admin tables of API apps, integrations or projects where each row needs a name, a few facts, a status and per-row actions.",
			"spec": [
				"`<RecordList` with `columns=\"minmax(0,1.3fr) minmax(0,1.8fr) 4.5rem 5.5rem 6.5rem 2.75rem\"`",
				"`labels={['App', 'Scopes', 'Installs', 'Status', 'Created']}` and `aria-label=\"Apps\"`",
				"3 rows from `apps` (Billing, Support desk, Analytics exporter), each a `<RecordRow>` keyed by `app.id`",
				"`{#snippet identity()}` holds `<Avatar alt={app.name} size=\"sm\" />` and the name in `<strong>`",
				"`<RecordCell label=\"Scopes\">`, `<RecordCell label=\"Installs\">`, `<RecordCell label=\"Status\">` and `<RecordCell label=\"Created\">`",
				"`<StatusChip status={app.live ? 'success' : 'neutral'} label={app.live ? 'Live' : 'Draft'} />`; `{#snippet actions()}` holds a `<DropdownMenu align=\"end\">` with `Edit` and `Rotate secret` items"
			],
			"tags": [
				"record-list",
				"record-row",
				"table",
				"status-chip",
				"row-menu",
				"avatar",
				"responsive"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "layout",
				"industry": [
					"devtools",
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Avatar",
					"DropdownMenu",
					"DropdownMenuItem",
					"IconButton",
					"RecordCell",
					"RecordList",
					"RecordRow",
					"StatusChip"
				],
				"aliases": [
					"row list",
					"data rows",
					"responsive table"
				],
				"related": [
					"246",
					"247",
					"183"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Avatar",
				"DropdownMenu",
				"DropdownMenuItem",
				"IconButton",
				"RecordCell",
				"RecordList",
				"RecordRow",
				"StatusChip"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Avatar",
						"DropdownMenu",
						"DropdownMenuItem",
						"IconButton",
						"RecordCell",
						"RecordList",
						"RecordRow",
						"StatusChip"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/layout/record-list#apps",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "246",
			"group": "layout",
			"page": "record-list",
			"variant": "NoMenu",
			"slug": "without-a-menu",
			"title": "Without a menu",
			"description": "No actions slot and no actions track: three columns that stack the same way.",
			"summary": "A three column record list of webhooks with no actions slot, so there is no trailing menu track.",
			"use": "Read-only lists such as webhook endpoints or logs where rows have facts but no per-row actions.",
			"spec": [
				"`<RecordList` with `columns=\"minmax(0,2fr) minmax(0,1.4fr) 5rem\"`",
				"`labels={['Endpoint', 'Events', 'Delivered']}` and `aria-label=\"Webhooks\"`",
				"2 rows from `hooks`, each a `<RecordRow>` keyed by `hook.id`",
				"`{#snippet identity()}` renders the endpoint as `<code>{hook.url}</code>`",
				"`<RecordCell label=\"Events\">` and `<RecordCell label=\"Delivered\">` follow; the row has no actions snippet and `columns` has no trailing action track"
			],
			"tags": [
				"record-list",
				"record-row",
				"table",
				"no-actions",
				"webhooks",
				"responsive"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "layout",
				"industry": [
					"devtools"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "compact",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"RecordCell",
					"RecordList",
					"RecordRow"
				],
				"aliases": [
					"webhook list",
					"endpoint rows",
					"read only rows"
				],
				"related": [
					"245",
					"247"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"RecordCell",
				"RecordList",
				"RecordRow"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"RecordCell",
						"RecordList",
						"RecordRow"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/layout/record-list#without-a-menu",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "247",
			"group": "layout",
			"page": "record-list",
			"variant": "Phone",
			"slug": "phone-width",
			"title": "Phone width",
			"description": "A 344px slot: the same list stacked, because the list reads its own width.",
			"summary": "The same record list inside a narrow slot, to show it stacking because the list reads its own width.",
			"use": "Checking how a dense record list reads on a phone before shipping it, without resizing the browser.",
			"spec": [
				"Wrapper `<div class=\"slot\">` with `inline-size: min(100%, 21.5rem)`",
				"`<RecordList` with `columns=\"minmax(0,1.3fr) minmax(0,1fr) 7rem 7rem 2.75rem\"`",
				"`labels={['Key', 'Prefix', 'Last used', 'Created']}` and `aria-label=\"API keys\"`",
				"2 rows from `keys` (Production key, CI pipeline) with `<Avatar alt={key.name} size=\"sm\" />` in `{#snippet identity()}`",
				"`<RecordCell label=\"Prefix\">`, `<RecordCell label=\"Last used\">` and `<RecordCell label=\"Created\">`; `{#snippet actions()}` holds a `<DropdownMenu align=\"end\">` with a `Revoke` item"
			],
			"tags": [
				"record-list",
				"record-row",
				"table",
				"phone",
				"responsive",
				"container-width"
			],
			"shape": "square",
			"index": {
				"kind": "component",
				"subtype": "layout",
				"industry": [
					"devtools"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "compact",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Avatar",
					"DropdownMenu",
					"DropdownMenuItem",
					"IconButton",
					"RecordCell",
					"RecordList",
					"RecordRow"
				],
				"aliases": [
					"mobile rows",
					"stacked rows",
					"narrow container"
				],
				"related": [
					"245",
					"246"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Avatar",
				"DropdownMenu",
				"DropdownMenuItem",
				"IconButton",
				"RecordCell",
				"RecordList",
				"RecordRow"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Avatar",
						"DropdownMenu",
						"DropdownMenuItem",
						"IconButton",
						"RecordCell",
						"RecordList",
						"RecordRow"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/layout/record-list#phone-width",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "248",
			"group": "display",
			"page": "message-bubble",
			"variant": "Conversation",
			"slug": "a-grouped-conversation",
			"title": "A grouped conversation",
			"description": "The first bubble shows the sender, the last one the avatar and the tail.",
			"summary": "A grouped chat thread: two incoming bubbles from one sender with a name and avatar, then an outgoing read bubble.",
			"use": "Chat threads and support inboxes where consecutive messages from one person are grouped and your own replies show delivery status.",
			"spec": [
				"`<MessageBubble direction=\"in\" grouped=\"first\" sender=\"Maria Souza\" time=\"14:30\">` opens the run and shows the sender",
				"`<MessageBubble direction=\"in\" grouped=\"last\" time=\"14:30\">` closes it",
				"`{#snippet avatar()}<Avatar alt=\"Maria Souza\" size=\"sm\" />{/snippet}` in each incoming bubble",
				"`<MessageBubble direction=\"out\" time=\"14:32\" status=\"read\">`"
			],
			"tags": [
				"message-bubble",
				"chat",
				"avatar",
				"grouped",
				"delivery-status"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Avatar",
					"MessageBubble"
				],
				"aliases": [
					"chat thread",
					"grouped messages",
					"inbound outbound",
					"chat bubbles"
				],
				"related": [
					"249",
					"250",
					"251"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Avatar",
				"MessageBubble"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Avatar",
						"MessageBubble"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/display/message-bubble#a-grouped-conversation",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "249",
			"group": "display",
			"page": "message-bubble",
			"variant": "Status",
			"slug": "delivery-status",
			"title": "Delivery status",
			"description": "pending, sent, delivered and read; read ticks use the info color.",
			"summary": "Four outgoing bubbles, one per delivery state: pending, sent, delivered and read.",
			"use": "Showing message delivery ticks in a chat, with a visually hidden status text for screen readers.",
			"spec": [
				"`const states = ['pending', 'sent', 'delivered', 'read'] as const;`",
				"`{#each states as status}` renders `<MessageBubble direction=\"out\" time=\"09:41\" {status}>`"
			],
			"tags": [
				"message-bubble",
				"chat",
				"status",
				"delivery",
				"ticks"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"MessageBubble"
				],
				"aliases": [
					"delivery receipt",
					"read receipt",
					"sent delivered read",
					"message state"
				],
				"related": [
					"248",
					"250"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"MessageBubble"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"MessageBubble"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/display/message-bubble#delivery-status",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "250",
			"group": "display",
			"page": "message-bubble",
			"variant": "QuoteReactions",
			"slug": "quote-and-reactions",
			"title": "Quote and reactions",
			"description": "The quote slot renders a reply preview; reactions overlap the bottom edge.",
			"summary": "An incoming bubble with a reply quote at the top and two reaction chips under it.",
			"use": "Chat messages that reply to an earlier message or carry emoji reactions.",
			"spec": [
				"`<MessageBubble` with `direction=\"in\"` and `sender=\"Carlos\"`",
				"`reactions={[{ emoji: '👍', count: 2, mine: true }, { emoji: '🎉' }]}`",
				"`{#snippet quote()}` holds a `<strong>You</strong>` label and the quoted text"
			],
			"tags": [
				"message-bubble",
				"chat",
				"quote",
				"reactions",
				"reply"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"MessageBubble"
				],
				"aliases": [
					"reply quote",
					"emoji reaction",
					"quoted reply"
				],
				"related": [
					"248",
					"249",
					"251"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"MessageBubble"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"MessageBubble"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/display/message-bubble#quote-and-reactions",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "251",
			"group": "display",
			"page": "conversation-item",
			"variant": "Inbox",
			"slug": "inbox",
			"title": "Inbox",
			"description": "Pinned, muted, unread, typing and the active row.",
			"summary": "An inbox of four conversation rows: unread count, pinned, muted, typing, with the selected row highlighted.",
			"use": "Chat or support inboxes that list conversations with avatar, last message, time and unread state.",
			"spec": [
				"4 rows in `rows`, each a `<ConversationItem` with `title`, `time` and `preview`",
				"`active={active === row.id}` and `onclick={() => (active = row.id)}` select a row",
				"`unread`, `pinned`, `muted` and `typing` come from the row",
				"`{#snippet avatar()}<Avatar alt={row.title} size=\"lg\" />{/snippet}`"
			],
			"tags": [
				"conversation-item",
				"inbox",
				"chat",
				"unread",
				"avatar"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"hover",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Avatar",
					"ConversationItem"
				],
				"aliases": [
					"chat list",
					"message inbox",
					"unread badge",
					"pinned chat",
					"typing indicator"
				],
				"related": [
					"248",
					"250",
					"114"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Avatar",
				"ConversationItem"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Avatar",
						"ConversationItem"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/display/conversation-item#inbox",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "252",
			"group": "display",
			"page": "audio-player",
			"variant": "Voice",
			"slug": "voice-messages",
			"title": "Voice messages",
			"description": "With peaks, and without waveform data.",
			"summary": "Two voice message players: one with a waveform from peaks, one with flat placeholder bars.",
			"use": "Voice notes in chat where the audio loads only on the first play and can be scrubbed.",
			"spec": [
				"`<AudioPlayer {src} {peaks} duration={2} />`",
				"`<AudioPlayer {src} duration={2} label=\"Without waveform data\" />`",
				"`const peaks = Array.from({ length: 48 }` builds the waveform amplitudes",
				"`tone(2)` builds a 2 second WAV blob as the source"
			],
			"tags": [
				"audio-player",
				"voice",
				"waveform",
				"chat",
				"scrub"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"media"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard",
					"drag"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "compact",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"AudioPlayer"
				],
				"aliases": [
					"voice message",
					"waveform",
					"audio message",
					"play pause"
				],
				"related": [
					"248",
					"253"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"AudioPlayer"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"AudioPlayer"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/display/audio-player#voice-messages",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "253",
			"group": "display",
			"page": "media-grid",
			"variant": "Gallery",
			"slug": "mixed-media",
			"title": "Mixed media",
			"description": "Images, a video, a document and the +N overflow tile.",
			"summary": "A media grid of six items (images, a video, a document) showing four tiles and a +2 overflow that opens the gallery.",
			"use": "Chat messages with several attachments: thumbnails that open a lightbox, with documents as download links.",
			"spec": [
				"`<MediaGrid {items} maxVisible={4} />`",
				"`{ type: 'video', src: '', thumb: art(130, '▶'), alt: 'Clip', duration: '0:12' }`",
				"`{ type: 'document', src: '#', title: 'invoice-0412.pdf', size: '84 KB' }`",
				"`const art = (hue: number, label: string)` builds inline SVG images"
			],
			"tags": [
				"media-grid",
				"gallery",
				"chat",
				"lightbox",
				"attachments"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"media"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"hover",
					"keyboard"
				],
				"layout": "grid",
				"colorMode": "both",
				"density": "compact",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"MediaGrid"
				],
				"aliases": [
					"photo grid",
					"attachments",
					"media gallery",
					"image collage"
				],
				"related": [
					"127",
					"252",
					"964"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"MediaGrid"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"MediaGrid",
						"MediaGridItem"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/display/media-grid#mixed-media",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "254",
			"group": "display",
			"page": "virtual-list",
			"variant": "History",
			"slug": "chat-history",
			"title": "Chat history",
			"description": "Scroll to the top to load older messages; the view does not jump.",
			"summary": "A windowed chat history of 40 messages that loads 30 older ones at the top without moving the view.",
			"use": "Long conversations where older messages load on scroll and the scroll position must be preserved.",
			"spec": [
				"`<VirtualList {items} getKey={(m) => m.id} label=\"Conversation\" height=\"18rem\" {hasMore} loadingMore={loading} onloadmore={loadOlder}>`",
				"`async function loadOlder()` prepends a page of 30 messages with `items = [...page, ...items];`",
				"`<Button size=\"sm\" variant=\"outlined\" onclick={add}>Receive a message</Button>` appends a new row"
			],
			"tags": [
				"virtual-list",
				"history",
				"chat",
				"infinite",
				"prepend"
			],
			"shape": "tall",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"scroll",
					"press",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "compact",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Button",
					"Stack",
					"VirtualList"
				],
				"aliases": [
					"windowed list",
					"infinite scroll",
					"chat history",
					"load older"
				],
				"related": [
					"130",
					"137",
					"248"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Button",
				"Stack",
				"VirtualList"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Button",
						"Stack",
						"VirtualList"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/display/virtual-list#chat-history",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "255",
			"group": "navigation",
			"page": "loading-boundary",
			"variant": "Delayed",
			"slug": "fast-and-slow-loads",
			"title": "Fast and slow loads",
			"description": "A 100 ms load shows nothing. A 1.5 s load shows the skeleton after 200 ms, then the rows.",
			"summary": "A LoadingBoundary around a suspending report with a fast (100 ms) and a slow (1.5 s) load button.",
			"use": "Showing a skeleton for slow data without flashing it on fast responses, in any page that awaits a loader.",
			"spec": [
				"`<LoadingBoundary label=\"Loading invoices\">` wraps `<Report load={load(ms)} />`",
				"`{#key run}` restarts the load for each button",
				"`ms = 100; run++;` is the fast case and `ms = 1500; run++;` the slow one"
			],
			"tags": [
				"loading-boundary",
				"skeleton",
				"suspense",
				"pending",
				"delay"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "navigation",
				"industry": [
					"fintech"
				],
				"style": [
					"default"
				],
				"motion": "expressive",
				"interaction": [
					"press"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Button",
					"LoadingBoundary",
					"Stack"
				],
				"aliases": [
					"suspense",
					"async boundary",
					"delayed loader"
				],
				"related": [
					"241",
					"097",
					"101"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Button",
				"LoadingBoundary",
				"Stack"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Button",
						"LoadingBoundary",
						"Stack"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/navigation/loading-boundary#fast-and-slow-loads",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "256",
			"group": "motion",
			"page": "basics",
			"variant": "FadeRise",
			"slug": "fade-rise",
			"title": "Fade rise",
			"description": "",
			"summary": "A card that fades in while rising 16px into place, replaying on a loop only while it is in view.",
			"use": "Entrance of a card, a toast, a list row or any block that appears after the page has loaded.",
			"spec": [
				"`MotionStage` from `@codeatlasdev/ui` with `label=\"Fade rise: a card fades in while rising into place\"` and `loop={2400}`",
				"`{#key m.cycle}` remounts the card so `animation: fade-rise` runs again each cycle",
				"Keyframes: `from { opacity: 0; transform: translateY(16px); }` to `to { opacity: 1; transform: translateY(0); }`",
				"Under reduced motion `class:rise--run={!m.reduced}` drops the animation and the card renders in its final state"
			],
			"tags": [
				"motion",
				"fade",
				"rise",
				"entrance",
				"card"
			],
			"names": [
				"Fade rise",
				"Fade up",
				"Subir com fade"
			],
			"motion": [
				{
					"property": "opacity, transform: translateY",
					"duration": "420ms",
					"easing": "cubic-bezier(0.2, 0, 0, 1)",
					"delay": "80ms"
				}
			],
			"shape": "square",
			"index": {
				"kind": "motion",
				"subtype": "basics",
				"industry": [
					"fintech"
				],
				"style": [
					"default"
				],
				"motion": "expressive",
				"interaction": [
					"none"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css",
					"svelte-motion"
				],
				"cost": "js-light",
				"components": [
					"Card",
					"MotionStage"
				],
				"aliases": [
					"entrance",
					"fade in",
					"slide up",
					"appear"
				],
				"related": [
					"385",
					"320",
					"307"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Card",
				"MotionStage"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Card",
						"MotionStage"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/motion/basics#fade-rise",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "300",
			"group": "motion",
			"page": "text",
			"variant": "SplitReveal",
			"slug": "split-text-reveal",
			"title": "Split text reveal",
			"description": "",
			"summary": "A headline whose words rise out of a clipping mask one after another, 70ms apart. The unsplit sentence stays the accessible name; the split words are aria-hidden.",
			"use": "Hero and section headlines, empty states and onboarding titles that should arrive with a deliberate, editorial entrance.",
			"spec": [
				"`MotionStage` from `@codeatlasdev/ui` with `label=\"Split text reveal: a headline rises in word by word\"` and `loop={3600}`",
				"`aria-label={headline}` on the heading keeps the unsplit sentence as the accessible name",
				"Each word is `aria-hidden=\"true\"` inside `.split__mask` (`overflow: hidden`) so it rises from below its own line",
				"`animation: split-rise 640ms cubic-bezier(0.2, 0, 0, 1) calc(var(--i) * 70ms) both` with `style=\"--i:{i}\"` per word",
				"Keyframes: `from { opacity: 0; transform: translateY(110%); }` to `to { opacity: 1; transform: translateY(0); }`",
				"`{#key` remounts the words on every loop (`m.cycle`) and on the Reveal again button (`manual++`, the takeover path)",
				"Under reduced motion `class:split__word--run={!m.reduced}` drops the animation: the words render in place"
			],
			"tags": [
				"motion",
				"text",
				"split",
				"headline",
				"entrance",
				"stagger"
			],
			"names": [
				"Split text reveal",
				"Word-by-word reveal",
				"Staggered text mask",
				"Texto dividido por palavra",
				"Révélation de texte par mot"
			],
			"motion": [
				{
					"property": "opacity, transform: translateY (per word, inside an overflow mask)",
					"duration": "640ms",
					"easing": "cubic-bezier(0.2, 0, 0, 1)",
					"stagger": "calc(var(--i) * 70ms)"
				}
			],
			"shape": "wide",
			"index": {
				"kind": "motion",
				"subtype": "text",
				"industry": [
					"general"
				],
				"style": [
					"editorial",
					"default"
				],
				"motion": "expressive",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css",
					"svelte-motion"
				],
				"cost": "js-light",
				"components": [
					"Button",
					"MotionStage"
				],
				"aliases": [
					"word by word",
					"headline animation",
					"mask reveal",
					"stagger words"
				],
				"related": [
					"307",
					"385",
					"304"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Button",
				"MotionStage"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Button",
						"MotionStage"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/motion/text#split-text-reveal",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "301",
			"group": "motion",
			"page": "text",
			"variant": "Scramble",
			"slug": "text-scramble",
			"title": "Text scramble",
			"description": "",
			"summary": "A line of monospace text that decodes from random glyphs, locking one letter every 55ms from left to right. It re-runs on every loop and again on hover or focus.",
			"use": "Security and crypto screens, a status label that just changed, a hacker-style heading or any short label that should feel like it is resolving.",
			"spec": [
				"`MotionStage` from `@codeatlasdev/ui` with `label=\"Scramble: a line of text decodes from random glyphs\"` and `loop={2800}`",
				"`const STEP = 40` redraws the random glyphs every 40ms; `const SETTLE = 55` locks the next letter every 55ms",
				"`aria-label={target}` on the button keeps the real sentence as the accessible name; the flickering glyphs sit in a `<span` with `aria-hidden=\"true\"`, as decoration",
				"`onpointerenter` and `onfocus` call `decode()` again: hover or keyboard focus is the takeover",
				"The autoplay attachment reads the stage cycle through `const { cycle, reduced } = m`, so each stage loop decodes again",
				"Under reduced motion the attachment sets `text = target` and `decode()` is never started"
			],
			"tags": [
				"motion",
				"text",
				"scramble",
				"decode",
				"hover",
				"label"
			],
			"names": [
				"Text scramble",
				"Decode effect",
				"Character scramble",
				"Embaralhar texto",
				"Texto decodificando",
				"Texte brouillé"
			],
			"motion": [
				{
					"property": "text content (random glyphs resolving to the final letters, left to right)",
					"duration": "55ms per letter",
					"easing": "linear",
					"stagger": "40ms"
				}
			],
			"shape": "square",
			"index": {
				"kind": "motion",
				"subtype": "text",
				"industry": [
					"general"
				],
				"style": [
					"terminal"
				],
				"motion": "expressive",
				"interaction": [
					"hover",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css",
					"svelte-motion"
				],
				"cost": "js-light",
				"components": [
					"MotionStage"
				],
				"aliases": [
					"decode",
					"glitch text",
					"hacker text",
					"cipher"
				],
				"related": [
					"304",
					"300",
					"305"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"MotionStage"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"MotionStage",
						"MotionCtx"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/motion/text#text-scramble",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "302",
			"group": "motion",
			"page": "text",
			"variant": "Odometer",
			"slug": "odometer-roll",
			"title": "Odometer roll",
			"description": "",
			"summary": "A KPI value made of digit columns that slide to the new digit, the ones place first and each column 60ms after the last. It cycles through values on its own; typing a number rolls it.",
			"use": "Dashboards, revenue and counter KPIs, price changes, scores and any number that updates in place and should feel like a mechanical counter.",
			"spec": [
				"`MotionStage` from `@codeatlasdev/ui` with `label=\"Odometer: a KPI value rolls digit by digit\"` and `loop={2600}`",
				"Each digit is a `.odo__col` window (`overflow: hidden`, `block-size: 1em`) holding a strip of `0` to `9`",
				"`transform: translateY(calc(var(--d) * -1em))` slides the strip to the digit `--d`",
				"`transition: transform 900ms cubic-bezier(0.2, 0.9, 0.2, 1) calc(var(--i) * 60ms)` with `--i` counted from the right, so the ones place rolls first",
				"`role=\"img\"` with `aria-label` carries the whole number once; the columns are `aria-hidden=\"true\"`",
				"`oninput={onType}` sets `value`: typing a number in the field is the takeover and rolls the columns",
				"`{@attach autoplay(m)}` walks `values[cycle % values.length]` only while `playing`; under reduced motion `class:odo__strip--run={!m.reduced}` drops the transition and the last value is shown"
			],
			"tags": [
				"motion",
				"text",
				"odometer",
				"counter",
				"kpi",
				"number"
			],
			"names": [
				"Odometer roll",
				"Rolling digits",
				"Slot counter",
				"Contador mecânico",
				"Números rolando",
				"Compteur à rouleaux"
			],
			"motion": [
				{
					"property": "transform: translateY (digit strip inside an overflow window)",
					"duration": "900ms",
					"easing": "cubic-bezier(0.2, 0.9, 0.2, 1)",
					"stagger": "calc(var(--i) * 60ms)"
				}
			],
			"shape": "square",
			"index": {
				"kind": "motion",
				"subtype": "text",
				"industry": [
					"fintech"
				],
				"style": [
					"default"
				],
				"motion": "expressive",
				"interaction": [
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css",
					"svelte-motion"
				],
				"cost": "js-light",
				"components": [
					"MotionStage"
				],
				"aliases": [
					"rolling digits",
					"slot counter",
					"number roll",
					"ticker"
				],
				"related": [
					"306",
					"326",
					"300"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"MotionStage"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"MotionStage",
						"MotionCtx"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/motion/text#odometer-roll",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "303",
			"group": "motion",
			"page": "text",
			"variant": "Marquee",
			"slug": "infinite-marquee",
			"title": "Infinite marquee",
			"description": "",
			"summary": "A row of partner names sliding left forever at a constant speed, with a seamless loop. Hovering or focusing any name pauses it; Back and Forward buttons nudge it once you take over.",
			"use": "Logo walls, customer and press strips, announcement tickers and feature tags that should stay visible without taking space or a carousel.",
			"spec": [
				"`MotionStage` from `@codeatlasdev/ui` with `label=\"Marquee: partner names scroll endlessly and pause on hover or focus\"` and `loop={4000}`",
				"`animation: mq-slide 18s linear infinite` on the track while `m.playing && !m.reduced`",
				"Keyframes: `from { transform: translateX(var(--nudge)); }` to `to { transform: translateX(calc(var(--nudge) - 50%)); }`",
				"The list is rendered twice; the second copy is `aria-hidden=\"true\"` with `tabindex=\"-1\"` so the loop is seamless and read once",
				"`.mq__viewport:hover .mq__track` and `.mq__viewport:focus-within .mq__track` set `animation-play-state: paused`",
				"The `Button` `onclick` handlers change `nudge` by 56px, the manual takeover",
				"Under reduced motion `m.playing` is false, so the strip stays static and every name is readable"
			],
			"tags": [
				"motion",
				"text",
				"marquee",
				"ticker",
				"logos",
				"loop"
			],
			"names": [
				"Infinite marquee",
				"Ticker",
				"Logo wall scroll",
				"Letreiro infinito",
				"Faixa rolante",
				"Défilement infini"
			],
			"motion": [
				{
					"property": "transform: translateX (the track moves -50% of its own width)",
					"duration": "18s",
					"easing": "linear"
				},
				{
					"property": "transform: translateX (manual nudge after takeover)",
					"duration": "240ms",
					"easing": "cubic-bezier(0.2, 0, 0, 1)"
				}
			],
			"shape": "wide",
			"index": {
				"kind": "motion",
				"subtype": "text",
				"industry": [
					"saas",
					"fintech"
				],
				"style": [
					"default"
				],
				"motion": "expressive",
				"interaction": [
					"hover",
					"press",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css",
					"svelte-motion"
				],
				"cost": "js-light",
				"components": [
					"Button",
					"MotionStage"
				],
				"aliases": [
					"ticker tape",
					"logo strip",
					"infinite scroll",
					"logo cloud"
				],
				"related": [
					"305",
					"300",
					"324"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Button",
				"MotionStage"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Button",
						"MotionStage"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/motion/text#infinite-marquee",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "304",
			"group": "motion",
			"page": "text",
			"variant": "Typewriter",
			"slug": "typewriter",
			"title": "Typewriter",
			"description": "",
			"summary": "A prompt that types itself at 55ms per character, holds for 1100ms, then deletes at 28ms per character while a caret blinks. Typing in the field below takes over the line.",
			"use": "AI and search inputs with example prompts, hero taglines that cycle phrases, terminal and chat demos and onboarding hints.",
			"spec": [
				"`MotionStage` from `@codeatlasdev/ui` with `label=\"Typewriter: a prompt types itself, holds, then deletes\"` and `loop={4800}`",
				"`const TYPE = 55`, `const ERASE = 28` and `const HOLD = 1100` are the typing, deleting and hold times in milliseconds",
				"One autoplay cycle types `phrases[m.cycle % phrases.length]`, holds it, then deletes it",
				"`animation: tw-blink 1060ms steps(1, end) infinite` blinks the caret with a hard on/off step",
				"The typed text and caret are `aria-hidden=\"true\"`; the labelled `id=\"tw-input\"` input is the accessible control",
				"`bind:value={draft}`: typing in the field replaces the autoplay text, the manual takeover",
				"Under reduced motion `class:tw__caret--blink={!m.reduced}` stops the blink and the first phrase is shown complete"
			],
			"tags": [
				"motion",
				"text",
				"typewriter",
				"caret",
				"typing",
				"prompt"
			],
			"names": [
				"Typewriter",
				"Typing effect",
				"Type and delete",
				"Máquina de escrever",
				"Efeito de digitação",
				"Machine à écrire"
			],
			"motion": [
				{
					"property": "text content (characters typed, held, then deleted)",
					"duration": "55ms per character",
					"easing": "linear",
					"delay": "1100ms"
				},
				{
					"property": "opacity (caret blink)",
					"duration": "1060ms",
					"easing": "steps(1, end)"
				}
			],
			"shape": "square",
			"index": {
				"kind": "motion",
				"subtype": "text",
				"industry": [
					"ai"
				],
				"style": [
					"terminal",
					"default"
				],
				"motion": "expressive",
				"interaction": [
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css",
					"svelte-motion"
				],
				"cost": "js-light",
				"components": [
					"MotionStage"
				],
				"aliases": [
					"typing effect",
					"prompt",
					"chat input",
					"caret"
				],
				"related": [
					"301",
					"300",
					"307"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"MotionStage"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"MotionStage",
						"MotionCtx"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/motion/text#typewriter",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "305",
			"group": "motion",
			"page": "text",
			"variant": "ShineSweep",
			"slug": "shine-sweep",
			"title": "Shine sweep",
			"description": "",
			"summary": "A heading painted with a brand gradient and a light band that sweeps across it in 2200ms. Once you move the pointer or press arrow keys the band follows you.",
			"use": "Hero and pricing headlines, a highlighted keyword, a premium badge or a loading title that needs a single glint of attention.",
			"spec": [
				"`MotionStage` from `@codeatlasdev/ui` with `label=\"Shine sweep: a highlight glides across a gradient heading\"` and `loop={3200}`",
				"`background-size: 250% 100%` with `background-clip: text` makes the gradient show through the letters",
				"`animation: shine-sweep 2200ms cubic-bezier(0.4, 0, 0.2, 1) both` on the heading while `m.playing && !m.reduced`",
				"Keyframes: `from { background-position: 100% 0; }` to `to { background-position: 0% 0; }`",
				"The heading holds a real `<button` with `onpointermove={onMove}` and `onkeydown={onKey}` that steer `--x`, the manual takeover (`.shine__title--manual` reads `background-position: var(--x) 0`)",
				"`@media (forced-colors: active)` falls back to `color: CanvasText`, so the heading stays readable"
			],
			"tags": [
				"motion",
				"text",
				"shine",
				"gradient",
				"heading",
				"highlight"
			],
			"names": [
				"Shine sweep",
				"Gradient shimmer",
				"Text shine",
				"Brilho em texto",
				"Reflexo no título",
				"Reflet sur le texte"
			],
			"motion": [
				{
					"property": "background-position (a light band across text-clipped gradient)",
					"duration": "2200ms",
					"easing": "cubic-bezier(0.4, 0, 0.2, 1)"
				}
			],
			"shape": "wide",
			"index": {
				"kind": "motion",
				"subtype": "text",
				"industry": [
					"agency"
				],
				"style": [
					"default"
				],
				"motion": "expressive",
				"interaction": [
					"cursor",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css",
					"svelte-motion"
				],
				"cost": "js-light",
				"components": [
					"MotionStage"
				],
				"aliases": [
					"gradient text",
					"shimmer",
					"glint",
					"highlight sweep"
				],
				"related": [
					"300",
					"307",
					"301"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"MotionStage"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"MotionStage"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/motion/text#shine-sweep",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "306",
			"group": "motion",
			"page": "text",
			"variant": "CountUp",
			"slug": "count-up",
			"title": "Count up",
			"description": "",
			"summary": "A KPI that counts from 0 to 12,480 in 1400ms with an ease-out-expo curve, so the last digits settle slowly. A Count again button replays it on demand.",
			"use": "Stat blocks and metrics sections that scroll into view, totals after a report loads, and any headline number worth a moment of attention.",
			"spec": [
				"`MotionStage` from `@codeatlasdev/ui` with `label=\"Count up: a number counts from zero and eases into its total\"` and `loop={3200}`",
				"`const DURATION = 1400` with `1 - 2 ** (-10 * t)` as the easeOutExpo curve",
				"`n = Math.round(target * ease(t))` on every `requestAnimationFrame`, `toLocaleString('en-US')` formats the digits",
				"`role=\"img\"` with `aria-label` states the final total once; the counting `<span aria-hidden=\"true\">` is decoration",
				"The `Button` `onclick` calls `run()`: pressing Count again is the takeover and re-runs the count on demand",
				"Under reduced motion the attachment sets `n = target` and no frame loop starts"
			],
			"tags": [
				"motion",
				"text",
				"count-up",
				"counter",
				"kpi",
				"number"
			],
			"names": [
				"Count up",
				"Number counter",
				"Animated counter",
				"Contagem progressiva",
				"Contador animado",
				"Compteur animé"
			],
			"motion": [
				{
					"property": "text content (integer counting from 0 to the total)",
					"duration": "1400ms",
					"easing": "1 - 2 ** (-10 * t)"
				}
			],
			"shape": "square",
			"index": {
				"kind": "motion",
				"subtype": "text",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "expressive",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css",
					"svelte-motion"
				],
				"cost": "js-light",
				"components": [
					"Button",
					"MotionStage"
				],
				"aliases": [
					"number animation",
					"stat counter",
					"kpi",
					"tween number"
				],
				"related": [
					"302",
					"326",
					"300"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Button",
				"MotionStage"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Button",
						"MotionStage",
						"MotionCtx"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/motion/text#count-up",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "307",
			"group": "motion",
			"page": "text",
			"variant": "BlurIn",
			"slug": "blur-in",
			"title": "Blur in",
			"description": "",
			"summary": "A two-line headline that sharpens from a 12px blur while rising 8px, each line 160ms after the previous. The sentence keeps one accessible name; a button replays it.",
			"use": "Hero titles, product-reveal moments and section intros that want a soft, cinematic entrance instead of a hard slide.",
			"spec": [
				"`MotionStage` from `@codeatlasdev/ui` with `label=\"Blur in: a headline sharpens from a blur, line by line\"` and `loop={3400}`",
				"`aria-label={lines.join(' ')}` on the heading is the one accessible name; each `.bi__line` is `aria-hidden=\"true\"`",
				"`animation: blur-in 900ms cubic-bezier(0.2, 0, 0, 1) calc(var(--i) * 160ms) both` with `style=\"--i:{i}\"` per line",
				"Keyframes: `from { opacity: 0; filter: blur(12px); transform: translateY(8px); }` to `to { opacity: 1; filter: blur(0); transform: translateY(0); }`",
				"The `Button` `onclick` runs `manual++`, which remounts the lines through `{#key`: pressing Sharpen again is the takeover",
				"Under reduced motion `class:bi__line--run={!m.reduced}` drops the animation: the lines render sharp"
			],
			"tags": [
				"motion",
				"text",
				"blur",
				"headline",
				"entrance",
				"stagger"
			],
			"names": [
				"Blur in",
				"Blur reveal",
				"Focus pull text",
				"Texto com desfoque",
				"Entrada com blur",
				"Apparition floue"
			],
			"motion": [
				{
					"property": "opacity, filter: blur, transform: translateY (per line)",
					"duration": "900ms",
					"easing": "cubic-bezier(0.2, 0, 0, 1)",
					"stagger": "calc(var(--i) * 160ms)"
				}
			],
			"shape": "wide",
			"index": {
				"kind": "motion",
				"subtype": "text",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "expressive",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css",
					"svelte-motion"
				],
				"cost": "js-light",
				"components": [
					"Button",
					"MotionStage"
				],
				"aliases": [
					"focus in",
					"fade blur",
					"headline reveal",
					"sharpen"
				],
				"related": [
					"300",
					"385",
					"256"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Button",
				"MotionStage"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Button",
						"MotionStage"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/motion/text#blur-in",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "320",
			"group": "motion",
			"page": "scroll",
			"variant": "StaggerReveal",
			"slug": "staggered-reveal-on-scroll",
			"title": "Staggered reveal on scroll",
			"description": "",
			"summary": "A feed of cards inside a scroll container: each row fades in and rises 24px as it enters, a short stagger between rows that arrive together.",
			"use": "Lists, activity feeds, search results and dashboards that load more content as the user scrolls.",
			"spec": [
				"`MotionStage` from `@codeatlasdev/ui` with `loop={4600}`: autoplay scrolls the container itself, a wheel or touch scroll takes over",
				"`IntersectionObserver` with `root` set to the scroller and `threshold: 0.35`: a row is revealed once, when 35% of it is visible",
				"Hidden state is `opacity: 0;` with `transform: translateY(24px);`; the revealed state `.feed__row--in` sets `opacity: 1;` and `transform: translateY(0);`",
				"Returning to `root.scrollTop === 0` clears the revealed set, so a user scrolling down replays the stagger",
				"Stagger: the transitions share a delay of `calc(var(--i) * 80ms)`, where `--i` is the row index modulo 3 (`style=\"--i:{i % 3}\"`)",
				"Autoplay scroll is driven by `requestAnimationFrame` over `2400` ms with an ease-in-out cubic",
				"Under reduced motion every row renders revealed (`m.reduced`) and nothing scrolls by itself"
			],
			"tags": [
				"motion",
				"scroll",
				"reveal",
				"stagger",
				"intersectionobserver",
				"list"
			],
			"names": [
				"Staggered reveal on scroll",
				"Scroll reveal",
				"Reveal ao rolar",
				"Révélation au défilement"
			],
			"motion": [
				{
					"property": "opacity, transform: translateY",
					"duration": "420ms",
					"easing": "cubic-bezier(0.2, 0, 0, 1)",
					"stagger": "calc(var(--i) * 80ms)"
				}
			],
			"shape": "tall",
			"index": {
				"kind": "motion",
				"subtype": "scroll",
				"industry": [
					"saas",
					"fintech"
				],
				"style": [
					"default"
				],
				"motion": "expressive",
				"interaction": [
					"scroll",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css",
					"svelte-motion"
				],
				"cost": "js-light",
				"components": [
					"Card",
					"MotionStage"
				],
				"aliases": [
					"list entrance",
					"cascade",
					"scroll animation",
					"feed"
				],
				"related": [
					"321",
					"256",
					"325"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Card",
				"MotionStage"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Card",
						"MotionStage",
						"MotionCtx"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/motion/scroll#staggered-reveal-on-scroll",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "321",
			"group": "motion",
			"page": "scroll",
			"variant": "ViewReveal",
			"slug": "view-timeline-reveal",
			"title": "View timeline reveal",
			"description": "",
			"summary": "Tiles tied to their own position in the scroll area: opacity, rise and scale advance exactly as far as the tile has entered, in both directions, with no JavaScript when the browser supports view timelines.",
			"use": "Scroll-driven entrances that must scrub with the finger (and reverse) instead of firing once: metric grids, feature lists, timelines.",
			"spec": [
				"`MotionStage` from `@codeatlasdev/ui` with `loop={4600}`: autoplay scrolls the container, a wheel or touch scroll takes over",
				"CSS `animation-timeline: view(block)` with `animation-range: entry 0% entry 70%` inside `@supports (animation-timeline: view())`",
				"Keyframes `view-in`: `from { opacity: 0; transform: translateY(28px) scale(0.92); }` to opacity 1, no translate, scale 1",
				"Fallback without support: a `scroll` listener writes each tile's progress to `--v`, which drives the same opacity and transform",
				"Under reduced motion `.vt--final` shows every tile settled and no listener is attached"
			],
			"tags": [
				"motion",
				"scroll",
				"view-timeline",
				"scroll-driven",
				"scrub",
				"reveal"
			],
			"names": [
				"View timeline reveal",
				"Scroll-driven reveal",
				"Reveal por view timeline",
				"Révélation pilotée par le défilement"
			],
			"motion": [
				{
					"property": "opacity, transform: translateY, scale",
					"duration": "animation-timeline: view(block)",
					"easing": "linear",
					"delay": "animation-range: entry 0% entry 70%"
				}
			],
			"shape": "tall",
			"index": {
				"kind": "motion",
				"subtype": "scroll",
				"industry": [
					"e-commerce",
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "expressive",
				"interaction": [
					"scroll",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css",
					"svelte-motion"
				],
				"cost": "js-light",
				"components": [
					"Card",
					"MotionStage"
				],
				"aliases": [
					"scroll timeline",
					"view timeline",
					"scroll linked",
					"animate on scroll"
				],
				"related": [
					"320",
					"322",
					"323"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Card",
				"MotionStage"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Card",
						"MotionStage",
						"MotionCtx"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/motion/scroll#view-timeline-reveal",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "322",
			"group": "motion",
			"page": "scroll",
			"variant": "Parallax",
			"slug": "parallax",
			"title": "Parallax",
			"description": "",
			"summary": "Three layers (sky, ridge, foreground) plus a caption move at different speeds while the container scrolls, so the scene gains depth. Native scroll timeline, with a scroll listener fallback.",
			"use": "Hero images, editorial headers, product storytelling: any pinned scene where background should move slower than foreground.",
			"spec": [
				"`MotionStage` from `@codeatlasdev/ui` with `loop={6200}`: autoplay scrolls the container, a wheel or touch scroll takes over",
				"A sticky scene inside a taller scroller: `position: sticky;` on `.scene__sticky` and `block-size: 26rem;` on `.scene__track`",
				"Native: `animation-timeline: --scene` over `scroll-timeline: --scene block`, inside `@supports (animation-timeline: scroll())`",
				"Layer travel at full scroll: sky `-6%`, ridge `-22%`, foreground `-48%`, caption `30%` while fading to opacity `0.15`",
				"Fallback without support: a `scroll` listener writes progress to `--p` and the transforms read `translateY(calc(var(--p) * -22%))`",
				"Under reduced motion `--p` is `1` and nothing moves (`.scene--final`)"
			],
			"tags": [
				"motion",
				"scroll",
				"parallax",
				"layers",
				"depth",
				"hero"
			],
			"names": [
				"Parallax",
				"Parallax layers",
				"Paralaxe",
				"Parallaxe"
			],
			"motion": [
				{
					"property": "transform: translateY, sky layer to -6%",
					"duration": "animation-timeline: --scene",
					"easing": "linear"
				},
				{
					"property": "transform: translateY, ridge layer to -22%",
					"duration": "animation-timeline: --scene",
					"easing": "linear"
				},
				{
					"property": "transform: translateY, foreground layer to -48%",
					"duration": "animation-timeline: --scene",
					"easing": "linear"
				},
				{
					"property": "transform: translateY to 30% and opacity to 0.15, caption",
					"duration": "animation-timeline: --scene",
					"easing": "linear"
				}
			],
			"shape": "tall",
			"index": {
				"kind": "motion",
				"subtype": "scroll",
				"industry": [
					"travel",
					"media"
				],
				"style": [
					"default"
				],
				"motion": "immersive",
				"interaction": [
					"scroll",
					"keyboard"
				],
				"layout": "sticky",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css",
					"svelte-motion"
				],
				"cost": "js-light",
				"components": [
					"MotionStage"
				],
				"aliases": [
					"depth",
					"layers",
					"scroll depth",
					"hero parallax"
				],
				"related": [
					"324",
					"325",
					"321"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"MotionStage"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"MotionStage",
						"MotionCtx"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/motion/scroll#parallax",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "323",
			"group": "motion",
			"page": "scroll",
			"variant": "ReadingProgress",
			"slug": "reading-progress-bar",
			"title": "Reading progress bar",
			"description": "",
			"summary": "A 4px bar stuck to the top of an article fills from left to right as it is read, with a percentage readout, tied directly to scroll position.",
			"use": "Long articles, docs and legal pages where the reader wants to know how far they are.",
			"spec": [
				"`MotionStage` from `@codeatlasdev/ui` with `loop={5200}`: autoplay scrolls the article, a wheel or touch scroll takes over",
				"`.doc__bar` is `position: sticky;` with `block-size: 4px;` and holds a fill scaled with `transform: scaleX(var(--p));` from `transform-origin: left center;`",
				"Native: `animation-timeline: scroll(nearest block)` with `@keyframes fill` from `scaleX(0)` to `scaleX(1)`, inside `@supports (animation-timeline: scroll())`",
				"Fallback and readout: a `scroll` listener computes `el.scrollTop / max` (`max` is `el.scrollHeight - el.clientHeight`); the percentage is `Math.round(p * 100)`",
				"Autoplay reads the article in `3600` ms, linear like a steady reader",
				"Under reduced motion the bar is full and the readout shows 100%"
			],
			"tags": [
				"motion",
				"scroll",
				"progress",
				"reading",
				"article",
				"scroll-driven"
			],
			"names": [
				"Reading progress bar",
				"Scroll progress",
				"Barra de progresso de leitura",
				"Barre de progression de lecture"
			],
			"motion": [
				{
					"property": "transform: scaleX",
					"duration": "animation-timeline: scroll(nearest block)",
					"easing": "linear"
				}
			],
			"shape": "tall",
			"index": {
				"kind": "motion",
				"subtype": "scroll",
				"industry": [
					"media",
					"education"
				],
				"style": [
					"default"
				],
				"motion": "expressive",
				"interaction": [
					"scroll",
					"keyboard"
				],
				"layout": "sticky",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css",
					"svelte-motion"
				],
				"cost": "js-light",
				"components": [
					"MotionStage"
				],
				"aliases": [
					"scroll progress",
					"article",
					"read indicator",
					"top bar"
				],
				"related": [
					"326",
					"321",
					"325"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"MotionStage"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"MotionStage",
						"MotionCtx"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/motion/scroll#reading-progress-bar",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "324",
			"group": "motion",
			"page": "scroll",
			"variant": "HorizontalScroll",
			"slug": "horizontal-scroll-section",
			"title": "Horizontal scroll section",
			"description": "",
			"summary": "Vertical scrolling inside a pinned frame slides a row of four step cards sideways, with a progress bar underneath. The page scrolls down; the content moves across.",
			"use": "Onboarding steps, feature tours and case-study timelines where a sequence reads better left to right than stacked.",
			"spec": [
				"`MotionStage` from `@codeatlasdev/ui` with `loop={5600}`: autoplay scrolls the container, a wheel or touch scroll takes over",
				"`.hs__pin` is `position: sticky;` and keeps the frame fixed while `block-size: 30rem;` on `.hs__track` provides the scroll distance",
				"The rail is `inline-size: 400%` (four slides of `25%`) and travels `-75%` on X, so the last slide ends exactly in view",
				"Native: `animation-timeline: --hs` over `scroll-timeline: --hs block` on the scroller (the pin is `overflow: hidden`, so `scroll()` would bind to it); `@keyframes slide` runs from `translateX(0)` to `translateX(-75%)`, inside `@supports (animation-timeline: scroll())`",
				"Fallback without support: a `scroll` listener writes `--p` and the rail uses `translateX(calc(var(--p) * -75%))`",
				"Under reduced motion `--p` is `1`: the last slide is shown and the container does not scroll by itself"
			],
			"tags": [
				"motion",
				"scroll",
				"horizontal",
				"pinned",
				"sticky",
				"steps"
			],
			"names": [
				"Horizontal scroll section",
				"Scroll-jacked horizontal",
				"Rolagem horizontal por scroll vertical",
				"Défilement horizontal"
			],
			"motion": [
				{
					"property": "transform: translateX",
					"duration": "animation-timeline: --hs",
					"easing": "linear"
				}
			],
			"shape": "tall",
			"index": {
				"kind": "motion",
				"subtype": "scroll",
				"industry": [
					"fintech",
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "expressive",
				"interaction": [
					"scroll",
					"keyboard"
				],
				"layout": "carousel",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css",
					"svelte-motion"
				],
				"cost": "js-light",
				"components": [
					"MotionStage"
				],
				"aliases": [
					"pinned",
					"sideways",
					"slides",
					"scrollytelling"
				],
				"related": [
					"325",
					"322",
					"303"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"MotionStage"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"MotionStage",
						"MotionCtx"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/motion/scroll#horizontal-scroll-section",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "325",
			"group": "motion",
			"page": "scroll",
			"variant": "PinnedSteps",
			"slug": "pinned-step-story",
			"title": "Pinned step story",
			"description": "",
			"summary": "A pinned media panel on the left changes its figure and caption as each step on the right scrolls through the middle of the frame; the step in view has the primary title colour, the others the secondary one.",
			"use": "Explaining a product flow: connect, sort, review. One visual stays on screen while the copy advances.",
			"spec": [
				"`MotionStage` from `@codeatlasdev/ui` with `loop={5600}`: autoplay scrolls the container, a wheel or touch scroll takes over",
				"`.story__media` is `position: sticky;` with `inset-block-start: 0;` and pins the media while the steps list scrolls past",
				"`IntersectionObserver` with `rootMargin: '-45% 0px -45% 0px'` makes the step crossing the middle 10% band the active one",
				"Figure transition: `opacity 320ms cubic-bezier(0.2, 0, 0, 1)` and a `translateY(12px) scale(0.96)` start state",
				"The active step title is `var(--ca-text-primary)`, the others `var(--ca-text-secondary)` (a colour change, never a lower opacity, so every state stays AA)",
				"Under reduced motion the last step is active and nothing scrolls by itself"
			],
			"tags": [
				"motion",
				"scroll",
				"pinned",
				"sticky",
				"steps",
				"storytelling"
			],
			"names": [
				"Pinned step story",
				"Sticky scrollytelling",
				"Scrollytelling fixo por etapas",
				"Récit épinglé par étapes"
			],
			"motion": [
				{
					"property": "opacity, transform: translateY, scale (media figure)",
					"duration": "320ms",
					"easing": "cubic-bezier(0.2, 0, 0, 1)"
				},
				{
					"property": "color (step title, secondary to primary)",
					"duration": "320ms",
					"easing": "cubic-bezier(0.2, 0, 0, 1)"
				}
			],
			"shape": "wide",
			"index": {
				"kind": "motion",
				"subtype": "scroll",
				"industry": [
					"saas",
					"fintech"
				],
				"style": [
					"default"
				],
				"motion": "expressive",
				"interaction": [
					"scroll",
					"keyboard"
				],
				"layout": "split",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css",
					"svelte-motion"
				],
				"cost": "js-light",
				"components": [
					"MotionStage"
				],
				"aliases": [
					"scrollytelling",
					"sticky media",
					"story",
					"how it works"
				],
				"related": [
					"324",
					"322",
					"320"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"MotionStage"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"MotionStage",
						"MotionCtx"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/motion/scroll#pinned-step-story",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "326",
			"group": "motion",
			"page": "scroll",
			"variant": "ScrollCounter",
			"slug": "scroll-linked-counter-and-chart-draw",
			"title": "Scroll-linked counter and chart draw",
			"description": "",
			"summary": "A revenue figure counts up from $0 to $48,210 while a line chart draws itself, both tied to the container's scroll position; scrolling back reverses them.",
			"use": "KPI headers, report sections and pricing pages where a number and its trend should build as the reader reaches them.",
			"spec": [
				"`MotionStage` from `@codeatlasdev/ui` with `loop={5000}`: autoplay scrolls the container, a wheel or touch scroll takes over",
				"The counter text is `Math.round(TOTAL * v)` formatted with `Intl.NumberFormat('en-US')`; `v` is `el.scrollTop / max` (text cannot be scroll-driven in CSS)",
				"The line has `pathLength=\"1\"` and `stroke-dasharray: 1`; `stroke-dashoffset` goes from `1` to `0` (`calc(1 - var(--p))`)",
				"Native: `animation-timeline: scroll(nearest block)` with `@keyframes draw`, inside `@supports (animation-timeline: scroll())`; otherwise a `scroll` listener writes `--p`",
				"Autoplay scrolls in `2800` ms with an ease-out cubic",
				"Screen readers get the final figure from a `ca-sr-only` span; the animating digits are `aria-hidden=\"true\"`",
				"Under reduced motion the figure shows the final total and the line is fully drawn"
			],
			"tags": [
				"motion",
				"scroll",
				"counter",
				"chart",
				"draw",
				"scroll-driven"
			],
			"names": [
				"Scroll-linked counter and chart draw",
				"Count-up on scroll",
				"Contador e gráfico ligados ao scroll",
				"Compteur lié au défilement"
			],
			"motion": [
				{
					"property": "text (count-up 0 to 48,210)",
					"duration": "scroll position",
					"easing": "1 - (1 - t) ** 3"
				},
				{
					"property": "stroke-dashoffset 1 to 0",
					"duration": "animation-timeline: scroll(nearest block)",
					"easing": "linear"
				}
			],
			"shape": "tall",
			"index": {
				"kind": "motion",
				"subtype": "scroll",
				"industry": [
					"fintech",
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "expressive",
				"interaction": [
					"scroll",
					"keyboard"
				],
				"layout": "sticky",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css",
					"svelte-motion"
				],
				"cost": "js-light",
				"components": [
					"MotionStage"
				],
				"aliases": [
					"scroll linked number",
					"draw line",
					"scrub",
					"chart reveal"
				],
				"related": [
					"306",
					"323",
					"302"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"MotionStage"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"MotionStage",
						"MotionCtx"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/motion/scroll#scroll-linked-counter-and-chart-draw",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "340",
			"group": "motion",
			"page": "micro",
			"variant": "MagneticButton",
			"slug": "magnetic-button",
			"title": "Magnetic button",
			"description": "",
			"summary": "A pill button that leans toward the pointer inside a 72px range, pulled by a Spring and released on leave.",
			"use": "Primary call to action on a landing page or hero where the button should feel attracted to the cursor.",
			"spec": [
				"`MotionStage` from `@codeatlasdev/ui` with `loop={2800}`",
				"`const PULL = 0.35;` the button moves 35% of the pointer offset from its centre",
				"`const RANGE = 72;` the pull starts 72px outside the button edge",
				"`new Spring({ x: 0, y: 0 }, { stiffness: 0.12, damping: 0.55 })` drives the translate, set back to zero on `onpointerleave`",
				"`@media (pointer: coarse)` removes the transform: no magnetic pull on touch",
				"Autoplay moves an `aria-hidden` ghost dot; under reduced motion `--mx` and `--my` stay at 0"
			],
			"tags": [
				"motion",
				"magnetic",
				"button",
				"hover",
				"spring",
				"pointer"
			],
			"names": [
				"Magnetic button",
				"Botão magnético",
				"Bouton magnétique"
			],
			"motion": [
				{
					"property": "transform: translate3d (pointer pull)",
					"duration": "spring",
					"easing": "spring",
					"spring": "stiffness: 0.12, damping: 0.55"
				},
				{
					"property": "transform: translate3d (fake cursor, autoplay only)",
					"duration": "520ms",
					"easing": "cubic-bezier(0.2, 0, 0, 1)"
				}
			],
			"shape": "square",
			"index": {
				"kind": "motion",
				"subtype": "micro",
				"industry": [
					"saas",
					"agency"
				],
				"style": [
					"default"
				],
				"motion": "immersive",
				"interaction": [
					"cursor",
					"hover",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css",
					"svelte-motion"
				],
				"cost": "js-light",
				"components": [
					"MotionStage"
				],
				"aliases": [
					"magnet",
					"attract",
					"cta button",
					"pull to cursor"
				],
				"related": [
					"341",
					"347",
					"386"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"MotionStage"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"MotionStage"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/motion/micro#magnetic-button",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "341",
			"group": "motion",
			"page": "micro",
			"variant": "PressSpring",
			"slug": "press-spring",
			"title": "Press spring",
			"description": "",
			"summary": "A button that scales to 0.94 on press and overshoots past 1 on release before settling, driven by a Spring.",
			"use": "Any tappable surface (pay, send, buy) that needs a physical press feel without a color change.",
			"spec": [
				"`MotionStage` from `@codeatlasdev/ui` with `loop={1800}`",
				"`new Spring(1, { stiffness: 0.35, damping: 0.42 })` is the scale",
				"`scale.target = 0.94` on pointerdown and on Space or Enter keydown",
				"`scale.target = 1` on pointerup, pointerleave, pointercancel and keyup: the low damping overshoots",
				"`transform: scale(var(--s, 1))` is the only animated property",
				"Under reduced motion `--s` stays at 1"
			],
			"tags": [
				"motion",
				"press",
				"button",
				"spring",
				"tap",
				"feedback"
			],
			"names": [
				"Press spring",
				"Press scale",
				"Efeito de pressionar",
				"Pression élastique"
			],
			"motion": [
				{
					"property": "transform: scale",
					"duration": "spring",
					"easing": "spring",
					"spring": "stiffness: 0.35, damping: 0.42"
				}
			],
			"shape": "square",
			"index": {
				"kind": "motion",
				"subtype": "micro",
				"industry": [
					"e-commerce",
					"fintech"
				],
				"style": [
					"default"
				],
				"motion": "expressive",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css",
					"svelte-motion"
				],
				"cost": "js-light",
				"components": [
					"MotionStage"
				],
				"aliases": [
					"click feedback",
					"bounce",
					"scale on press",
					"tactile"
				],
				"related": [
					"348",
					"340",
					"342"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"MotionStage"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"MotionStage"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/motion/micro#press-spring",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "342",
			"group": "motion",
			"page": "micro",
			"variant": "MorphToggle",
			"slug": "morphing-toggle",
			"title": "Morphing toggle",
			"description": "",
			"summary": "A sun icon that morphs into a moon: a mask circle slides over the disc to bite it into a crescent while the rays rotate and shrink away.",
			"use": "Theme switch, mute toggle or any two-state icon button where the icon itself should show the state change.",
			"spec": [
				"`MotionStage` from `@codeatlasdev/ui` with `loop={2400}`",
				"`role=\"switch\"` with `aria-checked={dark}` and `aria-label=\"Dark mode\"`",
				"`<mask id=\"{uid}-bite\">` holds a black `circle` that `.tg__bite` moves from `translate(10px, -10px)` to `translate(0, 0)`",
				"`.tg__btn--dark .tg__rays` goes to `transform: rotate(45deg) scale(0.4)` and `opacity: 0`",
				"`.tg__btn--dark .tg__icon` rotates to `transform: rotate(-35deg)`",
				"`.tg__btn--still` sets `transition: none` under reduced motion"
			],
			"tags": [
				"motion",
				"toggle",
				"morph",
				"icon",
				"theme",
				"switch"
			],
			"names": [
				"Morphing toggle",
				"Icon morph",
				"Toggle com morph",
				"Bascule animée"
			],
			"motion": [
				{
					"property": "transform (bite mask, icon rotation, rays), opacity (rays)",
					"duration": "420ms",
					"easing": "cubic-bezier(0.2, 0, 0, 1)"
				},
				{
					"property": "opacity (rays)",
					"duration": "280ms",
					"easing": "cubic-bezier(0.2, 0, 0, 1)"
				}
			],
			"shape": "square",
			"index": {
				"kind": "motion",
				"subtype": "micro",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "expressive",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css",
					"svelte-motion"
				],
				"cost": "js-light",
				"components": [
					"MotionStage"
				],
				"aliases": [
					"theme switch",
					"sun moon",
					"dark mode toggle",
					"icon morph"
				],
				"related": [
					"348",
					"345",
					"343"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"MotionStage"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"MotionStage"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/motion/micro#morphing-toggle",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "343",
			"group": "motion",
			"page": "micro",
			"variant": "LikeBurst",
			"slug": "like-burst",
			"title": "Like burst",
			"description": "",
			"summary": "A like button whose heart pops to 1.45 and throws eight particles outward while the count ticks up; aria-pressed carries the state.",
			"use": "Like, favorite or reaction buttons where a positive action deserves a small celebration.",
			"spec": [
				"`MotionStage` from `@codeatlasdev/ui` with `loop={2600}`",
				"`aria-pressed={liked}` on the button, count in `tabular-nums`",
				"`const PARTICLES = 8;` each `<i style=\"--a:{i * (360 / PARTICLES)}deg\">` is one dot on a ring",
				"`@keyframes like-pop` scales the heart `1` to `1.45` and back",
				"`@keyframes like-particle` moves each dot `translateY(-26px)` while it fades to `opacity: 0` and `scale(0.3)`",
				"`{#key burst}` remounts the ring so the burst replays on every like; nothing bursts when reduced"
			],
			"tags": [
				"motion",
				"like",
				"burst",
				"particles",
				"button",
				"feedback"
			],
			"names": [
				"Like burst",
				"Heart burst",
				"Explosão de curtida",
				"Explosion de cœur"
			],
			"motion": [
				{
					"property": "transform: scale (heart)",
					"duration": "460ms",
					"easing": "cubic-bezier(0.175, 0.885, 0.32, 1.275)"
				},
				{
					"property": "transform, opacity (particles)",
					"duration": "560ms",
					"easing": "cubic-bezier(0, 0, 0.2, 1)"
				}
			],
			"shape": "square",
			"index": {
				"kind": "motion",
				"subtype": "micro",
				"industry": [
					"media"
				],
				"style": [
					"default"
				],
				"motion": "expressive",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css",
					"svelte-motion"
				],
				"cost": "js-light",
				"components": [
					"MotionStage"
				],
				"aliases": [
					"favorite",
					"heart",
					"confetti",
					"reaction"
				],
				"related": [
					"342",
					"344",
					"345"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"MotionStage"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"MotionStage"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/motion/micro#like-burst",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "344",
			"group": "motion",
			"page": "micro",
			"variant": "HoldToConfirm",
			"slug": "hold-to-confirm",
			"title": "Hold to confirm",
			"description": "",
			"summary": "A destructive button that only fires after a 1.2 second hold, filling a progress ring; releasing early cancels and drains the ring. Space and Enter work the same way.",
			"use": "Deleting data, sending money or any action that must be deliberate without a confirmation dialog.",
			"spec": [
				"`MotionStage` from `@codeatlasdev/ui` with `loop={3400}`",
				"`const HOLD = 1200;` milliseconds to hold; progress is `(now - start) / HOLD` read in `requestAnimationFrame`",
				"`stroke-dashoffset={C * (1 - (m.reduced && !done ? 0 : progress))}` on the ring circle, with `C = 2 * Math.PI * R`",
				"`onkeydown` starts on Space or Enter (`!e.repeat`), `onkeyup` and `onblur` call `cancel`",
				"`onpointerup`, `onpointerleave` and `onpointercancel` call `cancel`, which sets `progress = 0`",
				"`announce('Project deleted')` tells assistive tech when the hold completes; Undo resets"
			],
			"tags": [
				"motion",
				"hold",
				"confirm",
				"progress",
				"button",
				"destructive"
			],
			"names": [
				"Hold to confirm",
				"Press and hold",
				"Segurar para confirmar",
				"Maintenir pour confirmer"
			],
			"motion": [
				{
					"property": "stroke-dashoffset (progress ring)",
					"duration": "1200ms",
					"easing": "linear"
				}
			],
			"shape": "square",
			"index": {
				"kind": "motion",
				"subtype": "micro",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "expressive",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css",
					"svelte-motion"
				],
				"cost": "js-light",
				"components": [
					"MotionStage"
				],
				"aliases": [
					"long press",
					"destructive",
					"delete confirm",
					"progress ring"
				],
				"related": [
					"345",
					"341",
					"343"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"MotionStage"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"MotionStage",
						"announce"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/motion/micro#hold-to-confirm",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "345",
			"group": "motion",
			"page": "micro",
			"variant": "CopyCheck",
			"slug": "copy-to-check",
			"title": "Copy to check",
			"description": "",
			"summary": "A copy button whose two sheets scale away while a check mark draws itself, then it reverts after 1.6 seconds.",
			"use": "Copy-to-clipboard buttons next to a command, token or link, where the icon confirms the action.",
			"spec": [
				"`MotionStage` from `@codeatlasdev/ui` with `loop={2800}`",
				"`navigator.clipboard?.writeText(CODE)` on a real click; autoplay never touches the clipboard",
				"`.cc__btn--done .cc__sheets` goes to `transform: scale(0.6)` and `opacity: 0`",
				"`stroke-dasharray: 1;` with `stroke-dashoffset: 1` drawing to `stroke-dashoffset: 0` on the tick path",
				"`setTimeout(() => (copied = false), 1600)` reverts the icon",
				"`announce('Copied to clipboard')` and a `ca-sr-only` label carry the state for screen readers"
			],
			"tags": [
				"motion",
				"copy",
				"check",
				"morph",
				"icon",
				"clipboard"
			],
			"names": [
				"Copy to check",
				"Copy confirmation",
				"Copiar e confirmar",
				"Copier puis valider"
			],
			"motion": [
				{
					"property": "transform, opacity (sheets)",
					"duration": "280ms",
					"easing": "cubic-bezier(0.2, 0, 0, 1)"
				},
				{
					"property": "stroke-dashoffset (check tick)",
					"duration": "320ms",
					"easing": "cubic-bezier(0.2, 0, 0, 1)",
					"delay": "120ms"
				}
			],
			"shape": "wide",
			"index": {
				"kind": "motion",
				"subtype": "micro",
				"industry": [
					"devtools"
				],
				"style": [
					"default"
				],
				"motion": "expressive",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css",
					"svelte-motion"
				],
				"cost": "js-light",
				"components": [
					"MotionStage"
				],
				"aliases": [
					"clipboard",
					"copy code",
					"install command",
					"success tick"
				],
				"related": [
					"344",
					"342",
					"343"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"MotionStage"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"MotionStage",
						"announce"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/motion/micro#copy-to-check",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "346",
			"group": "motion",
			"page": "micro",
			"variant": "AddToCartFly",
			"slug": "add-to-cart-fly",
			"title": "Add to cart fly",
			"description": "",
			"summary": "Tapping Add to cart sends a dot flying from the button to the bag, then the badge count bumps with an overshoot.",
			"use": "E-commerce add actions, saving to a list or any action whose result lives somewhere else on screen.",
			"spec": [
				"`MotionStage` from `@codeatlasdev/ui` with `loop={2400}`",
				"`@keyframes cart-fly` moves the dot `translate(40px, -26px)` at 60% and `translate(72px, -4px)` at 100% while fading out",
				"`setTimeout` of `520` ms after the click increments `count`, matching the flight length",
				"`@keyframes cart-bump` scales the badge `1` to `1.5` and back",
				"`announce(`Cart: ${count} items`)` tells assistive tech; the bag is `role=\"img\"` with the count in its label",
				"`{#key flight}` remounts the dot so each add flies again; nothing flies when reduced"
			],
			"tags": [
				"motion",
				"cart",
				"fly",
				"badge",
				"ecommerce",
				"feedback"
			],
			"names": [
				"Add to cart fly",
				"Fly to cart",
				"Adicionar ao carrinho",
				"Ajout au panier"
			],
			"motion": [
				{
					"property": "transform, opacity (flying dot)",
					"duration": "520ms",
					"easing": "cubic-bezier(0.4, 0, 0.2, 1)"
				},
				{
					"property": "transform: scale (badge bump)",
					"duration": "360ms",
					"easing": "cubic-bezier(0.175, 0.885, 0.32, 1.275)"
				}
			],
			"shape": "wide",
			"index": {
				"kind": "motion",
				"subtype": "micro",
				"industry": [
					"e-commerce"
				],
				"style": [
					"default"
				],
				"motion": "expressive",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css",
					"svelte-motion"
				],
				"cost": "js-light",
				"components": [
					"MotionStage"
				],
				"aliases": [
					"basket",
					"cart animation",
					"buy button",
					"badge bump"
				],
				"related": [
					"343",
					"341",
					"361"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"MotionStage"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"MotionStage",
						"announce"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/motion/micro#add-to-cart-fly",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "347",
			"group": "motion",
			"page": "micro",
			"variant": "TiltCard",
			"slug": "tilt-card",
			"title": "Tilt card",
			"description": "",
			"summary": "A stat card that leans up to 10 degrees toward the pointer in 3D and settles flat on leave, driven by a Spring.",
			"use": "Feature cards, pricing tiers or stat tiles on desktop where hover should add depth.",
			"spec": [
				"`MotionStage` from `@codeatlasdev/ui` with `loop={2800}`",
				"`const MAX = 10;` degrees of rotation at the card edge",
				"`new Spring({ x: 0, y: 0 }, { stiffness: 0.1, damping: 0.6 })` drives `rotateX` and `rotateY`",
				"`transform: rotateX(var(--rx, 0)) rotateY(var(--ry, 0))` inside `perspective: 700px`",
				"`@media (pointer: coarse)` sets `transform: none`: no tilt on touch",
				"Under reduced motion `--rx` and `--ry` stay at 0"
			],
			"tags": [
				"motion",
				"tilt",
				"card",
				"hover",
				"3d",
				"spring"
			],
			"names": [
				"Tilt card",
				"3D tilt",
				"Card com inclinação",
				"Carte inclinée"
			],
			"motion": [
				{
					"property": "transform: rotateX, rotateY",
					"duration": "spring",
					"easing": "spring",
					"spring": "stiffness: 0.1, damping: 0.6"
				}
			],
			"shape": "square",
			"index": {
				"kind": "motion",
				"subtype": "micro",
				"industry": [
					"fintech",
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "immersive",
				"interaction": [
					"cursor",
					"hover"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css",
					"svelte-motion"
				],
				"cost": "js-light",
				"components": [
					"MotionStage"
				],
				"aliases": [
					"3d card",
					"perspective",
					"parallax card",
					"lean"
				],
				"related": [
					"386",
					"340",
					"341"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"MotionStage"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"MotionStage"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/motion/micro#tilt-card",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "348",
			"group": "motion",
			"page": "micro",
			"variant": "SpringSwitch",
			"slug": "spring-switch",
			"title": "Spring switch",
			"description": "",
			"summary": "A switch whose thumb stretches to 1.3 on press and overshoots into place on release.",
			"use": "Settings switches where the thumb should feel physical rather than slide linearly.",
			"spec": [
				"`MotionStage` from `@codeatlasdev/ui` with `loop={2800}`",
				"`role=\"switch\"` with `aria-checked={on}` and `aria-labelledby` pointing at the visible label",
				"`.sw__track--press .sw__thumb` is `transform: scaleX(1.3)` while pressed",
				"`.sw__track--on .sw__thumb` is `transform: translateX(20px)`",
				"`transition: transform 420ms cubic-bezier(0.175, 0.885, 0.32, 1.275)` overshoots the landing",
				"`.sw__track--still` sets `transition: none` under reduced motion"
			],
			"tags": [
				"motion",
				"switch",
				"toggle",
				"spring",
				"press",
				"settings"
			],
			"names": [
				"Spring switch",
				"Elastic toggle",
				"Switch elástico",
				"Interrupteur élastique"
			],
			"motion": [
				{
					"property": "transform: translateX, scaleX (thumb)",
					"duration": "420ms",
					"easing": "cubic-bezier(0.175, 0.885, 0.32, 1.275)"
				},
				{
					"property": "background (track)",
					"duration": "240ms",
					"easing": "cubic-bezier(0.2, 0, 0, 1)"
				}
			],
			"shape": "square",
			"index": {
				"kind": "motion",
				"subtype": "micro",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "expressive",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css",
					"svelte-motion"
				],
				"cost": "js-light",
				"components": [
					"MotionStage"
				],
				"aliases": [
					"toggle",
					"settings",
					"on off",
					"elastic"
				],
				"related": [
					"342",
					"341",
					"345"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"MotionStage"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"MotionStage"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/motion/micro#spring-switch",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "360",
			"group": "motion",
			"page": "transitions",
			"variant": "SharedElement",
			"slug": "shared-element",
			"title": "Shared element",
			"description": "",
			"summary": "A plan cover that morphs from a list tile into the detail card through the View Transitions API, with a plain crossfade when the API is missing.",
			"use": "Opening a product, plan, photo or message from a list into its detail view without a jump cut.",
			"spec": [
				"`MotionStage` with `label=\"Shared element: a plan cover grows into the detail view\"` and `loop={2800}`",
				"The cover in the tile and the cover in the detail both carry `view-transition-name: se-cover`",
				"`doc.startViewTransition(() => flushSync(() => (open = next)))` swaps the view; without the API the new view runs `animation: se-fade 240ms`",
				"`::view-transition-group(se-cover)` uses `animation-duration: 420ms` and `animation-timing-function: cubic-bezier(0.2, 0, 0, 1)`",
				"Under reduced motion the detail is shown and no transition runs"
			],
			"tags": [
				"motion",
				"transition",
				"shared-element",
				"view-transitions",
				"card"
			],
			"names": [
				"Shared element transition",
				"Hero transition",
				"Container transform",
				"Transição de elemento compartilhado",
				"Transición de elemento compartido"
			],
			"motion": [
				{
					"property": "position and size of the shared cover (view-transition-name: se-cover)",
					"duration": "420ms",
					"easing": "cubic-bezier(0.2, 0, 0, 1)"
				},
				{
					"property": "opacity (crossfade fallback)",
					"duration": "240ms",
					"easing": "cubic-bezier(0.2, 0, 0, 1)"
				}
			],
			"shape": "square",
			"index": {
				"kind": "motion",
				"subtype": "transition",
				"industry": [
					"e-commerce",
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "expressive",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "grid",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css",
					"svelte-motion",
					"view-transitions"
				],
				"cost": "js-light",
				"components": [
					"Button",
					"Card",
					"MotionStage"
				],
				"aliases": [
					"view transition",
					"hero transition",
					"morph",
					"list to detail"
				],
				"related": [
					"361",
					"365",
					"362"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Button",
				"Card",
				"MotionStage"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Button",
						"Card",
						"MotionStage",
						"MotionCtx"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/motion/transitions#shared-element",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "361",
			"group": "motion",
			"page": "transitions",
			"variant": "FlipReorder",
			"slug": "flip-reorder",
			"title": "FLIP reorder",
			"description": "",
			"summary": "A sortable list whose rows slide to their new position instead of teleporting when the sort changes (First, Last, Invert, Play).",
			"use": "Sorting or filtering a table, leaderboard or card list where the user must keep track of which row went where.",
			"spec": [
				"`MotionStage` with `label=\"FLIP reorder: rows slide to their new place when the sort changes\"` and `loop={2400}`",
				"Measure `getBoundingClientRect().top` before the reorder, `await tick()`, measure again, then `el.animate(` from `translateY` of the difference to `translateY(0)`",
				"Rows keep a stable key: `{#each ordered as r (r.id)}` so Svelte moves the node instead of recreating it",
				"Under reduced motion the order changes with no animation"
			],
			"tags": [
				"motion",
				"flip",
				"reorder",
				"list",
				"sort"
			],
			"names": [
				"FLIP reorder",
				"List reorder animation",
				"Layout animation",
				"Reordenar lista com animação",
				"Animación de reordenación"
			],
			"motion": [
				{
					"property": "transform: translateY (inverted offset to 0)",
					"duration": "420",
					"easing": "cubic-bezier(0.2, 0, 0, 1)"
				}
			],
			"shape": "square",
			"index": {
				"kind": "motion",
				"subtype": "transition",
				"industry": [
					"saas",
					"fintech"
				],
				"style": [
					"default"
				],
				"motion": "expressive",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css",
					"svelte-motion"
				],
				"cost": "js-light",
				"components": [
					"Button",
					"MotionStage"
				],
				"aliases": [
					"sort animation",
					"reorder",
					"flip",
					"list sorting"
				],
				"related": [
					"366",
					"360",
					"362"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Button",
				"MotionStage"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Button",
						"MotionStage",
						"MotionCtx"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/motion/transitions#flip-reorder",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "362",
			"group": "motion",
			"page": "transitions",
			"variant": "HeightSpring",
			"slug": "height-spring",
			"title": "Height spring",
			"description": "",
			"summary": "An FAQ accordion whose panels open and close with a spring on their height, overshooting slightly before they settle.",
			"use": "Disclosure panels, FAQs and expandable table rows where a CSS ease feels stiff and the content height is not known in advance.",
			"spec": [
				"`MotionStage` with `label=\"Height spring: accordion panels open and close with a spring\"` and `loop={2200}`",
				"One `new Spring(0, { stiffness: 0.18, damping: 0.72 })` per panel drives the height in px; its target is the measured `scrollHeight` when open and `0` when closed",
				"A `ResizeObserver` keeps the target correct when the text wraps differently",
				"The clipped box reads `block-size: var(--h)` and a closed panel is `inert`",
				"The chevron rotates with `transition: transform 240ms cubic-bezier(0.2, 0, 0, 1)`",
				"Under reduced motion the spring is set with `{ instant: true }`"
			],
			"tags": [
				"motion",
				"accordion",
				"spring",
				"height",
				"disclosure"
			],
			"names": [
				"Height spring",
				"Spring accordion",
				"Auto height animation",
				"Mola de altura",
				"Animación de altura con resorte"
			],
			"motion": [
				{
					"property": "block-size of the panel",
					"duration": "stiffness: 0.18",
					"easing": "damping: 0.72",
					"spring": "{ stiffness: 0.18, damping: 0.72 }"
				},
				{
					"property": "transform: rotate of the chevron",
					"duration": "240ms",
					"easing": "cubic-bezier(0.2, 0, 0, 1)"
				}
			],
			"shape": "square",
			"index": {
				"kind": "motion",
				"subtype": "transition",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "expressive",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css",
					"svelte-motion"
				],
				"cost": "js-light",
				"components": [
					"MotionStage"
				],
				"aliases": [
					"faq",
					"collapse",
					"disclosure",
					"spring height"
				],
				"related": [
					"363",
					"361",
					"366"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"MotionStage"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"MotionStage",
						"MotionCtx"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/motion/transitions#height-spring",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "363",
			"group": "motion",
			"page": "transitions",
			"variant": "TabIndicator",
			"slug": "tab-indicator",
			"title": "Tab indicator",
			"description": "",
			"summary": "The package Tabs with one pill that slides and stretches under the active tab instead of each tab repainting its own background.",
			"use": "Segmented controls, tab bars and filters where the eye should follow the selection from one option to the next.",
			"spec": [
				"`MotionStage` with `label=\"Tab indicator: a pill slides under the active tab\"` and `loop={1800}`",
				"`Tabs`, `TabsList`, `TabsTrigger` and `TabsContent` come from `@codeatlasdev/ui`, untouched",
				"The active trigger's `offsetLeft` and `offsetWidth` are written to `--ti-x` and `--ti-w`; the pill reads `transform: translateX(var(--ti-x))` and `inline-size: var(--ti-w)`",
				"`transition: transform 360ms cubic-bezier(0.2, 0, 0, 1), inline-size 360ms cubic-bezier(0.2, 0, 0, 1)`; no transition before the first measure and under reduced motion",
				"A `ResizeObserver` re-measures when the list resizes"
			],
			"tags": [
				"motion",
				"tabs",
				"indicator",
				"slide",
				"pill"
			],
			"names": [
				"Sliding tab indicator",
				"Tab pill",
				"Magic line",
				"Indicador deslizante de abas",
				"Indicador de pestaña deslizante"
			],
			"motion": [
				{
					"property": "transform: translateX and inline-size of the pill",
					"duration": "360ms",
					"easing": "cubic-bezier(0.2, 0, 0, 1)"
				}
			],
			"shape": "square",
			"index": {
				"kind": "motion",
				"subtype": "transition",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "expressive",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css",
					"svelte-motion"
				],
				"cost": "js-light",
				"components": [
					"MotionStage",
					"Tabs",
					"TabsContent",
					"TabsList",
					"TabsTrigger"
				],
				"aliases": [
					"segmented control",
					"sliding pill",
					"tab underline",
					"nav indicator"
				],
				"related": [
					"362",
					"366",
					"360"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"MotionStage",
				"Tabs",
				"TabsContent",
				"TabsList",
				"TabsTrigger"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"MotionStage",
						"Tabs",
						"TabsContent",
						"TabsList",
						"TabsTrigger",
						"MotionCtx"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/motion/transitions#tab-indicator",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "364",
			"group": "motion",
			"page": "transitions",
			"variant": "StackedToasts",
			"slug": "stacked-toasts",
			"title": "Stacked toasts",
			"description": "",
			"summary": "Toasts that slide in from above, stack with a depth cascade (each older one lower, smaller and dimmer) and leave when dismissed.",
			"use": "In-app notifications that can arrive in bursts: payments, comments, exports, limit warnings.",
			"spec": [
				"`MotionStage` with `label=\"Stacked toasts: they enter, stack up and dismiss\"` and `loop={1400}`",
				"At most `const MAX = 3` toasts; a new one goes first and the oldest is cut",
				"Depth comes from `--i`: `transform: translateY(calc(var(--i) * 0.9rem)) scale(calc(1 - var(--i) * 0.05))` and `opacity: calc(1 - var(--i) * 0.28)`",
				"Enter: `animation: ts-in 320ms cubic-bezier(0.2, 0, 0, 1)` from `translateY(-1.5rem) scale(0.96)`; restack: `transition: transform 320ms cubic-bezier(0.2, 0, 0, 1), opacity 320ms cubic-bezier(0.2, 0, 0, 1)`",
				"Only the front toast is announced and readable: older ones get `class:ts__toast--behind={i > 0}` (content `opacity: 0`), `aria-hidden` and `inert`, so the stack never overlaps text",
				"Dismiss: `out:leave` runs `duration: reduced ? 0 : 240` with `easing: cubicOut`, fading to `opacity:${t}` while `translate:${u * 2.5}rem 0` slides it aside",
				"Under reduced motion the stack is shown full with `animation: none`"
			],
			"tags": [
				"motion",
				"toast",
				"stack",
				"notification",
				"enter"
			],
			"names": [
				"Stacked toasts",
				"Toast stack",
				"Notification stack",
				"Pilha de toasts",
				"Pila de notificaciones"
			],
			"motion": [
				{
					"property": "opacity, transform: translateY and scale (enter)",
					"duration": "320ms",
					"easing": "cubic-bezier(0.2, 0, 0, 1)"
				},
				{
					"property": "opacity and translate (dismiss)",
					"duration": "240",
					"easing": "cubicOut"
				},
				{
					"property": "transform and opacity (restack as the list changes)",
					"duration": "320ms",
					"easing": "cubic-bezier(0.2, 0, 0, 1)"
				}
			],
			"shape": "square",
			"index": {
				"kind": "motion",
				"subtype": "transition",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "expressive",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "overlay",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css",
					"svelte-motion"
				],
				"cost": "js-light",
				"components": [
					"Button",
					"MotionStage"
				],
				"aliases": [
					"notifications",
					"snackbar",
					"alert stack",
					"depth cascade"
				],
				"related": [
					"365",
					"363",
					"366"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Button",
				"MotionStage"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Button",
						"MotionStage",
						"MotionCtx"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/motion/transitions#stacked-toasts",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "365",
			"group": "motion",
			"page": "transitions",
			"variant": "SheetSpring",
			"slug": "sheet-spring",
			"title": "Sheet spring",
			"description": "",
			"summary": "A bottom sheet that springs up over its page, follows your finger when dragged down and either dismisses or springs back depending on distance and speed.",
			"use": "Mobile pickers, filters, share menus and any secondary task that should feel attached to the screen instead of popping in.",
			"spec": [
				"`MotionStage` with `label=\"Sheet spring: a bottom sheet springs up and drags down to dismiss\"` and `loop={2600}`",
				"`new Spring(SHEET, { stiffness: 0.2, damping: 0.75 })` with `const SHEET = 256`: offset 0 is open, `SHEET` is hidden",
				"The sheet reads `transform: translateY(var(--y))`; the scrim opacity follows `calc(var(--o) * 0.5)`",
				"Drag down follows the pointer 1:1 with `{ instant: true }`; dragging up divides by `4` (rubber band)",
				"Release dismisses past `SHEET * 0.3` or faster than `0.5` px/ms, otherwise the spring returns to 0; Escape also closes it",
				"Under reduced motion the sheet is open and moves with `{ instant: true }`"
			],
			"tags": [
				"motion",
				"sheet",
				"drawer",
				"spring",
				"drag"
			],
			"names": [
				"Spring sheet",
				"Bottom sheet drag to dismiss",
				"Swipe to dismiss",
				"Sheet com mola e arrastar para fechar",
				"Hoja con resorte y arrastrar para cerrar"
			],
			"motion": [
				{
					"property": "transform: translateY of the sheet",
					"duration": "stiffness: 0.2",
					"easing": "damping: 0.75",
					"spring": "{ stiffness: 0.2, damping: 0.75 }"
				}
			],
			"shape": "tall",
			"index": {
				"kind": "motion",
				"subtype": "transition",
				"industry": [
					"travel"
				],
				"style": [
					"default"
				],
				"motion": "immersive",
				"interaction": [
					"drag",
					"press",
					"keyboard"
				],
				"layout": "overlay",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css",
					"svelte-motion"
				],
				"cost": "js-light",
				"components": [
					"Button",
					"MotionStage"
				],
				"aliases": [
					"drawer",
					"modal sheet",
					"drag to dismiss",
					"mobile sheet"
				],
				"related": [
					"364",
					"360",
					"362"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Button",
				"MotionStage"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Button",
						"MotionStage",
						"MotionCtx"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/motion/transitions#sheet-spring",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "366",
			"group": "motion",
			"page": "transitions",
			"variant": "FilterList",
			"slug": "filter-list",
			"title": "Filter list",
			"description": "",
			"summary": "Filter chips over a list: rows that no longer match shrink and fade out, survivors slide into the gap, and the total counts to its new value.",
			"use": "Filtering a catalog, task list or table where the user must see what disappeared and what stayed.",
			"spec": [
				"`MotionStage` with `label=\"Filter list: rows exit and enter as the filter changes\"` and `loop={1800}`",
				"`Chip` from `@codeatlasdev/ui` sets the filter; rows are keyed with `{#each shown as it (it.id)}`",
				"`in:pop` and `out:pop` run `duration: reduced ? 0 : 240` with `easing: cubicOut`, animating `opacity:${t}; transform: scale(${0.92 + 0.08 * t})`",
				"`animate:flip={{ duration: m.reduced ? 0 : 320, easing: cubicOut }}` slides the surviving rows",
				"The total is `new Tween(0, { duration: 420, easing: cubicOut })`",
				"Under reduced motion every duration is `0`"
			],
			"tags": [
				"motion",
				"filter",
				"list",
				"exit",
				"flip"
			],
			"names": [
				"Animated filter",
				"List exit animation",
				"Presence animation",
				"Filtro animado",
				"Filtro animado de lista"
			],
			"motion": [
				{
					"property": "opacity and transform: scale (enter and exit)",
					"duration": "240",
					"easing": "cubicOut"
				},
				{
					"property": "position of the surviving rows (flip)",
					"duration": "320",
					"easing": "cubicOut"
				},
				{
					"property": "the total (number tween)",
					"duration": "420",
					"easing": "cubicOut"
				}
			],
			"shape": "tall",
			"index": {
				"kind": "motion",
				"subtype": "transition",
				"industry": [
					"saas",
					"e-commerce"
				],
				"style": [
					"default"
				],
				"motion": "expressive",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css",
					"svelte-motion"
				],
				"cost": "js-light",
				"components": [
					"Chip",
					"MotionStage"
				],
				"aliases": [
					"list filtering",
					"chips",
					"animated list",
					"exit enter"
				],
				"related": [
					"361",
					"363",
					"362"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Chip",
				"MotionStage"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Chip",
						"MotionStage",
						"MotionCtx"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/motion/transitions#filter-list",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "380",
			"group": "motion",
			"page": "hero-ambient",
			"variant": "CursorSpotlight",
			"slug": "cursor-spotlight",
			"title": "Cursor spotlight",
			"description": "",
			"summary": "A pricing grid lit by a soft brand spotlight and a grid of fine lines that only shows inside the light; the light eases toward the pointer.",
			"use": "Hero or feature grids where hovering should reveal structure: pricing tables, bento grids, docs landing pages.",
			"spec": [
				"`MotionStage` with `loop={1600}`; each cycle moves the light to the next entry of `waypoints`",
				"`@property --spot-x` and `@property --spot-y` are registered percentages, so `transition: --spot-x 520ms cubic-bezier(0.2, 0, 0, 1)` eases them",
				"The pointer sets `--spot-x` and `--spot-y` from `getBoundingClientRect()`; `onpointerleave` hands control back to the autoplay waypoint",
				"One mask: `radial-gradient(circle 8rem at var(--spot-x) var(--spot-y), #000, transparent 72%)` reveals the line grid, `circle 10rem` paints the brand glow",
				"`@media (pointer: coarse)` sets `touch-action: none` so a finger drags the light instead of scrolling the demo",
				"Under reduced motion `class:spot--run={!m.reduced}` removes the transition and the light rests at `50%` / `40%`"
			],
			"tags": [
				"motion",
				"spotlight",
				"cursor",
				"hero",
				"mask",
				"grid"
			],
			"names": [
				"Cursor spotlight",
				"Mouse spotlight",
				"Spotlight hover",
				"Holofote do cursor",
				"Foco de luz no cursor",
				"Luz que segue o mouse"
			],
			"motion": [
				{
					"property": "--spot-x, --spot-y (radial mask center)",
					"duration": "520ms",
					"easing": "cubic-bezier(0.2, 0, 0, 1)"
				}
			],
			"shape": "wide",
			"index": {
				"kind": "motion",
				"subtype": "ambient",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "immersive",
				"interaction": [
					"cursor"
				],
				"layout": "grid",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css",
					"svelte-motion"
				],
				"cost": "js-light",
				"components": [
					"MotionStage"
				],
				"aliases": [
					"pricing grid",
					"flashlight",
					"glow follow",
					"reveal grid"
				],
				"related": [
					"386",
					"382",
					"384"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"MotionStage"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"MotionStage"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/motion/hero-ambient#cursor-spotlight",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "381",
			"group": "motion",
			"page": "hero-ambient",
			"variant": "ClickRipple",
			"slug": "grid-ripple",
			"title": "Grid ripple",
			"description": "",
			"summary": "A grid of dots where a click sends a wave outward: each dot swells and fades back after a delay equal to its distance from the click.",
			"use": "Empty states, hero backdrops and interactive posters where a click or tap should feel like it disturbs a surface.",
			"spec": [
				"`MotionStage` with `loop={2200}`; each cycle starts a ripple from the next entry of `origins`",
				"The delay is the distance in cells times 70: `--d:{Math.round(dist * 70)}ms`, passed to `animation: rip-wave 700ms cubic-bezier(0.2, 0, 0, 1) var(--d) both`",
				"`rip-wave` keyframes: `transform: scale(2.6)` at the peak, then back to `scale(1)`, colored with `var(--ca-brand-fill)` at the peak",
				"`{#key src.n}` remounts the dots on every click so all delays restart from the new origin",
				"Under reduced motion `class:rip__dot--run={!m.reduced}` drops the animation and every dot stays at rest"
			],
			"tags": [
				"motion",
				"ripple",
				"click",
				"grid",
				"dots",
				"wave"
			],
			"names": [
				"Grid ripple",
				"Dot ripple",
				"Click ripple",
				"Ripple from point",
				"Ondulação em grade",
				"Onda de pontos a partir do clique",
				"Ondas en cuadrícula"
			],
			"motion": [
				{
					"property": "transform: scale, background-color",
					"duration": "700ms",
					"easing": "cubic-bezier(0.2, 0, 0, 1)",
					"stagger": "70ms"
				}
			],
			"shape": "wide",
			"index": {
				"kind": "motion",
				"subtype": "ambient",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "expressive",
				"interaction": [
					"press",
					"cursor"
				],
				"layout": "grid",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css",
					"svelte-motion"
				],
				"cost": "js-light",
				"components": [
					"MotionStage"
				],
				"aliases": [
					"wave",
					"dot grid",
					"click effect",
					"shockwave"
				],
				"related": [
					"384",
					"380",
					"382"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"MotionStage"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"MotionStage"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/motion/hero-ambient#grid-ripple",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "382",
			"group": "motion",
			"page": "hero-ambient",
			"variant": "GradientField",
			"slug": "animated-gradient-field",
			"title": "Animated gradient field",
			"description": "",
			"summary": "A KPI card on a gradient field whose hue and angle drift slowly through registered CSS custom properties; the pointer takes over and paints it.",
			"use": "Hero backgrounds, dashboard headers and cards that need ambient color without video, canvas or a JavaScript loop.",
			"spec": [
				"`@property --hue` is a `<number>` and `@property --angle` is an `<angle>`, so CSS can interpolate them",
				"`animation: field-drift 9s ease-in-out infinite alternate` runs only while `m.playing && !driven`",
				"Keyframes: `from { --hue: 0; --angle: 135deg; }` to `to { --hue: 90; --angle: 315deg; }`",
				"Takeover: `hue` follows the pointer x (0 to 90) and `angle` follows y (0 to 360), written as `--hue` and `--angle`",
				"Reduced motion: `m.playing` is false, so nothing animates and the field stays at `135deg`"
			],
			"tags": [
				"motion",
				"gradient",
				"ambient",
				"background",
				"hue",
				"property"
			],
			"names": [
				"Animated gradient field",
				"Gradient mesh",
				"Aurora background",
				"Shifting gradient",
				"Campo de gradiente animado",
				"Gradiente animado",
				"Fundo aurora",
				"Degradado animado"
			],
			"motion": [
				{
					"property": "--hue, --angle (registered custom properties)",
					"duration": "9s",
					"easing": "ease-in-out"
				}
			],
			"shape": "wide",
			"index": {
				"kind": "motion",
				"subtype": "ambient",
				"industry": [
					"fintech"
				],
				"style": [
					"aurora",
					"default"
				],
				"motion": "immersive",
				"interaction": [
					"cursor"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css",
					"svelte-motion"
				],
				"cost": "js-light",
				"components": [
					"MotionStage"
				],
				"aliases": [
					"mesh gradient",
					"animated background",
					"hero background",
					"color shift"
				],
				"related": [
					"380",
					"386",
					"383"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"MotionStage"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"MotionStage"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/motion/hero-ambient#animated-gradient-field",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "383",
			"group": "motion",
			"page": "hero-ambient",
			"variant": "CompareSlider",
			"slug": "before-and-after-slider",
			"title": "Before and after slider",
			"description": "",
			"summary": "A before and after compare slider: a handle clips the old design over the new one, and a spring snaps it to 25%, 50% or 75% on release.",
			"use": "Redesign showcases, image or theme comparisons, changelog visuals and onboarding that shows what a setting changes.",
			"spec": [
				"`new Spring(50, { stiffness: 0.14, damping: 0.62 })` drives the divider position `pos`",
				"The before pane is revealed with `clip-path: inset(0 calc(100% - var(--p)) 0 0)`; the handle sits at `inset-inline-start: var(--p)`",
				"Drag: `{ instant: true }` follows the pointer, and on release `pos.target = nearest(pos.target)` snaps to `snaps` (`[25, 50, 75]`)",
				"Keyboard: `role=\"slider\"` on the handle; ArrowLeft and ArrowRight move 10, with Shift 25, Home and End jump to 0 and 100",
				"Autoplay cycles `stops` (`[22, 78, 50]`) every `loop={2200}`; under reduced motion the divider rests at `50%`"
			],
			"tags": [
				"motion",
				"compare",
				"slider",
				"before-after",
				"spring",
				"drag"
			],
			"names": [
				"Before and after slider",
				"Compare slider",
				"Image comparison",
				"Slider de antes e depois",
				"Comparador antes e depois",
				"Comparador de imagens",
				"Slider avant après"
			],
			"motion": [
				{
					"property": "clip-path (divider position)",
					"duration": "spring",
					"easing": "spring",
					"spring": "{ stiffness: 0.14, damping: 0.62 }"
				}
			],
			"shape": "wide",
			"index": {
				"kind": "motion",
				"subtype": "ambient",
				"industry": [
					"saas",
					"agency"
				],
				"style": [
					"default"
				],
				"motion": "expressive",
				"interaction": [
					"drag",
					"keyboard",
					"press"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css",
					"svelte-motion"
				],
				"cost": "js-light",
				"components": [
					"MotionStage"
				],
				"aliases": [
					"before after",
					"image comparison",
					"slider reveal",
					"redesign"
				],
				"related": [
					"382",
					"384",
					"380"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"MotionStage"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"MotionStage",
						"MotionCtx"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/motion/hero-ambient#before-and-after-slider",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "384",
			"group": "motion",
			"page": "hero-ambient",
			"variant": "CursorTrail",
			"slug": "cursor-trail",
			"title": "Cursor trail",
			"description": "",
			"summary": "A chain of 14 dots that eases after the pointer, each one shrinking and following the dot ahead; autoplay traces a looping path.",
			"use": "Playful hero sections, creative portfolios and empty canvases where the cursor should leave a soft, short-lived mark.",
			"spec": [
				"`const N = 14` dots in a fixed pool: no node is created while the pointer moves",
				"Each frame every dot moves `0.32` of the way toward the dot ahead (`p.x += (prev.x - p.x) * 0.32`), the head follows the pointer",
				"Only `transform` is written: `translate3d(${p.x}px, ${p.y}px, 0) scale(${1 - i / (N + 4)})`",
				"The `requestAnimationFrame` loop stops when the demo leaves the viewport (`IntersectionObserver`) and when every dot has settled",
				"Autoplay drives a Lissajous path (`Math.cos(k * 2.1)`, `Math.sin(k * 3.2)`); under reduced motion no dots render",
				"`@media (pointer: coarse)` sets `touch-action: none` so a finger draws the trail instead of scrolling"
			],
			"tags": [
				"motion",
				"cursor",
				"trail",
				"pointer",
				"follow",
				"playful"
			],
			"names": [
				"Cursor trail",
				"Mouse trail",
				"Pointer trail",
				"Rastro do cursor",
				"Rastro do mouse",
				"Estela del cursor"
			],
			"motion": [
				{
					"property": "transform: translate3d, scale (per dot)",
					"duration": "per frame",
					"easing": "0.32",
					"stagger": "0.32"
				}
			],
			"shape": "wide",
			"index": {
				"kind": "motion",
				"subtype": "ambient",
				"industry": [
					"agency"
				],
				"style": [
					"default"
				],
				"motion": "immersive",
				"interaction": [
					"cursor"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css",
					"svelte-motion"
				],
				"cost": "js-light",
				"components": [
					"MotionStage"
				],
				"aliases": [
					"pointer follower",
					"dots",
					"mouse trail",
					"chain"
				],
				"related": [
					"380",
					"381",
					"386"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"MotionStage"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"MotionStage",
						"MotionCtx"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/motion/hero-ambient#cursor-trail",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "385",
			"group": "motion",
			"page": "hero-ambient",
			"variant": "HeroIntro",
			"slug": "hero-intro-sequence",
			"title": "Hero intro sequence",
			"description": "",
			"summary": "A hero block whose eyebrow, headline, copy and buttons enter one after another, each rising 14px and fading in, 90ms apart.",
			"use": "The first screen of a landing page or the header of a feature page. The static first frame is already complete, so no content is hidden for crawlers or slow scripts.",
			"spec": [
				"`MotionStage` with `loop={4200}`; `{#key m.cycle}` remounts the block so the sequence replays",
				"Each child gets `--i` (0 to 3) and `animation: intro-in 520ms cubic-bezier(0.2, 0, 0, 1) calc(var(--i) * 90ms) both`",
				"Keyframes: `from { opacity: 0; transform: translateY(14px); }` to `to { opacity: 1; transform: translateY(0); }`",
				"`class:intro--run={m.playing && m.cycle > 0}`: server HTML, reduced motion and a taken-over demo render the finished layout with no animation"
			],
			"tags": [
				"motion",
				"hero",
				"intro",
				"stagger",
				"entrance",
				"cta"
			],
			"names": [
				"Hero intro sequence",
				"Staggered hero entrance",
				"Headline and CTA intro",
				"Intro escalonada do hero",
				"Entrada em sequência do hero",
				"Séquence d'entrée du hero"
			],
			"motion": [
				{
					"property": "opacity, transform: translateY",
					"duration": "520ms",
					"easing": "cubic-bezier(0.2, 0, 0, 1)",
					"stagger": "90ms"
				}
			],
			"shape": "wide",
			"index": {
				"kind": "motion",
				"subtype": "ambient",
				"industry": [
					"saas",
					"ai"
				],
				"style": [
					"default"
				],
				"motion": "expressive",
				"interaction": [
					"press"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css",
					"svelte-motion"
				],
				"cost": "js-light",
				"components": [
					"Button",
					"MotionStage"
				],
				"aliases": [
					"landing hero",
					"staggered entrance",
					"above the fold",
					"intro"
				],
				"related": [
					"256",
					"300",
					"307"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Button",
				"MotionStage"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Button",
						"MotionStage"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/motion/hero-ambient#hero-intro-sequence",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "386",
			"group": "motion",
			"page": "hero-ambient",
			"variant": "TiltGlare",
			"slug": "card-tilt-with-glare",
			"title": "Card tilt with glare",
			"description": "",
			"summary": "A payment card that leans up to 10 degrees toward the pointer on a spring while a soft glare slides across its surface.",
			"use": "Product cards, pricing tiers, credit cards and badges that should feel like physical objects on hover.",
			"spec": [
				"`const MAX = 10`: the card leans at most 10 degrees (`ry.target = nx * MAX`, `rx.target = -ny * MAX`)",
				"Two springs: `new Spring(0, { stiffness: 0.12, damping: 0.55 })` for `rx` and for `ry`",
				"`transform: rotateX(var(--rx)) rotateY(var(--ry))` inside a `perspective: 700px` parent; the glare is `radial-gradient(circle at var(--gx) var(--gy), rgb(255 255 255 / 0.38), transparent 55%)`",
				"Disabled on touch: `matchMedia('(hover: hover) and (pointer: fine)')` sets `fine`, and `@media (hover: none), (pointer: coarse)` removes the transform",
				"Autoplay sweeps `sweep` every `loop={1500}`; under reduced motion the card is flat (`--rx:{m.reduced || !fine ? 0 : rx.current}deg`)"
			],
			"tags": [
				"motion",
				"tilt",
				"glare",
				"card",
				"pointer",
				"spring",
				"3d"
			],
			"names": [
				"Card tilt with glare",
				"3D tilt",
				"Tilt card",
				"Parallax tilt",
				"Card inclinado com brilho",
				"Tilt 3D com reflexo",
				"Tarjeta inclinada con brillo"
			],
			"motion": [
				{
					"property": "transform: rotateX, rotateY; glare position",
					"duration": "spring",
					"easing": "spring",
					"spring": "{ stiffness: 0.12, damping: 0.55 }"
				}
			],
			"shape": "wide",
			"index": {
				"kind": "motion",
				"subtype": "ambient",
				"industry": [
					"fintech",
					"e-commerce"
				],
				"style": [
					"default",
					"skeuo"
				],
				"motion": "immersive",
				"interaction": [
					"cursor",
					"hover"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css",
					"svelte-motion"
				],
				"cost": "js-light",
				"components": [
					"MotionStage"
				],
				"aliases": [
					"credit card",
					"holographic",
					"glare",
					"3d tilt"
				],
				"related": [
					"347",
					"340",
					"380"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"MotionStage"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"MotionStage",
						"MotionCtx"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/motion/hero-ambient#card-tilt-with-glare",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "387",
			"group": "inputs",
			"page": "checkbox",
			"variant": "RangeSelect",
			"slug": "shift-range-selection",
			"title": "Shift range selection",
			"description": "onclick is forwarded to the input and runs just before onchange, so shiftKey is readable. data-testid reaches the input.",
			"summary": "Five checkboxes where Shift+click selects the whole range from the last clicked row, using the forwarded onclick and data-testid.",
			"use": "Lists and tables with row selection that need Shift range selection.",
			"spec": [
				"`onclick={(e) => (shift = e.shiftKey)}` is forwarded to the input and runs just before `onchange`",
				"`onchange={(on) => toggle(i, on)}` applies the state to every row between the anchor and the clicked row when shift was held",
				"`data-testid=\"row-{i}\"` lands on the native input",
				"Footer line counts the selected rows"
			],
			"tags": [
				"checkbox",
				"shift",
				"range selection",
				"table",
				"list",
				"data-testid"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"fintech"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Checkbox"
				],
				"aliases": [
					"bulk select",
					"multi select",
					"shift click"
				],
				"related": [
					"008",
					"009",
					"007"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Checkbox"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Checkbox"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/checkbox#shift-range-selection",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "388",
			"group": "inputs",
			"page": "file-upload",
			"variant": "ExternalTrigger",
			"slug": "external-trigger-no-list",
			"title": "External trigger, no list",
			"description": "list={false} plus an Add files button that calls open().",
			"summary": "A FileUpload without its built-in list, opened from an Add files button in the section header; picked names are listed by the page.",
			"use": "Upload on pick with your own progress or list UI, and a header button that opens the same picker.",
			"spec": [
				"`list={false}` and `multiple`: `onchange` receives only the files just picked and `files` is not kept",
				"`bind:this={upload}` and a header `Button` calling `upload?.open()`",
				"`data-testid=\"attachments-input\"` is forwarded to the native file input",
				"The page keeps its own `names` list in `onchange`",
				"Wrapper has `max-width: 480px`"
			],
			"tags": [
				"file-upload",
				"external trigger",
				"open",
				"list",
				"upload on pick",
				"data-testid"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Button",
					"FileUpload"
				],
				"aliases": [
					"attachments",
					"programmatic open"
				],
				"related": [
					"020",
					"021",
					"054"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Button",
				"FileUpload"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Button",
						"FileUpload"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/file-upload#external-trigger-no-list",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "389",
			"group": "inputs",
			"page": "text-field",
			"variant": "HiddenLabel",
			"slug": "hidden-label",
			"title": "Hidden label",
			"description": "hideLabel keeps the label for assistive tech only; maxlength and ref reach the native input.",
			"summary": "Two inline TextFields whose label is kept for screen readers only with hideLabel, plus native maxlength and a bound ref.",
			"use": "Inline editing in lists and toolbars where the label is implied visually but each input still needs an accessible name.",
			"spec": [
				"`label=\"Task name\"` with `hideLabel`: the label stays for screen readers and is not shown",
				"`maxlength={40}` and `autocomplete=\"off\"` reach the native input",
				"`bind:ref` gives the `HTMLInputElement`; a text `Button` calls `first?.focus()`",
				"Column wrapper has `max-width: 400px`"
			],
			"tags": [
				"text-field",
				"hidelabel",
				"sr-only",
				"ref",
				"maxlength",
				"inline editing"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"keyboard",
					"press"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Button",
					"TextField"
				],
				"aliases": [
					"inline edit",
					"visually hidden label",
					"screen reader label"
				],
				"related": [
					"056",
					"058",
					"982"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Button",
				"TextField"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Button",
						"TextField"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/text-field#hidden-label",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "400",
			"group": "navigation",
			"page": "menu",
			"variant": "Selection",
			"slug": "checkbox-and-radio-items",
			"title": "Checkbox and radio items",
			"description": "Two toggles and a sort order. The menu stays open while options change; each item reports its state with aria-checked.",
			"summary": "A view menu with two checkbox items and a radio group for the sort order, kept open while options change, with the current state shown below.",
			"use": "Menus that set view options: toggles (show hidden, show preview) and one choice among several (sort by).",
			"spec": [
				"`<DropdownMenu>` with `{#snippet triggerChild(props)}` rendering `<Button variant=\"glass\" {...props}>View options</Button>`",
				"Two `<DropdownMenuCheckboxItem bind:checked={showHidden}>` style items (`bind:checked={showPreview}`): Show hidden files and Show preview",
				"`<DropdownMenuSeparator />` then `<DropdownMenuRadioGroup bind:value={sort} aria-label=\"Sort by\">` with a `DropdownMenuLabel` and radio items name, date, size",
				"`aria-live=\"polite\"` note reports `Sorted by {sort}` and the two toggles"
			],
			"tags": [
				"dropdown-menu",
				"menu",
				"checkbox",
				"radio",
				"selection",
				"view-options",
				"bind"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "navigation",
				"industry": [
					"general"
				],
				"style": [
					"glassmorphism"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "overlay",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"DropdownMenu",
					"DropdownMenuCheckboxItem",
					"DropdownMenuLabel",
					"DropdownMenuRadioGroup",
					"DropdownMenuRadioItem",
					"DropdownMenuSeparator",
					"Button"
				],
				"aliases": [
					"checkbox menu",
					"radio menu",
					"view options"
				],
				"related": [
					"158",
					"401",
					"402"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"DropdownMenu",
				"DropdownMenuCheckboxItem",
				"DropdownMenuLabel",
				"DropdownMenuRadioGroup",
				"DropdownMenuRadioItem",
				"DropdownMenuSeparator",
				"Button"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"DropdownMenu",
						"DropdownMenuCheckboxItem",
						"DropdownMenuLabel",
						"DropdownMenuRadioGroup",
						"DropdownMenuRadioItem",
						"DropdownMenuSeparator",
						"Button"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/navigation/menu#checkbox-and-radio-items",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "401",
			"group": "navigation",
			"page": "menu",
			"variant": "Submenu",
			"slug": "submenus",
			"title": "Submenus",
			"description": "Color and Move to open beside their item. ArrowRight opens, ArrowLeft or Escape closes one level, hover opens after a short delay.",
			"summary": "An item menu with Rename, a Color submenu, a Move to submenu and a destructive Delete, reporting the last action.",
			"use": "Menus where a secondary list (colors, destination groups) would make the main menu long: the list opens beside the item.",
			"spec": [
				"`<DropdownMenu>` with `{#snippet triggerChild(props)}` rendering `<Button variant=\"glass\" {...props}>Item actions</Button>`",
				"`<DropdownMenuItem onclick={() => (last = 'Rename')}>Rename</DropdownMenuItem>`, then two `<DropdownMenuSub>` blocks",
				"Each sub has `{#snippet trigger()}<DropdownMenuSubTrigger>Color</DropdownMenuSubTrigger>{/snippet}` (Color, Move to) and its options as `DropdownMenuItem` children from `{#each colors as color}` and `{#each groups as group}`",
				"Colors are Red, Green, Blue; groups are Inbox, Archive, Projects",
				"`<DropdownMenuSeparator />` precedes the destructive Delete item",
				"`let last = $state('')` is set per item and shown as `Last action: {last}` with `aria-live=\"polite\"`"
			],
			"tags": [
				"dropdown-menu",
				"menu",
				"submenu",
				"nested",
				"actions",
				"destructive"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "navigation",
				"industry": [
					"general"
				],
				"style": [
					"glassmorphism"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard",
					"hover"
				],
				"layout": "overlay",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"DropdownMenu",
					"DropdownMenuItem",
					"DropdownMenuSeparator",
					"DropdownMenuSub",
					"DropdownMenuSubTrigger",
					"Button"
				],
				"aliases": [
					"nested menu",
					"cascading menu"
				],
				"related": [
					"158",
					"400",
					"402"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"DropdownMenu",
				"DropdownMenuItem",
				"DropdownMenuSeparator",
				"DropdownMenuSub",
				"DropdownMenuSubTrigger",
				"Button"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"DropdownMenu",
						"DropdownMenuItem",
						"DropdownMenuSeparator",
						"DropdownMenuSub",
						"DropdownMenuSubTrigger",
						"Button"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/navigation/menu#submenus",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "402",
			"group": "navigation",
			"page": "menu",
			"variant": "ContextMenu",
			"slug": "context-menu",
			"title": "Context menu",
			"description": "Right-click opens the menu at the pointer and a second right-click moves it. Shift+F10 or the ContextMenu key opens it from the keyboard.",
			"summary": "A dashed button area that opens a Rename, Duplicate, Delete menu at the pointer on right-click, or from the keyboard with Shift+F10 or the ContextMenu key.",
			"use": "Context menus on rows, files or canvases: the menu opens where the user pointed and moves when they right-click again.",
			"spec": [
				"`let open = $state(false)` and `let point = $state<{ x: number; y: number } | null>(null)`",
				"The area is a native `<button type=\"button\" class=\"area\" {oncontextmenu} {onkeydown}>` so it is focusable and named by its visible text",
				"`oncontextmenu` calls `e.preventDefault()`, sets `point = { x: e.clientX, y: e.clientY }` and `open = true`",
				"`onkeydown` handles `ContextMenu` and Shift+F10 and anchors the menu to the area's top-left",
				"`<DropdownMenu bind:open anchor={point}>` has no trigger; items Rename, Duplicate and a destructive Delete after `<DropdownMenuSeparator />`",
				"Each item calls `function pick(action: string)`, which sets `last = action` and calls `announce`; `Last action: {last}` is shown below"
			],
			"tags": [
				"dropdown-menu",
				"context-menu",
				"right-click",
				"anchor",
				"bind-open",
				"keyboard"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "navigation",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"cursor",
					"keyboard",
					"press"
				],
				"layout": "overlay",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"DropdownMenu",
					"DropdownMenuItem",
					"DropdownMenuSeparator"
				],
				"aliases": [
					"right click",
					"context actions"
				],
				"related": [
					"942",
					"943",
					"158"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"DropdownMenu",
				"DropdownMenuItem",
				"DropdownMenuSeparator"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"announce",
						"DropdownMenu",
						"DropdownMenuItem",
						"DropdownMenuSeparator"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/navigation/menu#context-menu",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "420",
			"group": "inputs",
			"page": "combobox",
			"variant": "Multiple",
			"slug": "multiple",
			"title": "Multiple",
			"description": "Searchable multi-select with removable chips and a disabled option.",
			"summary": "A multi-select Combobox with removable chips, starting with two labels selected and echoing the array below.",
			"use": "Choosing several items from a searchable list, such as labels or categories, where the list stays open between picks.",
			"spec": [
				"`multiple`, `label=\"Labels\"`, `options={labels}` and `bind:value={selected}` on one `Combobox`",
				"`const labels` has 6 options, `legacy` is `disabled: true`",
				"`let selected = $state<string[]>(['bug', 'ui'])` renders two chips on first paint",
				"`description` hints that Backspace on an empty search removes the last chip",
				"Output line `Selected:` joins the array with `, ` or shows `none`",
				"Wrapper `.col` has `max-width: 360px`"
			],
			"tags": [
				"combobox",
				"multiple",
				"multi-select",
				"chips",
				"tags",
				"search",
				"form"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"devtools"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"keyboard",
					"press"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Combobox"
				],
				"aliases": [
					"multi select",
					"tags",
					"chips"
				],
				"related": [
					"421",
					"010",
					"011"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-17",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Combobox"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Combobox"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/combobox#multiple",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "421",
			"group": "inputs",
			"page": "combobox",
			"variant": "Creatable",
			"slug": "creatable-tags",
			"title": "Creatable tags",
			"description": "Create a tag from the search text when nothing matches.",
			"summary": "A multi-select Combobox that offers a Create row for text that matches no tag, and adds the new tag to its options.",
			"use": "Free-form tagging where users pick existing tags or invent new ones inline.",
			"spec": [
				"`multiple`, `creatable`, `label=\"Tags\"`, `{options}`, `bind:value={tags}` and `oncreate={onCreate}` on one `Combobox`",
				"`options` starts with `design`, `backend`, `urgent` and `onCreate` appends the new value",
				"`let tags = $state<string[]>([])` starts empty",
				"`placeholder=\"Add tags\"` and `searchPlaceholder=\"Search or create a tag\"`",
				"Wrapper `.col` has `max-width: 360px`"
			],
			"tags": [
				"combobox",
				"creatable",
				"tags",
				"multiple",
				"chips",
				"form"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"keyboard",
					"press"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Combobox"
				],
				"aliases": [
					"tag input",
					"add new option"
				],
				"related": [
					"420",
					"010",
					"011"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-17",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Combobox"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Combobox"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/combobox#creatable-tags",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "422",
			"group": "navigation",
			"page": "command-palette",
			"variant": "Async",
			"slug": "async-results",
			"title": "Async results",
			"description": "A simulated 600 ms server search, grouped, with loading and abort on every new query.",
			"summary": "A CommandPalette whose async `search` returns grouped invoice and customer records after a simulated 600 ms server delay.",
			"use": "Command palettes that search server data (records, documents, users) next to local navigation items.",
			"spec": [
				"`<CommandPalette {modules} {search} shortcut={false} onNavigate={(path) => (picked = path)} bind:open />`: the page's other palette owns Mod+K",
				"`function search(query: string, signal: AbortSignal)` resolves after 600 ms with `records` filtered by label and rejects with `AbortError` when the signal aborts",
				"`records` has 4 results in the `Invoices` and `Customers` groups",
				"Local `modules` items (Dashboard, Settings) filter instantly and stay above server results",
				"Button `Search records` opens the palette, `Selected:` shows the picked path"
			],
			"tags": [
				"command-palette",
				"async",
				"search",
				"server",
				"debounce",
				"abort",
				"loading"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "navigation",
				"industry": [
					"fintech",
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"keyboard",
					"press"
				],
				"layout": "overlay",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"CommandPalette",
					"Button"
				],
				"aliases": [
					"remote search",
					"server search",
					"spotlight"
				],
				"related": [
					"156",
					"155"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-17",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"CommandPalette",
				"Button"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"CommandPalette",
						"Button",
						"CommandResult",
						"NavModule"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/navigation/command-palette#async-results",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "430",
			"group": "foundation",
			"page": "drag-and-drop",
			"variant": "SortableList",
			"slug": "sortable-list",
			"title": "Sortable list",
			"description": "Drag the grip, press and hold on a touch screen, or focus the grip and press Space.",
			"summary": "A checklist whose rows reorder by dragging a grip, by touch press-and-hold, or with the keyboard (Space, arrows, Enter).",
			"use": "Any short ordered list the user curates: checklists, playlists, priorities, form field order.",
			"spec": [
				"`const dnd = useDnd();` once per component; `{@attach dnd.sortable(() => ({` on the `ul` with `handle: '.sl__grip'`, `getItems` and `onDrop`",
				"Each `li` carries `data-dnd-item={task.id}`; the grip `button` has `aria-describedby={dnd.instructionsId}` and an `aria-label` naming the task",
				"`onDrop` commits the move with `applyMove({ list: tasks }, e, (t) => t.id).list`; nothing re-renders while the pointer moves",
				"`<DndLayer {dnd} />` renders the keyboard instructions (`dnd.instructionsId`) and the drag styles once; every step is announced to screen readers"
			],
			"tags": [
				"drag",
				"drop",
				"sortable",
				"reorder",
				"list",
				"keyboard"
			],
			"names": [
				"Sortable list",
				"Drag to reorder",
				"Reorderable list",
				"Lista ordenável",
				"Lista reordenable"
			],
			"shape": "square",
			"index": {
				"kind": "component",
				"subtype": "foundation",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"drag",
					"press",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"DndLayer"
				],
				"aliases": [
					"reorder",
					"sortable",
					"drag and drop list",
					"checklist"
				],
				"related": [
					"431",
					"432"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"DndLayer"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"applyMove",
						"DndLayer",
						"useDnd",
						"DndDropEvent"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/foundation/drag-and-drop#sortable-list",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "431",
			"group": "foundation",
			"page": "drag-and-drop",
			"variant": "Board",
			"slug": "board",
			"title": "Board",
			"description": "Cards reorder inside a column and move between columns. With the keyboard, Space lifts, the arrows move and Enter drops.",
			"summary": "A three-column board: cards reorder inside a column and move between columns by mouse, touch or keyboard.",
			"use": "Kanban boards, status pipelines and any set of lists whose items move from one to another.",
			"spec": [
				"Every column is `{@attach dnd.sortable(() => ({ id: col, group: 'board',`; lists with the same `group` accept each other's cards",
				"`onDrop` receives the moved id with its `from` and `to` positions and applies it with `applyMove(lists, e, (c) => c.id)`",
				"Keyboard: Space lifts the card, ArrowUp and ArrowDown move it inside the column, ArrowLeft and ArrowRight jump to the next column, Enter drops, Escape cancels",
				"Each card is `<li data-dnd-item={card.id}` with a focusable `button`"
			],
			"tags": [
				"drag",
				"drop",
				"kanban",
				"board",
				"move",
				"lists"
			],
			"names": [
				"Kanban board",
				"Drag between lists",
				"Cards between columns",
				"Quadro kanban",
				"Tablero kanban"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "foundation",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"drag",
					"press",
					"keyboard"
				],
				"layout": "grid",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"DndLayer"
				],
				"aliases": [
					"kanban",
					"task board",
					"pipeline",
					"columns"
				],
				"related": [
					"430",
					"432"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"DndLayer"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"applyMove",
						"DndLayer",
						"useDnd",
						"DndDropEvent"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/foundation/drag-and-drop#board",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "432",
			"group": "foundation",
			"page": "drag-and-drop",
			"variant": "DropZones",
			"slug": "drop-zones",
			"title": "Drop zones",
			"description": "Drag a chip onto a day, or lift it with Space and pick the day with the arrows.",
			"summary": "Task chips dragged from a tray onto weekday drop zones, with a dashed highlight while a chip is over a day.",
			"use": "Scheduling, assigning and filing: any place a loose item is dropped onto a target that is not a sortable list.",
			"spec": [
				"Each chip is `{@attach dnd.draggable(() => ({ id: t.id, label: t.title }))}` on an element with `data-dnd-item`",
				"Each day is `{@attach dnd.dropzone(() => ({ id: day, label: day, onDrop: (e) => drop(day, e) }))}`; the zone is outlined while a chip is over it",
				"Keyboard: Space lifts a chip, the arrows pick the day, Enter drops; the zone name is announced to screen readers"
			],
			"tags": [
				"drag",
				"drop",
				"dropzone",
				"calendar",
				"schedule"
			],
			"names": [
				"Drop zones",
				"Drag onto a day",
				"Calendar drop target",
				"Zonas de soltar",
				"Zonas para soltar"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "foundation",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"drag",
					"press",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"DndLayer"
				],
				"aliases": [
					"drop target",
					"scheduler",
					"assign by dragging",
					"calendar drop"
				],
				"related": [
					"430",
					"431"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"DndLayer"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"DndLayer",
						"useDnd",
						"DndDropEvent"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/foundation/drag-and-drop#drop-zones",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "433",
			"group": "display",
			"page": "data-table",
			"variant": "Groups",
			"slug": "groups",
			"title": "Groups",
			"description": "",
			"summary": "A DataTable of tasks grouped into collapsible sprints, with a resizable Task column, drag-to-reorder rows between groups and a button inside a cell.",
			"use": "Backlogs, boards in table form and any grouped list where rows are reordered or moved and cells hold controls.",
			"spec": [
				"`groupBy={(t) => t.sprint}` renders one tbody per sprint with a header button that collapses its rows",
				"`meta: { label: 'Task', resizable: true }` with `size: 320`, `minSize: 160` and `maxSize: 560` adds a keyboard and pointer resize handle",
				"`{onReorder}` adds a grip per row; `rowId={(t) => t.id}` gives rows stable ids; the handler applies `e.to.group` and `e.to.index` to `tasks`",
				"`renderComponent(Button, {` puts a Button in a cell; clicking it does not fire `onRowClick`"
			],
			"tags": [
				"data-table",
				"groups",
				"resize",
				"reorder",
				"drag",
				"interactive-cells"
			],
			"names": [
				"Grouped table",
				"Resizable columns",
				"Reorderable rows",
				"Tabela agrupada",
				"Tabla agrupada"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"devtools"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"drag",
					"keyboard",
					"press"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Button",
					"DataTable",
					"DataTableColumnHeader"
				],
				"aliases": [
					"grouped rows",
					"drag reorder",
					"sprint backlog",
					"resizable columns"
				],
				"related": [
					"123",
					"122",
					"760"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-16",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Button",
				"DataTable",
				"DataTableColumnHeader"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Button"
					]
				},
				{
					"from": "@codeatlasdev/ui/table",
					"names": [
						"DataTable",
						"DataTableColumnHeader",
						"createCaColumnHelper",
						"DataTableReorderEvent"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/display/data-table#groups",
			"needs": "@codeatlasdev/ui@4.6.0 + @tanstack/svelte-table"
		},
		{
			"id": "460",
			"group": "navigation",
			"page": "tabs",
			"variant": "Line",
			"slug": "line",
			"title": "Line",
			"description": "variant=line as a view switcher: aria-label on the list, data-testid on a trigger, no panels.",
			"summary": "Tabs with variant=\"line\": bare text tabs with an underline on the active one, used as a view switcher with no panels.",
			"use": "Page headers and view switchers where the tabs change what the page shows, not a panel under the list.",
			"spec": [
				"`<Tabs bind:value={view} variant=\"line\">` with `<TabsList aria-label=\"View\">`",
				"3 triggers: `board`, `list`, `timeline`, each with a `data-testid` forwarded to the button",
				"No `TabsContent`: triggers carry no `aria-controls`",
				"A line below the tabs reads `Showing the {view} view.`",
				"Wrapper is `.wrap` with `max-width: 420px`"
			],
			"tags": [
				"tabs",
				"line",
				"variant",
				"view-switcher",
				"aria-label",
				"tabs-list"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "navigation",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"keyboard",
					"press"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "compact",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Tabs",
					"TabsList",
					"TabsTrigger"
				],
				"aliases": [
					"view switcher",
					"underline tabs"
				],
				"related": [
					"164",
					"163",
					"237"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-17",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Tabs",
				"TabsList",
				"TabsTrigger"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Tabs",
						"TabsList",
						"TabsTrigger"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/navigation/tabs#line",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "461",
			"group": "feedback",
			"page": "drawer",
			"variant": "CustomHeader",
			"slug": "own-header",
			"title": "Own header",
			"description": "No title: aria-labelledby points at your heading, so the panel keeps its accessible name while you build the header and its close button. Attributes such as data-testid reach the dialog.",
			"summary": "A drawer without a title whose own header carries the item key, a heading and a close button; aria-labelledby names the panel.",
			"use": "Detail panels that build their own header (key, actions) and still need an accessible name.",
			"spec": [
				"`<Drawer bind:open aria-labelledby=\"item-heading\" data-testid=\"item-drawer\">` with no `title`",
				"A `<header class=\"head\">` with `PRJ-42` as `<p class=\"key\">` and `<h2 id=\"item-heading\" class=\"name\">Fix login redirect</h2>`",
				"A ghost small button with `aria-label=\"Close item\"` and a `<X size={14} />` leading icon sets `open = false`",
				"A line below reads `Own header, own close button. The panel is still named by the heading above.`"
			],
			"tags": [
				"drawer",
				"aria-labelledby",
				"custom-header",
				"accessible-name",
				"detail-panel"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "feedback",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "overlay",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Drawer",
					"Button"
				],
				"aliases": [
					"issue detail",
					"custom header"
				],
				"related": [
					"700",
					"089",
					"090"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-17",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Drawer",
				"Button"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Drawer",
						"Button"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/feedback/drawer#own-header",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "462",
			"group": "feedback",
			"page": "alert-dialog",
			"variant": "TypeToConfirm",
			"slug": "type-to-confirm",
			"title": "Type to confirm",
			"description": "children renders a field under the description, confirmDisabled keeps Confirm off until the key matches, description takes a snippet for rich text, and confirmProps tags the button for tests.",
			"summary": "A destructive alert dialog with a rich description and a TextField body; Confirm stays disabled until the key is typed.",
			"use": "Irreversible deletes that need a deliberate confirmation, such as typing the item key.",
			"spec": [
				"Trigger `<Button variant=\"destructive\"` labelled `Delete {key}` with a `<Trash2 size={14} />` leading icon; it resets `typed = ''` and opens the dialog",
				"`<AlertDialog` with `bind:open`, `title=\"Delete {key}?\"`, `confirmLabel=\"Delete\"`, `cancelVariant=\"outlined\"` and `destructive`",
				"`confirmDisabled={typed !== key}` where `const key = 'PRJ-42'`, and `confirmProps={{ 'data-testid': 'confirm-delete' }}`",
				"`{#snippet description()}` renders `This removes <strong>3 linked records</strong> too and cannot be undone.`",
				"Body is `<TextField label=\"Type {key} to confirm\" bind:value={typed} />`",
				"`onconfirm` sets `deleted = true`, which shows `{key} deleted.` in a `<span class=\"out\" aria-live=\"polite\">`"
			],
			"tags": [
				"alert-dialog",
				"type-to-confirm",
				"confirm-disabled",
				"destructive",
				"children",
				"confirm-props"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "feedback",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"keyboard",
					"press"
				],
				"layout": "overlay",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"AlertDialog",
					"Button",
					"TextField"
				],
				"aliases": [
					"typed confirmation",
					"dangerous action"
				],
				"related": [
					"081",
					"080",
					"082"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-17",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"AlertDialog",
				"Button",
				"TextField"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"AlertDialog",
						"Button",
						"TextField"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/feedback/alert-dialog#type-to-confirm",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "470",
			"group": "navigation",
			"page": "popover",
			"variant": "CloseOnPick",
			"slug": "close-on-pick",
			"title": "Close on pick",
			"description": "A calendar inside a popover that closes itself when a day is chosen.",
			"summary": "A button showing the chosen date that opens a popover holding a calendar; picking a day closes the popover.",
			"use": "A choice made inside a popover (date, option, color) that should dismiss it and hand focus back to the trigger.",
			"spec": [
				"`<Popover bind:open align=\"start\">`",
				"`{#snippet triggerChild(props)}` renders `<Button {...props}>` labelled with the selected date or `Pick a date`",
				"`{#snippet children({ close })}` renders `<Calendar bind:value label=\"Due date\" locale=\"en-US\" weekStartsOn={0} onchange={() => close()} />`",
				"`close()` closes the popover and returns focus to the trigger"
			],
			"tags": [
				"popover",
				"calendar",
				"bind-open",
				"close",
				"date",
				"overlay"
			],
			"shape": "square",
			"index": {
				"kind": "component",
				"subtype": "navigation",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "overlay",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Popover",
					"Button",
					"Calendar"
				],
				"aliases": [
					"date picker",
					"close on select"
				],
				"related": [
					"160",
					"161"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-17",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Popover",
				"Button",
				"Calendar"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Popover",
						"Button",
						"Calendar",
						"getLocalTimeZone",
						"today",
						"DateValue"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/navigation/popover#close-on-pick",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "480",
			"group": "layout",
			"page": "app-shell",
			"variant": "ResizablePanel",
			"slug": "panel-width",
			"title": "Panel width",
			"description": "panelWidth={280} with resizablePanel: drag the edge or focus it and use the arrow keys.",
			"summary": "An app shell whose panel starts at 280px for long item names and has a drag handle on its edge.",
			"use": "Navigation lists with long labels, or when users want to choose how wide the panel is.",
			"spec": [
				"`<AppShellLayout {modules} {pathname} panelWidth={280} resizablePanel persistPanel={false} mainId={null} skipLink={false}>`",
				"One module `id: 'projects'` with 3 items whose labels are long (Quarterly revenue forecast and planning, Customer onboarding experience redesign, Infrastructure cost review)",
				"A second module `id: 'other'` with `items: []`",
				"Page is `<PageShell title=\"Wider panel\" description=\"Drag the panel edge, or focus it and use the arrow keys.\">` with one `Card` hint about the 160px to 480px range",
				"Stage height is `height: 360px`"
			],
			"tags": [
				"app-shell",
				"panel-width",
				"resizable",
				"separator",
				"sidebar",
				"navigation"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "layout",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"drag",
					"keyboard",
					"hover"
				],
				"layout": "split",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"AppShellLayout",
					"PageShell",
					"Card"
				],
				"aliases": [
					"resize sidebar",
					"wide panel",
					"drag handle"
				],
				"related": [
					"166",
					"962",
					"601"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-17",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"AppShellLayout",
				"PageShell",
				"Card"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"AppShellLayout",
						"PageShell",
						"Card",
						"NavModule"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/layout/app-shell#panel-width",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "481",
			"group": "layout",
			"page": "app-shell",
			"variant": "ItemExtras",
			"slug": "color-count-actions-and-reorder",
			"title": "Color, count, actions and reorder",
			"description": "Each row has a color dot, a neutral count and a … menu; drag a row by its grip.",
			"summary": "App shell panel rows with a color dot, a neutral count, a per-row actions menu and drag-to-reorder.",
			"use": "Lists of user-owned things (workspaces, folders, saved views) that need a marker, a total, quick actions and a custom order.",
			"spec": [
				"`<AppShellLayout {modules} {pathname} reorder={NavReorder} itemMenu={NavItemMenu} persistPanel={false} mainId={null} skipLink={false}>`: reorder and the item menu are opt-in imports",
				"One module `id: 'projects'` with a non-collapsible section `label: 'Workspaces'` and `onReorder: reorder`",
				"3 items: Design system (#e11d48, count 42), Marketing site (#2563eb, count 1280, shown as 1.2k), Mobile app (#16a34a, count 0)",
				"Every item has `color`, `count` and `actions`; `actions` is a snippet with 2 `DropdownMenuItem`s: Favorite and Archive (destructive)",
				"`reorder(e: NavReorderEvent)` uses `next.splice(e.from, 1)` and `next.splice(e.to, 0, moved)`, then writes the visible `log` line; the drag itself is announced by the shell",
				"A second module `id: 'other'` with `items: []`",
				"Stage height is `height: 360px`"
			],
			"tags": [
				"app-shell",
				"nav-item",
				"color",
				"count",
				"actions-menu",
				"reorder",
				"drag-and-drop",
				"sidebar"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "layout",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"drag",
					"press",
					"keyboard"
				],
				"layout": "split",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"AppShellLayout",
					"DropdownMenuItem",
					"NavItemMenu",
					"NavReorder",
					"PageShell",
					"Card"
				],
				"aliases": [
					"reorder nav",
					"row menu",
					"color dot",
					"badge count"
				],
				"related": [
					"166",
					"530",
					"480"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-17",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"AppShellLayout",
				"DropdownMenuItem",
				"NavItemMenu",
				"NavReorder",
				"PageShell",
				"Card"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"AppShellLayout",
						"DropdownMenuItem",
						"NavItemMenu",
						"NavReorder",
						"PageShell",
						"Card",
						"NavModule",
						"NavReorderEvent"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/layout/app-shell#color-count-actions-and-reorder",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "482",
			"group": "surfaces",
			"page": "card",
			"variant": "Stacked",
			"slug": "stacked-controls",
			"title": "Stacked controls",
			"description": "",
			"summary": "A Card titled Trending topics that stacks three Checkbox controls in a column with gap=\"sm\", the title aligned with the controls.",
			"use": "Settings and filter cards whose content is several inline controls (Checkbox, Switch, TextField) that need vertical spacing.",
			"spec": [
				"`<Card title=\"Trending topics\" headingLevel={3} gap=\"sm\" class=\"stacked\">` with `max-width: 320px`",
				"Three `<Checkbox label=\"Hacker News\" />` children: Hacker News, Product Hunt, Lobsters",
				"`gap=\"sm\"` stacks the children in a column with 8px between them; the title shares the checkboxes' left edge"
			],
			"tags": [
				"card",
				"gap",
				"stack",
				"checkbox",
				"title",
				"settings"
			],
			"shape": "tall",
			"index": {
				"kind": "component",
				"subtype": "surface",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Card",
					"Checkbox"
				],
				"aliases": [
					"checklist card",
					"titled form card",
					"stacked controls"
				],
				"related": [
					"070",
					"069",
					"068"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Card",
				"Checkbox"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Card",
						"Checkbox"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/surfaces/card#stacked-controls",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "490",
			"group": "feedback",
			"page": "toast",
			"variant": "Dedupe",
			"slug": "dedupe-and-replace-by-id",
			"title": "Dedupe and replace by id",
			"description": "Ten identical errors collapse into one toast with a count; the upload toast is replaced in place by its id.",
			"summary": "Two buttons: one fires the same error ten times and shows a single toast with a ×10 badge, the other replaces an uploading toast by id.",
			"use": "Polling or parallel requests that fail with the same message, and progress toasts that turn into a result.",
			"spec": [
				"`<Toaster />` mounted once, `toast` imported from `@codeatlasdev/ui`",
				"Dedupe: `toast.error('Too many requests, retry later.')` called in a loop of 10 keeps one toast, bumps its count badge and restarts its timer",
				"Replace: `toast.info('Uploading report.pdf…', { id: 'upload', duration: 0 })` then `toast.success('report.pdf uploaded.', { id: 'upload' })` swaps the same toast in place",
				"Both triggers are `<Button variant=\"outlined\"`"
			],
			"tags": [
				"toast",
				"toaster",
				"dedupe",
				"id",
				"replace",
				"notification",
				"count"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "feedback",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press"
				],
				"layout": "overlay",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Button",
					"Toaster"
				],
				"aliases": [
					"deduplicate",
					"snackbar",
					"update in place"
				],
				"related": [
					"103",
					"492"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Button",
				"Toaster"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Button",
						"Toaster",
						"toast"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/feedback/toast#dedupe-and-replace-by-id",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "491",
			"group": "display",
			"page": "table",
			"variant": "Dense",
			"slug": "dense-pinned-and-grouped",
			"title": "Dense, pinned and grouped",
			"description": "",
			"summary": "A dense SimpleTable of leads inside an already framed, horizontally scrolling panel: compact rows, two pinned columns, collapsible stage groups, a sortable Name header and clickable rows.",
			"use": "CRM or spreadsheet-like record lists that need many columns and rows: dense rows, pinned checkbox and name columns, grouped sections and keyboard-operable rows.",
			"spec": [
				"`<SimpleTable density=\"compact\" frame={false} scroll=\"none\" stickyColumns={2} headerCase=\"sentence\">` inside a caller-owned `overflow-x: auto` panel",
				"`<TableSortHeader {sort} onsort={cycle}>` renders a sentence-case sortable header whose `sort` is `none`, `asc` or `desc`",
				"One `<tbody>` per stage with `<TableGroupRow colspan={6} collapsible bind:open={opened[stage]}>` as its first row",
				"`<TableRow selected={selected === l.id} onactivate=` rows: Tab, Enter/Space and click activate; the checkbox does not",
				"The first two columns (checkbox, name) stay pinned while the panel scrolls sideways"
			],
			"tags": [
				"table",
				"simple-table",
				"dense",
				"compact",
				"sticky-columns",
				"group-row",
				"sortable",
				"interactive-row",
				"crm"
			],
			"names": [
				"Dense table",
				"Compact table",
				"Tabela densa",
				"Pinned columns"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard",
					"hover"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "compact",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"SimpleTable",
					"TableRow",
					"TableGroupRow",
					"TableSortHeader",
					"Checkbox"
				],
				"aliases": [
					"crm table",
					"sticky columns",
					"collapsible groups",
					"leads list",
					"compact table"
				],
				"related": [
					"138",
					"139",
					"433",
					"760"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"SimpleTable",
				"TableRow",
				"TableGroupRow",
				"TableSortHeader",
				"Checkbox"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"SimpleTable",
						"TableRow",
						"TableGroupRow",
						"TableSortHeader",
						"Checkbox"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/display/table#dense-pinned-and-grouped",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "492",
			"group": "feedback",
			"page": "toast",
			"variant": "Actions",
			"slug": "description-and-action",
			"title": "Description and action",
			"description": "A description under the title, a single inline action, and both. The action is a real button reachable with Tab.",
			"summary": "Three buttons that fire a toast with a description, with one inline action, and with both.",
			"use": "A toast that needs a secondary line of detail or a single shortcut such as Undo, Open or Mark as qualified.",
			"spec": [
				"`<Toaster />` mounted once, `toast` imported from `@codeatlasdev/ui`",
				"Description: `toast.success('Task completed', { description: 'Next step scheduled for tomorrow 09:00' })`",
				"Action: `toast.warning('Sequence paused for Acme', {` with `action: { label: 'Mark as qualified'`, whose `onClick` runs and dismisses the toast; an actionable toast lasts 8 seconds",
				"Both: `description` and `action` in the same options object",
				"All triggers are `<Button variant=\"outlined\"`"
			],
			"tags": [
				"toast",
				"toaster",
				"action",
				"description",
				"undo",
				"notification"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "feedback",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "overlay",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Button",
					"Toaster"
				],
				"aliases": [
					"snackbar",
					"undo action",
					"notification"
				],
				"related": [
					"103",
					"490"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Button",
				"Toaster"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Button",
						"Toaster",
						"toast"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/feedback/toast#description-and-action",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "500",
			"group": "inputs",
			"page": "text-field",
			"variant": "Password",
			"slug": "password",
			"title": "Password",
			"description": "revealable adds the show/hide eye, below holds the Forgot password link, requiredIndicator={false} drops the asterisk.",
			"summary": "A sign-in pair of TextFields: a required email and a revealable password with a Forgot password link under it, neither showing an asterisk.",
			"use": "Login and reset forms: the show/hide password eye, a link or strength meter under the field, and required fields without the asterisk when nothing is optional.",
			"spec": [
				"Email field `type=\"email\"` with `required` and `requiredIndicator={false}`: the input is required, the label shows no asterisk",
				"Password field `type=\"password\"` with `revealable`: the component renders the eye button inside the field; the demo has no local reveal state",
				"`{#snippet below()}` renders `<a href=\"/forgot-password\">Forgot password?</a>` under the field, after any error or description",
				"Column wrapper has `max-width: 400px`"
			],
			"tags": [
				"text-field",
				"password",
				"revealable",
				"show-password",
				"below",
				"required",
				"login",
				"forgot-password"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"keyboard",
					"press"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"TextField"
				],
				"aliases": [
					"login",
					"sign in",
					"show password"
				],
				"related": [
					"057",
					"841",
					"843"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"TextField"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"TextField"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/text-field#password",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "501",
			"group": "navigation",
			"page": "locale-switcher",
			"variant": "Basic",
			"slug": "basic",
			"title": "Basic",
			"description": "Native names, a short code on narrow screens and an async onselect that keeps the switcher busy.",
			"summary": "A language switcher with three options named in their own language; picking one awaits an async onselect before the value changes.",
			"use": "A language selector in a public header or settings: persist the choice, set the cookie and navigate to the localized URL, with the control busy meanwhile.",
			"spec": [
				"`<LocaleSwitcher {options} bind:value={locale} {onselect} />` with `options` of `pt-BR` (label `Português`, `short: 'PT'`), `en` (`English`) and `es` (`Español`)",
				"`async function onselect(next: string)` waits 600 ms, then writes a visible `saved` note: Saved <locale>; the app would now go to /<locale>/login.",
				"Before any pick the note reads `Pick a language: the switcher stays busy until onselect resolves.`",
				"The column is left-aligned with `gap: var(--ca-space-3)`"
			],
			"tags": [
				"locale-switcher",
				"language",
				"i18n",
				"dropdown",
				"async",
				"onselect"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "navigation",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"LocaleSwitcher"
				],
				"aliases": [
					"language picker",
					"i18n",
					"translation"
				],
				"related": [
					"502",
					"158"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"LocaleSwitcher"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"LocaleSwitcher"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/navigation/locale-switcher#basic",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "502",
			"group": "navigation",
			"page": "locale-switcher",
			"variant": "InHeader",
			"slug": "in-header",
			"title": "In header",
			"description": "The SiteHeader trailing slot holds the switcher and a Sign up button.",
			"summary": "A site header whose trailing end holds a LocaleSwitcher next to a filled Sign up button.",
			"use": "The public header of a multi-language product: language switcher plus the primary call to action, compact on a phone.",
			"spec": [
				"`<SiteHeader>` with a `{#snippet trailing()}` holding the end of the bar",
				"`<LocaleSwitcher {options} bind:value={locale} />` with `pt-BR` (`Português`, `short: 'PT'`) and `en` (`English`)",
				"A small filled `Button` labelled `Sign up` follows the switcher",
				"The header sits in `<Card full flush>`"
			],
			"tags": [
				"locale-switcher",
				"site-header",
				"trailing",
				"cta",
				"language",
				"header"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "navigation",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Button",
					"Card",
					"LocaleSwitcher",
					"SiteHeader"
				],
				"aliases": [
					"language picker",
					"i18n",
					"site header"
				],
				"related": [
					"501",
					"151"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Button",
				"Card",
				"LocaleSwitcher",
				"SiteHeader"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Button",
						"Card",
						"LocaleSwitcher",
						"SiteHeader"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/navigation/locale-switcher#in-header",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "530",
			"group": "layout",
			"page": "app-shell",
			"variant": "RailLabels",
			"slug": "labels-search-slot-badges-and-more",
			"title": "Labels, search slot, badges and More",
			"description": "railLabels, railTop, module badges, bottomNavOverflow and filterModules. Narrow the viewport below 900px to see the More sheet.",
			"summary": "An app shell with captions under the rail icons, a search trigger on top of the rail, per-module badges and a More sheet on mobile.",
			"use": "Apps with many modules, a command palette, per-module counters and role-based navigation.",
			"spec": [
				"`<AppShellLayout {modules} filterModules={(m) => admin || m.id !== 'settings'} {pathname} onNavigate={(path) => (pathname = path)} railLabels persistPanel={false} mainId={null} skipLink={false}>` with `railTop` (a ghost search `Button`, aria-label 'Search, command K') and `bottomNavOverflow` (an outlined full-width 'Account' `Button`)",
				"7 modules: Inbox (`badge: 12`), Map (`badge: 'dot'`, `badgeLabel: 'Search running'`), People (`badge: 3`, `badgeLabel: '3 tasks pending'`), Alerts, Search, Home, Settings; below 900px the bar shows 4 modules plus a More tab that opens a sheet with the rest",
				"`filterModules` is driven by an `admin` `$state`; a `Card` holds a hint and an outlined `Button` that toggles it",
				"Page is `<PageShell title=\"Labeled rail\" description={pathname}>`; stage height is `height: 440px`"
			],
			"tags": [
				"app-shell",
				"rail",
				"labels",
				"badge",
				"bottom-nav",
				"overflow",
				"filter-modules",
				"search"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "layout",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"hover",
					"keyboard"
				],
				"layout": "split",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"AppShellLayout",
					"Button",
					"PageShell",
					"Card"
				],
				"aliases": [
					"icon captions",
					"labeled sidebar",
					"command search",
					"mobile more sheet"
				],
				"related": [
					"166",
					"481",
					"601"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"AppShellLayout",
				"Button",
				"PageShell",
				"Card"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"AppShellLayout",
						"Button",
						"PageShell",
						"Card",
						"NavModule"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/layout/app-shell#labels-search-slot-badges-and-more",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "531",
			"group": "layout",
			"page": "app-shell",
			"variant": "Stage",
			"slug": "stage",
			"title": "Stage",
			"description": "A draggable stand-in for a map. Navigate with the panel: the mount count stays at 1 and the camera stays where you left it.",
			"summary": "An app shell with a persistent stage behind the pages: mounted once, click-through content, hide and pause.",
			"use": "Map, canvas, video or 3D products where the pages float over one live layer that must keep its state across routes.",
			"spec": [
				"`<AppShellLayout {modules} {pathname} onNavigate={(path) => (pathname = path)} {stage} {stageVisible} persistPanel={false} mainId={null} skipLink={false}>` with `stage` a snippet that draws the map",
				"The map is a draggable grid whose camera lives in `$state`; an attachment counts each mount in `mounts` with `untrack` (a tracked `+=` would loop), shown in the page",
				"One module `id: 'field'` with 3 items: Leads, Routes, Report",
				"The page is `<PageShell title=\"Floating over the stage\" description={pathname}>` with a `ca-stage-panel` wrapper around a `Card` that holds the mount count hint and an outlined `Button` toggling `stageVisible`",
				"Stage frame height is `height: 440px`"
			],
			"tags": [
				"app-shell",
				"stage",
				"map",
				"canvas",
				"persistent",
				"pointer-events",
				"inset"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "layout",
				"industry": [
					"real-estate",
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "expressive",
				"interaction": [
					"drag",
					"press",
					"keyboard"
				],
				"layout": "full-bleed",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"AppShellLayout",
					"Button",
					"Card",
					"PageShell"
				],
				"aliases": [
					"map backdrop",
					"persistent canvas",
					"floating panel"
				],
				"related": [
					"610",
					"166",
					"601"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"AppShellLayout",
				"Button",
				"Card",
				"PageShell"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"AppShellLayout",
						"Button",
						"Card",
						"PageShell",
						"NavModule"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/layout/app-shell#stage",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "540",
			"group": "display",
			"page": "heading",
			"variant": "Display",
			"slug": "display-role",
			"title": "Display role",
			"description": "",
			"summary": "Three Heading samples: a fluid display headline, a smaller display-3 heading and an h2 element drawn at the h4 size.",
			"use": "Rendering an editorial or marketing headline in the display font with its own tracking and leading, or decoupling a heading's look from its level.",
			"spec": [
				"`<Heading level={1} size=\"display\">` renders an h1 in the display text role",
				"`<Heading level={2} size=\"display-3\">` renders an h2 at the smallest fluid display size",
				"`<Heading level={2} size=\"h4\">` renders an h2 with the h4 look"
			],
			"tags": [
				"heading",
				"display",
				"typography",
				"headline",
				"hero",
				"font-display"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"general"
				],
				"style": [
					"editorial"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "airy",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Heading"
				],
				"aliases": [
					"hero title",
					"fluid type",
					"display type",
					"headline"
				],
				"related": [
					"541",
					"542"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Heading"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Heading"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/display/heading#display-role",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "541",
			"group": "display",
			"page": "highlight",
			"variant": "Animated",
			"slug": "animated-and-static",
			"title": "Animated and static",
			"description": "",
			"summary": "A sentence with one animated marker-pen highlight and one static highlight.",
			"use": "Emphasizing a key phrase in a headline or paragraph with a marker sweep that falls back to the final state under reduced motion.",
			"spec": [
				"`<Highlight animated>editorial pages</Highlight>` sweeps in on mount",
				"`<Highlight>static marks</Highlight>` is drawn fully with no animation",
				"The paragraph uses `--ca-font-size-h4`"
			],
			"tags": [
				"highlight",
				"mark",
				"marker",
				"animated",
				"reduced-motion",
				"editorial"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"agency"
				],
				"style": [
					"editorial"
				],
				"motion": "expressive",
				"interaction": [
					"none"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Highlight"
				],
				"aliases": [
					"marker",
					"text emphasis",
					"highlighter sweep",
					"mark"
				],
				"related": [
					"542",
					"540"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Highlight"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Highlight"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/display/highlight#animated-and-static",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "542",
			"group": "display",
			"page": "strike-through",
			"variant": "Rewrite",
			"slug": "strike-and-rewrite",
			"title": "Strike and rewrite",
			"description": "",
			"summary": "A rewrite line: one struck-out word with an animated pen line, followed by an animated highlighted replacement.",
			"use": "Editorial strike-through-and-rewrite effects where the removed text stays announced as deleted and the animation respects reduced motion.",
			"spec": [
				"`<StrikeThrough animated>workarounds</StrikeThrough>` draws the line on mount",
				"`<Highlight animated>one-shot components</Highlight>` follows as the replacement",
				"The paragraph uses `--ca-font-size-h4`"
			],
			"tags": [
				"strike-through",
				"del",
				"rewrite",
				"animated",
				"reduced-motion",
				"editorial",
				"highlight"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"general"
				],
				"style": [
					"editorial"
				],
				"motion": "expressive",
				"interaction": [
					"none"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Highlight",
					"StrikeThrough"
				],
				"aliases": [
					"strikethrough",
					"line through",
					"text rewrite",
					"crossed out"
				],
				"related": [
					"541",
					"540"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Highlight",
				"StrikeThrough"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Highlight",
						"StrikeThrough"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/display/strike-through#strike-and-rewrite",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "543",
			"group": "surfaces",
			"page": "surface",
			"variant": "Grain",
			"slug": "paper-grain",
			"title": "Paper grain",
			"description": "",
			"summary": "Three solid Surface tiles: static paper grain, animated paper grain and no grain.",
			"use": "Giving a card or panel a printed-paper texture for editorial and marketing layouts.",
			"spec": [
				"`<Surface material=\"solid\" elevation={2} grain p=\"4\" class=\"tile\">` is the static grain",
				"`grain=\"animated\"` shifts the noise and stays still under reduced motion",
				"The third tile has no `grain` prop"
			],
			"tags": [
				"surface",
				"grain",
				"paper",
				"noise",
				"texture",
				"editorial"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "surface",
				"industry": [
					"general"
				],
				"style": [
					"default",
					"skeuo"
				],
				"motion": "subtle",
				"interaction": [
					"none"
				],
				"layout": "grid",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Surface"
				],
				"aliases": [
					"paper texture",
					"noise",
					"film grain"
				],
				"related": [
					"076",
					"078",
					"075"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Surface"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Surface"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/surfaces/surface#paper-grain",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "600",
			"group": "layout",
			"page": "page-shell",
			"variant": "AsideReading",
			"slug": "reading-width-with-an-aside",
			"title": "Reading width with an aside",
			"description": "width=&quot;reading&quot; plus an aside snippet holding a section index.",
			"summary": "A PageShell with width=\"reading\" (form column capped at 46rem) and an aside snippet holding a section index, inside a fixed-height frame.",
			"use": "Settings and form pages on wide screens that need a readable column plus a companion column (in-page index, summary, help, preview).",
			"spec": [
				"Frame is a 420px tall flex column with an inset outline",
				"`<PageShell title=\"Workspace settings\" description=\"Reading width keeps the form at a comfortable line length.\" width=\"reading\" asideLabel=\"Sections\">`",
				"`{#snippet aside()}` renders a `Card` with a nav (aria-label On this page) of three links: General, Billing, Danger zone",
				"Body is a `Card full title=\"General\"` with a `Stack gap=\"4\"` of two `TextField`s: Name (Acme Inc.) and Slug (acme)"
			],
			"tags": [
				"page-shell",
				"aside",
				"width",
				"reading",
				"settings",
				"form",
				"sticky",
				"layout"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "layout",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"keyboard",
					"press"
				],
				"layout": "split",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"PageShell",
					"Card",
					"TextField",
					"Stack"
				],
				"aliases": [
					"settings page",
					"sidebar index",
					"narrow column",
					"table of contents"
				],
				"related": [
					"185",
					"184",
					"187"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"PageShell",
				"Card",
				"TextField",
				"Stack"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"PageShell",
						"Card",
						"TextField",
						"Stack"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/layout/page-shell#reading-width-with-an-aside",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "601",
			"group": "layout",
			"page": "app-shell",
			"variant": "ShortPanel",
			"slug": "short-panel",
			"title": "Short panel",
			"description": "collapseShortPanel: a module with two destinations shows only the rail.",
			"summary": "An app shell with one module of two items and collapseShortPanel: only the rail shows, the page uses the full width.",
			"use": "Small modules (settings, profile) where a 200px panel would hold two links and leave the rest empty.",
			"spec": [
				"`<AppShellLayout {modules} {pathname} collapseShortPanel persistPanel={false} mainId={null} skipLink={false}>` in a 320px tall frame",
				"One module `id: 'settings'` (Settings icon) with two items: Profile and Billing",
				"Page is `<PageShell title=\"Profile\" description=\"A two-item module needs no panel: the rail is enough.\">` with a `Card` hint"
			],
			"tags": [
				"app-shell",
				"panel",
				"collapse",
				"rail",
				"sidebar",
				"navigation"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "layout",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "full-bleed",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"AppShellLayout",
					"PageShell",
					"Card"
				],
				"aliases": [
					"rail only",
					"hide sidebar",
					"short module"
				],
				"related": [
					"166",
					"530",
					"165"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"AppShellLayout",
				"PageShell",
				"Card"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"AppShellLayout",
						"PageShell",
						"Card",
						"NavModule"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/layout/app-shell#short-panel",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "610",
			"group": "layout",
			"page": "page-frame",
			"variant": "Map",
			"slug": "map-split-and-page",
			"title": "Map, split and page",
			"description": "Switch the mode and side; the readout shows the pixels the frame reports on stageInsets.",
			"summary": "A PageFrame floating a 352px panel over a stand-in map, with a mode switch (map, split, page), a side switch and a live readout of the covered pixels from stageInsets.",
			"use": "Map-first screens where a panel sits over a live stage and the stage must keep pins and routes clear of what the panel covers.",
			"spec": [
				"A 380px tall frame holds a map stand-in and `<PageFrame mode={mode as 'map' | 'split' | 'page'} side={side as 'left' | 'right'} width=\"sm\" label=\"Territory\" headerBorder>`",
				"`{#snippet header()}` has an h2 Territory and a line reading the covered px from `stageInsets.current`",
				"`{#snippet toolbar()}` has a `TextField` labelled Search",
				"Body holds two `SegmentedControl`s: Mode (Map, Split, Page) and Side (Left, Right)",
				"`{#snippet footer()}` has a filled small `Button` Save",
				"A pin on the map shifts with the covered area"
			],
			"tags": [
				"page-frame",
				"map",
				"stage",
				"stage-insets",
				"panel",
				"split",
				"page",
				"sheet",
				"layout"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "layout",
				"industry": [
					"real-estate",
					"travel"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"keyboard",
					"press"
				],
				"layout": "overlay",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"PageFrame",
					"Button",
					"TextField",
					"SegmentedControl"
				],
				"aliases": [
					"floating sidebar",
					"map panel",
					"split view"
				],
				"related": [
					"531",
					"166",
					"962"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"PageFrame",
				"Button",
				"TextField",
				"SegmentedControl"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"PageFrame",
						"Button",
						"TextField",
						"SegmentedControl",
						"stageInsets"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/layout/page-frame#map-split-and-page",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "640",
			"group": "inputs",
			"page": "button",
			"variant": "NeutralTone",
			"slug": "neutral-tone",
			"title": "Neutral tone",
			"description": "",
			"summary": "One brand filled Button beside secondary actions drawn with tone=\"neutral\": an outlined Button, a small ghost Button and an outlined IconButton.",
			"use": "Dense work screens (queues, inboxes, CRMs) with one primary action and several secondary ones that must not compete with it.",
			"spec": [
				"`<Button variant=\"filled\">` labelled Send reply is the only brand-coloured control",
				"`<Button variant=\"outlined\" tone=\"neutral\">` labelled Edit message",
				"`<Button variant=\"ghost\" tone=\"neutral\" size=\"sm\">` labelled Snooze",
				"`<IconButton variant=\"outlined\" tone=\"neutral\" aria-label=\"More actions\">` with a MoreHorizontal icon",
				"Wrapping flex `.row` with `gap: var(--ca-space-3)`"
			],
			"tags": [
				"button",
				"icon-button",
				"tone",
				"neutral",
				"secondary",
				"outlined",
				"ghost"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"hover",
					"press",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Button",
					"IconButton"
				],
				"aliases": [
					"secondary action",
					"muted button"
				],
				"related": [
					"006",
					"880",
					"980"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Button",
				"IconButton"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Button",
						"IconButton"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/button#neutral-tone",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "641",
			"group": "feedback",
			"page": "progress",
			"variant": "Sizes",
			"slug": "sizes",
			"title": "Sizes",
			"description": "",
			"summary": "Four Progress bars at 60% showing size sm (4px), size md (6px) and the default lg (8px), plus an indeterminate sm bar.",
			"use": "Picking the bar thickness: thin bars for dense cards and headers, the default 8px elsewhere.",
			"spec": [
				"`<Progress value={60} size=\"sm\" label=\"Small bar\" />`",
				"`<Progress value={60} size=\"md\" label=\"Medium bar\" />`",
				"`<Progress value={60} label=\"Default bar\" />` keeps the 8px height",
				"`<Progress indeterminate size=\"sm\" label=\"Small indeterminate bar\" />` honours the height too",
				"Stacked in a grid with `gap: var(--ca-space-4)`, `max-width: 360px`"
			],
			"tags": [
				"progress",
				"size",
				"height",
				"sm",
				"md",
				"lg",
				"indeterminate"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "feedback",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"none"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "compact",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Progress"
				],
				"aliases": [
					"bar height",
					"thickness"
				],
				"related": [
					"093",
					"094",
					"092"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Progress"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Progress"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/feedback/progress#sizes",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "642",
			"group": "layout",
			"page": "kpi-card",
			"variant": "Stats",
			"slug": "stats-in-a-card",
			"title": "Stats in a card",
			"description": "",
			"summary": "A Card titled This week holding three card-less Stat blocks in a responsive grid: leads with a hint, reply rate with a unit, trend and hint, and booked calls with a positive trend.",
			"use": "Plain statistics inside an existing card or panel, with no nested box, instead of several KpiCards.",
			"spec": [
				"`<Card title=\"This week\" headingLevel={3} class=\"stats-card\">` with `max-width: 640px`",
				"`<Stat label=\"Leads this week\" value=\"128\" hint=\"12 more than last week\" />`",
				"`<Stat label=\"Reply rate\" value=\"18\" unit=\"%\" trend={-2.4} hint=\"Goal: 25%\" />`",
				"`<Stat label=\"Booked calls\" value=\"9\" trend={12.5} />`",
				"The Stats sit in an auto-fit grid, `minmax(150px, 1fr)`, `gap: var(--ca-space-5)`"
			],
			"tags": [
				"stat",
				"kpi",
				"metric",
				"statistic",
				"dashboard",
				"card-less",
				"hint",
				"trend"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "layout",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "grid",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Card",
					"Stat"
				],
				"aliases": [
					"card-less stats",
					"inline metrics",
					"stat group"
				],
				"related": [
					"072",
					"175",
					"178"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Card",
				"Stat"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Card",
						"Stat"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/layout/kpi-card#stats-in-a-card",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "700",
			"group": "feedback",
			"page": "drawer",
			"variant": "Chromeless",
			"slug": "chromeless-full-bleed-on-phones",
			"title": "Chromeless, full bleed on phones",
			"description": "chromeless drops the header and the body padding; fullBleedBelow=&quot;sm&quot; makes the panel exactly the viewport on phones. The view owns its header, close button and scroll area.",
			"summary": "A chromeless drawer for a detail view with its own header, close button and scrolling list; full width and height on phones.",
			"use": "Side detail panels on desktop that become full-screen panels on phones, where the view owns its header and scroll (no double close button, no 48px page strip).",
			"spec": [
				"`<Drawer bind:open chromeless width=\"26rem\" fullBleedBelow=\"sm\" aria-labelledby=\"detail-title\">`",
				"A column `.detail` with `<header class=\"head\">` holding `<h2 id=\"detail-title\" class=\"name\">Order 1042</h2>` and a ghost small button with `aria-label=\"Close detail\"` that sets `open = false`",
				"A `.scroll` area with `flex: 1; min-height: 0; overflow-y: auto` listing 24 `Line item` rows"
			],
			"tags": [
				"drawer",
				"chromeless",
				"full-bleed",
				"fullbleedbelow",
				"detail-panel",
				"mobile",
				"scroll"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "feedback",
				"industry": [
					"e-commerce"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"scroll",
					"keyboard"
				],
				"layout": "overlay",
				"colorMode": "both",
				"density": "compact",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Drawer",
					"Button"
				],
				"aliases": [
					"detail panel",
					"order detail",
					"full screen mobile"
				],
				"related": [
					"461",
					"089",
					"090"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Drawer",
				"Button"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Drawer",
						"Button"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/feedback/drawer#chromeless-full-bleed-on-phones",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "720",
			"group": "inputs",
			"page": "chip-group",
			"variant": "Wrap",
			"slug": "wrapping-chips",
			"title": "Wrapping chips",
			"description": "Five short options: two rows at 390px, one row of chips on desktop.",
			"summary": "Single-choice chips for a sales team size: five short options that wrap to two rows on a phone.",
			"use": "Choosing one of a few short options (team size, plan length, frequency) where RadioGroup is too tall and SegmentedControl would overflow a 390px screen.",
			"spec": [
				"`<ChipGroup label=\"Sales team size\" items={sizes} bind:value={size} />`",
				"`sizes` has 5 items: `1` Just me, `2-5` 2 to 5, `6-20` 6 to 20, `21-50` 21 to 50, `50+` 50+",
				"`bind:value={size}` with initial `$state('2-5')`; the selected chip shows a check icon"
			],
			"tags": [
				"chip-group",
				"chips",
				"radio",
				"single-choice",
				"wrap",
				"team-size",
				"mobile"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "compact",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"ChipGroup"
				],
				"aliases": [
					"choice chips",
					"pills",
					"team size"
				],
				"related": [
					"721",
					"022",
					"038"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"ChipGroup"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"ChipGroup"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/chip-group#wrapping-chips",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "721",
			"group": "inputs",
			"page": "chip-group",
			"variant": "FormError",
			"slug": "required-choice-with-error",
			"title": "Required choice with error",
			"description": "Inside a native form: submit without a selection to see the alert.",
			"summary": "ChipGroup inside a native form with a required choice and a field error shown after submitting without a selection.",
			"use": "A form step with one required single choice, where the error must be announced and the value must reach FormData through `name`.",
			"spec": [
				"`<ChipGroup` with `label=\"Sales team size\"`, `name=\"teamSize\"`, `items={sizes}`, `bind:value={size}`, `{error}` and `required`",
				"`sizes` has 3 items: `1`, `2-5`, `6-20`",
				"`let size = $state('')` starts with nothing selected",
				"`onsubmit` prevents default and sets the error to `'Choose a team size.'` when `size` is empty",
				"`onchange` clears the error",
				"`<Button type=\"submit\" variant=\"filled\">Continue</Button>` submits the form"
			],
			"tags": [
				"chip-group",
				"form",
				"error",
				"required",
				"name",
				"validation"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "compact",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Button",
					"ChipGroup"
				],
				"aliases": [
					"required field",
					"form error",
					"choice chips"
				],
				"related": [
					"720",
					"062",
					"022"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Button",
				"ChipGroup"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Button",
						"ChipGroup"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/chip-group#required-choice-with-error",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "760",
			"group": "display",
			"page": "kanban",
			"variant": "Pipeline",
			"slug": "leads-pipeline",
			"title": "Leads pipeline",
			"description": "Drag a card to another column, lift it with Space and move it with the arrows, or use the menu on the card. Scroll the New column to load more. Narrow the window below 600px for the tab strip.",
			"summary": "A three-stage leads pipeline board: status-coloured columns that scroll on their own, cards that move between columns by drag, keyboard or a Move to menu, and a New column that loads more pages.",
			"use": "CRM pipelines, ticket boards and any stage board whose columns are ordered by the server and keep loading as you scroll.",
			"spec": [
				"`<Kanban {columns} getId={(l) => l.id} {onmove} {onloadmore} label=\"Leads pipeline\">` inside `<div class=\"kb-demo\">` with `{#snippet card(lead)}` for the card content",
				"`.kb-demo { display: flex; height: 28rem; }` is the board-height parent",
				"Each column is `{ id: 'new', label: 'New', color: 'var(--ca-info-main)', total: 24, hasMore: true, items`; the New column has 24 loaded-on-demand leads",
				"`onmove` receives `{ card, from, to }`; the default whole-column drop makes the target index 0, so the handler prepends the card with `dst.items = [card, ...dst.items]`",
				"`onloadmore` sets `col.loadingMore` to show skeleton cards, then appends the next page",
				"`{#snippet empty(column, { canMove })}` fills the empty Won column"
			],
			"tags": [
				"kanban",
				"board",
				"pipeline",
				"crm",
				"drag",
				"columns",
				"infinite-scroll",
				"mobile"
			],
			"names": [
				"Kanban board",
				"Pipeline board",
				"Quadro de funil",
				"Tablero de embudo"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"drag",
					"keyboard",
					"scroll"
				],
				"layout": "grid",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Kanban"
				],
				"aliases": [
					"crm pipeline",
					"sales board",
					"drag and drop columns",
					"lead stages",
					"load more"
				],
				"related": [
					"761",
					"433"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Kanban"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Kanban",
						"KanbanColumn",
						"KanbanMove"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/display/kanban#leads-pipeline",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "761",
			"group": "display",
			"page": "kanban",
			"variant": "Totals",
			"slug": "money-total-per-column",
			"title": "Money total per column",
			"description": "Each column shows the sum of its deals next to the count. Move a card and both totals follow.",
			"summary": "A deals pipeline board that shows the money total of each column next to its count, keeping the stage colour rail, title and count that a custom header would replace.",
			"use": "Sales pipelines, invoicing stages and any board where each column needs an aggregate (sum, weight, hours) beside the card count.",
			"spec": [
				"`.kb-totals { display: flex; height: 22rem; }` is the board-height parent, a scoped class",
				"`<Kanban`",
				"`label=\"Deals pipeline\"`",
				"`{#snippet summary(column)}`",
				"`money.format(`",
				"`c.items.reduce(`"
			],
			"tags": [
				"kanban",
				"board",
				"pipeline",
				"summary",
				"total",
				"money",
				"crm",
				"columns"
			],
			"names": [
				"Kanban column total",
				"Pipeline totals",
				"Total por coluna",
				"Total por columna"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"saas",
					"fintech"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"drag",
					"keyboard",
					"press"
				],
				"layout": "grid",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Kanban"
				],
				"aliases": [
					"deal board",
					"column totals",
					"deal value sum",
					"sales pipeline"
				],
				"related": [
					"760",
					"433"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Kanban"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Kanban",
						"KanbanColumn"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/display/kanban#money-total-per-column",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "780",
			"group": "layout",
			"page": "theme-island",
			"variant": "Scoped",
			"slug": "scoped-block",
			"title": "Scoped block",
			"description": "A light ocean island inside the current page.",
			"summary": "ThemeIsland as a scoped block: a light ocean island inside a dark page.",
			"use": "A section or card that must use another preset or scheme than the rest of the app, without touching <html>.",
			"spec": [
				"`<ThemeIsland preset=\"ocean\" scheme=\"light\"`",
				"A light block inside the page, nothing mirrored to the document"
			],
			"tags": [
				"theme-island",
				"preset",
				"scheme",
				"light",
				"dark",
				"scope"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "layout",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "light",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Button",
					"ThemeIsland"
				],
				"aliases": [
					"scoped theme",
					"light block",
					"forced scheme",
					"theme boundary"
				],
				"related": [
					"781",
					"079"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Button",
				"ThemeIsland"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Button",
						"ThemeIsland"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/layout/theme-island#scoped-block",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "781",
			"group": "layout",
			"page": "theme-island",
			"variant": "FullPage",
			"slug": "full-page",
			"title": "Full page",
			"description": "Opens a rose, light page over the app and restores the app on close.",
			"summary": "Full-page ThemeIsland with `document`: html and body take the island's preset and scheme while it is mounted.",
			"use": "A public landing or auth page with its own preset and scheme inside an app that uses another one.",
			"spec": [
				"`<ThemeIsland preset=\"rose\" scheme=\"light\" document>` is the page root",
				"Closing it restores the app preset and scheme"
			],
			"tags": [
				"theme-island",
				"document",
				"full-page",
				"landing",
				"overscroll",
				"ssr"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "layout",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "full-bleed",
				"colorMode": "light",
				"density": "airy",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Button",
					"ThemeIsland"
				],
				"aliases": [
					"page theme",
					"browser chrome color",
					"document theme"
				],
				"related": [
					"780",
					"840"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Button",
				"ThemeIsland"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Button",
						"ThemeIsland"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/layout/theme-island#full-page",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "800",
			"group": "map",
			"page": "stage",
			"variant": "ThemedMap",
			"slug": "themed-map",
			"title": "Themed map",
			"description": "An offline basemap per scheme, deck.gl circles in the brand color and themed controls. Toggle the theme: the basemap and the circles change, the map is not recreated.",
			"summary": "A map stage with an offline light and dark basemap, four deck.gl store circles in the brand color and zoom and compass controls.",
			"use": "A map-first screen whose basemap and data layers must follow the app's light and dark theme.",
			"spec": [
				"`<MapStage` with `{styles}`, `{layers}`, `label=\"Store map\"`, `padding={{ top: 24, right: 24, bottom: 24, left: 24 }}` and a `fit` of the southeast Brazil bounds",
				"`styles` is a `$derived.by` whose `light` and `dark` entries are one inline style with a single `background` layer painted with `rgbaCss(mapColors().surface)`, so the demo needs no tiles, token or hex color",
				"`layers` is a `$derived.by` that calls `mapColors()` and returns a deck.gl `ScatterplotLayer` with `getFillColor: c.brandMuted` and `getLineColor: c.brand`, so it re-themes on scheme or preset change",
				"`<MapControls />` as the child of `MapStage`",
				"The stage box is `360px` high with `var(--ca-radius-lg)` corners"
			],
			"tags": [
				"map",
				"deck.gl",
				"maplibre",
				"theme",
				"dark-mode",
				"controls"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "map",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "immersive",
				"interaction": [
					"drag",
					"scroll",
					"press",
					"keyboard"
				],
				"layout": "full-bleed",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"MapControls",
					"MapStage"
				],
				"aliases": [
					"store locator",
					"geo map",
					"webgl map",
					"dark map",
					"location data"
				],
				"related": [],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"MapControls",
				"MapStage"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui/map",
					"names": [
						"MapControls",
						"MapStage",
						"mapColors",
						"rgbaCss"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/map/stage#themed-map",
			"needs": "@codeatlasdev/ui@4.6.0 + maplibre-gl"
		},
		{
			"id": "840",
			"group": "layout",
			"page": "auth-layout",
			"variant": "FlatPanel",
			"slug": "flat-panel",
			"title": "Flat panel",
			"description": "Opens a sign-in page with a flat panel; toggle Brand to see the gradient and blobs.",
			"summary": "Full-page AuthLayout whose side panel is flat (solid surface, no gradient, no blobs) with a toggle back to the brand gradient.",
			"use": "Sign-in pages in themes with a flat or outlined surface style, or design systems that forbid gradients.",
			"spec": [
				"`<AuthLayout logoName=\"Acme\" panelTone={tone}>` with `let tone = $state<'brand' | 'flat'>('flat')`",
				"`panel` snippet holds `<p class=\"auth-quote__text\">Ship the boring parts in a day.</p>`",
				"`<AuthCard title=\"Welcome back\" subtitle=\"Panel tone: {tone}\">` holds a `SegmentedControl` (Flat, Brand) bound to `tone` and a Close button",
				"Opened by an outlined small Button inside an overlay with `position: fixed;` and `inset: 0;`"
			],
			"tags": [
				"auth-layout",
				"panel-tone",
				"flat",
				"gradient",
				"blobs",
				"sign-in"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "layout",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "split",
				"colorMode": "both",
				"density": "airy",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"AuthLayout",
					"AuthCard",
					"Button",
					"SegmentedControl",
					"Stack"
				],
				"aliases": [
					"login page",
					"sign in layout",
					"side panel",
					"auth screen"
				],
				"related": [
					"172",
					"781"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"AuthLayout",
				"AuthCard",
				"Button",
				"SegmentedControl",
				"Stack"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"AuthLayout",
						"AuthCard",
						"Button",
						"SegmentedControl",
						"Stack"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/layout/auth-layout#flat-panel",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "841",
			"group": "inputs",
			"page": "password-strength",
			"variant": "Signup",
			"slug": "sign-up-field",
			"title": "Sign-up field",
			"description": "",
			"summary": "A password field with a 3-step strength meter and a polite text label under it.",
			"use": "Sign-up and reset-password forms that need strength feedback that does not rely on colour alone.",
			"spec": [
				"`let password = $state('')` bound with `<TextField label=\"Password\" type=\"password\" bind:value={password} />`",
				"`<PasswordStrength value={password} />` directly under the field",
				"Column is `max-width: 20rem` with `gap: var(--ca-space-2)`"
			],
			"tags": [
				"password-strength",
				"password",
				"meter",
				"sign-up",
				"text-field",
				"aria-live"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"PasswordStrength",
					"TextField"
				],
				"aliases": [
					"password meter",
					"signup",
					"strength indicator"
				],
				"related": [
					"842",
					"500",
					"843"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"PasswordStrength",
				"TextField"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"PasswordStrength",
						"TextField"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/password-strength#sign-up-field",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "842",
			"group": "inputs",
			"page": "password-strength",
			"variant": "Custom",
			"slug": "your-own-rule",
			"title": "Your own rule",
			"description": "`score` and `labels` replace the built-in estimate and the catalog text.",
			"summary": "A strength meter driven by your own length rule, with custom label text.",
			"use": "Apps whose password policy is length-based or comes from a server rule.",
			"spec": [
				"`const byLength = (v: string) => (v.length === 0 ? 0 : v.length >= 12 ? 3 : v.length >= 8 ? 2 : 1)`",
				"`value={password}` and `score={byLength}` on `<PasswordStrength`",
				"`labels={{ empty: 'Type a passphrase', weak: 'Too short', fair: 'Almost there', strong: 'Good length' }}`",
				"Field is `<TextField label=\"Passphrase\" type=\"password\" bind:value={password} />`"
			],
			"tags": [
				"password-strength",
				"score",
				"labels",
				"custom",
				"policy"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"PasswordStrength",
					"TextField"
				],
				"aliases": [
					"custom rule",
					"passphrase",
					"password meter"
				],
				"related": [
					"841",
					"500",
					"843"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"PasswordStrength",
				"TextField"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"PasswordStrength",
						"TextField"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/password-strength#your-own-rule",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "843",
			"group": "inputs",
			"page": "turnstile",
			"variant": "SignIn",
			"slug": "sign-in-form",
			"title": "Sign-in form",
			"description": "Cloudflare's always-pass test key.",
			"summary": "A sign-in form with a Turnstile captcha: no token without the check, reset() after a submit.",
			"use": "Public forms (sign-in, sign-up, waitlist, reset) that need a captcha token to verify on the server.",
			"spec": [
				"`import { Turnstile, type TurnstileHandle } from '@codeatlasdev/ui/forms'`",
				"`const SITE_KEY = '1x00000000000000000000AA'` (Cloudflare's always-pass test key)",
				"`<Turnstile siteKey={SITE_KEY} action=\"sign-in\" bind:handle />` between the Email field and the Sign in button",
				"Submit reads `handle?.getToken()`, blocks with a message when it is empty, and calls `handle?.reset()` after sending"
			],
			"tags": [
				"turnstile",
				"captcha",
				"forms",
				"sign-in",
				"token",
				"cloudflare"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"keyboard",
					"press"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Button",
					"Stack",
					"TextField",
					"Turnstile"
				],
				"aliases": [
					"captcha",
					"bot protection",
					"login"
				],
				"related": [
					"500",
					"841",
					"032"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Button",
				"Stack",
				"TextField",
				"Turnstile"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Button",
						"Stack",
						"TextField"
					]
				},
				{
					"from": "@codeatlasdev/ui/forms",
					"names": [
						"Turnstile",
						"TurnstileHandle"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/turnstile#sign-in-form",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "844",
			"group": "feedback",
			"page": "splash-screen",
			"variant": "Boot",
			"slug": "boot",
			"title": "Boot",
			"description": "At least 800 ms, then waits for the 1.2 s fake load.",
			"summary": "A button that boots a fake app: the splash shows at least 800ms, waits for ready, then leaves and reports ondone.",
			"use": "App shells that load a session or data before the first screen and must not flash the splash.",
			"spec": [
				"`<SplashScreen {ready} minDuration={800} ondone={() => seen++}>` with a `logo` snippet holding `<strong class=\"mark\">Acme</strong>`",
				"`start()` sets `ready = false`, bumps `boot` and sets `ready = true` after `1200` ms",
				"Wrapped in `{#key boot}` and rendered only once `boot > 0`",
				"A caption shows `Splash screens shown: {seen}`"
			],
			"tags": [
				"splash-screen",
				"boot",
				"loading",
				"min-duration",
				"reduced-motion",
				"status"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "feedback",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "expressive",
				"interaction": [
					"press"
				],
				"layout": "full-bleed",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Button",
					"SplashScreen"
				],
				"aliases": [
					"boot screen",
					"loading screen",
					"app launch"
				],
				"related": [
					"094",
					"101",
					"255"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Button",
				"SplashScreen"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Button",
						"SplashScreen"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/feedback/splash-screen#boot",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "845",
			"group": "display",
			"page": "avatar",
			"variant": "Decorative",
			"slug": "decorative",
			"title": "Decorative",
			"description": "",
			"summary": "Avatars next to a visible name, marked decorative so a screen reader says the name once.",
			"use": "Lists, headers and comment rows where the avatar repeats the name written beside it.",
			"spec": [
				"`<Avatar alt={name} size=\"sm\" decorative />` followed by `<span>{name}</span>` in each `<li>`",
				"People are `Ada Lovelace` and `Grace Hopper` in a `ul` with `list-style: none`"
			],
			"tags": [
				"avatar",
				"decorative",
				"aria-hidden",
				"name",
				"list",
				"a11y"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "compact",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Avatar"
				],
				"aliases": [
					"decorative image",
					"name beside avatar",
					"aria hidden avatar"
				],
				"related": [
					"108",
					"111",
					"107"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Avatar"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Avatar"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/display/avatar#decorative",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "860",
			"group": "layout",
			"page": "domain-tokens",
			"variant": "StatusTokens",
			"slug": "status-tokens",
			"title": "Status tokens",
			"description": "Pills colored by --ca-token-status-*, and a canvas colored with tokenRgba. Toggle the theme: both follow.",
			"summary": "Three lead-status pills colored by preset domain tokens, plus a canvas bar per status colored with tokenRgba.",
			"use": "Status, tier or channel colors that must follow the preset and the light or dark scheme: declare them once under tokens in the theme, read them as CSS vars or as [r, g, b, a].",
			"spec": [
				"`import { colorScheme, tokenRgba } from '@codeatlasdev/ui'`",
				"Three `<li class=\"st__pill st__pill--{s.name}\">` pills for `new`, `won` and `lost`, each with `background: var(--ca-token-status-new-subtle)` and `color: var(--ca-token-status-new)` (same pair for `won` and `lost`)",
				"A `<canvas` of `width=\"300\" height=\"80\"` whose `$effect` reads `colorScheme.resolved` and `colorScheme.preset`, then fills one bar per status with ``tokenRgba(`status.${s.name}`)``",
				"The pills sit in a wrapping flex row with `gap: var(--ca-space-2)` and `border-radius: var(--ca-radius-pill)`"
			],
			"tags": [
				"tokens",
				"preset",
				"domain",
				"status",
				"tokenrgba",
				"canvas",
				"theme"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "layout",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css",
					"canvas2d"
				],
				"cost": "js-light",
				"components": [],
				"aliases": [
					"custom tokens",
					"status colors",
					"canvas colors",
					"preset tokens"
				],
				"related": [
					"079",
					"985"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"colorScheme",
						"tokenRgba"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/layout/domain-tokens#status-tokens",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "861",
			"group": "foundation",
			"page": "typography",
			"variant": "Roles",
			"slug": "type-roles",
			"title": "Type roles",
			"description": "The six roles rendered with Text.",
			"summary": "The six type roles (title, heading, body, label, caption, num) rendered with Text, one row each.",
			"use": "Picking the text role of a line of UI: use the role instead of loose font-size, line-height and letter-spacing, so a theme `type` override restyles it.",
			"spec": [
				"`import { Text } from '@codeatlasdev/ui'`",
				"One `<Text role={r.role}>` per role: `title`, `heading`, `body`, `label`, `caption` and `num`",
				"The `num` sample is `1,284 leads, 18:42`, drawn with tabular digits",
				"Rows are a `grid-template-columns: var(--ca-space-20) 1fr` with `gap: var(--ca-space-3)`"
			],
			"tags": [
				"typography",
				"text",
				"type-scale",
				"role",
				"tabular-nums"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "foundation",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Text"
				],
				"aliases": [
					"text roles",
					"type roles",
					"semantic text"
				],
				"related": [
					"229",
					"230",
					"231"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Text"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Text"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/foundation/typography#type-roles",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "880",
			"group": "inputs",
			"page": "button",
			"variant": "ComponentTokens",
			"slug": "component-tokens",
			"title": "Component tokens",
			"description": "Weight, gap, padding, ghost border and icon size set on one wrapper.",
			"summary": "A dense focus-mode toolbar that restyles Button, IconButton and Kbd with component tokens on one wrapper: tighter gap and line-height, a regular-weight large button, wider small padding, a borderless ghost button, a 36px icon button and a square keycap.",
			"use": "A product whose design system fixes button weight, tracking, gap, padding and keycap size per context (public area, dashboard, focus mode), without writing selectors against ca-* classes.",
			"spec": [
				"Wrapper `.dense` declares only custom properties: `--ca-btn-gap`, `--ca-btn-line-height`, `--ca-btn-letter-spacing`, `--ca-btn-lg-font-weight`, `--ca-btn-lg-font-size`, `--ca-btn-sm-padding-x`, `--ca-btn-sm-font-size`, `--ca-btn-ghost-border-width`, `--ca-icon-btn-size-sm`, `--ca-kbd-size`, `--ca-kbd-font-size`, `--ca-kbd-line-height`",
				"`<Button variant=\"filled\" size=\"lg\">` labelled Call next lead",
				"`<Button variant=\"outlined\" tone=\"neutral\" size=\"sm\">` labelled Snooze, a ghost neutral sm Skip and a disabled outlined neutral sm Reassign",
				"`<IconButton variant=\"text\" size=\"sm\" aria-label=\"Close focus mode\">` with an X icon",
				"`<Kbd>N</Kbd>` after the text Next lead in a `.hint` span",
				"Flex `.dense` wrapper with `gap: var(--ca-space-3)`; the CSS has no selector against a component class"
			],
			"tags": [
				"button",
				"icon-button",
				"kbd",
				"tokens",
				"density",
				"typography",
				"theming",
				"focus-mode"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"hover",
					"press",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "compact",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Button",
					"IconButton",
					"Kbd"
				],
				"aliases": [
					"toolbar",
					"design tokens",
					"dense"
				],
				"related": [
					"901",
					"902",
					"640"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Button",
				"IconButton",
				"Kbd"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Button",
						"IconButton",
						"Kbd"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/button#component-tokens",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "881",
			"group": "layout",
			"page": "empty-state",
			"variant": "DenseCrm",
			"slug": "dense-crm-with-component-tokens",
			"title": "Dense CRM with component tokens",
			"description": "Six components restyled by tokens on one wrapper.",
			"summary": "A dense CRM activity card whose Avatar, TextField, TextArea, Card, SegmentedControl and EmptyState are restyled only through component tokens declared on one wrapper: neutral avatars, tighter field gap, a 64px note box, a hairline flat card, compact segments and a bare empty state.",
			"use": "Dense work screens (activity feed, notes composer, view switcher, empty and invite states) that need a different density than the defaults without selectors against internal parts.",
			"spec": [
				"Wrapper `.crm` declares only custom properties: `--ca-avatar-sm-fallback-size`, `--ca-avatar-fallback-weight`, `--ca-field-gap`, `--ca-field-label-leading`, `--ca-ta-min-height`, `--ca-card-bg`, `--ca-card-radius`, `--ca-card-border`, `--ca-card-shadow`, `--ca-seg-item-padding-x`, `--ca-seg-item-font-size`, `--ca-empty-title-size`, `--ca-empty-title-weight`",
				"`<Card title=\"Activity\" headingLevel={3}>` holds everything",
				"Two `<Avatar alt=\"Ana Lima\" tone=\"neutral\" size=\"sm\" />` style avatars (Ana Lima, Bruno Reis) beside a `<SegmentedControl` with `size=\"sm\"` and the items Day, Week and Month",
				"`<TextField label=\"Contact\" placeholder=\"Search contacts\" />` and `<TextArea label=\"Note\" rows={1}` with a note placeholder",
				"`<EmptyState bare icon={Inbox} title=\"No activity yet\"` with an Inbox icon, the title No activity yet and a neutral outlined small Button labelled Log a call",
				"No selector against a component class in the CSS"
			],
			"tags": [
				"avatar",
				"text-field",
				"text-area",
				"card",
				"segmented-control",
				"empty-state",
				"tokens",
				"density",
				"crm"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "layout",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"keyboard",
					"press"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "compact",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Avatar",
					"Button",
					"Card",
					"EmptyState",
					"SegmentedControl",
					"TextArea",
					"TextField"
				],
				"aliases": [
					"crm card",
					"component tokens",
					"tight form",
					"activity feed empty"
				],
				"related": [
					"167",
					"170",
					"169"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Avatar",
				"Button",
				"Card",
				"EmptyState",
				"SegmentedControl",
				"TextArea",
				"TextField"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Avatar",
						"Button",
						"Card",
						"EmptyState",
						"SegmentedControl",
						"TextArea",
						"TextField"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/layout/empty-state#dense-crm-with-component-tokens",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "900",
			"group": "display",
			"page": "badge",
			"variant": "InlinePill",
			"slug": "inline-pill",
			"title": "Inline pill",
			"description": "",
			"summary": "A follow-up list where each row has a title and an inline subtle Badge pill with a status dot: Overdue (danger), Due today (warning), Done (success) and a neutral Draft without a dot.",
			"use": "Status pills next to a title in lists and queues. The pill sits in text flow; it is not anchored to a corner like a count badge.",
			"spec": [
				"Unstyled list with a grid and `gap: var(--ca-space-2)`; each `li` is a wrapping flex row",
				"Title `span` in `--ca-text-primary`, followed by `<Badge tone=\"danger\" subtle dot size=\"md\">Overdue</Badge>`",
				"`tone=\"warning\"` Due today and `tone=\"success\"` Done, both `subtle dot size=\"md\"`",
				"`tone=\"neutral\" subtle size=\"md\"` Draft with no dot"
			],
			"tags": [
				"badge",
				"tone",
				"subtle",
				"dot",
				"pill",
				"status",
				"overdue",
				"inline",
				"list"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "compact",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Badge"
				],
				"aliases": [
					"status pill",
					"task status",
					"overdue label",
					"inline tag"
				],
				"related": [
					"119",
					"112",
					"120"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Badge"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Badge"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/display/badge#inline-pill",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "901",
			"group": "inputs",
			"page": "button",
			"variant": "TrailingHint",
			"slug": "responsive-keyboard-hint",
			"title": "Responsive keyboard hint",
			"description": "",
			"summary": "Two outlined neutral Buttons (Next lead, Snooze) with a Kbd keyboard hint in the trailing slot, marked trailingHint so the hint disappears below md and on touch screens without leaving a gap.",
			"use": "Queue and inbox actions that show a keyboard shortcut on desktop only.",
			"spec": [
				"`<Button variant=\"outlined\" tone=\"neutral\" trailingHint>` labelled Next lead with a `trailing` snippet holding `<Kbd>K</Kbd>`",
				"A second one labelled Snooze with `<Kbd>S</Kbd>`",
				"Wrapping flex `.row` with `gap: var(--ca-space-3)`"
			],
			"tags": [
				"button",
				"trailing",
				"kbd",
				"shortcut",
				"hint",
				"responsive",
				"touch"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"hover",
					"press",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Button",
					"Kbd"
				],
				"aliases": [
					"shortcut hint",
					"keycap"
				],
				"related": [
					"902",
					"880",
					"002"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Button",
				"Kbd"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Button",
						"Kbd"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/button#responsive-keyboard-hint",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "902",
			"group": "inputs",
			"page": "button",
			"variant": "AlignBetween",
			"slug": "align-between",
			"title": "Align between",
			"description": "",
			"summary": "A stack of three full-width outlined neutral Buttons with align=\"between\": label at the start, a Kbd hint at the end; the last one is loading and keeps its spinner at the start.",
			"use": "Action grids and menus of full-width buttons where the label is left-aligned and the shortcut sits on the right.",
			"spec": [
				"`.grid` with `gap: var(--ca-space-2)` and `max-width: 20rem`",
				"Each `<Button variant=\"outlined\" tone=\"neutral\" align=\"between\" fullWidth trailingHint>` with a `<Kbd>` in `trailing`: Open lead (O), Assign to me (A)",
				"Third button Syncing (R) also has `loading`, so the spinner replaces the leading slot while the label stays left"
			],
			"tags": [
				"button",
				"align",
				"between",
				"trailing",
				"kbd",
				"full-width",
				"loading"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"hover",
					"press",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Button",
					"Kbd"
				],
				"aliases": [
					"menu row",
					"space between"
				],
				"related": [
					"901",
					"001",
					"880"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Button",
				"Kbd"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Button",
						"Kbd"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/button#align-between",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "910",
			"group": "feedback",
			"page": "dialog",
			"variant": "SplitConfigured",
			"slug": "configured-split",
			"title": "Configured split",
			"description": "",
			"summary": "A split dialog sized 66vw by 88svh with a 2fr/3fr column ratio that goes full screen under 600px: a map column beside a details column with a Close button.",
			"use": "Wide detail dialogs (map + details, media + form) that need their own box and column ratio and must fill the screen on phones.",
			"spec": [
				"`<Dialog` with `size=\"split\"`, `chromeless` and `title=\"Lead details\"`",
				"`splitColumns=\"2fr 3fr\"` and `fullscreenBelow=\"sm\"`",
				"`splitSize={{ width: 'min(66vw, 80rem)', height: 'min(88svh, 56rem)' }}`",
				"Two direct children: `<div class=\"map\">` labelled Map and `<div class=\"details\">` with a name and a filled Close `<Button variant=\"filled\" onclick={() => (open = false)}>`"
			],
			"tags": [
				"dialog",
				"split",
				"size",
				"columns",
				"fullscreen",
				"mobile",
				"modal"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "feedback",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "overlay",
				"colorMode": "both",
				"density": "airy",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Dialog",
					"Button",
					"Stack"
				],
				"aliases": [
					"fullscreen mobile",
					"two pane modal"
				],
				"related": [
					"087",
					"083",
					"085"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Dialog",
				"Button",
				"Stack"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Dialog",
						"Button",
						"Stack"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/feedback/dialog#configured-split",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "940",
			"group": "navigation",
			"page": "hover-card",
			"variant": "Profile",
			"slug": "profile-mention",
			"title": "Profile mention",
			"description": "A link in a sentence with a profile card. Hover it for the delay, or Tab to it for an instant card; Tab again to reach View profile; Escape closes.",
			"summary": "A sentence with an @ada mention link that opens a profile card with a name, a line of detail and a View profile link on hover or keyboard focus.",
			"use": "Previewing a person, link target or record inline without leaving the page; the link itself stays the primary action.",
			"spec": [
				"`<HoverCard>` with `{#snippet triggerChild(props)}<a class=\"mention\" href=\"#ada\" {...props}>@ada</a>{/snippet}`",
				"Content is `<Stack gap=\"2\">` with a strong name, a secondary line and `<a class=\"more\" href=\"#ada-profile\">View profile</a>`",
				"Default delays: the pointer waits 700 ms to open, keyboard focus opens at once; Escape closes"
			],
			"tags": [
				"hover-card",
				"preview",
				"hover",
				"focus",
				"mention",
				"link"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "navigation",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"hover",
					"keyboard"
				],
				"layout": "overlay",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Avatar",
					"HoverCard",
					"Stack"
				],
				"aliases": [
					"profile preview",
					"mention card",
					"tooltip"
				],
				"related": [
					"941",
					"160"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Avatar",
				"HoverCard",
				"Stack"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Avatar",
						"HoverCard",
						"Stack"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/navigation/hover-card#profile-mention",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "941",
			"group": "navigation",
			"page": "hover-card",
			"variant": "Controlled",
			"slug": "delays-side-and-bind-open",
			"title": "Delays, side and bind:open",
			"description": "Short delays, placed above and aligned to the start. A second button shows the card from code, and onOpenChange reports only user-driven changes.",
			"summary": "An outlined Plan details button with a top-start hover card, plus a button that shows or hides the card from code and a line reporting the last user-driven change.",
			"use": "Short delays, a custom side and alignment, and driving the card with bind:open while onOpenChange reports only what the user did.",
			"spec": [
				"`let open = $state(false)` is bound with `<HoverCard bind:open openDelay={150} closeDelay={150} side=\"top\" align=\"start\" {onOpenChange}>`",
				"`{#snippet triggerChild(props)}<Button variant=\"outlined\" {...props}>Plan details</Button>{/snippet}`",
				"`function onOpenChange(o: boolean)` sets `log` to `opened by the user` or `closed by the user`; the code button toggles `open` and does not touch `log`",
				"A second button flips `open` with `onclick={() => (open = !open)}`"
			],
			"tags": [
				"hover-card",
				"bind-open",
				"delay",
				"side",
				"align",
				"on-open-change"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "navigation",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"hover",
					"press",
					"keyboard"
				],
				"layout": "overlay",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Button",
					"HoverCard"
				],
				"aliases": [
					"preview card",
					"controlled tooltip"
				],
				"related": [
					"940",
					"160"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Button",
				"HoverCard"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Button",
						"HoverCard"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/navigation/hover-card#delays-side-and-bind-open",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "942",
			"group": "navigation",
			"page": "context-menu",
			"variant": "Files",
			"slug": "file-menu",
			"title": "File menu",
			"description": "Right-click, long-press or Shift+F10. Checkbox items keep the menu open, Move to opens a submenu, and Delete is destructive.",
			"summary": "A dashed file area that opens a Rename, Pinned, Move to and Delete menu at the pointer on right-click, at the finger on a long touch press, or from the keyboard with Shift+F10.",
			"use": "Context menus on rows, files or canvases that reuse the DropdownMenu items, including checkbox items and submenus, without wiring any event handler.",
			"spec": [
				"`<ContextMenu class=\"cm-area\" role=\"group\" aria-label=\"Project file\">` wraps the region content and takes the items in a `{#snippet menu()}`",
				"The menu holds `DropdownMenuItem`, a `<DropdownMenuCheckboxItem bind:checked={pinned}>`, a `DropdownMenuSub` with `DropdownMenuSubTrigger`, a `DropdownMenuSeparator` and a destructive Delete",
				"Each action item calls `function pick(action: string)`, which sets `last` and calls `announce`",
				"Pinned (yes or no) and the last action are shown below the area"
			],
			"tags": [
				"context-menu",
				"right-click",
				"long-press",
				"keyboard",
				"dropdown-menu",
				"submenu"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "navigation",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"cursor",
					"keyboard",
					"press"
				],
				"layout": "overlay",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"ContextMenu",
					"DropdownMenuCheckboxItem",
					"DropdownMenuItem",
					"DropdownMenuSeparator",
					"DropdownMenuSub",
					"DropdownMenuSubTrigger"
				],
				"aliases": [
					"right click",
					"long press",
					"file menu"
				],
				"related": [
					"402",
					"943",
					"401"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"ContextMenu",
				"DropdownMenuCheckboxItem",
				"DropdownMenuItem",
				"DropdownMenuSeparator",
				"DropdownMenuSub",
				"DropdownMenuSubTrigger"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"announce",
						"ContextMenu",
						"DropdownMenuCheckboxItem",
						"DropdownMenuItem",
						"DropdownMenuSeparator",
						"DropdownMenuSub",
						"DropdownMenuSubTrigger"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/navigation/context-menu#file-menu",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "943",
			"group": "navigation",
			"page": "context-menu",
			"variant": "Rows",
			"slug": "one-menu-per-row",
			"title": "One menu per row",
			"description": "Each row is its own region. Tab to a row and press Shift+F10, or long-press on touch.",
			"summary": "Three invoice rows, each its own context menu with a label, Open and Send reminder, and a 400 ms long-press delay for touch.",
			"use": "A menu per list row: each row is a focusable region, so keyboard users reach the same actions with Shift+F10.",
			"spec": [
				"`{#each rows as row (row)}` renders `<ContextMenu class=\"cm-row\" role=\"group\" aria-label={row} longPressDelay={400}>` per row",
				"The `menu` snippet starts with `<DropdownMenuLabel>{row}</DropdownMenuLabel>` and has Open and Send reminder items",
				"Items set `last` to the action and the row name (Open or Send plus the invoice), shown under the list"
			],
			"tags": [
				"context-menu",
				"list",
				"row",
				"long-press",
				"keyboard",
				"label"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "navigation",
				"industry": [
					"fintech"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"cursor",
					"keyboard",
					"press"
				],
				"layout": "overlay",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"ContextMenu",
					"DropdownMenuItem",
					"DropdownMenuLabel"
				],
				"aliases": [
					"right click",
					"row actions",
					"long press"
				],
				"related": [
					"942",
					"402",
					"158"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"ContextMenu",
				"DropdownMenuItem",
				"DropdownMenuLabel"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"ContextMenu",
						"DropdownMenuItem",
						"DropdownMenuLabel"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/navigation/context-menu#one-menu-per-row",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "944",
			"group": "navigation",
			"page": "menubar",
			"variant": "Editor",
			"slug": "editor-menu-bar",
			"title": "Editor menu bar",
			"description": "File (with an Export submenu), Edit, View (a checkbox and a radio group) and a disabled Help. Try Tab, arrows, Down, then Left and Right.",
			"summary": "An application menu bar with File, Edit, View and a disabled Help menu; File has a submenu, View has a checkbox and a radio group, and a line below reports the last action.",
			"use": "A desktop-style application or editor menu bar: arrows move between menus, an open menu switches on hover or ArrowRight and ArrowLeft.",
			"spec": [
				"`<Menubar aria-label=\"Editor\">` holds four `MenubarMenu`s labelled File, Edit, View and a `disabled` Help",
				"File has `DropdownMenuItem`s, a `DropdownMenuSub` with `DropdownMenuSubTrigger` for Export, a separator and a destructive Close",
				"View has `<DropdownMenuCheckboxItem bind:checked={wrap}>` and a `<DropdownMenuRadioGroup bind:value={zoom} aria-label=\"Zoom\">` with 100% and 150%",
				"Action items call `function pick(action: string)`, which sets `last` and calls `announce`"
			],
			"tags": [
				"menubar",
				"menu",
				"application",
				"keyboard",
				"dropdown-menu",
				"submenu"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "navigation",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"keyboard",
					"press",
					"hover"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "compact",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"DropdownMenuCheckboxItem",
					"DropdownMenuItem",
					"DropdownMenuLabel",
					"DropdownMenuRadioGroup",
					"DropdownMenuRadioItem",
					"DropdownMenuSeparator",
					"DropdownMenuSub",
					"DropdownMenuSubTrigger",
					"Menubar",
					"MenubarMenu"
				],
				"aliases": [
					"menu bar",
					"application menu",
					"toolbar menu"
				],
				"related": [
					"945",
					"946",
					"401"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"DropdownMenuCheckboxItem",
				"DropdownMenuItem",
				"DropdownMenuLabel",
				"DropdownMenuRadioGroup",
				"DropdownMenuRadioItem",
				"DropdownMenuSeparator",
				"DropdownMenuSub",
				"DropdownMenuSubTrigger",
				"Menubar",
				"MenubarMenu"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"announce",
						"DropdownMenuCheckboxItem",
						"DropdownMenuItem",
						"DropdownMenuLabel",
						"DropdownMenuRadioGroup",
						"DropdownMenuRadioItem",
						"DropdownMenuSeparator",
						"DropdownMenuSub",
						"DropdownMenuSubTrigger",
						"Menubar",
						"MenubarMenu"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/navigation/menubar#editor-menu-bar",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "945",
			"group": "navigation",
			"page": "menubar",
			"variant": "Compact",
			"slug": "bar-open-state",
			"title": "Bar open state",
			"description": "onOpenChange fires when the bar goes from none open to one open and back, not for a switch between menus.",
			"summary": "A two-menu bar (Share, Insert) with a line reporting whether any menu is open through onOpenChange.",
			"use": "Reacting to the bar as a whole, for example dimming a canvas while a menu is open, without tracking each menu.",
			"spec": [
				"`<Menubar aria-label=\"Document\" onOpenChange={(o) => (open = o)}>` with two `MenubarMenu`s, Share and Insert",
				"`onOpenChange` fires when the bar goes from none open to one open and back, not when the pointer or arrows switch between menus",
				"A line reads \"A menu is\" followed by open or closed"
			],
			"tags": [
				"menubar",
				"on-open-change",
				"menu",
				"compact",
				"state",
				"hover"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "navigation",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"keyboard",
					"press",
					"hover"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "compact",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"DropdownMenuItem",
					"Menubar",
					"MenubarMenu"
				],
				"aliases": [
					"menu bar",
					"toolbar menu"
				],
				"related": [
					"944",
					"946"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"DropdownMenuItem",
				"Menubar",
				"MenubarMenu"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"DropdownMenuItem",
						"Menubar",
						"MenubarMenu"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/navigation/menubar#bar-open-state",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "946",
			"group": "navigation",
			"page": "navigation-menu",
			"variant": "Header",
			"slug": "marketing-header",
			"title": "Marketing header",
			"description": "Products and Resources open panels of links, Pricing is the current page. Try hover, click, Tab, Down and Escape.",
			"summary": "A marketing header nav with Products and Resources disclosure buttons that open panels of links (Products links carry a description), followed by Pricing (the current page) and Contact links.",
			"use": "The primary navigation of a marketing site: a few top-level links and a couple of grouped panels, reachable by hover, click and keyboard.",
			"spec": [
				"`<NavigationMenu aria-label=\"Main\">` renders a navigation landmark with a list",
				"`<NavigationMenuItem label=\"Products\">` and `<NavigationMenuItem label=\"Resources\">` are disclosure buttons whose children are `NavigationMenuLink`s",
				"Products links pass `description` for a second line that is part of the link name",
				"`<NavigationMenuLink href=\"#pricing\" current>` marks the current page; Contact is a plain link"
			],
			"tags": [
				"navigation-menu",
				"header",
				"disclosure",
				"marketing",
				"links",
				"keyboard"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "navigation",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"hover",
					"keyboard",
					"press"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"NavigationMenu",
					"NavigationMenuItem",
					"NavigationMenuLink"
				],
				"aliases": [
					"mega menu",
					"site header",
					"top nav"
				],
				"related": [
					"947",
					"944",
					"151"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"NavigationMenu",
				"NavigationMenuItem",
				"NavigationMenuLink"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"NavigationMenu",
						"NavigationMenuItem",
						"NavigationMenuLink"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/navigation/navigation-menu#marketing-header",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "947",
			"group": "navigation",
			"page": "navigation-menu",
			"variant": "Delays",
			"slug": "delays-and-alignment",
			"title": "Delays and alignment",
			"description": "Opens on hover at once, stays open 400 ms after leaving, and each panel aligns to the start or end of its button.",
			"summary": "A two-item docs nav (Guides, Reference) that opens on hover at once and stays open 400 ms after the pointer leaves.",
			"use": "Tuning how eager the hover behaviour is for dense navigation, and aligning each panel to its button's start or end.",
			"spec": [
				"`<NavigationMenu aria-label=\"Docs sections\" openDelay={0} closeDelay={400}>`",
				"`<NavigationMenuItem label=\"Guides\" align=\"start\">` and `<NavigationMenuItem label=\"Reference\" align=\"end\">` align their panels to the button",
				"Each panel holds two `NavigationMenuLink`s"
			],
			"tags": [
				"navigation-menu",
				"delay",
				"hover",
				"align",
				"docs",
				"disclosure"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "navigation",
				"industry": [
					"devtools"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"hover",
					"keyboard",
					"press"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"NavigationMenu",
					"NavigationMenuItem",
					"NavigationMenuLink"
				],
				"aliases": [
					"hover delay",
					"top nav",
					"site header"
				],
				"related": [
					"946",
					"944"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"NavigationMenu",
				"NavigationMenuItem",
				"NavigationMenuLink"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"NavigationMenu",
						"NavigationMenuItem",
						"NavigationMenuLink"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/navigation/navigation-menu#delays-and-alignment",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "960",
			"group": "display",
			"page": "image",
			"variant": "Ratio",
			"slug": "ratio-and-fit",
			"title": "ratio and fit",
			"description": "",
			"summary": "One 4:3 gradient file rendered in three boxes: ratio 16/9 (cropped), ratio 1 (cropped) and ratio 1 with fit contain (letterboxed).",
			"use": "Card covers, thumbnails and avatar grids where every picture must share one box whatever its own proportions.",
			"spec": [
				"`<Image {src} alt=\"Wide cover\" width={800} height={600} ratio={16 / 9} />`",
				"`<Image {src} alt=\"Square cover\" width={800} height={600} ratio={1} />`",
				"`<Image {src} alt=\"Contained\" width={800} height={600} ratio={1} fit=\"contain\" />`",
				"`src` is an inlined 4:3 `data:image/svg+xml;utf8,` gradient with a circle",
				"Each image sits in a `<figure>` with a `<figcaption>` naming its ratio"
			],
			"tags": [
				"image",
				"ratio",
				"aspect-ratio",
				"crop",
				"object-fit",
				"cover",
				"contain"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"media"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "grid",
				"colorMode": "both",
				"density": "compact",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Image"
				],
				"aliases": [
					"aspect ratio crop",
					"cover crop",
					"object fit",
					"thumbnail"
				],
				"related": [
					"127",
					"128",
					"961"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Image"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Image"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/display/image#ratio-and-fit",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "961",
			"group": "display",
			"page": "aspect-ratio",
			"variant": "Embed",
			"slug": "embed",
			"title": "Embed",
			"description": "The box holds 16:9 at any width.",
			"summary": "An AspectRatio of 16/9 inside a 28rem frame holding a centred caption, standing in for a video or iframe.",
			"use": "Embeds, maps and video players that have no intrinsic size but must hold a ratio while loading.",
			"spec": [
				"`<AspectRatio ratio={16 / 9}>` with one `<div class=\"slot\">16 / 9: any child, one box</div>` child",
				"Wrapper `.frame` is `max-width: 28rem` with `--ca-radius-md` and `overflow: hidden`",
				"`.slot` is `height: 100%` on `--ca-surface-sunken` and centres its text"
			],
			"tags": [
				"aspect-ratio",
				"embed",
				"video",
				"iframe",
				"ratio"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"media"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"AspectRatio"
				],
				"aliases": [
					"16 9 box",
					"video frame",
					"responsive embed",
					"ratio box"
				],
				"related": [
					"960",
					"127"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"AspectRatio"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"AspectRatio"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/display/aspect-ratio#embed",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "962",
			"group": "layout",
			"page": "resizable-panels",
			"variant": "Workspace",
			"slug": "two-panels",
			"title": "Two panels",
			"description": "Drag the line or focus it and press the arrow keys.",
			"summary": "A two-panel horizontal group (Files 25%, Editor 75%) in a bordered frame with a caption showing the live percentages.",
			"use": "Split views where the user sizes a side panel: file trees, inspectors, mail readers.",
			"spec": [
				"`<ResizablePanels label=\"Workspace\" onlayout={(s) => (sizes = s)}>`",
				"`<ResizablePanel id=\"files\" defaultSize={25} minSize={15} maxSize={50}>` and `<ResizablePanel id=\"editor\" defaultSize={75}>`",
				"`<ResizableHandle label=\"Resize files\" />` between them",
				"Caption `Files {Math.round(sizes[0])}% · Editor {Math.round(sizes[1])}%`"
			],
			"tags": [
				"resizable-panels",
				"splitter",
				"separator",
				"keyboard",
				"layout",
				"onlayout"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "layout",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"drag",
					"keyboard",
					"hover"
				],
				"layout": "split",
				"colorMode": "both",
				"density": "compact",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"ResizableHandle",
					"ResizablePanel",
					"ResizablePanels"
				],
				"aliases": [
					"split pane",
					"resizable split",
					"editor layout",
					"divider"
				],
				"related": [
					"963",
					"480",
					"610"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"ResizableHandle",
				"ResizablePanel",
				"ResizablePanels"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"ResizableHandle",
						"ResizablePanel",
						"ResizablePanels"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/layout/resizable-panels#two-panels",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "963",
			"group": "layout",
			"page": "resizable-panels",
			"variant": "Nested",
			"slug": "nested-and-saved",
			"title": "Nested and saved",
			"description": "A vertical group inside a horizontal one; the layout is kept in localStorage.",
			"summary": "A persisted horizontal group (Folders, Main) whose Main panel holds a vertical group (Messages over Reader).",
			"use": "Three-pane layouts (mail, issue trackers) where the layout survives a reload.",
			"spec": [
				"`<ResizablePanels label=\"Mail\" persist=\"ca-demo-mail-layout\">`",
				"`<ResizablePanel id=\"folders\" defaultSize={20} minSize={12}>` and `<ResizablePanel id=\"main\" defaultSize={80}>`",
				"`<ResizablePanels direction=\"vertical\" label=\"Message list and reader\">` inside `main` with `list` (40) and `reader` (60)",
				"`<ResizableHandle label=\"Resize folders\" />` and `<ResizableHandle label=\"Resize message list\" />`"
			],
			"tags": [
				"resizable-panels",
				"nested",
				"vertical",
				"persist",
				"three-pane"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "layout",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"drag",
					"keyboard",
					"hover"
				],
				"layout": "split",
				"colorMode": "both",
				"density": "compact",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"ResizableHandle",
					"ResizablePanel",
					"ResizablePanels"
				],
				"aliases": [
					"three pane",
					"mail layout",
					"vertical split",
					"persisted layout"
				],
				"related": [
					"962",
					"480",
					"610"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"ResizableHandle",
				"ResizablePanel",
				"ResizablePanels"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"ResizableHandle",
						"ResizablePanel",
						"ResizablePanels"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/layout/resizable-panels#nested-and-saved",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "964",
			"group": "display",
			"page": "carousel",
			"variant": "Highlights",
			"slug": "highlights",
			"title": "Highlights",
			"description": "Arrows, dots and a bound index.",
			"summary": "A four-slide carousel (Plan, Build, Ship, Learn) with arrows and dots, bound to an index shown in a caption.",
			"use": "Feature highlights, onboarding steps or testimonials where one item shows at a time.",
			"spec": [
				"`<Carousel label=\"Product highlights\" bind:index>` over `{#each slides as title (title)}`",
				"Each slide is `<CarouselItem><div class=\"slide\">{title}</div></CarouselItem>`",
				"`slides` is `['Plan', 'Build', 'Ship', 'Learn']`",
				"Caption `Slide {index + 1} of {slides.length}`"
			],
			"tags": [
				"carousel",
				"scroll-snap",
				"slides",
				"dots",
				"arrows",
				"bind-index"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"saas",
					"media"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"drag",
					"press",
					"keyboard"
				],
				"layout": "carousel",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Carousel",
					"CarouselItem"
				],
				"aliases": [
					"slider",
					"slideshow",
					"swipe",
					"product tour"
				],
				"related": [
					"965",
					"966"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Carousel",
				"CarouselItem"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Carousel",
						"CarouselItem"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/display/carousel#highlights",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "965",
			"group": "display",
			"page": "carousel",
			"variant": "Cards",
			"slug": "several-per-view",
			"title": "Several per view",
			"description": "`perView` shows three cards; `loop` wraps at the ends.",
			"summary": "Five plan cards shown three at a time in a looping carousel.",
			"use": "Card rows that overflow: pricing tiers, related products, team members.",
			"spec": [
				"`<Carousel label=\"Plans\" perView={3} loop>` over five names",
				"Each card is `<CarouselItem><div class=\"card\">{name}</div></CarouselItem>`",
				"`cards` is `['Starter', 'Team', 'Business', 'Enterprise', 'Partner']`"
			],
			"tags": [
				"carousel",
				"per-view",
				"loop",
				"cards",
				"scroll-snap"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"drag",
					"press",
					"keyboard"
				],
				"layout": "carousel",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Carousel",
					"CarouselItem"
				],
				"aliases": [
					"multi item slider",
					"plan cards",
					"card row",
					"pricing slider"
				],
				"related": [
					"964",
					"966"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Carousel",
				"CarouselItem"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Carousel",
						"CarouselItem"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/display/carousel#several-per-view",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "966",
			"group": "display",
			"page": "carousel",
			"variant": "Autoplay",
			"slug": "autoplay",
			"title": "Autoplay",
			"description": "Every 4 seconds, with Pause.",
			"summary": "A looping three-quote carousel that advances every 4 seconds, with a Pause button and no arrows.",
			"use": "Rotating testimonials or announcements; autoplay is opt-in and always stoppable.",
			"spec": [
				"`<Carousel label=\"Customer quotes\" autoplay={4000} loop arrows={false}>`",
				"Each slide is `<CarouselItem><blockquote class=\"quote\">{quote}</blockquote></CarouselItem>`",
				"`quotes` holds three short strings"
			],
			"tags": [
				"carousel",
				"autoplay",
				"pause",
				"testimonials",
				"reduced-motion"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "display",
				"industry": [
					"saas"
				],
				"style": [
					"default"
				],
				"motion": "expressive",
				"interaction": [
					"drag",
					"keyboard",
					"hover"
				],
				"layout": "carousel",
				"colorMode": "both",
				"density": "airy",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Carousel",
					"CarouselItem"
				],
				"aliases": [
					"auto rotate",
					"testimonial slider",
					"quote rotator",
					"auto advance"
				],
				"related": [
					"964",
					"965"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Carousel",
				"CarouselItem"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Carousel",
						"CarouselItem"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/display/carousel#autoplay",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "980",
			"group": "inputs",
			"page": "button-group",
			"variant": "Basic",
			"slug": "text-icon-and-filled-groups",
			"title": "Text, icon and filled groups",
			"description": "",
			"summary": "Three ButtonGroups: text buttons (Day, Week, Month), icon buttons (Bold, Italic, Underline) and a filled plus destructive pair.",
			"use": "Related actions that read as one control: a range switcher, a formatting toolbar, an approve and reject pair.",
			"spec": [
				"`<ButtonGroup aria-label=\"View range\">` with three `variant=\"outlined\" tone=\"neutral\"` Buttons",
				"`<ButtonGroup aria-label=\"Text style\">` with three outlined neutral `IconButton`s, each with an `aria-label`",
				"`<ButtonGroup aria-label=\"Review\">` with a `filled` Approve and a `destructive` Reject",
				"The groups are stacked in a column with `gap: var(--ca-space-3)`"
			],
			"tags": [
				"button-group",
				"attached",
				"toolbar",
				"icon-button",
				"segmented",
				"role-group"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"hover",
					"press",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Button",
					"ButtonGroup",
					"IconButton"
				],
				"aliases": [
					"segmented buttons",
					"toolbar group",
					"joined buttons"
				],
				"related": [
					"981",
					"038",
					"060"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Button",
				"ButtonGroup",
				"IconButton"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Button",
						"ButtonGroup",
						"IconButton"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/button-group#text-icon-and-filled-groups",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "981",
			"group": "inputs",
			"page": "button-group",
			"variant": "SplitMenu",
			"slug": "split-button-and-vertical",
			"title": "Split button and vertical",
			"description": "A DropdownMenu trigger as the last member, and `orientation='vertical'`.",
			"summary": "A split button (Publish plus a chevron DropdownMenu trigger) and a vertical ButtonGroup of two icon buttons.",
			"use": "A primary action with its alternatives behind a menu, or a stacked pair of icon controls.",
			"spec": [
				"`<ButtonGroup aria-label=\"Publish\">` with a `filled` Publish Button followed by a `DropdownMenu` whose `triggerChild` is a filled `IconButton` named \"More publish options\"",
				"The menu has Schedule and Save as draft, aligned to the end",
				"`<ButtonGroup aria-label=\"Pages\" orientation=\"vertical\">` with two outlined neutral IconButtons (Previous page, Next page)",
				"Both groups sit in a wrapping row with `gap: var(--ca-space-6)`"
			],
			"tags": [
				"button-group",
				"split-button",
				"dropdown-menu",
				"vertical",
				"orientation",
				"icon-button"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"hover",
					"press",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Button",
					"ButtonGroup",
					"DropdownMenu",
					"DropdownMenuItem",
					"IconButton"
				],
				"aliases": [
					"split button",
					"dropdown button"
				],
				"related": [
					"980",
					"019",
					"060"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Button",
				"ButtonGroup",
				"DropdownMenu",
				"DropdownMenuItem",
				"IconButton"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Button",
						"ButtonGroup",
						"DropdownMenu",
						"DropdownMenuItem",
						"IconButton"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/button-group#split-button-and-vertical",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "982",
			"group": "inputs",
			"page": "text-field",
			"variant": "Addons",
			"slug": "text-addons",
			"title": "Text addons",
			"description": "",
			"summary": "Five TextFields with text addons inside the border: a URL (https:// and .com), a price ($ and USD), a small @handle, an error with a .dev suffix and a disabled one.",
			"use": "Fields whose value needs fixed context: a URL scheme, a currency, a handle, a unit or a domain suffix.",
			"spec": [
				"`label=\"Website\" prefix=\"https://\" suffix=\".com\"` with a description",
				"`label=\"Price\" prefix=\"$\" suffix=\"USD\"` with `inputmode=\"decimal\"`",
				"`label=\"Handle\" prefix=\"@\" size=\"sm\"`",
				"`label=\"Domain\" suffix=\".dev\" error=\"Already taken\"`",
				"`label=\"Disabled\" prefix=\"https://\" disabled`",
				"The fields are stacked in a column, `max-width: 24rem`, `gap: var(--ca-space-4)`"
			],
			"tags": [
				"input-group",
				"text-field",
				"prefix",
				"suffix",
				"addon",
				"text",
				"currency",
				"url"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"TextField"
				],
				"aliases": [
					"prefix",
					"suffix",
					"affix",
					"input group"
				],
				"related": [
					"983",
					"056",
					"058"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"TextField"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"TextField"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/text-field#text-addons",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "983",
			"group": "inputs",
			"page": "text-field",
			"variant": "AddonButtons",
			"slug": "button-addons",
			"title": "Button addons",
			"description": "",
			"summary": "Two TextFields with a button inside the border: a read-only share link with a copy IconButton and a coupon code with an Apply button.",
			"use": "A field with its own action: copy a value, apply a code, submit a search, with the button keeping its own name and Tab stop.",
			"spec": [
				"`label=\"Share link\" readonly` with `suffix={copyBtn}`: a text-variant small IconButton named \"Copy link\" (\"Link copied\" after a click)",
				"`label=\"Coupon code\"` with `suffix={applyBtn}`: a ghost small Button \"Apply\", disabled while the field is empty",
				"The fields are stacked in a column, `max-width: 24rem`, `gap: var(--ca-space-4)`"
			],
			"tags": [
				"input-group",
				"text-field",
				"suffix",
				"addon",
				"button",
				"icon-button",
				"copy",
				"coupon"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"keyboard",
					"press"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Button",
					"IconButton",
					"TextField"
				],
				"aliases": [
					"input with button",
					"coupon",
					"copy link field"
				],
				"related": [
					"982",
					"012",
					"057"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Button",
				"IconButton",
				"TextField"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Button",
						"IconButton",
						"TextField"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/text-field#button-addons",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "984",
			"group": "layout",
			"page": "kpi-card",
			"variant": "TrendTone",
			"slug": "trend-tone",
			"title": "Trend tone",
			"description": "Down is good for churn and latency; a neutral tone shows the change without judging it.",
			"summary": "Three KPI cards where the trend colour follows what is good news: churn falling is green, response time rising is red, sessions are neutral.",
			"use": "Metrics where down is good (churn, cost, latency) or where a change is not a judgement, with an accurate better/worse screen reader label.",
			"spec": [
				"`<KpiGrid>` with 3 `KpiCard` items",
				"`<KpiCard title=\"Churn Rate\" value=\"5.2\" unit=\"%\" trend={-1.8} trendTone=\"positive-down\" icon={UserMinus} />`: a fall is green, announced \"better\"",
				"`<KpiCard title=\"Response Time\" value=\"1.4\" unit=\"s\" trend={12.3} trendTone=\"positive-down\" icon={Gauge} />`: a rise is red, announced \"worse\"",
				"`<KpiCard title=\"Sessions\" value=\"3,847\" trend={-2.1} trendTone=\"neutral\" icon={Activity} />`: arrow only, no colour judgement"
			],
			"tags": [
				"kpi-card",
				"kpi-grid",
				"trend-tone",
				"positive-down",
				"churn",
				"latency",
				"metrics"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "layout",
				"industry": [
					"saas",
					"fintech"
				],
				"style": [
					"default",
					"bento"
				],
				"motion": "none",
				"interaction": [
					"none"
				],
				"layout": "grid",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"KpiCard",
					"KpiGrid"
				],
				"aliases": [
					"good bad trend",
					"semantic delta",
					"neutral trend"
				],
				"related": [
					"176",
					"175",
					"985"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"KpiCard",
				"KpiGrid"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"KpiCard",
						"KpiGrid"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/layout/kpi-card#trend-tone",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "985",
			"group": "layout",
			"page": "kpi-card",
			"variant": "Sparkline",
			"slug": "sparkline",
			"title": "Sparkline",
			"description": "An icon and a recent-history chart in the same tile: the chart snippet takes a Sparkline.",
			"summary": "Two KPI cards with an icon and a sparkline under the number: a line for active users and bars for churn, with a hint line.",
			"use": "A metric tile that shows its recent history. The chart is a snippet, so the charts subpath stays out of the core entry.",
			"spec": [
				"`<KpiGrid>` with 2 `KpiCard` items",
				"`<KpiCard title=\"Active users\" value=\"24.8k\" trend={12.1} icon={Users}>` with `{#snippet chart()}<Sparkline data={[18, 19, 21, 20, 23, 25]} trend=\"up\" />{/snippet}`",
				"`hint=\"Down from 2.4% in January\"` on the churn card, whose chart is `<Sparkline data={[2.4, 2.3, 2.1, 2.2, 1.9, 1.7]} trend=\"up\" variant=\"bar\" />`: `trend=\"up\"` is green because a falling churn is good"
			],
			"tags": [
				"kpi-card",
				"sparkline",
				"chart",
				"snippet",
				"hint",
				"metrics",
				"dashboard"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "layout",
				"industry": [
					"saas",
					"fintech"
				],
				"style": [
					"default",
					"bento"
				],
				"motion": "subtle",
				"interaction": [
					"hover"
				],
				"layout": "grid",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"KpiCard",
					"KpiGrid",
					"Sparkline"
				],
				"aliases": [
					"mini chart",
					"trend line",
					"inline chart"
				],
				"related": [
					"984",
					"175",
					"178"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": false
				},
				"added": "2026-10-23",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"KpiCard",
				"KpiGrid",
				"Sparkline"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"KpiCard",
						"KpiGrid"
					]
				},
				{
					"from": "@codeatlasdev/ui/charts",
					"names": [
						"Sparkline"
					]
				}
			],
			"interactive": false,
			"demo": "https://ui.codeatlas.com.br/docs/layout/kpi-card#sparkline",
			"needs": "@codeatlasdev/ui@4.6.0 + echarts"
		},
		{
			"id": "986",
			"group": "layout",
			"page": "preview-stage",
			"variant": "Inline",
			"slug": "inline-content",
			"title": "Inline content",
			"description": "A component at phone width with a light and dark toggle in the toolbar.",
			"summary": "A button pair inside a PreviewStage at 390 px, with a toolbar button that flips the content between light and dark.",
			"use": "Showcasing a component at phone, tablet and desktop width inside a docs page or a design review.",
			"spec": [
				"`<PreviewStage label=\"Button pair\" bind:width {scheme} height={220}>`",
				"`{#snippet toolbar()}` adds a Dark / Light toggle next to the width control",
				"The content is themed in its own island: the page around the stage keeps its scheme"
			],
			"tags": [
				"preview-stage",
				"device-frame",
				"responsive",
				"width",
				"showcase"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "layout",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Button",
					"PreviewStage"
				],
				"aliases": [
					"device frame",
					"responsive preview",
					"theme toggle preview"
				],
				"related": [
					"987",
					"181"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-25",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Button",
				"PreviewStage"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Button",
						"PreviewStage"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/layout/preview-stage#inline-content",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "987",
			"group": "layout",
			"page": "preview-stage",
			"variant": "Page",
			"slug": "a-whole-page",
			"title": "A whole page",
			"description": "A template in an isolated iframe; switch the width to see its media queries.",
			"summary": "A whole page (the sign-in template) in a PreviewStage iframe, laid out at the chosen width with its own media queries.",
			"use": "Showing a full page or a template at real phone, tablet and desktop widths with isolated styles.",
			"spec": [
				"`<PreviewStage label=\"Sign in template\" src=\"/templates/auth/sign-in/\" height={420}`",
				"`widths={[390, 768, 1280]}` are the presets next to Fill",
				"The page renders in an isolated iframe: real viewport width, real media queries, no style leakage"
			],
			"tags": [
				"preview-stage",
				"iframe",
				"page",
				"template",
				"responsive"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "layout",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"PreviewStage"
				],
				"aliases": [
					"iframe preview",
					"template viewer",
					"viewport width switch"
				],
				"related": [
					"986",
					"840"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-25",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"PreviewStage"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"PreviewStage"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/layout/preview-stage#a-whole-page",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "988",
			"group": "feedback",
			"page": "sound",
			"variant": "HearIt",
			"slug": "hear-it",
			"title": "Hear it",
			"description": "Pick a profile and press the cues. Turn the toggle on first: sound is off by default.",
			"summary": "A sound toggle with volume, a profile picker (system, glass, brutalism, terminal) and a board of buttons that each play one cue.",
			"use": "Let people audition a sound profile before turning interface sound on in an app.",
			"spec": [
				"`<SoundToggle volume />` next to a `SegmentedControl` bound to the profile",
				"`$effect(() => sound.use(PROFILES[profile]))` pins the picked profile and `onDestroy` releases it",
				"A `role=\"group\"` board of outlined small `Button` items, each with `sound={cue}` for one cue name",
				"The cues are `press`, `toggle-on`, `toggle-off`, `success`, `error`, `warning`, `open`, `close` and `tab`"
			],
			"tags": [
				"sound",
				"audio",
				"feedback",
				"profile",
				"toggle"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "feedback",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Button",
					"SegmentedControl",
					"SoundToggle"
				],
				"aliases": [
					"sound profile",
					"audio feedback",
					"ui sounds",
					"cue board"
				],
				"related": [
					"989"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-25",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Button",
				"SegmentedControl",
				"SoundToggle"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Button",
						"SegmentedControl"
					]
				},
				{
					"from": "@codeatlasdev/ui/sound",
					"names": [
						"SoundToggle",
						"brutal",
						"glass",
						"sound",
						"system",
						"terminal"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/feedback/sound#hear-it",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "989",
			"group": "feedback",
			"page": "sound",
			"variant": "Components",
			"slug": "components",
			"title": "Components",
			"description": "Each control with its sound prop on, behind one toggle.",
			"summary": "Button, Switch, Tabs, Slider, Toast and Dialog with their sound prop on, behind one sound toggle.",
			"use": "Show which components speak when the sound prop is set, and that they stay silent until the toggle is on.",
			"spec": [
				"`<SoundToggle />` on top, off until the user presses it",
				"`<Button sound>`, `<Switch sound`, `<Tabs sound bind:value={tab}>`, `<Slider sound`",
				"`toast.success('Saved', { sound: true })` from a Toast button",
				"`<Dialog sound bind:open title=\"Sound on open and close\">`"
			],
			"tags": [
				"sound",
				"button",
				"switch",
				"tabs",
				"slider",
				"toast",
				"dialog"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "feedback",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"drag",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Button",
					"Dialog",
					"Slider",
					"Switch",
					"Tabs",
					"TabsList",
					"TabsTrigger",
					"SoundToggle"
				],
				"aliases": [
					"sound prop",
					"audible feedback",
					"interface sound",
					"sound on components"
				],
				"related": [
					"988"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-25",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Button",
				"Dialog",
				"Slider",
				"Switch",
				"Tabs",
				"TabsList",
				"TabsTrigger",
				"SoundToggle"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Button",
						"Dialog",
						"Slider",
						"Switch",
						"Tabs",
						"TabsList",
						"TabsTrigger",
						"toast"
					]
				},
				{
					"from": "@codeatlasdev/ui/sound",
					"names": [
						"SoundToggle"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/feedback/sound#components",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "990",
			"group": "inputs",
			"page": "color-field",
			"variant": "Brand",
			"slug": "brand-color",
			"title": "Brand color",
			"description": "Contrast of white on the color, as a UI part (3:1).",
			"summary": "Color field with a swatch, a native picker, a text input and a live WCAG contrast readout against white.",
			"use": "Picking a brand or accent color where contrast matters.",
			"spec": [
				"`<ColorField` with `label=\"Brand color\"` and `bind:value={brand}`",
				"`against=\"#ffffff\"`, `role=\"fill\"` and `minRatio={3}` so the readout measures white on the color as a UI part",
				"Has a `description`: Type #hex, rgb() or oklch(), or pick.",
				"Initial value is `$state('#2b5fd9')`",
				"Current value is shown as `value: {brand}`"
			],
			"tags": [
				"color-field",
				"color-picker",
				"oklch",
				"contrast",
				"brand"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"ColorField"
				],
				"aliases": [
					"brand color",
					"color picker",
					"contrast checker",
					"accent color"
				],
				"related": [
					"991"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-25",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"ColorField"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"ColorField"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/color-field#brand-color",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "991",
			"group": "inputs",
			"page": "color-field",
			"variant": "TextContrast",
			"slug": "text-color",
			"title": "Text color",
			"description": "Text on a white page, oklch output from the picker, 4.5:1.",
			"summary": "Color field for a text color measured against a white page, with a sample line in that color.",
			"use": "Choosing text colors that must reach WCAG AA.",
			"spec": [
				"`<ColorField` with `label=\"Body text\"`, `bind:value={text}`, `against={page}`, `minRatio={4.5}` and `format=\"oklch\"`",
				"`page` is the constant `'#ffffff'`",
				"Initial value is `$state('#6b7280')`",
				"Below the field, a white box shows a sample sentence painted in the current color"
			],
			"tags": [
				"color-field",
				"contrast",
				"wcag",
				"text",
				"oklch"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"press",
					"keyboard"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"ColorField"
				],
				"aliases": [
					"text color",
					"wcag contrast",
					"readable text",
					"ink color"
				],
				"related": [
					"990"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-25",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"ColorField"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"ColorField"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/color-field#text-color",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "992",
			"group": "inputs",
			"page": "slider",
			"variant": "Field",
			"slug": "label-and-number",
			"title": "Label and number",
			"description": "Label, slider and an editable number with a unit.",
			"summary": "Two labelled sliders with an editable number and a unit: radius and type scale.",
			"use": "Tuning a numeric setting where both scrubbing and typing an exact value matter.",
			"spec": [
				"Two `<SliderField` stacked in a column",
				"First: `label=\"Radius\"`, `bind:value={radius}`, `min={0}`, `max={2}`, `step={0.05}`, `unit=\"x\"`, initial `0.8`",
				"Second: `label=\"Type scale\"`, `bind:value={scale}`, `min={0.8}`, `max={1.3}`, `step={0.01}`, `unit=\"x\"`, initial `1`, with a `description` Multiplies every font size."
			],
			"tags": [
				"slider-field",
				"slider",
				"number",
				"settings",
				"unit"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "input",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"drag",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"SliderField"
				],
				"aliases": [
					"labelled slider",
					"slider with number",
					"settings slider",
					"editable value"
				],
				"related": [
					"046",
					"047"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-25",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"SliderField"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"SliderField"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/inputs/slider#label-and-number",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "993",
			"group": "concepts",
			"page": "viewport",
			"variant": "Simulator",
			"slug": "viewport-simulator",
			"title": "Viewport simulator",
			"description": "Change the device shape, collapse the browser bars, draw edge to edge and raise a keyboard: see what each unit resolves to and what is hidden.",
			"summary": "An interactive phone drawing with a device-shape selector, switches for collapsed browser bars and edge-to-edge drawing, a keyboard height slider and a keyboard resize mode, plus a table of what 100lvh, 100svh and 100dvh resolve to and how much of each is hidden.",
			"use": "Teaching why a full-height block must be a floor (min-height) and not a fixed height, and how safe areas and the virtual keyboard change the usable height.",
			"spec": [
				"`import { DEVICE_PRESETS, hiddenBy, type PresetName, viewportHeights } from './model';` computes the numbers; the model is pure and unit-tested",
				"`<SegmentedControl` with `aria-label=\"Device shape\"` and `bind:value={preset}` offers four presets: narrow phone, typical phone, short phone, phone in landscape",
				"`<Switch bind:checked={collapsed} label=\"Browser bars collapsed (after scrolling)\" />` and `<Switch bind:checked={edgeToEdge} label=\"Page draws edge to edge (viewport-fit=cover)\" />`",
				"`<Slider bind:value={keyboard}` for the keyboard height (`step={10}`), plus a second `SegmentedControl` with `aria-label=\"Keyboard resize mode\"` for `resizes-content` or `resizes-visual`",
				"A to-scale phone `div` with `role=\"img\"` and an `aria-label`, drawn with CSS custom properties (`--w`, `--h`, `--bar`, `--vis`, `--kb`), and a `<table class=\"sim__table\">` with a screen-reader caption listing 100lvh, 100svh, 100dvh and the usable height"
			],
			"tags": [
				"viewport",
				"svh",
				"dvh",
				"lvh",
				"safe-area",
				"keyboard",
				"mobile",
				"simulator",
				"concept"
			],
			"shape": "wide",
			"index": {
				"kind": "component",
				"subtype": "foundation",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"drag",
					"keyboard"
				],
				"layout": "split",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"SegmentedControl",
					"Switch",
					"Slider"
				],
				"aliases": [
					"viewport units",
					"svh dvh lvh",
					"safe area",
					"virtual keyboard",
					"phone simulator"
				],
				"related": [
					"994",
					"995"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-25",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"SegmentedControl",
				"Switch",
				"Slider"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"SegmentedControl",
						"Switch",
						"Slider"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/concepts/viewport#viewport-simulator",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "994",
			"group": "concepts",
			"page": "viewport",
			"variant": "Hero",
			"slug": "a-hero-that-is-a-floor",
			"title": "A hero that is a floor",
			"description": "Turn on 200% text and a longer translation: the hero grows and the page scrolls. Turn off the cue and the next section disappears from view.",
			"summary": "A phone-sized scrollable frame holding a hero (eyebrow, heading, lead, filled Button) and a second section, with a switch for 200% text and a long translation and a switch for a continuation cue.",
			"use": "Showing that a hero is a floor (min-height) so larger text grows it instead of clipping, and that without a visible cue the next section can read as the end of the page.",
			"spec": [
				"`<Switch bind:checked={large} label=\"Text at 200% and a long translation\" />` swaps the title to the h2 token and the lead to a longer string",
				"`<Switch bind:checked={cue} label=\"Continuation cue (peek at the next section)\" />` toggles a `.is-peek` class on the second section",
				"The frame is `inline-size: min(100%, 22rem)`, `block-size: 26rem`, `overflow-y: auto`, `tabindex=\"0\"`, `role=\"region\"` with an `aria-label`",
				"`.hero` uses `min-block-size`, never `height`; `<Button variant=\"filled\">See how it works</Button>` is the primary action",
				"The second section is `<h4>How it works</h4>` with one paragraph, separated by a `border-block-start`"
			],
			"tags": [
				"viewport",
				"hero",
				"min-height",
				"false-floor",
				"scroll-cue",
				"reflow",
				"concept"
			],
			"shape": "tall",
			"index": {
				"kind": "component",
				"subtype": "foundation",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "subtle",
				"interaction": [
					"press",
					"scroll",
					"keyboard"
				],
				"layout": "stack",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Button",
					"Switch"
				],
				"aliases": [
					"full height hero",
					"min-height floor",
					"first screen",
					"text scaling",
					"continuation cue"
				],
				"related": [
					"993",
					"995"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-25",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Button",
				"Switch"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Button",
						"Switch"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/concepts/viewport#a-hero-that-is-a-floor",
			"needs": "@codeatlasdev/ui@4.6.0"
		},
		{
			"id": "995",
			"group": "concepts",
			"page": "viewport",
			"variant": "Keyboard",
			"slug": "a-form-with-the-keyboard-open",
			"title": "A form with the keyboard open",
			"description": "On a phone, focus a field. The page scrolls and the action bar stays above the keyboard.",
			"summary": "A scrollable account form with three TextFields (work email, company, role) and a StickyActions bar with a stretched Continue button, wrapped in the keyboardAware action.",
			"use": "A form that stays operable with the on-screen keyboard open: the page scrolls, the focused field comes into view and the action bar rides above the keyboard and the safe area.",
			"spec": [
				"`<form` with `use:keyboardAware` (from `@codeatlasdev/ui/actions`), `max-height: 24rem` and `overflow-y: auto`",
				"`<TextField label=\"Work email\" type=\"email\" bind:value={email} autocomplete=\"email\" />`, then `Company` and `Role` fields with matching `autocomplete`",
				"A filler `div` of at least `8rem` so the form scrolls",
				"`<StickyActions align=\"stretch\">` holds `<Button variant=\"filled\" type=\"submit\">` whose label becomes `Sent` after submit"
			],
			"tags": [
				"viewport",
				"keyboard",
				"keyboard-aware",
				"sticky-actions",
				"form",
				"mobile",
				"safe-area",
				"concept"
			],
			"shape": "tall",
			"index": {
				"kind": "component",
				"subtype": "foundation",
				"industry": [
					"general"
				],
				"style": [
					"default"
				],
				"motion": "none",
				"interaction": [
					"scroll",
					"keyboard",
					"press"
				],
				"layout": "single-column",
				"colorMode": "both",
				"density": "regular",
				"tech": [
					"css"
				],
				"cost": "css",
				"components": [
					"Button",
					"StickyActions",
					"TextField"
				],
				"aliases": [
					"on-screen keyboard",
					"sticky action bar",
					"keyboard aware form",
					"mobile form"
				],
				"related": [
					"993",
					"994"
				],
				"a11y": {
					"reducedMotion": true,
					"keyboard": true
				},
				"added": "2026-10-25",
				"review": {
					"industry": "pending"
				}
			},
			"components": [
				"Button",
				"StickyActions",
				"TextField"
			],
			"imports": [
				{
					"from": "@codeatlasdev/ui",
					"names": [
						"Button",
						"StickyActions",
						"TextField"
					]
				},
				{
					"from": "@codeatlasdev/ui/actions",
					"names": [
						"keyboardAware"
					]
				}
			],
			"interactive": true,
			"demo": "https://ui.codeatlas.com.br/docs/concepts/viewport#a-form-with-the-keyboard-open",
			"needs": "@codeatlasdev/ui@4.6.0"
		}
	]
}
