@dowel-ui/registry 0.5.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/build.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"build.js","names":["meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta$1","meta$2","meta$3","meta$4","meta$5","meta$6","meta$7","meta","meta$1","meta$2","meta$3","meta$4","meta$5","meta$6","meta$7","meta$8","meta$9","meta$10","meta$11","meta$12","meta$13","meta$14","meta$15","meta$16","meta$17","meta$18","meta$19","meta$20","meta$21","meta$22","meta$23","meta$24","meta$25","meta$26","meta$27","meta$28","meta$29","meta$30","meta$31","meta$32","meta$33","meta$34","meta$35","meta$36","meta$37","meta$38","meta$39","meta$40","meta$41","meta$42","meta$43","meta$44","meta$45","meta$46","meta$47","meta$48","meta$49","meta$50","meta$51","meta$52","meta$53","meta$54","meta$55","meta$56","meta$57","meta$58","meta$59","meta$60","meta$61","meta$62","meta$63","meta$64","meta$65","meta$66","meta$67","meta$68","meta$69"],"sources":["../../ui/dist/registry/schema.js","../../ui/dist/components/accordion/meta.js","../../ui/dist/components/activity-feed/meta.js","../../ui/dist/components/ai-action-ledger/meta.js","../../ui/dist/components/ai-agent-plan/meta.js","../../ui/dist/components/ai-agent-status/meta.js","../../ui/dist/components/ai-approval-request/meta.js","../../ui/dist/components/ai-conversation/meta.js","../../ui/dist/components/ai-disclosure/meta.js","../../ui/dist/components/ai-extraction-review/meta.js","../../ui/dist/components/ai-inline-completion/meta.js","../../ui/dist/components/ai-message/meta.js","../../ui/dist/components/ai-model-selector/meta.js","../../ui/dist/components/ai-prompt-input/meta.js","../../ui/dist/components/ai-reasoning/meta.js","../../ui/dist/components/ai-response/meta.js","../../ui/dist/components/ai-sources/meta.js","../../ui/dist/components/ai-structured-output/meta.js","../../ui/dist/components/ai-suggested-value/meta.js","../../ui/dist/components/ai-token-usage/meta.js","../../ui/dist/components/ai-tool/meta.js","../../ui/dist/components/alert/meta.js","../../ui/dist/components/avatar/meta.js","../../ui/dist/components/badge/meta.js","../../ui/dist/components/button/meta.js","../../ui/dist/components/calendar/meta.js","../../ui/dist/components/card/meta.js","../../ui/dist/components/checkbox/meta.js","../../ui/dist/components/code-block/meta.js","../../ui/dist/components/combobox/meta.js","../../ui/dist/components/command/meta.js","../../ui/dist/components/confirm-typed/meta.js","../../ui/dist/components/cron-editor/meta.js","../../ui/dist/components/data-table/meta.js","../../ui/dist/components/date-picker/meta.js","../../ui/dist/components/dialog/meta.js","../../ui/dist/components/diff-viewer/meta.js","../../ui/dist/components/dns-record/meta.js","../../ui/dist/components/drawer/meta.js","../../ui/dist/components/dropdown-menu/meta.js","../../ui/dist/components/empty-state/meta.js","../../ui/dist/components/file-upload/meta.js","../../ui/dist/components/form/meta.js","../../ui/dist/components/input/meta.js","../../ui/dist/components/label/meta.js","../../ui/dist/components/log-viewer/meta.js","../../ui/dist/components/meter/meta.js","../../ui/dist/components/metric-delta/meta.js","../../ui/dist/components/pagination/meta.js","../../ui/dist/components/permission-matrix/meta.js","../../ui/dist/components/popover/meta.js","../../ui/dist/components/progress/meta.js","../../ui/dist/components/radio-group/meta.js","../../ui/dist/components/record-diff/meta.js","../../ui/dist/components/secret-field/meta.js","../../ui/dist/components/select/meta.js","../../ui/dist/components/separator/meta.js","../../ui/dist/components/session-expiry/meta.js","../../ui/dist/components/sheet/meta.js","../../ui/dist/components/shortcut-recorder/meta.js","../../ui/dist/components/skeleton/meta.js","../../ui/dist/components/slider/meta.js","../../ui/dist/components/spinner/meta.js","../../ui/dist/components/switch/meta.js","../../ui/dist/components/sync-status/meta.js","../../ui/dist/components/table/meta.js","../../ui/dist/components/tabs/meta.js","../../ui/dist/components/tags-input/meta.js","../../ui/dist/components/time-range-picker/meta.js","../../ui/dist/components/toast/meta.js","../../ui/dist/components/tooltip/meta.js","../../ui/dist/blocks/admin-users/meta.js","../../ui/dist/blocks/ai-chat/meta.js","../../ui/dist/blocks/dashboard/meta.js","../../ui/dist/blocks/forgot-password/meta.js","../../ui/dist/blocks/login/meta.js","../../ui/dist/blocks/pricing/meta.js","../../ui/dist/blocks/settings/meta.js","../../ui/dist/blocks/signup/meta.js","../../ui/dist/registry/blocks.js","../../ui/dist/registry/components.js","../src/build.ts"],"sourcesContent":["//#region src/registry/schema.ts\n/**\n* Registry metadata contract.\n*\n* Every component ships a `meta.ts` describing what the CLI must install\n* alongside it. This file defines the *type* only; `meta.test.ts` validates\n* every declaration against the source's real imports, so metadata cannot drift\n* from the code it describes. See docs/architecture/0003-registry-metadata.md.\n*/\nconst COMPONENT_CATEGORIES = [\n\t\"foundation\",\n\t\"display\",\n\t\"navigation\",\n\t\"overlay\",\n\t\"layout\",\n\t\"form\",\n\t\"feedback\",\n\t\"data\",\n\t\"ai\"\n];\nconst COMPONENT_STATUSES = [\n\t\"stable\",\n\t\"beta\",\n\t\"experimental\"\n];\n/** Identity helper that gives editors autocomplete inside `meta.ts`. */\nfunction defineMeta(meta) {\n\treturn meta;\n}\n//#endregion\nexport { COMPONENT_CATEGORIES, COMPONENT_STATUSES, defineMeta };\n\n//# sourceMappingURL=schema.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/accordion/meta.ts\nconst meta = defineMeta({\n\tname: \"accordion\",\n\ttitle: \"Accordion\",\n\tdescription: \"Vertically stacked sections that expand to reveal their content.\",\n\tcategory: \"data\",\n\tstatus: \"stable\",\n\tdependencies: [\"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"accordion.tsx\"],\n\ta11y: \"Each trigger is a button inside a heading, so screen reader users can navigate the sections by heading. aria-expanded and aria-controls tie the trigger to its panel, and arrow keys move between triggers.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/activity-feed/meta.ts\nconst meta = defineMeta({\n\tname: \"activity-feed\",\n\ttitle: \"Activity Feed\",\n\tdescription: \"A chronological list of events, with a connecting timeline rail.\",\n\tcategory: \"data\",\n\tstatus: \"stable\",\n\tdependencies: [\"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"activity-feed.tsx\"],\n\ta11y: \"An ordered list, so position and count are announced — the order is the meaning here. The rail and the indicators are decorative; the item text has to say what happened. ActivityTime requires a machine-readable dateTime, because a relative label like \\\"2 hours ago\\\" is ambiguous outside the moment it was rendered.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/ai-action-ledger/meta.ts\nconst meta = defineMeta({\n\tname: \"ai-action-ledger\",\n\ttitle: \"AI Action Ledger\",\n\tdescription: \"What an agent actually did, classified by what can be undone.\",\n\tcategory: \"ai\",\n\tstatus: \"stable\",\n\tdependencies: [\"class-variance-authority\", \"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"ai-action-ledger.tsx\"],\n\ta11y: \"Reversibility is stated in words on every entry, never by colour or icon alone — it decides whether the undo control means anything, so it cannot be decoration. Selection uses native checkboxes with real labels, and the revert button carries the count in its accessible name so it says what pressing it will do. The selection summary is an aria-live region because the wording changes as the choice changes, and warns before the click when something can only be offset rather than undone.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/ai-agent-plan/meta.ts\nconst meta = defineMeta({\n\tname: \"ai-agent-plan\",\n\ttitle: \"AI Agent Plan\",\n\tdescription: \"What an agent intends to do — including when it changes its mind mid-run.\",\n\tcategory: \"ai\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [],\n\tfiles: [\"ai-agent-plan.tsx\"],\n\ta11y: \"An ordered list, because a plan is a sequence and the order carries meaning an unordered list would discard. The running step carries aria-current=\\\"step\\\", which marks the reader's place without moving focus and fighting anyone reading ahead. Every status is stated in text as well as drawn, and the markers are aria-hidden so the status is not heard twice per step. The live region reports structural revisions only — announcing every status transition would talk over the reader continuously on a plan of any length.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/ai-agent-status/meta.ts\nconst meta = defineMeta({\n\tname: \"ai-agent-status\",\n\ttitle: \"AI Agent Status\",\n\tdescription: \"A pill showing what an agent is doing, in words as well as colour.\",\n\tcategory: \"ai\",\n\tstatus: \"stable\",\n\tdependencies: [\"class-variance-authority\"],\n\tregistryDependencies: [],\n\tfiles: [\"ai-agent-status.tsx\"],\n\ta11y: \"The state is always text. Agent states matter most when something has failed, which is exactly when a colour-only signal fails the people who most need to see it. Live announcements are off by default — several agents each announcing their transitions turns a dashboard into noise; enable it for the one agent being watched.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/ai-approval-request/meta.ts\nconst meta = defineMeta({\n\tname: \"ai-approval-request\",\n\ttitle: \"AI Approval Request\",\n\tdescription: \"Approve a tool call — after correcting the arguments the model got wrong.\",\n\tcategory: \"ai\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [],\n\tfiles: [\"ai-approval-request.tsx\"],\n\ta11y: \"The proposed arguments are a description list of real labelled form controls, so each value is associated with its name and editable ones are reachable by keyboard. A corrected argument is marked in text rather than by border colour alone, because an audit trail has to distinguish the model's proposal from the human's edit. The request is aria-busy while arguments are still arriving and the decision controls stay disabled until it is whole — rendering nothing until then, as the common implementation does, means nothing is on screen at the moment approval becomes relevant. Irreversibility is stated as a sentence, never as a severity colour.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/ai-conversation/meta.ts\nconst meta = defineMeta({\n\tname: \"ai-conversation\",\n\ttitle: \"AI Conversation\",\n\tdescription: \"The scrolling transcript container, with follow-on-new-content and a status region.\",\n\tcategory: \"ai\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [],\n\tfiles: [\"ai-conversation.tsx\"],\n\ta11y: \"The transcript is an ordered list, NOT a live region. A live region that updates on every streamed token is unusable with a screen reader, and is the most common accessibility failure in chat interfaces. Announce state — \\\"generating\\\", \\\"response complete\\\" — through ConversationStatus instead, and let the reader navigate the transcript at their own pace. Auto-scroll stops the moment the reader scrolls up, and ConversationScrollButton is the explicit way back.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/ai-disclosure/meta.ts\nconst meta = defineMeta({\n\tname: \"ai-disclosure\",\n\ttitle: \"AI Disclosure\",\n\tdescription: \"Tells a reader they are looking at AI, and what is actually known about it.\",\n\tcategory: \"ai\",\n\tstatus: \"stable\",\n\tdependencies: [\"class-variance-authority\"],\n\tregistryDependencies: [\"popover\"],\n\tfiles: [\"ai-disclosure.tsx\"],\n\ta11y: \"The text is the disclosure and the icon is decoration, marked aria-hidden — a sparkle alone is a mark a sighted reader may not decode and a screen reader passes over in silence, which is the exact failure this component exists to prevent. Each of the four kinds carries wording of its own, so the distinction between generated, manipulated and human-reviewed survives for anyone who cannot see the styling. The provenance panel states in words whether anyone checked the claims and who, rather than implying it with a tick, and its three states are told apart by their sentences rather than by colour. Scope: this renders the human-visible disclosures of EU AI Act Article 50(1) and 50(4). It cannot satisfy 50(2), which requires machine-readable marking inside the artifact by whoever generated it, and no React component can. Not legal advice.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/ai-extraction-review/meta.ts\nconst meta = defineMeta({\n\tname: \"ai-extraction-review\",\n\ttitle: \"AI Extraction Review\",\n\tdescription: \"Check extracted fields against the document they came from, and decide each one.\",\n\tcategory: \"ai\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [],\n\tfiles: [\"extraction-model.ts\", \"ai-extraction-review.tsx\"],\n\ta11y: \"Every field quotes its evidence in text under the value, so a reviewer who cannot see the highlight in the source still has what the model read. A value with no evidence is said in words — never left to look like a good one. The source is a focusable named region because it scrolls, and its highlights are mark elements with nothing spliced into the text, since a document read aloud with field names inserted is no longer the document. Focus anywhere in a field brings its evidence into view without moving focus, so a keyboard user is shown the source rather than sent into it. Each control's name carries the field it belongs to, so ten Accept buttons are ten different buttons. Status is a word, outside the label so editing never renames the control, and the running count is a polite live region present from the start. Enter accepts, except while an IME is composing.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/ai-inline-completion/meta.ts\nconst meta = defineMeta({\n\tname: \"ai-inline-completion\",\n\ttitle: \"AI Inline Completion\",\n\tdescription: \"Ghost-text suggestion inside a real textarea, accepted with Tab.\",\n\tcategory: \"ai\",\n\tstatus: \"beta\",\n\tdependencies: [],\n\tregistryDependencies: [],\n\tfiles: [\"ai-inline-completion.tsx\"],\n\ta11y: \"No WAI-ARIA pattern covers generative ghost text — combobox is the nearest and does not fit, because the suggestion is not one of a known set of options and a listbox would misdescribe it. So the suggestion is announced through a polite live description that names the keys, since a gesture nobody knows about is not an affordance, and the grey text itself is aria-hidden. Escape always dismisses and restores plain Tab, so the keyboard is never trapped in the field. The ghost hides during IME composition and whenever the caret is not at the end, rather than rendering somewhere it does not belong.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/ai-message/meta.ts\nconst meta = defineMeta({\n\tname: \"ai-message\",\n\ttitle: \"AI Message\",\n\tdescription: \"One turn in a conversation, with role, avatar, actions and footer slots.\",\n\tcategory: \"ai\",\n\tstatus: \"stable\",\n\tdependencies: [\"class-variance-authority\", \"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"ai-message.tsx\"],\n\ta11y: \"Every message carries a visually hidden label naming the speaker. Alignment and colour tell a sighted reader who is talking and tell a screen reader user nothing, so the role is always in text. Message actions fade in on hover but stay in the DOM and in the tab order — a control that only exists on hover is unreachable by keyboard and invisible on touch.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/ai-model-selector/meta.ts\nconst meta = defineMeta({\n\tname: \"ai-model-selector\",\n\ttitle: \"AI Model Selector\",\n\tdescription: \"Picks the model a conversation runs on, with descriptions and availability.\",\n\tcategory: \"ai\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [\"select\"],\n\tfiles: [\"ai-model-selector.tsx\"],\n\ta11y: \"Inherits Select's listbox keyboard model. Each option sets textValue to the model name so typeahead matches the name rather than the description. A disabled model shows and announces why it is unavailable — a disabled option with no reason reads as a broken interface.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/ai-prompt-input/meta.ts\nconst meta = defineMeta({\n\tname: \"ai-prompt-input\",\n\ttitle: \"AI Prompt Input\",\n\tdescription: \"The composer: auto-growing textarea, send-on-Enter, and a send/stop control.\",\n\tcategory: \"ai\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [],\n\tfiles: [\"ai-prompt-input.tsx\"],\n\ta11y: \"Enter sends and Shift+Enter inserts a newline, but never while an IME composition is active — for Japanese, Chinese and Korean input Enter confirms a candidate, and sending there truncates the sentence mid-word. The submit control renames itself to \\\"Stop generating\\\" while busy, so its accessible name always matches what it does. The character counter stays silent until it nears the limit; announcing every keystroke would be unusable.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/ai-reasoning/meta.ts\nconst meta = defineMeta({\n\tname: \"ai-reasoning\",\n\ttitle: \"AI Reasoning\",\n\tdescription: \"A collapsible disclosure for the model's reasoning.\",\n\tcategory: \"ai\",\n\tstatus: \"stable\",\n\tdependencies: [\"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"ai-reasoning.tsx\"],\n\ta11y: \"A standard disclosure with aria-expanded on the trigger. Collapsed by default because reasoning is supporting material — giving it the same weight as the answer buries the answer. The trigger's label changes while reasoning streams, so its accessible name matches what is happening.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/ai-response/meta.ts\nconst meta = defineMeta({\n\tname: \"ai-response\",\n\ttitle: \"AI Response\",\n\tdescription: \"Assistant response text, with a streaming caret and a thinking indicator.\",\n\tcategory: \"ai\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [],\n\tfiles: [\"ai-response.tsx\"],\n\ta11y: \"Deliberately not a live region: announcing streamed text as it arrives interrupts a screen reader user on every token. Announce state through ConversationStatus and let them read the response when it settles. The caret is decorative; ThinkingIndicator carries a label because it is the only thing on screen while waiting for the first token.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/ai-sources/meta.ts\nconst meta = defineMeta({\n\tname: \"ai-sources\",\n\ttitle: \"AI Sources\",\n\tdescription: \"Inline citation markers and the source list they refer to.\",\n\tcategory: \"ai\",\n\tstatus: \"stable\",\n\tdependencies: [\"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"ai-sources.tsx\"],\n\ta11y: \"An inline marker shows a bare number, which conveys nothing on its own, so the source title is carried in its accessible name. A marker with no href renders as text rather than as a link that goes nowhere. The source list is ordered, because the marker numbers refer to positions in it.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/ai-structured-output/meta.ts\nconst meta = defineMeta({\n\tname: \"ai-structured-output\",\n\ttitle: \"AI Structured Output\",\n\tdescription: \"An object arriving field by field from the model, without the layout jumping.\",\n\tcategory: \"ai\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [],\n\tfiles: [\"ai-structured-output.tsx\"],\n\ta11y: \"A description list, so each value is associated with its label rather than floating beside it. The region is aria-live=\\\"polite\\\" with aria-busy while streaming, so fields are announced as they settle instead of re-reading the whole object on every token. Height is reserved from the declared field list, which keeps focus and reading position stable as values arrive. Confidence is stated as a number in words, never as a colour alone.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/ai-suggested-value/meta.ts\nconst meta = defineMeta({\n\tname: \"ai-suggested-value\",\n\ttitle: \"AI Suggested Value\",\n\tdescription: \"An AI-proposed value for any form control, pending until accepted and marked afterwards.\",\n\tcategory: \"ai\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [],\n\tfiles: [\"ai-suggested-value.tsx\"],\n\ta11y: \"The suggestion is the control's description, so a reader who lands on the field hears it without any announcement — and announcing is opt-in, because a form filling twenty fields at once would narrate all twenty. The row that holds it is rendered from the start and never display:none, so when announcing is on, a suggestion arriving after mount is actually heard. Each button's name carries the field it belongs to, so a page of Accepts is a page of different buttons. Provenance and confidence are words with a number, never a colour. Acceptance is reported, not performed: the control is the consumer's, so its value, its label and its own keyboard behaviour are untouched — there is no shortcut hijacked from a select or a date field. The id and ARIA a FormControl passes down are forwarded to the control, and an existing aria-describedby is merged rather than replaced.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/ai-token-usage/meta.ts\nconst meta = defineMeta({\n\tname: \"ai-token-usage\",\n\ttitle: \"AI Token Usage\",\n\tdescription: \"A gauge showing how much of the context window a conversation has used.\",\n\tcategory: \"ai\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [],\n\tfiles: [\"ai-token-usage.tsx\"],\n\ta11y: \"The numbers are the content and the bar only summarises them, so the bar is aria-hidden rather than a second progressbar to read past. Counts are formatted for the locale. Warning and over-limit states change the wording's colour but never remove the figures.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/ai-tool/meta.ts\nconst meta = defineMeta({\n\tname: \"ai-tool\",\n\ttitle: \"AI Tool Call\",\n\tdescription: \"A collapsible record of a tool the model called, its arguments and its result.\",\n\tcategory: \"ai\",\n\tstatus: \"stable\",\n\tdependencies: [\"class-variance-authority\", \"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"ai-tool.tsx\"],\n\ta11y: \"A disclosure: the trigger exposes aria-expanded and controls the panel. Status is stated in words, not by a coloured dot — colour alone is unavailable to a screen reader and to anyone who cannot distinguish it. Payload blocks are focusable named regions, since JSON scrolls and an unfocusable scroll box is unreachable by keyboard.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/alert/meta.ts\nconst meta = defineMeta({\n\tname: \"alert\",\n\ttitle: \"Alert\",\n\tdescription: \"A callout that draws attention to an important message.\",\n\tcategory: \"feedback\",\n\tstatus: \"stable\",\n\tdependencies: [\"class-variance-authority\"],\n\tregistryDependencies: [],\n\tfiles: [\"alert.tsx\"],\n\ta11y: \"Not a live region by default. Pass live=\\\"polite\\\" for alerts that appear in response to a user action, or live=\\\"assertive\\\" for errors that must interrupt. Variant colour is never the only signal — the title carries the meaning.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/avatar/meta.ts\nconst meta = defineMeta({\n\tname: \"avatar\",\n\ttitle: \"Avatar\",\n\tdescription: \"An image representation of a user or entity with a graceful text fallback.\",\n\tcategory: \"display\",\n\tstatus: \"stable\",\n\tdependencies: [\"class-variance-authority\", \"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"avatar.tsx\"],\n\ta11y: \"Give AvatarImage a meaningful alt, or alt=\\\"\\\" when the adjacent text already names the person. Fallback initials are decorative and are not announced separately.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/badge/meta.ts\nconst meta = defineMeta({\n\tname: \"badge\",\n\ttitle: \"Badge\",\n\tdescription: \"A compact marker for status, counts and categories.\",\n\tcategory: \"display\",\n\tstatus: \"stable\",\n\tdependencies: [\"class-variance-authority\", \"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"badge.tsx\"],\n\ta11y: \"The badge label must convey the meaning on its own; variant colour is decoration. Use asChild to render an interactive badge as a link or button rather than adding handlers.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/button/meta.ts\nconst meta = defineMeta({\n\tname: \"button\",\n\ttitle: \"Button\",\n\tdescription: \"Triggers an action or event, with variants for every level of emphasis.\",\n\tcategory: \"foundation\",\n\tstatus: \"stable\",\n\tdependencies: [\"class-variance-authority\", \"radix-ui\"],\n\tregistryDependencies: [\"spinner\"],\n\tfiles: [\"button.tsx\"],\n\ta11y: \"Keyboard activatable via Enter and Space. The loading state uses aria-disabled and aria-busy rather than the disabled attribute, so focus is never stranded mid-action. Use `size=\\\"icon\\\"` only with an accessible name from aria-label or visually hidden text.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/calendar/meta.ts\nconst meta = defineMeta({\n\tname: \"calendar\",\n\ttitle: \"Calendar\",\n\tdescription: \"A date grid for selecting a day, several days or a range.\",\n\tcategory: \"form\",\n\tstatus: \"stable\",\n\tdependencies: [\"react-day-picker\"],\n\tregistryDependencies: [\"button\"],\n\tfiles: [\"calendar.tsx\"],\n\ta11y: \"A real grid with roving focus: arrows move by day, Page Up/Down by month, Home/End to the ends of a week. Selection is announced through aria-selected, and the month caption is a live region so moving between months is announced. Give the calendar an accessible name when more than one is on the page.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/card/meta.ts\nconst meta = defineMeta({\n\tname: \"card\",\n\ttitle: \"Card\",\n\tdescription: \"A surface that groups related content and actions into a single block.\",\n\tcategory: \"display\",\n\tstatus: \"stable\",\n\tdependencies: [\"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"card.tsx\"],\n\ta11y: \"Card renders a plain div with no implicit landmark. CardTitle is an h3 by default — use asChild to set the level the page actually needs, since heading levels must increase by one, or to render something that is not a heading at all.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/checkbox/meta.ts\nconst meta = defineMeta({\n\tname: \"checkbox\",\n\ttitle: \"Checkbox\",\n\tdescription: \"A control for an on/off choice, with support for an indeterminate state.\",\n\tcategory: \"form\",\n\tstatus: \"stable\",\n\tdependencies: [\"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"checkbox.tsx\"],\n\ta11y: \"Toggles with Space, matching the native control. Always pair with a Label via htmlFor/id — the box alone has no accessible name. Indeterminate is announced as \\\"mixed\\\" and is a state the application sets, not one the user can reach by clicking.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/code-block/meta.ts\nconst meta = defineMeta({\n\tname: \"code-block\",\n\ttitle: \"Code Block\",\n\tdescription: \"A block of code with a copy control, ready for any highlighter.\",\n\tcategory: \"data\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [],\n\tfiles: [\"code-block.tsx\"],\n\ta11y: \"The pre is a focusable named region, since code overflows horizontally and an unfocusable scroll box is unreachable by keyboard. Copying is announced through a polite live region as well as shown, and a refused clipboard write reports failure rather than looking like success.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/combobox/meta.ts\nconst meta = defineMeta({\n\tname: \"combobox\",\n\ttitle: \"Combobox\",\n\tdescription: \"A searchable single-select built on the ARIA combobox pattern.\",\n\tcategory: \"form\",\n\tstatus: \"stable\",\n\tdependencies: [\"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"combobox.tsx\"],\n\ta11y: \"The input owns role=\\\"combobox\\\" with aria-expanded, aria-controls and aria-autocomplete; the list owns role=\\\"listbox\\\" and each option role=\\\"option\\\" with aria-selected. Focus stays in the input while arrow keys move aria-activedescendant, so typing is never interrupted. Arrow navigation wraps, Home/End jump, Enter selects the active option and Escape closes.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/command/meta.ts\nconst meta = defineMeta({\n\tname: \"command\",\n\ttitle: \"Command\",\n\tdescription: \"A searchable command palette, with groups and a ⌘K dialog variant.\",\n\tcategory: \"navigation\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [\"dialog\"],\n\tfiles: [\"command.tsx\"],\n\ta11y: \"The input owns role=\\\"combobox\\\" and the list role=\\\"listbox\\\"; focus stays in the input while arrow keys move aria-activedescendant, so typing is never interrupted. Enter runs the active item through the same path as a click. A group whose items are all filtered out hides its heading rather than labelling nothing. CommandDialog always renders a title and description, visually hidden, so the dialog is never unnamed.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/confirm-typed/meta.ts\nconst meta = defineMeta({\n\tname: \"confirm-typed\",\n\ttitle: \"Confirm Typed\",\n\tdescription: \"Type the name to confirm — and be told, not ignored, when it does not match.\",\n\tcategory: \"form\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [\"button\", \"input\"],\n\tfiles: [\"confirm-typed.tsx\"],\n\ta11y: \"The button stays reachable while the text does not match, dimmed rather than disabled, and pressing it or Enter announces what was expected, marks the field invalid and returns focus to it — the common version disables the button and says nothing, so a keyboard user cannot tell whether anything happened. The match is announced once, on the transition, naming the action that became available, so nobody has to watch the button change colour. Typing itself stays silent, because a verdict on every keystroke is noise. The hint is the field's description and the button's, and the status region exists from the first render so the first announcement is heard. Pasting is allowed: blocking it punishes people who cannot type a long name easily and stops nobody who can select-all and copy.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/cron-editor/meta.ts\nconst meta = defineMeta({\n\tname: \"cron-editor\",\n\ttitle: \"Cron Editor\",\n\tdescription: \"A schedule as a cron expression, with a plain-language reading and the next runs.\",\n\tcategory: \"form\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [\"input\", \"select\"],\n\tfiles: [\"cron-expression.ts\", \"cron-editor.tsx\"],\n\ta11y: \"The expression field is described by one element that holds either the plain-language reading or the reason the expression is invalid, so a reader hears the error replace the reading rather than both at once; an invalid expression is never applied. The builder's day buttons are a named group of aria-pressed toggles with the full day name as the accessible name, and the last selected day cannot be removed silently — the group says why. Days 29 to 31 say in text that shorter months skip them. Next runs are a list of time elements with machine-readable datetimes, headed by the zone they are in, because a time with no zone is the classic scheduling mistake. Nothing clock-dependent renders until the clock is known, so server and client cannot disagree.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/data-table/meta.ts\nconst meta = defineMeta({\n\tname: \"data-table\",\n\ttitle: \"Data Table\",\n\tdescription: \"Presentation for a TanStack Table instance: sorting, column visibility and pagination.\",\n\tcategory: \"data\",\n\tstatus: \"stable\",\n\tdependencies: [\"@tanstack/react-table\"],\n\tregistryDependencies: [\n\t\t\"button\",\n\t\t\"dropdown-menu\",\n\t\t\"select\",\n\t\t\"table\"\n\t],\n\tfiles: [\"data-table.tsx\"],\n\ta11y: \"Sortable headers carry aria-sort, so the current sort is announced rather than being conveyed by an arrow icon alone, and each sort button has visually hidden text stating the column and its direction. The pagination status is a polite live region, because paging swaps the rows in place with no other signal. A column that cannot be sorted renders as text, not as a button that does nothing.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/date-picker/meta.ts\nconst meta = defineMeta({\n\tname: \"date-picker\",\n\ttitle: \"Date Picker\",\n\tdescription: \"A button that opens a calendar to pick a date or a date range.\",\n\tcategory: \"form\",\n\tstatus: \"stable\",\n\tdependencies: [\"react-day-picker\"],\n\tregistryDependencies: [\n\t\t\"button\",\n\t\t\"calendar\",\n\t\t\"popover\"\n\t],\n\tfiles: [\"date-picker.tsx\"],\n\ta11y: \"The trigger states the selected date, formatted for the locale, so its accessible name changes with the value. The popover is named because it carries role=\\\"dialog\\\". Selecting a single date closes the popover and returns focus to the trigger; a range stays open, since one click is only half an answer. Offer a typed input alongside it for dates the user already knows.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/dialog/meta.ts\nconst meta = defineMeta({\n\tname: \"dialog\",\n\ttitle: \"Dialog\",\n\tdescription: \"A modal window that interrupts the user to gather a response.\",\n\tcategory: \"overlay\",\n\tstatus: \"stable\",\n\tdependencies: [\"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"dialog.tsx\"],\n\ta11y: \"Focus is trapped while open and restored to the trigger on close; Escape and an overlay click dismiss. Always render a DialogTitle — it names the dialog for screen readers. Use DialogDescription, or aria-describedby, to explain consequential actions.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/diff-viewer/meta.ts\nconst meta = defineMeta({\n\tname: \"diff-viewer\",\n\ttitle: \"Diff Viewer\",\n\tdescription: \"A diff you can style, and accept or reject hunk by hunk.\",\n\tcategory: \"data\",\n\tstatus: \"stable\",\n\tdependencies: [\"diff\"],\n\tregistryDependencies: [],\n\tfiles: [\"diff-model.ts\", \"diff-viewer.tsx\"],\n\ta11y: \"A semantic table, not a grid. role=\\\"grid\\\" would promise cell-by-cell arrow navigation that does not exist here and makes no sense for reading code. Every row states added, removed or unchanged in text, because a plus sign and a green tint are not information — a diff read aloud without it is just the same file twice. Line numbers are aria-hidden: they orient a sighted reader, and announcing two numbers before every line makes the diff unlistenable. Changed words are marked with mark elements so they survive as structure, and the empty half of a split pair is hidden rather than read as a blank line of code.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/dns-record/meta.ts\nconst meta = defineMeta({\n\tname: \"dns-record\",\n\ttitle: \"DNS Record\",\n\tdescription: \"Add this record at your provider: parts copied separately, checked with what was found.\",\n\tcategory: \"data\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [\"button\", \"spinner\"],\n\tfiles: [\"dns-record.tsx\"],\n\ta11y: \"The card is a region named by the record's type and purpose. Each part is a definition with its own copy button, named by the part it copies, so five Copy buttons are five different buttons. Verification status is a word in a polite live region, so the answer to a check arrives where it was asked for, and the card is aria-busy while checking. Copy results are announced in a separate region, present from the start, so a copy never replaces a check result mid-sentence; failure is announced with what to do instead. What the check found is a list, not a colour.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/drawer/meta.ts\nconst meta = defineMeta({\n\tname: \"drawer\",\n\ttitle: \"Drawer\",\n\tdescription: \"A bottom sheet that can be dismissed by dragging it down.\",\n\tcategory: \"overlay\",\n\tstatus: \"stable\",\n\tdependencies: [\"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"drawer.tsx\"],\n\ta11y: \"Drag is pointer-only and never the sole way out: Escape, the overlay and DrawerCancel all dismiss. The grab handle is aria-hidden because it duplicates those affordances. Always render a DrawerTitle.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/dropdown-menu/meta.ts\nconst meta = defineMeta({\n\tname: \"dropdown-menu\",\n\ttitle: \"Dropdown Menu\",\n\tdescription: \"A menu of actions revealed from a trigger, with submenus and selectable items.\",\n\tcategory: \"overlay\",\n\tstatus: \"stable\",\n\tdependencies: [\"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"dropdown-menu.tsx\"],\n\ta11y: \"Full menu keyboard model: arrows move, Home/End jump, typeahead searches, Escape closes and restores focus, Right/Left open and close submenus. Highlight is driven by data-highlighted so pointer and keyboard focus never diverge. Use it for actions — links belong in a nav, and value selection belongs in Select.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/empty-state/meta.ts\nconst meta = defineMeta({\n\tname: \"empty-state\",\n\ttitle: \"Empty State\",\n\tdescription: \"Shown where content would be, explaining why it is empty and what to do next.\",\n\tcategory: \"feedback\",\n\tstatus: \"stable\",\n\tdependencies: [\"class-variance-authority\"],\n\tregistryDependencies: [],\n\tfiles: [\"empty-state.tsx\"],\n\ta11y: \"A plain container with no implicit landmark or live region. When it replaces content after a search, put aria-live on the results region so the change is announced. The icon is decorative — the title has to carry the message on its own.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/file-upload/meta.ts\nconst meta = defineMeta({\n\tname: \"file-upload\",\n\ttitle: \"File Upload\",\n\tdescription: \"A dropzone over a real file input, plus the upload queue nobody ships.\",\n\tcategory: \"form\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [],\n\tfiles: [\"upload-queue.ts\", \"file-upload.tsx\"],\n\ta11y: \"The APG has no dropzone pattern, and inventing one is the usual failure — a div with role=\\\"button\\\", a keydown handler, and a picker keyboard users never reach. The control here is a real input[type=file] with a real label, which is already operable, already announced, and opens the picker on Enter and Space with nothing added. Drag and drop is a pointer convenience layered on top; every drop can also be done from the input. Each uploading file gets a progressbar named after it, status is always stated in words as well as drawn, and one polite live region summarises the whole queue rather than six per-file regions talking over each other.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/form/meta.ts\nconst meta = defineMeta({\n\tname: \"form\",\n\ttitle: \"Form\",\n\tdescription: \"Accessible field wiring that works with any form library, or none.\",\n\tcategory: \"form\",\n\tstatus: \"stable\",\n\tdependencies: [\"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"form.tsx\"],\n\ta11y: \"FormField generates the id, points the Label at the control, and assembles aria-describedby from whichever of the description and error are actually present — a dangling reference announces nothing and is flagged by axe. aria-invalid follows the error. FormMessage is a polite live region, so a late validation message is announced without interrupting.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/input/meta.ts\nconst meta = defineMeta({\n\tname: \"input\",\n\ttitle: \"Input\",\n\tdescription: \"A single-line text field with size variants and native validation styling.\",\n\tcategory: \"form\",\n\tstatus: \"stable\",\n\tdependencies: [\"class-variance-authority\"],\n\tregistryDependencies: [],\n\tfiles: [\"input.tsx\"],\n\ta11y: \"Always pair with a Label via htmlFor/id. Error state is driven by aria-invalid so assistive technology and styling stay in sync; describe the error with aria-describedby.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/label/meta.ts\nconst meta = defineMeta({\n\tname: \"label\",\n\ttitle: \"Label\",\n\tdescription: \"An accessible caption that associates text with a form control.\",\n\tcategory: \"form\",\n\tstatus: \"stable\",\n\tdependencies: [\"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"label.tsx\"],\n\ta11y: \"Set htmlFor to the id of the control it labels. Clicking the label moves focus to that control, including composite widgets that are not native inputs.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/log-viewer/meta.ts\nconst meta = defineMeta({\n\tname: \"log-viewer\",\n\ttitle: \"Log Viewer\",\n\tdescription: \"A streaming console with filtering, level facets and follow mode.\",\n\tcategory: \"data\",\n\tstatus: \"stable\",\n\tdependencies: [\"@tanstack/react-virtual\"],\n\tregistryDependencies: [],\n\tfiles: [\"log-stream.ts\", \"log-viewer.tsx\"],\n\ta11y: \"role=\\\"log\\\" implies aria-live=\\\"polite\\\", which is right for a few events and unusable for a console — a screen reader would read every line of a build and nothing else would be audible. Announcing is off by default and opt-in. Virtualization is the harder trade: most rows are not in the DOM, so assistive technology cannot reach them, which is why the component takes an onDownload escape rather than pretending the virtual window is the whole log. Levels are written in text as well as coloured, matches use mark elements rather than a background colour, and an invalid pattern is announced instead of silently showing an empty log that reads as \\\"nothing matched\\\".\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/meter/meta.ts\nconst meta = defineMeta({\n\tname: \"meter\",\n\ttitle: \"Meter\",\n\tdescription: \"A measurement against a capacity — quota, seats, spend — segmented by category.\",\n\tcategory: \"feedback\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [],\n\tfiles: [\"meter.tsx\"],\n\ta11y: \"Uses role=\\\"meter\\\", not role=\\\"progressbar\\\": a meter reports a level with no expectation of reaching the end, and screen readers phrase the two differently. The bar is one meter and the segments inside it are decoration — making each its own widget would put several unlabelled meters in the tab order to describe one quantity. aria-valuetext carries the unit and the capacity, because a bare \\\"4\\\" says nothing about 4 of what. Per-segment detail lives in MeterLegend as text, where it can be read.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/metric-delta/meta.ts\nconst meta = defineMeta({\n\tname: \"metric-delta\",\n\ttitle: \"Metric Delta\",\n\tdescription: \"A headline number with a change indicator that knows which direction is good.\",\n\tcategory: \"data\",\n\tstatus: \"stable\",\n\tdependencies: [\"class-variance-authority\"],\n\tregistryDependencies: [],\n\tfiles: [\"metric-delta.tsx\"],\n\ta11y: \"The meaning is never carried by colour and an arrow alone, which fails WCAG 1.4.1 — the direction and the comparison are always stated in text. The tile reads as one sentence rather than three fragments: the visible number and delta are aria-hidden and a single screen-reader description carries value, direction, comparison and, where given, sample size. A zero baseline is announced as having no percentage rather than as an infinite one.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/pagination/meta.ts\nconst meta = defineMeta({\n\tname: \"pagination\",\n\ttitle: \"Pagination\",\n\tdescription: \"Navigation between pages of a list.\",\n\tcategory: \"navigation\",\n\tstatus: \"stable\",\n\tdependencies: [\"radix-ui\"],\n\tregistryDependencies: [\"button\"],\n\tfiles: [\"pagination.tsx\"],\n\ta11y: \"A named nav landmark. The current page carries aria-current=\\\"page\\\" — styling it differently conveys nothing on its own. Links by default, since a page of results is a place worth sharing; use asChild for your router's link, or render buttons when paging only changes client state.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/permission-matrix/meta.ts\nconst meta = defineMeta({\n\tname: \"permission-matrix\",\n\ttitle: \"Permission Matrix\",\n\tdescription: \"Roles across, permissions down, with inheritance, locked roles and one tab stop.\",\n\tcategory: \"data\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [\"checkbox\"],\n\tfiles: [\"permission-model.ts\", \"permission-matrix.tsx\"],\n\ta11y: \"A grid in the WAI-ARIA sense: role=\\\"grid\\\" with one tab stop, arrow keys between cells, Home and End along a row and Ctrl with them across the whole matrix — the right call for a matrix that is operated, where it was the wrong one for a diff that is read. Every checkbox is named by both coordinates, \\\"Delete projects for Editor\\\", so a reader arriving by arrow key knows where they are without re-reading the headers. An inherited grant is a checked box that cannot be changed here, marked aria-disabled rather than disabled so it stays in the keyboard path, with the role it came from as its description. A locked role says in each cell's description that nothing can be changed. Group toggles are tri-state, and the column header counts each role's grants in text.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/popover/meta.ts\nconst meta = defineMeta({\n\tname: \"popover\",\n\ttitle: \"Popover\",\n\tdescription: \"Rich floating content anchored to a trigger.\",\n\tcategory: \"overlay\",\n\tstatus: \"stable\",\n\tdependencies: [\"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"popover.tsx\"],\n\ta11y: \"The content has role=\\\"dialog\\\" and therefore REQUIRES an accessible name — pass aria-label, or aria-labelledby pointing at a heading inside it. A development-only warning fires if neither is present. The trigger exposes aria-expanded and aria-controls; Escape closes and returns focus to it. Non-modal by default, so the rest of the page stays reachable; pass `modal` only when the content is a task the user must finish or abandon.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/progress/meta.ts\nconst meta = defineMeta({\n\tname: \"progress\",\n\ttitle: \"Progress\",\n\tdescription: \"Shows how far along a task is, or that one is running at all.\",\n\tcategory: \"feedback\",\n\tstatus: \"stable\",\n\tdependencies: [\"class-variance-authority\", \"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"progress.tsx\"],\n\ta11y: \"Exposed as role=\\\"progressbar\\\" with aria-valuenow, and give it a name with aria-label or aria-labelledby. Omitting `value` marks it indeterminate, which is announced differently from zero. Show the percentage in text as well — the bar alone is not readable at a glance for everyone.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/radio-group/meta.ts\nconst meta = defineMeta({\n\tname: \"radio-group\",\n\ttitle: \"Radio Group\",\n\tdescription: \"A set of mutually exclusive options.\",\n\tcategory: \"form\",\n\tstatus: \"stable\",\n\tdependencies: [\"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"radio-group.tsx\"],\n\ta11y: \"Arrow keys move between options and select as they go, and the group is a single tab stop — the standard radio model. Give the group an accessible name with aria-labelledby, and each item a Label tied by htmlFor/id.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/record-diff/meta.ts\nconst meta = defineMeta({\n\tname: \"record-diff\",\n\ttitle: \"Record Diff\",\n\tdescription: \"Field-level before and after, for audit entries, settings history and revisions.\",\n\tcategory: \"data\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [],\n\tfiles: [\"record-diff.tsx\"],\n\ta11y: \"A real table, not a grid of divs. Each field name is a th with scope=\\\"row\\\", so a value is announced with the field it belongs to rather than as a loose cell. The kind of change is never carried by row colour alone — every row states added, removed or changed in text for screen readers, satisfying WCAG 1.4.1. The unchanged-field toggle is a real button with aria-expanded. Redacted values never reach the DOM at all.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/secret-field/meta.ts\nconst meta = defineMeta({\n\tname: \"secret-field\",\n\ttitle: \"Secret Field\",\n\tdescription: \"An API key in its three states: shown once, hidden but revealable, and gone.\",\n\tcategory: \"form\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [\"button\", \"input\"],\n\tfiles: [\"secret-field.tsx\"],\n\ta11y: \"The value sits in a read-only input rather than a disabled one, so it can be focused, selected and read, and focusing a shown value selects all of it for copying by hand. The field's state — shown once, hidden, revealed, gone — is a sentence attached as its description, never a colour or an icon. Copying is announced through a status region that exists before the first copy, and failure is announced too, with what to do instead, because the clipboard can be refused. Every button carries the field's label in its name, so a settings page with several keys has several distinct Copy buttons. Regenerating is confirmed inline in a named group that states the consequence, since it revokes the current key.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/select/meta.ts\nconst meta = defineMeta({\n\tname: \"select\",\n\ttitle: \"Select\",\n\tdescription: \"Picks one value from a short list of options.\",\n\tcategory: \"form\",\n\tstatus: \"stable\",\n\tdependencies: [\"class-variance-authority\", \"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"select.tsx\"],\n\ta11y: \"Full listbox keyboard model: arrows move, typeahead jumps, Enter selects, Escape closes and restores focus. Give the trigger a name with aria-labelledby or a Label. Past about a dozen options prefer Combobox — scrolling a long listbox by keyboard is slow.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/separator/meta.ts\nconst meta = defineMeta({\n\tname: \"separator\",\n\ttitle: \"Separator\",\n\tdescription: \"A horizontal or vertical rule that divides content.\",\n\tcategory: \"layout\",\n\tstatus: \"stable\",\n\tdependencies: [\"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"separator.tsx\"],\n\ta11y: \"Decorative by default and hidden from assistive technology. Set decorative={false} to expose it as a semantic separator when it divides meaningfully distinct groups.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/session-expiry/meta.ts\nconst meta = defineMeta({\n\tname: \"session-expiry\",\n\ttitle: \"Session Expiry\",\n\tdescription: \"The idle-timeout warning WCAG 2.2.1 asks for: warned, extendable, and not dismissable by accident.\",\n\tcategory: \"feedback\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [\"button\", \"dialog\"],\n\tfiles: [\"session-expiry.tsx\"],\n\ta11y: \"An alert dialog, named by its heading and described by the sentence that says how long is left. Escape and the backdrop do nothing, because dismissing a session warning without choosing is choosing nothing; the two buttons are the way out, and focus opens on the safe one. The visible countdown is not live — a number every second for two minutes drowns the question — and a separate status region speaks four times: when the warning opens, at one minute, thirty seconds and ten, still saying a threshold a slow tick skipped over. The clock is read in an effect, so the server renders nothing rather than a countdown from the wrong instant. This satisfies the warn-and-extend half of WCAG 2.2.1 Timing Adjustable; the twenty-second minimum is the default window's business and the application's.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/sheet/meta.ts\nconst meta = defineMeta({\n\tname: \"sheet\",\n\ttitle: \"Sheet\",\n\tdescription: \"A panel that enters from an edge of the viewport for secondary content.\",\n\tcategory: \"overlay\",\n\tstatus: \"stable\",\n\tdependencies: [\"class-variance-authority\", \"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"sheet.tsx\"],\n\ta11y: \"Modal, with the same focus trapping and restoration as Dialog. Always render a SheetTitle. For a side navigation sheet, put a nav landmark inside rather than relying on placement to convey the role.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/shortcut-recorder/meta.ts\nconst meta = defineMeta({\n\tname: \"shortcut-recorder\",\n\ttitle: \"Shortcut Recorder\",\n\tdescription: \"Press the keys you want: records a chord, platform-aware, and says when it clashes.\",\n\tcategory: \"form\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [],\n\tfiles: [\"shortcut-model.ts\", \"shortcut-recorder.tsx\"],\n\ta11y: \"The recorder is a button named by what the shortcut does and described by its value in words — Command Shift K — while the key caps on it are hidden from assistive technology, since ⌘⇧K read aloud is noise. While recording it is aria-pressed and its description says what to do; Tab always leaves and Escape always cancels, so it is never a keyboard trap. Every outcome is announced through a status region present from the start: recorded, refused with the reason, clashing with which command, cancelled, cleared. Symbols are shown on a Mac and words elsewhere, and the description uses the platform's own names for its keys.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/skeleton/meta.ts\nconst meta = defineMeta({\n\tname: \"skeleton\",\n\ttitle: \"Skeleton\",\n\tdescription: \"A shaped placeholder that holds layout while content loads.\",\n\tcategory: \"feedback\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [],\n\tfiles: [\"skeleton.tsx\"],\n\ta11y: \"Hidden from assistive technology. Put aria-busy on the container that owns the loading data so the state is announced once instead of once per placeholder.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/slider/meta.ts\nconst meta = defineMeta({\n\tname: \"slider\",\n\ttitle: \"Slider\",\n\tdescription: \"Selects a value, or a range, from a continuous span.\",\n\tcategory: \"form\",\n\tstatus: \"stable\",\n\tdependencies: [\"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"slider.tsx\"],\n\ta11y: \"Each thumb is a role=\\\"slider\\\" with arrow keys, Home/End and Page Up/Down. The name is forwarded onto the thumbs, since the root has no role — a range slider should name each thumb separately with thumbLabels. A development-only warning fires if a thumb would be unnamed. Pass aria-valuetext when the raw number is not meaningful on its own (a price, a duration). Show the current value on screen too — a slider is imprecise, so pair it with a numeric input when exactness matters.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/spinner/meta.ts\nconst meta = defineMeta({\n\tname: \"spinner\",\n\ttitle: \"Spinner\",\n\tdescription: \"An indeterminate loading indicator for buttons, panels and inline content.\",\n\tcategory: \"feedback\",\n\tstatus: \"stable\",\n\tdependencies: [\"class-variance-authority\"],\n\tregistryDependencies: [],\n\tfiles: [\"spinner.tsx\"],\n\ta11y: \"Renders aria-hidden by default so it does not announce inside controls that already expose a busy state. Pass `label` to announce it standalone via role=\\\"status\\\".\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/switch/meta.ts\nconst meta = defineMeta({\n\tname: \"switch\",\n\ttitle: \"Switch\",\n\tdescription: \"An immediate on/off toggle for settings that apply straight away.\",\n\tcategory: \"form\",\n\tstatus: \"stable\",\n\tdependencies: [\"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"switch.tsx\"],\n\ta11y: \"Exposed as role=\\\"switch\\\" and toggled with Space or Enter. Needs a visible label tied with htmlFor/id. Do not rely on colour alone to show state — position and the label carry it too.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/sync-status/meta.ts\nconst meta = defineMeta({\n\tname: \"sync-status\",\n\ttitle: \"Sync Status\",\n\tdescription: \"Offline, saving, saved or failed — with the count of changes being held.\",\n\tcategory: \"feedback\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [\"button\"],\n\tfiles: [\"sync-status.tsx\"],\n\ta11y: \"The word is the status and the coloured dot is decoration, hidden from assistive technology. The visible text is not a live region: every save flips it and a region on it would narrate the whole session. A separate region, present from the first render, announces transitions only — went offline with what will happen to the changes, came back with what is being saved, could not save, saved after a failure — and never the churn of saving itself. Announcing is on by default because going offline is the one thing a reader who is typing has to be told, and it can be turned off. The server render assumes online, since a page with no interface to report has no business saying offline.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/table/meta.ts\nconst meta = defineMeta({\n\tname: \"table\",\n\ttitle: \"Table\",\n\tdescription: \"Semantic table primitives for tabular data.\",\n\tcategory: \"data\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [],\n\tfiles: [\"table.tsx\"],\n\ta11y: \"A native table, so row and column position, header association and dimensions are all announced without ARIA. Give it a name with TableCaption or aria-label. The scrolling wrapper is focusable so an overflowing table can be scrolled by keyboard — without that, columns past the edge are unreachable. Use scope=\\\"row\\\" on th elements inside tbody.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/tabs/meta.ts\nconst meta = defineMeta({\n\tname: \"tabs\",\n\ttitle: \"Tabs\",\n\tdescription: \"Switches between panels of related content.\",\n\tcategory: \"navigation\",\n\tstatus: \"stable\",\n\tdependencies: [\"class-variance-authority\", \"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"tabs.tsx\"],\n\ta11y: \"Implements the ARIA tabs pattern: arrows move between tabs, Home/End jump to the ends, and only the active tab is in the tab sequence. Panels are focusable so keyboard users reach their content directly. Use activationMode=\\\"manual\\\" when showing a panel is expensive, so arrowing past it does not load it.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/tags-input/meta.ts\nconst meta = defineMeta({\n\tname: \"tags-input\",\n\ttitle: \"Tags Input\",\n\tdescription: \"A list of short values, where invalid entries stay visible instead of vanishing.\",\n\tcategory: \"form\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [],\n\tfiles: [\"tags-input.tsx\"],\n\ta11y: \"No WAI-ARIA pattern covers a token field, and the near misses misdescribe it — these are committed values, not options being chosen, so calling the container a listbox would promise navigation that does not exist. It is a labelled group holding a list, with a remove button per token carrying the tag in its accessible name. An invalid token's reason is inside the token, so it is announced with it rather than as a detached error. Additions, removals and refusals all reach a polite live region, because a refusal that looks like nothing happening is the failure this component exists to prevent. Remove buttons sit in the natural tab order rather than behind a roving tabindex: it costs a tab stop per token, and buys a pattern every assistive technology already understands.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/time-range-picker/meta.ts\nconst meta = defineMeta({\n\tname: \"time-range-picker\",\n\ttitle: \"Time Range Picker\",\n\tdescription: \"A time range whose value is an expression, so it stays relative across a reload.\",\n\tcategory: \"form\",\n\tstatus: \"stable\",\n\tdependencies: [\"react-day-picker\"],\n\tregistryDependencies: [\n\t\t\"button\",\n\t\t\"calendar\",\n\t\t\"input\",\n\t\t\"popover\"\n\t],\n\tfiles: [\"time-expression.ts\", \"time-range-picker.tsx\"],\n\ta11y: \"The trigger is named by the range it holds — \\\"Last 6 hours\\\" — and the window that resolves to is read after it, so the relative choice is not replaced by two timestamps. The popover carries role=\\\"dialog\\\" and is named. Presets are buttons rather than radios because choosing one both selects and dismisses, with aria-pressed carrying which matches the current expression. The expression field reports why an unparseable entry is invalid through one aria-describedby element that the preview and the error share, so a reader hears the error replace the preview rather than both at once; an invalid expression is never applied, because a chart silently re-scoping itself is worse than one that refuses.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/toast/meta.ts\nconst meta = defineMeta({\n\tname: \"toast\",\n\ttitle: \"Toast\",\n\tdescription: \"Brief, non-blocking messages with an imperative API callable from anywhere.\",\n\tcategory: \"feedback\",\n\tstatus: \"stable\",\n\tdependencies: [\"class-variance-authority\", \"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"toast-store.ts\", \"toast.tsx\"],\n\ta11y: \"Toasts are announced through a live region: destructive and warning variants interrupt (foreground), the rest wait for a pause (background). Auto-dismiss timers pause on hover, focus and window blur, and F8 moves focus into the toast list from anywhere. An action must carry altText describing how to do the same thing without the toast, since it may be gone before a screen reader user reaches it.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/tooltip/meta.ts\nconst meta = defineMeta({\n\tname: \"tooltip\",\n\ttitle: \"Tooltip\",\n\tdescription: \"A short label revealed on hover or keyboard focus.\",\n\tcategory: \"overlay\",\n\tstatus: \"stable\",\n\tdependencies: [\"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"tooltip.tsx\"],\n\ta11y: \"Opens on focus as well as hover, and Escape dismisses it. Never put essential or interactive content in a tooltip: it is unreachable on touch and vanishes on blur. For an icon-only button, prefer aria-label for the name and use the tooltip only to repeat it visually.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/blocks/admin-users/meta.ts\nconst meta = defineMeta({\n\tname: \"admin-users\",\n\tkind: \"block\",\n\ttitle: \"Admin — users\",\n\tdescription: \"A team administration table with filtering, sorting and per-row actions.\",\n\tcategory: \"data\",\n\tstatus: \"stable\",\n\tdependencies: [\"@tanstack/react-table\"],\n\tregistryDependencies: [\n\t\t\"avatar\",\n\t\t\"badge\",\n\t\t\"button\",\n\t\t\"data-table\",\n\t\t\"dropdown-menu\",\n\t\t\"empty-state\",\n\t\t\"input\",\n\t\t\"label\"\n\t],\n\tfiles: [\"admin-users.tsx\"],\n\ta11y: \"Filtering changes the results without the user asking, so the matching count is announced politely. The filter has a real label rather than only a placeholder, which disappears the moment anyone types. Each row's action button is named after its row — four identical \\\"Actions\\\" buttons say nothing about which row you are on.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/blocks/ai-chat/meta.ts\nconst meta = defineMeta({\n\tname: \"ai-chat\",\n\tkind: \"block\",\n\ttitle: \"AI Chat\",\n\tdescription: \"A complete chat surface: transcript, reasoning, tool calls, sources and composer.\",\n\tcategory: \"ai\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [\n\t\t\"ai-conversation\",\n\t\t\"ai-message\",\n\t\t\"ai-model-selector\",\n\t\t\"ai-prompt-input\",\n\t\t\"ai-reasoning\",\n\t\t\"ai-response\",\n\t\t\"ai-sources\",\n\t\t\"ai-token-usage\",\n\t\t\"ai-tool\",\n\t\t\"button\",\n\t\t\"empty-state\"\n\t],\n\tfiles: [\"ai-chat.tsx\"],\n\ta11y: \"Assembled from the AI components rather than reimplementing them, so their decisions still hold: the transcript is a list and not a live region, state is announced separately through ConversationStatus, and the composer will not send while an IME composition is active. Tool payloads are named per tool, so two open tool calls do not present two regions called \\\"Result\\\".\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/blocks/dashboard/meta.ts\nconst meta = defineMeta({\n\tname: \"dashboard\",\n\tkind: \"block\",\n\ttitle: \"Dashboard\",\n\tdescription: \"An overview page with headline metrics and a recent activity feed.\",\n\tcategory: \"data\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [\n\t\t\"activity-feed\",\n\t\t\"badge\",\n\t\t\"card\",\n\t\t\"skeleton\"\n\t],\n\tfiles: [\"dashboard.tsx\"],\n\ta11y: \"Each metric states its change in words — \\\"up 12.4%\\\" — rather than by a coloured arrow, which is unreadable to a screen reader and ambiguous to anyone who cannot distinguish the colours. Whether a rise is good is configurable, since churn going up is not. The metrics sit in a named region so they can be jumped to.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/blocks/forgot-password/meta.ts\nconst meta = defineMeta({\n\tname: \"forgot-password\",\n\tkind: \"block\",\n\ttitle: \"Forgot password\",\n\tdescription: \"A password reset request, with a confirmation that does not leak account existence.\",\n\tcategory: \"form\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [\n\t\t\"button\",\n\t\t\"card\",\n\t\t\"empty-state\",\n\t\t\"form\",\n\t\t\"input\"\n\t],\n\tfiles: [\"forgot-password.tsx\"],\n\ta11y: \"The confirmation replaces the form, so it is a polite live region — otherwise a screen reader user submits and hears nothing. The wording is deliberately neutral about whether the address exists: confirming it would turn this form into an account enumeration oracle.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/blocks/login/meta.ts\nconst meta = defineMeta({\n\tname: \"login\",\n\tkind: \"block\",\n\ttitle: \"Login\",\n\tdescription: \"A sign-in form with validation, social providers and a busy state.\",\n\tcategory: \"form\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [\n\t\t\"button\",\n\t\t\"card\",\n\t\t\"checkbox\",\n\t\t\"form\",\n\t\t\"input\",\n\t\t\"label\",\n\t\t\"separator\"\n\t],\n\tfiles: [\"login.tsx\"],\n\ta11y: \"Email and password fields carry the right type and autocomplete, so password managers and mobile keyboards behave. Field errors are tied to their inputs through the Form wiring; a server error is an assertive alert, because it arrived after the user acted and explains why nothing happened. The submit button reports its own busy state rather than going quiet.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/blocks/pricing/meta.ts\nconst meta = defineMeta({\n\tname: \"pricing\",\n\tkind: \"block\",\n\ttitle: \"Pricing\",\n\tdescription: \"A pricing section with plan cards and a monthly/yearly toggle.\",\n\tcategory: \"layout\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [\n\t\t\"badge\",\n\t\t\"button\",\n\t\t\"card\",\n\t\t\"label\",\n\t\t\"switch\"\n\t],\n\tfiles: [\"pricing.tsx\"],\n\ta11y: \"Switching the billing period rewrites every price on the page, so the change is announced politely rather than happening silently. Each plan's call to action names the plan — three buttons all reading \\\"Choose\\\" are indistinguishable out of context. Feature ticks are decorative; the feature text carries the meaning.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/blocks/settings/meta.ts\nconst meta = defineMeta({\n\tname: \"settings\",\n\tkind: \"block\",\n\ttitle: \"Settings\",\n\tdescription: \"A settings page with a profile form, immediate toggles and a danger zone.\",\n\tcategory: \"form\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [\n\t\t\"avatar\",\n\t\t\"button\",\n\t\t\"card\",\n\t\t\"dialog\",\n\t\t\"form\",\n\t\t\"input\",\n\t\t\"label\",\n\t\t\"separator\",\n\t\t\"switch\",\n\t\t\"tabs\"\n\t],\n\tfiles: [\"settings.tsx\"],\n\ta11y: \"Switches apply immediately and have no Save button — a switch that needs saving is a broken promise, so staged changes live in the form instead. The delete confirmation names what will be destroyed and requires typing the account's email, so the destructive button cannot be reached by muscle memory.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/blocks/signup/meta.ts\nconst meta = defineMeta({\n\tname: \"signup\",\n\tkind: \"block\",\n\ttitle: \"Sign up\",\n\tdescription: \"An account creation form with a password strength hint and terms acceptance.\",\n\tcategory: \"form\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [\n\t\t\"button\",\n\t\t\"card\",\n\t\t\"checkbox\",\n\t\t\"form\",\n\t\t\"input\",\n\t\t\"progress\"\n\t],\n\tfiles: [\"signup.tsx\"],\n\ta11y: \"The strength label is text and the bar beside it is aria-hidden, so the estimate is not announced twice. autoComplete=\\\"new-password\\\" tells password managers to offer a generated password rather than an existing one. Strength is a hint, never a gate: the form is validated on length alone.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { meta } from \"../blocks/admin-users/meta.js\";\nimport { meta as meta$1 } from \"../blocks/ai-chat/meta.js\";\nimport { meta as meta$2 } from \"../blocks/dashboard/meta.js\";\nimport { meta as meta$3 } from \"../blocks/forgot-password/meta.js\";\nimport { meta as meta$4 } from \"../blocks/login/meta.js\";\nimport { meta as meta$5 } from \"../blocks/pricing/meta.js\";\nimport { meta as meta$6 } from \"../blocks/settings/meta.js\";\nimport { meta as meta$7 } from \"../blocks/signup/meta.js\";\n//#region src/registry/blocks.ts\n/**\n* Every block in the registry.\n*\n* Kept separate from `componentMetas` for the same reason blocks install into a\n* different directory: they are whole page sections, browsed and used\n* differently from the components they are assembled out of.\n*\n* `meta.test.ts` fails if a block directory exists that is missing from here.\n*/\nconst blockMetas = [\n\tmeta,\n\tmeta$1,\n\tmeta$2,\n\tmeta$3,\n\tmeta$4,\n\tmeta$5,\n\tmeta$6,\n\tmeta$7\n];\n//#endregion\nexport { blockMetas };\n\n//# sourceMappingURL=blocks.js.map","import { COMPONENT_CATEGORIES, COMPONENT_STATUSES } from \"./schema.js\";\nimport { meta } from \"../components/accordion/meta.js\";\nimport { meta as meta$1 } from \"../components/activity-feed/meta.js\";\nimport { meta as meta$2 } from \"../components/ai-action-ledger/meta.js\";\nimport { meta as meta$3 } from \"../components/ai-agent-plan/meta.js\";\nimport { meta as meta$4 } from \"../components/ai-agent-status/meta.js\";\nimport { meta as meta$5 } from \"../components/ai-approval-request/meta.js\";\nimport { meta as meta$6 } from \"../components/ai-conversation/meta.js\";\nimport { meta as meta$7 } from \"../components/ai-disclosure/meta.js\";\nimport { meta as meta$8 } from \"../components/ai-extraction-review/meta.js\";\nimport { meta as meta$9 } from \"../components/ai-inline-completion/meta.js\";\nimport { meta as meta$10 } from \"../components/ai-message/meta.js\";\nimport { meta as meta$11 } from \"../components/ai-model-selector/meta.js\";\nimport { meta as meta$12 } from \"../components/ai-prompt-input/meta.js\";\nimport { meta as meta$13 } from \"../components/ai-reasoning/meta.js\";\nimport { meta as meta$14 } from \"../components/ai-response/meta.js\";\nimport { meta as meta$15 } from \"../components/ai-sources/meta.js\";\nimport { meta as meta$16 } from \"../components/ai-structured-output/meta.js\";\nimport { meta as meta$17 } from \"../components/ai-suggested-value/meta.js\";\nimport { meta as meta$18 } from \"../components/ai-token-usage/meta.js\";\nimport { meta as meta$19 } from \"../components/ai-tool/meta.js\";\nimport { meta as meta$20 } from \"../components/alert/meta.js\";\nimport { meta as meta$21 } from \"../components/avatar/meta.js\";\nimport { meta as meta$22 } from \"../components/badge/meta.js\";\nimport { meta as meta$23 } from \"../components/button/meta.js\";\nimport { meta as meta$24 } from \"../components/calendar/meta.js\";\nimport { meta as meta$25 } from \"../components/card/meta.js\";\nimport { meta as meta$26 } from \"../components/checkbox/meta.js\";\nimport { meta as meta$27 } from \"../components/code-block/meta.js\";\nimport { meta as meta$28 } from \"../components/combobox/meta.js\";\nimport { meta as meta$29 } from \"../components/command/meta.js\";\nimport { meta as meta$30 } from \"../components/confirm-typed/meta.js\";\nimport { meta as meta$31 } from \"../components/cron-editor/meta.js\";\nimport { meta as meta$32 } from \"../components/data-table/meta.js\";\nimport { meta as meta$33 } from \"../components/date-picker/meta.js\";\nimport { meta as meta$34 } from \"../components/dialog/meta.js\";\nimport { meta as meta$35 } from \"../components/diff-viewer/meta.js\";\nimport { meta as meta$36 } from \"../components/dns-record/meta.js\";\nimport { meta as meta$37 } from \"../components/drawer/meta.js\";\nimport { meta as meta$38 } from \"../components/dropdown-menu/meta.js\";\nimport { meta as meta$39 } from \"../components/empty-state/meta.js\";\nimport { meta as meta$40 } from \"../components/file-upload/meta.js\";\nimport { meta as meta$41 } from \"../components/form/meta.js\";\nimport { meta as meta$42 } from \"../components/input/meta.js\";\nimport { meta as meta$43 } from \"../components/label/meta.js\";\nimport { meta as meta$44 } from \"../components/log-viewer/meta.js\";\nimport { meta as meta$45 } from \"../components/meter/meta.js\";\nimport { meta as meta$46 } from \"../components/metric-delta/meta.js\";\nimport { meta as meta$47 } from \"../components/pagination/meta.js\";\nimport { meta as meta$48 } from \"../components/permission-matrix/meta.js\";\nimport { meta as meta$49 } from \"../components/popover/meta.js\";\nimport { meta as meta$50 } from \"../components/progress/meta.js\";\nimport { meta as meta$51 } from \"../components/radio-group/meta.js\";\nimport { meta as meta$52 } from \"../components/record-diff/meta.js\";\nimport { meta as meta$53 } from \"../components/secret-field/meta.js\";\nimport { meta as meta$54 } from \"../components/select/meta.js\";\nimport { meta as meta$55 } from \"../components/separator/meta.js\";\nimport { meta as meta$56 } from \"../components/session-expiry/meta.js\";\nimport { meta as meta$57 } from \"../components/sheet/meta.js\";\nimport { meta as meta$58 } from \"../components/shortcut-recorder/meta.js\";\nimport { meta as meta$59 } from \"../components/skeleton/meta.js\";\nimport { meta as meta$60 } from \"../components/slider/meta.js\";\nimport { meta as meta$61 } from \"../components/spinner/meta.js\";\nimport { meta as meta$62 } from \"../components/switch/meta.js\";\nimport { meta as meta$63 } from \"../components/sync-status/meta.js\";\nimport { meta as meta$64 } from \"../components/table/meta.js\";\nimport { meta as meta$65 } from \"../components/tabs/meta.js\";\nimport { meta as meta$66 } from \"../components/tags-input/meta.js\";\nimport { meta as meta$67 } from \"../components/time-range-picker/meta.js\";\nimport { meta as meta$68 } from \"../components/toast/meta.js\";\nimport { meta as meta$69 } from \"../components/tooltip/meta.js\";\nimport { blockMetas } from \"./blocks.js\";\n//#region src/registry/components.ts\n/**\n* Every component in the registry.\n*\n* An explicit list rather than a glob: the registry build runs in plain Node,\n* where bundler-only globbing is unavailable, and a static list is also what\n* lets the bundle tree-shake. `meta.test.ts` fails if a component directory\n* exists that is missing from here, so it cannot silently fall out of date.\n*\n* Identifiers carry a `Meta` suffix because component names include reserved\n* words — `switch` cannot be a binding name.\n*/\nconst componentMetas = [\n\tmeta,\n\tmeta$1,\n\tmeta$2,\n\tmeta$3,\n\tmeta$4,\n\tmeta$5,\n\tmeta$6,\n\tmeta$7,\n\tmeta$8,\n\tmeta$9,\n\tmeta$10,\n\tmeta$11,\n\tmeta$12,\n\tmeta$13,\n\tmeta$14,\n\tmeta$15,\n\tmeta$16,\n\tmeta$17,\n\tmeta$18,\n\tmeta$19,\n\tmeta$20,\n\tmeta$21,\n\tmeta$22,\n\tmeta$23,\n\tmeta$24,\n\tmeta$25,\n\tmeta$26,\n\tmeta$27,\n\tmeta$28,\n\tmeta$29,\n\tmeta$30,\n\tmeta$31,\n\tmeta$32,\n\tmeta$33,\n\tmeta$34,\n\tmeta$35,\n\tmeta$36,\n\tmeta$37,\n\tmeta$38,\n\tmeta$39,\n\tmeta$40,\n\tmeta$41,\n\tmeta$42,\n\tmeta$43,\n\tmeta$44,\n\tmeta$45,\n\tmeta$46,\n\tmeta$47,\n\tmeta$48,\n\tmeta$49,\n\tmeta$50,\n\tmeta$51,\n\tmeta$52,\n\tmeta$53,\n\tmeta$54,\n\tmeta$55,\n\tmeta$56,\n\tmeta$57,\n\tmeta$58,\n\tmeta$59,\n\tmeta$60,\n\tmeta$61,\n\tmeta$62,\n\tmeta$63,\n\tmeta$64,\n\tmeta$65,\n\tmeta$66,\n\tmeta$67,\n\tmeta$68,\n\tmeta$69\n];\n//#endregion\nexport { COMPONENT_CATEGORIES, COMPONENT_STATUSES, blockMetas, componentMetas };\n\n//# sourceMappingURL=components.js.map","import { readFileSync, mkdirSync, writeFileSync, rmSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath, pathToFileURL } from \"node:url\";\n\nimport { blockMetas, componentMetas, type ComponentMeta } from \"@dowel-ui/react/registry\";\n\nimport { hashContent } from \"./hash\";\nimport {\n REGISTRY_VERSION,\n registryIndexSchema,\n registryItemSchema,\n type RegistryFile,\n type RegistryIndexEntry,\n type RegistryItem,\n} from \"./schema\";\n\n/**\n * Emits the public registry.\n *\n * Everything the CLI installs originates here, from the same source files the\n * library itself builds and tests. There is no second copy of a component to\n * drift out of sync.\n */\n\nconst here = dirname(fileURLToPath(import.meta.url));\nconst uiSrc = join(here, \"..\", \"..\", \"ui\", \"src\");\nconst themesSrc = join(here, \"..\", \"..\", \"themes\", \"src\");\nconst uiPackageJson = JSON.parse(\n readFileSync(join(here, \"..\", \"..\", \"ui\", \"package.json\"), \"utf8\"),\n) as { name: string; version: string };\n\nfunction read(path: string): string {\n return readFileSync(path, \"utf8\");\n}\n\n/**\n * Turns a meta into a registry item.\n *\n * Components and blocks differ only in where their source lives and where it is\n * installed, so one function covers both rather than two that drift.\n */\nfunction buildSourceItem(meta: ComponentMeta): RegistryItem {\n const isBlock = meta.kind === \"block\";\n const sourceDir = join(uiSrc, isBlock ? \"blocks\" : \"components\", meta.name);\n const group = isBlock ? \"blocks\" : \"ui\";\n const fileType = isBlock ? \"registry:block\" : \"registry:ui\";\n\n const files: RegistryFile[] = meta.files.map((file) => {\n const content = read(join(sourceDir, file));\n return {\n path: `${group}/${file}`,\n type: fileType,\n content,\n hash: hashContent(content),\n };\n });\n\n return registryItemSchema.parse({\n $schema: \"./schema/registry-item.json\",\n registryVersion: REGISTRY_VERSION,\n name: meta.name,\n type: fileType,\n title: meta.title,\n description: meta.description,\n category: meta.category,\n status: meta.status,\n dependencies: meta.dependencies,\n registryDependencies: meta.registryDependencies,\n files,\n a11y: meta.a11y,\n });\n}\n\n/**\n * The utilities every component imports.\n *\n * Written by `init` rather than by `add`, because a project needs them before\n * the first component and every component assumes they are present.\n */\nfunction buildUtilsItem(): RegistryItem {\n const files: RegistryFile[] = ([\"utils.ts\", \"styles.ts\"] as const).map((file) => {\n const content = read(join(uiSrc, \"lib\", file));\n return {\n path: `lib/${file}`,\n type: \"registry:lib\",\n content,\n hash: hashContent(content),\n };\n });\n\n return registryItemSchema.parse({\n registryVersion: REGISTRY_VERSION,\n name: \"utils\",\n type: \"registry:lib\",\n title: \"Utilities\",\n description:\n \"The cn() class merger and the shared interaction-state fragments every component uses.\",\n category: \"foundation\",\n status: \"stable\",\n dependencies: [\"clsx\", \"tailwind-merge\"],\n registryDependencies: [],\n files,\n });\n}\n\n/**\n * The design tokens, as CSS to append to the project stylesheet.\n *\n * Appended rather than imported from a package: a consumer who cannot edit the\n * tokens does not really own their design system, which is the whole premise.\n */\nfunction buildThemeItem(): RegistryItem {\n const content = [\n \"/* Design tokens. Safe to edit — this is your copy. */\",\n read(join(themesSrc, \"tokens.css\")),\n read(join(themesSrc, \"base.css\")),\n ].join(\"\\n\\n\");\n\n return registryItemSchema.parse({\n registryVersion: REGISTRY_VERSION,\n name: \"theme\",\n type: \"registry:theme\",\n title: \"Theme\",\n description:\n \"Design tokens: colour, radius, typography, elevation and motion, in light and dark.\",\n category: \"foundation\",\n status: \"stable\",\n dependencies: [],\n registryDependencies: [],\n files: [\n {\n path: \"theme.css\",\n type: \"registry:style\",\n content,\n hash: hashContent(content),\n },\n ],\n });\n}\n\nexport function buildRegistry(): RegistryItem[] {\n return [\n buildUtilsItem(),\n buildThemeItem(),\n ...componentMetas.map(buildSourceItem),\n ...blockMetas.map(buildSourceItem),\n ];\n}\n\nexport function buildIndex(items: RegistryItem[]) {\n const entries: RegistryIndexEntry[] = items.map((item) => ({\n name: item.name,\n type: item.type,\n title: item.title,\n description: item.description,\n category: item.category,\n status: item.status,\n dependencies: item.dependencies,\n registryDependencies: item.registryDependencies,\n fileCount: item.files.length,\n }));\n\n return registryIndexSchema.parse({\n $schema: \"./schema/registry-index.json\",\n registryVersion: REGISTRY_VERSION,\n // The package version, not a timestamp: the same source must always produce\n // byte-identical output, or every build shows as a change.\n generatedFrom: `${uiPackageJson.name}@${uiPackageJson.version}`,\n items: entries,\n });\n}\n\nexport function writeRegistry(outDir: string): { items: number; files: number } {\n const items = buildRegistry();\n const index = buildIndex(items);\n\n rmSync(outDir, { recursive: true, force: true });\n mkdirSync(outDir, { recursive: true });\n\n writeFileSync(join(outDir, \"index.json\"), `${JSON.stringify(index, null, 2)}\\n`);\n for (const item of items) {\n writeFileSync(join(outDir, `${item.name}.json`), `${JSON.stringify(item, null, 2)}\\n`);\n }\n\n return {\n items: items.length,\n files: items.reduce((total, item) => total + item.files.length, 0),\n };\n}\n\n// Run directly: `tsx src/build.ts [--out <dir>]`\nconst invokedDirectly =\n process.argv[1] !== undefined && import.meta.url === pathToFileURL(process.argv[1]).href;\n\nif (invokedDirectly) {\n const outIndex = process.argv.indexOf(\"--out\");\n const outDir =\n outIndex === -1\n ? join(here, \"..\", \"r\")\n : (process.argv[outIndex + 1] ?? join(here, \"..\", \"r\"));\n\n const result = writeRegistry(outDir);\n console.log(\n `Registry written to ${outDir}: ${String(result.items)} items, ${String(result.files)} files.`,\n );\n}\n"],"mappings":"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HrBY,WAAW;EACvB,MAAM;EACN,MAAM;EACN,OAAO;EACP,aAAa;EACb,UAAU;EACV,QAAQ;EACR,cAAc,CAAC;EACf,sBAAsB;GACrB;GACA;GACA;GACA;GACA;EACD;EACA,OAAO,CAAC,aAAa;EACrB,MAAM;CACP,CGKCC;CFtBY,WAAW;EACvB,MAAM;EACN,MAAM;EACN,OAAO;EACP,aAAa;EACb,UAAU;EACV,QAAQ;EACR,cAAc,CAAC;EACf,sBAAsB;GACrB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACD;EACA,OAAO,CAAC,cAAc;EACtB,MAAM;CACP,CECCC;CDvBY,WAAW;EACvB,MAAM;EACN,MAAM;EACN,OAAO;EACP,aAAa;EACb,UAAU;EACV,QAAQ;EACR,cAAc,CAAC;EACf,sBAAsB;GACrB;GACA;GACA;GACA;GACA;GACA;EACD;EACA,OAAO,CAAC,YAAY;EACpB,MAAM;CACP,CCMCC;AACD;;;;;;;;;;;;;;ACyDA,MAAM,iBAAiB;CACtBC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;AACD;;;;;;;;;;ACnIA,MAAM,OAAO,QAAQ,cAAc,YAAY,GAAG,CAAC;AACnD,MAAM,QAAQ,KAAK,MAAM,MAAM,MAAM,MAAM,KAAK;AAChD,MAAM,YAAY,KAAK,MAAM,MAAM,MAAM,UAAU,KAAK;AACxD,MAAM,gBAAgB,KAAK,MACzB,aAAa,KAAK,MAAM,MAAM,MAAM,MAAM,cAAc,GAAG,MAAM,CACnE;AAEA,SAAS,KAAK,MAAsB;CAClC,OAAO,aAAa,MAAM,MAAM;AAClC;;;;;;;AAQA,SAAS,gBAAgB,MAAmC;CAC1D,MAAM,UAAU,KAAK,SAAS;CAC9B,MAAM,YAAY,KAAK,OAAO,UAAU,WAAW,cAAc,KAAK,IAAI;CAC1E,MAAM,QAAQ,UAAU,WAAW;CACnC,MAAM,WAAW,UAAU,mBAAmB;CAE9C,MAAM,QAAwB,KAAK,MAAM,KAAK,SAAS;EACrD,MAAM,UAAU,KAAK,KAAK,WAAW,IAAI,CAAC;EAC1C,OAAO;GACL,MAAM,GAAG,MAAM,GAAG;GAClB,MAAM;GACN;GACA,MAAM,YAAY,OAAO;EAC3B;CACF,CAAC;CAED,OAAO,mBAAmB,MAAM;EAC9B,SAAS;EACT,iBAAA;EACA,MAAM,KAAK;EACX,MAAM;EACN,OAAO,KAAK;EACZ,aAAa,KAAK;EAClB,UAAU,KAAK;EACf,QAAQ,KAAK;EACb,cAAc,KAAK;EACnB,sBAAsB,KAAK;EAC3B;EACA,MAAM,KAAK;CACb,CAAC;AACH;;;;;;;AAQA,SAAS,iBAA+B;CACtC,MAAM,QAAyB,CAAC,YAAY,WAAW,CAAC,CAAW,KAAK,SAAS;EAC/E,MAAM,UAAU,KAAK,KAAK,OAAO,OAAO,IAAI,CAAC;EAC7C,OAAO;GACL,MAAM,OAAO;GACb,MAAM;GACN;GACA,MAAM,YAAY,OAAO;EAC3B;CACF,CAAC;CAED,OAAO,mBAAmB,MAAM;EAC9B,iBAAA;EACA,MAAM;EACN,MAAM;EACN,OAAO;EACP,aACE;EACF,UAAU;EACV,QAAQ;EACR,cAAc,CAAC,QAAQ,gBAAgB;EACvC,sBAAsB,CAAC;EACvB;CACF,CAAC;AACH;;;;;;;AAQA,SAAS,iBAA+B;CACtC,MAAM,UAAU;EACd;EACA,KAAK,KAAK,WAAW,YAAY,CAAC;EAClC,KAAK,KAAK,WAAW,UAAU,CAAC;CAClC,CAAC,CAAC,KAAK,MAAM;CAEb,OAAO,mBAAmB,MAAM;EAC9B,iBAAA;EACA,MAAM;EACN,MAAM;EACN,OAAO;EACP,aACE;EACF,UAAU;EACV,QAAQ;EACR,cAAc,CAAC;EACf,sBAAsB,CAAC;EACvB,OAAO,CACL;GACE,MAAM;GACN,MAAM;GACN;GACA,MAAM,YAAY,OAAO;EAC3B,CACF;CACF,CAAC;AACH;AAEA,SAAgB,gBAAgC;CAC9C,OAAO;EACL,eAAe;EACf,eAAe;EACf,GAAG,eAAe,IAAI,eAAe;EACrC,GAAG,WAAW,IAAI,eAAe;CACnC;AACF;AAEA,SAAgB,WAAW,OAAuB;CAChD,MAAM,UAAgC,MAAM,KAAK,UAAU;EACzD,MAAM,KAAK;EACX,MAAM,KAAK;EACX,OAAO,KAAK;EACZ,aAAa,KAAK;EAClB,UAAU,KAAK;EACf,QAAQ,KAAK;EACb,cAAc,KAAK;EACnB,sBAAsB,KAAK;EAC3B,WAAW,KAAK,MAAM;CACxB,EAAE;CAEF,OAAO,oBAAoB,MAAM;EAC/B,SAAS;EACT,iBAAA;EAGA,eAAe,GAAG,cAAc,KAAK,GAAG,cAAc;EACtD,OAAO;CACT,CAAC;AACH;AAEA,SAAgB,cAAc,QAAkD;CAC9E,MAAM,QAAQ,cAAc;CAC5B,MAAM,QAAQ,WAAW,KAAK;CAE9B,OAAO,QAAQ;EAAE,WAAW;EAAM,OAAO;CAAK,CAAC;CAC/C,UAAU,QAAQ,EAAE,WAAW,KAAK,CAAC;CAErC,cAAc,KAAK,QAAQ,YAAY,GAAG,GAAG,KAAK,UAAU,OAAO,MAAM,CAAC,EAAE,GAAG;CAC/E,KAAK,MAAM,QAAQ,OACjB,cAAc,KAAK,QAAQ,GAAG,KAAK,KAAK,MAAM,GAAG,GAAG,KAAK,UAAU,MAAM,MAAM,CAAC,EAAE,GAAG;CAGvF,OAAO;EACL,OAAO,MAAM;EACb,OAAO,MAAM,QAAQ,OAAO,SAAS,QAAQ,KAAK,MAAM,QAAQ,CAAC;CACnE;AACF;AAMA,IAFE,QAAQ,KAAK,OAAO,KAAA,KAAa,YAAY,QAAQ,cAAc,QAAQ,KAAK,EAAE,CAAC,CAAC,MAEjE;CACnB,MAAM,WAAW,QAAQ,KAAK,QAAQ,OAAO;CAC7C,MAAM,SACJ,aAAa,KACT,KAAK,MAAM,MAAM,GAAG,IACnB,QAAQ,KAAK,WAAW,MAAM,KAAK,MAAM,MAAM,GAAG;CAEzD,MAAM,SAAS,cAAc,MAAM;CACnC,QAAQ,IACN,uBAAuB,OAAO,IAAI,OAAO,OAAO,KAAK,EAAE,UAAU,OAAO,OAAO,KAAK,EAAE,QACxF;AACF"}
1
+ {"version":3,"file":"build.js","names":["meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta","meta$1","meta$2","meta$3","meta$4","meta$5","meta$6","meta$7","meta$9","meta$10","meta$11","meta$12","meta$13","meta$14","meta$15","meta$16","meta","meta$1","meta$2","meta$3","meta$4","meta$5","meta$6","meta$7","meta$8","meta$9","meta$10","meta$11","meta$12","meta$13","meta$14","meta$15","meta$16","meta$17","meta$18","meta$19","meta$20","meta$21","meta$22","meta$23","meta$24","meta$25","meta$26","meta$27","meta$28","meta$29","meta$30","meta$31","meta$32","meta$33","meta$34","meta$35","meta$37","meta$36","meta$38","meta$39","meta$40","meta$41","meta$42","meta$43","meta$44","meta$45","meta$46","meta$47","meta$48","meta$49","meta$50","meta$51","meta$52","meta$53","meta$54","meta$55","meta$56","meta$57","meta$58","meta$59","meta$61","meta$60","meta$62","meta$63","meta$64","meta$65","meta$66","meta$67","meta$68","meta$69","meta$70","meta$71","meta$72","meta$73","meta$74"],"sources":["../../ui/dist/registry/schema.js","../../ui/dist/components/accordion/meta.js","../../ui/dist/components/activity-feed/meta.js","../../ui/dist/components/ai-action-ledger/meta.js","../../ui/dist/components/ai-agent-plan/meta.js","../../ui/dist/components/ai-agent-status/meta.js","../../ui/dist/components/ai-approval-request/meta.js","../../ui/dist/components/ai-conversation/meta.js","../../ui/dist/components/ai-disclosure/meta.js","../../ui/dist/components/ai-extraction-review/meta.js","../../ui/dist/components/ai-inline-completion/meta.js","../../ui/dist/components/ai-message/meta.js","../../ui/dist/components/ai-model-selector/meta.js","../../ui/dist/components/ai-prompt-input/meta.js","../../ui/dist/components/ai-reasoning/meta.js","../../ui/dist/components/ai-response/meta.js","../../ui/dist/components/ai-sources/meta.js","../../ui/dist/components/ai-structured-output/meta.js","../../ui/dist/components/ai-suggested-value/meta.js","../../ui/dist/components/ai-token-usage/meta.js","../../ui/dist/components/ai-tool/meta.js","../../ui/dist/components/alert/meta.js","../../ui/dist/components/avatar/meta.js","../../ui/dist/components/badge/meta.js","../../ui/dist/components/breadcrumb/meta.js","../../ui/dist/components/button/meta.js","../../ui/dist/components/calendar/meta.js","../../ui/dist/components/card/meta.js","../../ui/dist/components/checkbox/meta.js","../../ui/dist/components/code-block/meta.js","../../ui/dist/components/collapsible/meta.js","../../ui/dist/components/combobox/meta.js","../../ui/dist/components/command/meta.js","../../ui/dist/components/confirm-typed/meta.js","../../ui/dist/components/cron-editor/meta.js","../../ui/dist/components/data-table/meta.js","../../ui/dist/components/date-picker/meta.js","../../ui/dist/components/direction/meta.js","../../ui/dist/components/dialog/meta.js","../../ui/dist/components/diff-viewer/meta.js","../../ui/dist/components/dns-record/meta.js","../../ui/dist/components/drawer/meta.js","../../ui/dist/components/dropdown-menu/meta.js","../../ui/dist/components/empty-state/meta.js","../../ui/dist/components/file-upload/meta.js","../../ui/dist/components/form/meta.js","../../ui/dist/components/input/meta.js","../../ui/dist/components/label/meta.js","../../ui/dist/components/log-viewer/meta.js","../../ui/dist/components/meter/meta.js","../../ui/dist/components/metric-delta/meta.js","../../ui/dist/components/pagination/meta.js","../../ui/dist/components/permission-matrix/meta.js","../../ui/dist/components/popover/meta.js","../../ui/dist/components/progress/meta.js","../../ui/dist/components/radio-group/meta.js","../../ui/dist/components/record-diff/meta.js","../../ui/dist/components/secret-field/meta.js","../../ui/dist/components/select/meta.js","../../ui/dist/components/separator/meta.js","../../ui/dist/components/session-expiry/meta.js","../../ui/dist/components/sidebar/meta.js","../../ui/dist/components/sheet/meta.js","../../ui/dist/components/shortcut-recorder/meta.js","../../ui/dist/components/skeleton/meta.js","../../ui/dist/components/slider/meta.js","../../ui/dist/components/spinner/meta.js","../../ui/dist/components/switch/meta.js","../../ui/dist/components/sync-status/meta.js","../../ui/dist/components/table/meta.js","../../ui/dist/components/tabs/meta.js","../../ui/dist/components/tags-input/meta.js","../../ui/dist/components/time-range-picker/meta.js","../../ui/dist/components/textarea/meta.js","../../ui/dist/components/toast/meta.js","../../ui/dist/components/tooltip/meta.js","../../ui/dist/blocks/admin-dashboard/meta.js","../../ui/dist/blocks/admin-users/meta.js","../../ui/dist/blocks/agent-console/meta.js","../../ui/dist/blocks/ai-chat/meta.js","../../ui/dist/blocks/ai-dashboard/meta.js","../../ui/dist/blocks/ai-workspace/meta.js","../../ui/dist/blocks/analytics/meta.js","../../ui/dist/blocks/billing/meta.js","../../ui/dist/blocks/command-center/meta.js","../../ui/dist/blocks/crm/meta.js","../../ui/dist/blocks/dashboard/meta.js","../../ui/dist/blocks/forgot-password/meta.js","../../ui/dist/blocks/login/meta.js","../../ui/dist/blocks/onboarding/meta.js","../../ui/dist/blocks/pricing/meta.js","../../ui/dist/blocks/settings/meta.js","../../ui/dist/blocks/signup/meta.js","../../ui/dist/registry/blocks.js","../../ui/dist/registry/components.js","../src/build.ts"],"sourcesContent":["//#region src/registry/schema.ts\n/**\n* Registry metadata contract.\n*\n* Every component ships a `meta.ts` describing what the CLI must install\n* alongside it. This file defines the *type* only; `meta.test.ts` validates\n* every declaration against the source's real imports, so metadata cannot drift\n* from the code it describes. See docs/architecture/0003-registry-metadata.md.\n*/\nconst COMPONENT_CATEGORIES = [\n\t\"foundation\",\n\t\"display\",\n\t\"navigation\",\n\t\"overlay\",\n\t\"layout\",\n\t\"form\",\n\t\"feedback\",\n\t\"data\",\n\t\"ai\"\n];\nconst COMPONENT_STATUSES = [\n\t\"stable\",\n\t\"beta\",\n\t\"experimental\"\n];\n/** Identity helper that gives editors autocomplete inside `meta.ts`. */\nfunction defineMeta(meta) {\n\treturn meta;\n}\n//#endregion\nexport { COMPONENT_CATEGORIES, COMPONENT_STATUSES, defineMeta };\n\n//# sourceMappingURL=schema.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/accordion/meta.ts\nconst meta = defineMeta({\n\tname: \"accordion\",\n\ttitle: \"Accordion\",\n\tdescription: \"Vertically stacked sections that expand to reveal their content.\",\n\tcategory: \"data\",\n\tstatus: \"stable\",\n\tdependencies: [\"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"accordion.tsx\"],\n\ta11y: \"Each trigger is a button inside a heading, so screen reader users can navigate the sections by heading. aria-expanded and aria-controls tie the trigger to its panel, and arrow keys move between triggers.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/activity-feed/meta.ts\nconst meta = defineMeta({\n\tname: \"activity-feed\",\n\ttitle: \"Activity Feed\",\n\tdescription: \"A chronological list of events, with a connecting timeline rail.\",\n\tcategory: \"data\",\n\tstatus: \"stable\",\n\tdependencies: [\"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"activity-feed.tsx\"],\n\ta11y: \"An ordered list, so position and count are announced — the order is the meaning here. The rail and the indicators are decorative; the item text has to say what happened. ActivityTime requires a machine-readable dateTime, because a relative label like \\\"2 hours ago\\\" is ambiguous outside the moment it was rendered.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/ai-action-ledger/meta.ts\nconst meta = defineMeta({\n\tname: \"ai-action-ledger\",\n\ttitle: \"AI Action Ledger\",\n\tdescription: \"What an agent actually did, classified by what can be undone.\",\n\tcategory: \"ai\",\n\tstatus: \"stable\",\n\tdependencies: [\"class-variance-authority\", \"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"ai-action-ledger.tsx\"],\n\ta11y: \"Reversibility is stated in words on every entry, never by colour or icon alone — it decides whether the undo control means anything, so it cannot be decoration. Selection uses native checkboxes with real labels, and the revert button carries the count in its accessible name so it says what pressing it will do. The selection summary is an aria-live region because the wording changes as the choice changes, and warns before the click when something can only be offset rather than undone.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/ai-agent-plan/meta.ts\nconst meta = defineMeta({\n\tname: \"ai-agent-plan\",\n\ttitle: \"AI Agent Plan\",\n\tdescription: \"What an agent intends to do — including when it changes its mind mid-run.\",\n\tcategory: \"ai\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [],\n\tfiles: [\"ai-agent-plan.tsx\"],\n\ta11y: \"An ordered list, because a plan is a sequence and the order carries meaning an unordered list would discard. The running step carries aria-current=\\\"step\\\", which marks the reader's place without moving focus and fighting anyone reading ahead. Every status is stated in text as well as drawn, and the markers are aria-hidden so the status is not heard twice per step. The live region reports structural revisions only — announcing every status transition would talk over the reader continuously on a plan of any length.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/ai-agent-status/meta.ts\nconst meta = defineMeta({\n\tname: \"ai-agent-status\",\n\ttitle: \"AI Agent Status\",\n\tdescription: \"A pill showing what an agent is doing, in words as well as colour.\",\n\tcategory: \"ai\",\n\tstatus: \"stable\",\n\tdependencies: [\"class-variance-authority\"],\n\tregistryDependencies: [],\n\tfiles: [\"ai-agent-status.tsx\"],\n\ta11y: \"The state is always text. Agent states matter most when something has failed, which is exactly when a colour-only signal fails the people who most need to see it. Live announcements are off by default — several agents each announcing their transitions turns a dashboard into noise; enable it for the one agent being watched.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/ai-approval-request/meta.ts\nconst meta = defineMeta({\n\tname: \"ai-approval-request\",\n\ttitle: \"AI Approval Request\",\n\tdescription: \"Approve a tool call — after correcting the arguments the model got wrong.\",\n\tcategory: \"ai\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [],\n\tfiles: [\"ai-approval-request.tsx\"],\n\ta11y: \"The proposed arguments are a description list of real labelled form controls, so each value is associated with its name and editable ones are reachable by keyboard. A corrected argument is marked in text rather than by border colour alone, because an audit trail has to distinguish the model's proposal from the human's edit. The request is aria-busy while arguments are still arriving and the decision controls stay disabled until it is whole — rendering nothing until then, as the common implementation does, means nothing is on screen at the moment approval becomes relevant. Irreversibility is stated as a sentence, never as a severity colour.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/ai-conversation/meta.ts\nconst meta = defineMeta({\n\tname: \"ai-conversation\",\n\ttitle: \"AI Conversation\",\n\tdescription: \"The scrolling transcript container, with follow-on-new-content and a status region.\",\n\tcategory: \"ai\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [],\n\tfiles: [\"ai-conversation.tsx\"],\n\ta11y: \"The transcript is an ordered list, NOT a live region. A live region that updates on every streamed token is unusable with a screen reader, and is the most common accessibility failure in chat interfaces. Announce state — \\\"generating\\\", \\\"response complete\\\" — through ConversationStatus instead, and let the reader navigate the transcript at their own pace. Auto-scroll stops the moment the reader scrolls up, and ConversationScrollButton is the explicit way back.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/ai-disclosure/meta.ts\nconst meta = defineMeta({\n\tname: \"ai-disclosure\",\n\ttitle: \"AI Disclosure\",\n\tdescription: \"Tells a reader they are looking at AI, and what is actually known about it.\",\n\tcategory: \"ai\",\n\tstatus: \"stable\",\n\tdependencies: [\"class-variance-authority\"],\n\tregistryDependencies: [\"popover\"],\n\tfiles: [\"ai-disclosure.tsx\"],\n\ta11y: \"The text is the disclosure and the icon is decoration, marked aria-hidden — a sparkle alone is a mark a sighted reader may not decode and a screen reader passes over in silence, which is the exact failure this component exists to prevent. Each of the four kinds carries wording of its own, so the distinction between generated, manipulated and human-reviewed survives for anyone who cannot see the styling. The provenance panel states in words whether anyone checked the claims and who, rather than implying it with a tick, and its three states are told apart by their sentences rather than by colour. Scope: this renders the human-visible disclosures of EU AI Act Article 50(1) and 50(4). It cannot satisfy 50(2), which requires machine-readable marking inside the artifact by whoever generated it, and no React component can. Not legal advice.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/ai-extraction-review/meta.ts\nconst meta = defineMeta({\n\tname: \"ai-extraction-review\",\n\ttitle: \"AI Extraction Review\",\n\tdescription: \"Check extracted fields against the document they came from, and decide each one.\",\n\tcategory: \"ai\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [],\n\tfiles: [\"extraction-model.ts\", \"ai-extraction-review.tsx\"],\n\ta11y: \"Every field quotes its evidence in text under the value, so a reviewer who cannot see the highlight in the source still has what the model read. A value with no evidence is said in words — never left to look like a good one. The source is a focusable named region because it scrolls, and its highlights are mark elements with nothing spliced into the text, since a document read aloud with field names inserted is no longer the document. Focus anywhere in a field brings its evidence into view without moving focus, so a keyboard user is shown the source rather than sent into it. Each control's name carries the field it belongs to, so ten Accept buttons are ten different buttons. Status is a word, outside the label so editing never renames the control, and the running count is a polite live region present from the start. Enter accepts, except while an IME is composing.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/ai-inline-completion/meta.ts\nconst meta = defineMeta({\n\tname: \"ai-inline-completion\",\n\ttitle: \"AI Inline Completion\",\n\tdescription: \"Ghost-text suggestion inside a real textarea, accepted with Tab.\",\n\tcategory: \"ai\",\n\tstatus: \"beta\",\n\tdependencies: [],\n\tregistryDependencies: [],\n\tfiles: [\"ai-inline-completion.tsx\"],\n\ta11y: \"No WAI-ARIA pattern covers generative ghost text — combobox is the nearest and does not fit, because the suggestion is not one of a known set of options and a listbox would misdescribe it. So the suggestion is announced through a polite live description that names the keys, since a gesture nobody knows about is not an affordance, and the grey text itself is aria-hidden. Escape always dismisses and restores plain Tab, so the keyboard is never trapped in the field. The ghost hides during IME composition and whenever the caret is not at the end, rather than rendering somewhere it does not belong.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/ai-message/meta.ts\nconst meta = defineMeta({\n\tname: \"ai-message\",\n\ttitle: \"AI Message\",\n\tdescription: \"One turn in a conversation, with role, avatar, actions and footer slots.\",\n\tcategory: \"ai\",\n\tstatus: \"stable\",\n\tdependencies: [\"class-variance-authority\", \"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"ai-message.tsx\"],\n\ta11y: \"Every message carries a visually hidden label naming the speaker. Alignment and colour tell a sighted reader who is talking and tell a screen reader user nothing, so the role is always in text. Message actions fade in on hover but stay in the DOM and in the tab order — a control that only exists on hover is unreachable by keyboard and invisible on touch.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/ai-model-selector/meta.ts\nconst meta = defineMeta({\n\tname: \"ai-model-selector\",\n\ttitle: \"AI Model Selector\",\n\tdescription: \"Picks the model a conversation runs on, with descriptions and availability.\",\n\tcategory: \"ai\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [\"select\"],\n\tfiles: [\"ai-model-selector.tsx\"],\n\ta11y: \"Inherits Select's listbox keyboard model. Each option sets textValue to the model name so typeahead matches the name rather than the description. A disabled model shows and announces why it is unavailable — a disabled option with no reason reads as a broken interface.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/ai-prompt-input/meta.ts\nconst meta = defineMeta({\n\tname: \"ai-prompt-input\",\n\ttitle: \"AI Prompt Input\",\n\tdescription: \"The composer: auto-growing textarea, send-on-Enter, and a send/stop control.\",\n\tcategory: \"ai\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [],\n\tfiles: [\"ai-prompt-input.tsx\"],\n\ta11y: \"Enter sends and Shift+Enter inserts a newline, but never while an IME composition is active — for Japanese, Chinese and Korean input Enter confirms a candidate, and sending there truncates the sentence mid-word. The submit control renames itself to \\\"Stop generating\\\" while busy, so its accessible name always matches what it does. The character counter stays silent until it nears the limit; announcing every keystroke would be unusable.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/ai-reasoning/meta.ts\nconst meta = defineMeta({\n\tname: \"ai-reasoning\",\n\ttitle: \"AI Reasoning\",\n\tdescription: \"A collapsible disclosure for the model's reasoning.\",\n\tcategory: \"ai\",\n\tstatus: \"stable\",\n\tdependencies: [\"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"ai-reasoning.tsx\"],\n\ta11y: \"A standard disclosure with aria-expanded on the trigger. Collapsed by default because reasoning is supporting material — giving it the same weight as the answer buries the answer. The trigger's label changes while reasoning streams, so its accessible name matches what is happening.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/ai-response/meta.ts\nconst meta = defineMeta({\n\tname: \"ai-response\",\n\ttitle: \"AI Response\",\n\tdescription: \"Assistant response text, with a streaming caret and a thinking indicator.\",\n\tcategory: \"ai\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [],\n\tfiles: [\"ai-response.tsx\"],\n\ta11y: \"Deliberately not a live region: announcing streamed text as it arrives interrupts a screen reader user on every token. Announce state through ConversationStatus and let them read the response when it settles. The caret is decorative; ThinkingIndicator carries a label because it is the only thing on screen while waiting for the first token.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/ai-sources/meta.ts\nconst meta = defineMeta({\n\tname: \"ai-sources\",\n\ttitle: \"AI Sources\",\n\tdescription: \"Inline citation markers and the source list they refer to.\",\n\tcategory: \"ai\",\n\tstatus: \"stable\",\n\tdependencies: [\"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"ai-sources.tsx\"],\n\ta11y: \"An inline marker shows a bare number, which conveys nothing on its own, so the source title is carried in its accessible name. A marker with no href renders as text rather than as a link that goes nowhere. The source list is ordered, because the marker numbers refer to positions in it.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/ai-structured-output/meta.ts\nconst meta = defineMeta({\n\tname: \"ai-structured-output\",\n\ttitle: \"AI Structured Output\",\n\tdescription: \"An object arriving field by field from the model, without the layout jumping.\",\n\tcategory: \"ai\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [],\n\tfiles: [\"ai-structured-output.tsx\"],\n\ta11y: \"A description list, so each value is associated with its label rather than floating beside it. The region is aria-live=\\\"polite\\\" with aria-busy while streaming, so fields are announced as they settle instead of re-reading the whole object on every token. Height is reserved from the declared field list, which keeps focus and reading position stable as values arrive. Confidence is stated as a number in words, never as a colour alone.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/ai-suggested-value/meta.ts\nconst meta = defineMeta({\n\tname: \"ai-suggested-value\",\n\ttitle: \"AI Suggested Value\",\n\tdescription: \"An AI-proposed value for any form control, pending until accepted and marked afterwards.\",\n\tcategory: \"ai\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [],\n\tfiles: [\"ai-suggested-value.tsx\"],\n\ta11y: \"The suggestion is the control's description, so a reader who lands on the field hears it without any announcement — and announcing is opt-in, because a form filling twenty fields at once would narrate all twenty. The row that holds it is rendered from the start and never display:none, so when announcing is on, a suggestion arriving after mount is actually heard. Each button's name carries the field it belongs to, so a page of Accepts is a page of different buttons. Provenance and confidence are words with a number, never a colour. Acceptance is reported, not performed: the control is the consumer's, so its value, its label and its own keyboard behaviour are untouched — there is no shortcut hijacked from a select or a date field. The id and ARIA a FormControl passes down are forwarded to the control, and an existing aria-describedby is merged rather than replaced.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/ai-token-usage/meta.ts\nconst meta = defineMeta({\n\tname: \"ai-token-usage\",\n\ttitle: \"AI Token Usage\",\n\tdescription: \"A gauge showing how much of the context window a conversation has used.\",\n\tcategory: \"ai\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [],\n\tfiles: [\"ai-token-usage.tsx\"],\n\ta11y: \"The numbers are the content and the bar only summarises them, so the bar is aria-hidden rather than a second progressbar to read past. Counts are formatted for the locale. Warning and over-limit states change the wording's colour but never remove the figures.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/ai-tool/meta.ts\nconst meta = defineMeta({\n\tname: \"ai-tool\",\n\ttitle: \"AI Tool Call\",\n\tdescription: \"A collapsible record of a tool the model called, its arguments and its result.\",\n\tcategory: \"ai\",\n\tstatus: \"stable\",\n\tdependencies: [\"class-variance-authority\", \"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"ai-tool.tsx\"],\n\ta11y: \"A disclosure: the trigger exposes aria-expanded and controls the panel. Status is stated in words, not by a coloured dot — colour alone is unavailable to a screen reader and to anyone who cannot distinguish it. Payload blocks are focusable named regions, since JSON scrolls and an unfocusable scroll box is unreachable by keyboard.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/alert/meta.ts\nconst meta = defineMeta({\n\tname: \"alert\",\n\ttitle: \"Alert\",\n\tdescription: \"A callout that draws attention to an important message.\",\n\tcategory: \"feedback\",\n\tstatus: \"stable\",\n\tdependencies: [\"class-variance-authority\"],\n\tregistryDependencies: [],\n\tfiles: [\"alert.tsx\"],\n\ta11y: \"Not a live region by default. Pass live=\\\"polite\\\" for alerts that appear in response to a user action, or live=\\\"assertive\\\" for errors that must interrupt. Variant colour is never the only signal — the title carries the meaning.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/avatar/meta.ts\nconst meta = defineMeta({\n\tname: \"avatar\",\n\ttitle: \"Avatar\",\n\tdescription: \"An image representation of a user or entity with a graceful text fallback.\",\n\tcategory: \"display\",\n\tstatus: \"stable\",\n\tdependencies: [\"class-variance-authority\", \"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"avatar.tsx\"],\n\ta11y: \"Give AvatarImage a meaningful alt, or alt=\\\"\\\" when the adjacent text already names the person. Fallback initials are decorative and are not announced separately.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/badge/meta.ts\nconst meta = defineMeta({\n\tname: \"badge\",\n\ttitle: \"Badge\",\n\tdescription: \"A compact marker for status, counts and categories.\",\n\tcategory: \"display\",\n\tstatus: \"stable\",\n\tdependencies: [\"class-variance-authority\", \"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"badge.tsx\"],\n\ta11y: \"The badge label must convey the meaning on its own; variant colour is decoration. Use asChild to render an interactive badge as a link or button rather than adding handlers.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/breadcrumb/meta.ts\nconst meta = defineMeta({\n\tname: \"breadcrumb\",\n\ttitle: \"Breadcrumb\",\n\tdescription: \"Where the current page sits in the hierarchy, and how to get back up it.\",\n\tcategory: \"navigation\",\n\tstatus: \"stable\",\n\tdependencies: [\"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"breadcrumb.tsx\"],\n\ta11y: \"The current page is a span carrying aria-current=\\\"page\\\", not a link: a link to the page you are already on does nothing, and in a list of links it is indistinguishable from the ones that go somewhere. Separators are hidden from assistive technology, because the list already conveys the sequence and reading \\\"slash\\\" between every item is the design's punctuation leaking into the content. The ellipsis is the exception and is named, because it is content: it says levels have been left out.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/button/meta.ts\nconst meta = defineMeta({\n\tname: \"button\",\n\ttitle: \"Button\",\n\tdescription: \"Triggers an action or event, with variants for every level of emphasis.\",\n\tcategory: \"foundation\",\n\tstatus: \"stable\",\n\tdependencies: [\"class-variance-authority\", \"radix-ui\"],\n\tregistryDependencies: [\"spinner\"],\n\tfiles: [\"button.tsx\"],\n\ta11y: \"Keyboard activatable via Enter and Space. The loading state uses aria-disabled and aria-busy rather than the disabled attribute, so focus is never stranded mid-action. Use `size=\\\"icon\\\"` only with an accessible name from aria-label or visually hidden text.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/calendar/meta.ts\nconst meta = defineMeta({\n\tname: \"calendar\",\n\ttitle: \"Calendar\",\n\tdescription: \"A date grid for selecting a day, several days or a range.\",\n\tcategory: \"form\",\n\tstatus: \"stable\",\n\tdependencies: [\"react-day-picker\"],\n\tregistryDependencies: [\"button\"],\n\tfiles: [\"calendar.tsx\"],\n\ta11y: \"A real grid with roving focus: arrows move by day, Page Up/Down by month, Home/End to the ends of a week. Selection is announced through aria-selected, and the month caption is a live region so moving between months is announced. Give the calendar an accessible name when more than one is on the page.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/card/meta.ts\nconst meta = defineMeta({\n\tname: \"card\",\n\ttitle: \"Card\",\n\tdescription: \"A surface that groups related content and actions into a single block.\",\n\tcategory: \"display\",\n\tstatus: \"stable\",\n\tdependencies: [\"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"card.tsx\"],\n\ta11y: \"Card renders a plain div with no implicit landmark. CardTitle is an h3 by default — use asChild to set the level the page actually needs, since heading levels must increase by one, or to render something that is not a heading at all.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/checkbox/meta.ts\nconst meta = defineMeta({\n\tname: \"checkbox\",\n\ttitle: \"Checkbox\",\n\tdescription: \"A control for an on/off choice, with support for an indeterminate state.\",\n\tcategory: \"form\",\n\tstatus: \"stable\",\n\tdependencies: [\"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"checkbox.tsx\"],\n\ta11y: \"Toggles with Space, matching the native control. Always pair with a Label via htmlFor/id — the box alone has no accessible name. Indeterminate is announced as \\\"mixed\\\" and is a state the application sets, not one the user can reach by clicking.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/code-block/meta.ts\nconst meta = defineMeta({\n\tname: \"code-block\",\n\ttitle: \"Code Block\",\n\tdescription: \"A block of code with a copy control, ready for any highlighter.\",\n\tcategory: \"data\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [],\n\tfiles: [\"code-block.tsx\"],\n\ta11y: \"The pre is a focusable named region, since code overflows horizontally and an unfocusable scroll box is unreachable by keyboard. Copying is announced through a polite live region as well as shown, and a refused clipboard write reports failure rather than looking like success.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/collapsible/meta.ts\nconst meta = defineMeta({\n\tname: \"collapsible\",\n\ttitle: \"Collapsible\",\n\tdescription: \"A single section that opens and closes, without an accordion's set semantics.\",\n\tcategory: \"layout\",\n\tstatus: \"stable\",\n\tdependencies: [\"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"collapsible.tsx\"],\n\ta11y: \"The trigger carries aria-expanded and points at the region it controls, both from the primitive. Reach for this rather than an Accordion of one item: a single-item Accordion gives its trigger a heading role and a position in a list of one, neither of which is true.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/combobox/meta.ts\nconst meta = defineMeta({\n\tname: \"combobox\",\n\ttitle: \"Combobox\",\n\tdescription: \"A searchable single-select built on the ARIA combobox pattern.\",\n\tcategory: \"form\",\n\tstatus: \"stable\",\n\tdependencies: [\"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"combobox.tsx\"],\n\ta11y: \"The input owns role=\\\"combobox\\\" with aria-expanded, aria-controls and aria-autocomplete; the list owns role=\\\"listbox\\\" and each option role=\\\"option\\\" with aria-selected. Focus stays in the input while arrow keys move aria-activedescendant, so typing is never interrupted. Arrow navigation wraps, Home/End jump, Enter selects the active option and Escape closes.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/command/meta.ts\nconst meta = defineMeta({\n\tname: \"command\",\n\ttitle: \"Command\",\n\tdescription: \"A searchable command palette, with groups and a ⌘K dialog variant.\",\n\tcategory: \"navigation\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [\"dialog\"],\n\tfiles: [\"command.tsx\"],\n\ta11y: \"The input owns role=\\\"combobox\\\" and the list role=\\\"listbox\\\"; focus stays in the input while arrow keys move aria-activedescendant, so typing is never interrupted. Enter runs the active item through the same path as a click. A group whose items are all filtered out hides its heading rather than labelling nothing. CommandDialog always renders a title and description, visually hidden, so the dialog is never unnamed.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/confirm-typed/meta.ts\nconst meta = defineMeta({\n\tname: \"confirm-typed\",\n\ttitle: \"Confirm Typed\",\n\tdescription: \"Type the name to confirm — and be told, not ignored, when it does not match.\",\n\tcategory: \"form\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [\"button\", \"input\"],\n\tfiles: [\"confirm-typed.tsx\"],\n\ta11y: \"The button stays reachable while the text does not match, dimmed rather than disabled, and pressing it or Enter announces what was expected, marks the field invalid and returns focus to it — the common version disables the button and says nothing, so a keyboard user cannot tell whether anything happened. The match is announced once, on the transition, naming the action that became available, so nobody has to watch the button change colour. Typing itself stays silent, because a verdict on every keystroke is noise. The hint is the field's description and the button's, and the status region exists from the first render so the first announcement is heard. Pasting is allowed: blocking it punishes people who cannot type a long name easily and stops nobody who can select-all and copy.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/cron-editor/meta.ts\nconst meta = defineMeta({\n\tname: \"cron-editor\",\n\ttitle: \"Cron Editor\",\n\tdescription: \"A schedule as a cron expression, with a plain-language reading and the next runs.\",\n\tcategory: \"form\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [\"input\", \"select\"],\n\tfiles: [\"cron-expression.ts\", \"cron-editor.tsx\"],\n\ta11y: \"The expression field is described by one element that holds either the plain-language reading or the reason the expression is invalid, so a reader hears the error replace the reading rather than both at once; an invalid expression is never applied. The builder's day buttons are a named group of aria-pressed toggles with the full day name as the accessible name, and the last selected day cannot be removed silently — the group says why. Days 29 to 31 say in text that shorter months skip them. Next runs are a list of time elements with machine-readable datetimes, headed by the zone they are in, because a time with no zone is the classic scheduling mistake. Nothing clock-dependent renders until the clock is known, so server and client cannot disagree.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/data-table/meta.ts\nconst meta = defineMeta({\n\tname: \"data-table\",\n\ttitle: \"Data Table\",\n\tdescription: \"Presentation for a TanStack Table instance: sorting, column visibility and pagination.\",\n\tcategory: \"data\",\n\tstatus: \"stable\",\n\tdependencies: [\"@tanstack/react-table\"],\n\tregistryDependencies: [\n\t\t\"button\",\n\t\t\"dropdown-menu\",\n\t\t\"select\",\n\t\t\"table\"\n\t],\n\tfiles: [\"data-table.tsx\"],\n\ta11y: \"Sortable headers carry aria-sort, so the current sort is announced rather than being conveyed by an arrow icon alone, and each sort button has visually hidden text stating the column and its direction. The pagination status is a polite live region, because paging swaps the rows in place with no other signal. A column that cannot be sorted renders as text, not as a button that does nothing.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/date-picker/meta.ts\nconst meta = defineMeta({\n\tname: \"date-picker\",\n\ttitle: \"Date Picker\",\n\tdescription: \"A button that opens a calendar to pick a date or a date range.\",\n\tcategory: \"form\",\n\tstatus: \"stable\",\n\tdependencies: [\"react-day-picker\"],\n\tregistryDependencies: [\n\t\t\"button\",\n\t\t\"calendar\",\n\t\t\"popover\"\n\t],\n\tfiles: [\"date-picker.tsx\"],\n\ta11y: \"The trigger states the selected date, formatted for the locale, so its accessible name changes with the value. The popover is named because it carries role=\\\"dialog\\\". Selecting a single date closes the popover and returns focus to the trigger; a range stays open, since one click is only half an answer. Offer a typed input alongside it for dates the user already knows.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/direction/meta.ts\nconst meta = defineMeta({\n\tname: \"direction\",\n\ttitle: \"Direction Provider\",\n\tdescription: \"Tells the component primitives which way the writing runs, so menus and sliders mirror with the rest of the page.\",\n\tcategory: \"foundation\",\n\tstatus: \"stable\",\n\tdependencies: [\"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"direction.tsx\"],\n\ta11y: \"Needed only for right-to-left languages, and needed in addition to `dir` on the document rather than instead of it. The styling here is written with logical properties and follows `dir` by itself; the primitives underneath read direction from React context and assume left-to-right without a provider, which mirrors a page correctly except for its menus, selects and sliders — worse than not mirroring at all, because it looks deliberate.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/dialog/meta.ts\nconst meta = defineMeta({\n\tname: \"dialog\",\n\ttitle: \"Dialog\",\n\tdescription: \"A modal window that interrupts the user to gather a response.\",\n\tcategory: \"overlay\",\n\tstatus: \"stable\",\n\tdependencies: [\"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"dialog.tsx\"],\n\ta11y: \"Focus is trapped while open and restored to the trigger on close; Escape and an overlay click dismiss. Always render a DialogTitle — it names the dialog for screen readers. Use DialogDescription, or aria-describedby, to explain consequential actions.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/diff-viewer/meta.ts\nconst meta = defineMeta({\n\tname: \"diff-viewer\",\n\ttitle: \"Diff Viewer\",\n\tdescription: \"A diff you can style, and accept or reject hunk by hunk.\",\n\tcategory: \"data\",\n\tstatus: \"stable\",\n\tdependencies: [\"diff\"],\n\tregistryDependencies: [],\n\tfiles: [\"diff-model.ts\", \"diff-viewer.tsx\"],\n\ta11y: \"A semantic table, not a grid. role=\\\"grid\\\" would promise cell-by-cell arrow navigation that does not exist here and makes no sense for reading code. Every row states added, removed or unchanged in text, because a plus sign and a green tint are not information — a diff read aloud without it is just the same file twice. Line numbers are aria-hidden: they orient a sighted reader, and announcing two numbers before every line makes the diff unlistenable. Changed words are marked with mark elements so they survive as structure, and the empty half of a split pair is hidden rather than read as a blank line of code.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/dns-record/meta.ts\nconst meta = defineMeta({\n\tname: \"dns-record\",\n\ttitle: \"DNS Record\",\n\tdescription: \"Add this record at your provider: parts copied separately, checked with what was found.\",\n\tcategory: \"data\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [\"button\", \"spinner\"],\n\tfiles: [\"dns-record.tsx\"],\n\ta11y: \"The card is a region named by the record's type and purpose. Each part is a definition with its own copy button, named by the part it copies, so five Copy buttons are five different buttons. Verification status is a word in a polite live region, so the answer to a check arrives where it was asked for, and the card is aria-busy while checking. Copy results are announced in a separate region, present from the start, so a copy never replaces a check result mid-sentence; failure is announced with what to do instead. What the check found is a list, not a colour.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/drawer/meta.ts\nconst meta = defineMeta({\n\tname: \"drawer\",\n\ttitle: \"Drawer\",\n\tdescription: \"A bottom sheet that can be dismissed by dragging it down.\",\n\tcategory: \"overlay\",\n\tstatus: \"stable\",\n\tdependencies: [\"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"drawer.tsx\"],\n\ta11y: \"Drag is pointer-only and never the sole way out: Escape, the overlay and DrawerCancel all dismiss. The grab handle is aria-hidden because it duplicates those affordances. Always render a DrawerTitle.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/dropdown-menu/meta.ts\nconst meta = defineMeta({\n\tname: \"dropdown-menu\",\n\ttitle: \"Dropdown Menu\",\n\tdescription: \"A menu of actions revealed from a trigger, with submenus and selectable items.\",\n\tcategory: \"overlay\",\n\tstatus: \"stable\",\n\tdependencies: [\"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"dropdown-menu.tsx\"],\n\ta11y: \"Full menu keyboard model: arrows move, Home/End jump, typeahead searches, Escape closes and restores focus, Right/Left open and close submenus. Highlight is driven by data-highlighted so pointer and keyboard focus never diverge. Use it for actions — links belong in a nav, and value selection belongs in Select.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/empty-state/meta.ts\nconst meta = defineMeta({\n\tname: \"empty-state\",\n\ttitle: \"Empty State\",\n\tdescription: \"Shown where content would be, explaining why it is empty and what to do next.\",\n\tcategory: \"feedback\",\n\tstatus: \"stable\",\n\tdependencies: [\"class-variance-authority\"],\n\tregistryDependencies: [],\n\tfiles: [\"empty-state.tsx\"],\n\ta11y: \"A plain container with no implicit landmark or live region. When it replaces content after a search, put aria-live on the results region so the change is announced. The icon is decorative — the title has to carry the message on its own.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/file-upload/meta.ts\nconst meta = defineMeta({\n\tname: \"file-upload\",\n\ttitle: \"File Upload\",\n\tdescription: \"A dropzone over a real file input, plus the upload queue nobody ships.\",\n\tcategory: \"form\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [],\n\tfiles: [\"upload-queue.ts\", \"file-upload.tsx\"],\n\ta11y: \"The APG has no dropzone pattern, and inventing one is the usual failure — a div with role=\\\"button\\\", a keydown handler, and a picker keyboard users never reach. The control here is a real input[type=file] with a real label, which is already operable, already announced, and opens the picker on Enter and Space with nothing added. Drag and drop is a pointer convenience layered on top; every drop can also be done from the input. Each uploading file gets a progressbar named after it, status is always stated in words as well as drawn, and one polite live region summarises the whole queue rather than six per-file regions talking over each other.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/form/meta.ts\nconst meta = defineMeta({\n\tname: \"form\",\n\ttitle: \"Form\",\n\tdescription: \"Accessible field wiring that works with any form library, or none.\",\n\tcategory: \"form\",\n\tstatus: \"stable\",\n\tdependencies: [\"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"form.tsx\"],\n\ta11y: \"FormField generates the id, points the Label at the control, and assembles aria-describedby from whichever of the description and error are actually present — a dangling reference announces nothing and is flagged by axe. aria-invalid follows the error. FormMessage is a polite live region, so a late validation message is announced without interrupting.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/input/meta.ts\nconst meta = defineMeta({\n\tname: \"input\",\n\ttitle: \"Input\",\n\tdescription: \"A single-line text field with size variants and native validation styling.\",\n\tcategory: \"form\",\n\tstatus: \"stable\",\n\tdependencies: [\"class-variance-authority\"],\n\tregistryDependencies: [],\n\tfiles: [\"input.tsx\"],\n\ta11y: \"Always pair with a Label via htmlFor/id. Error state is driven by aria-invalid so assistive technology and styling stay in sync; describe the error with aria-describedby.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/label/meta.ts\nconst meta = defineMeta({\n\tname: \"label\",\n\ttitle: \"Label\",\n\tdescription: \"An accessible caption that associates text with a form control.\",\n\tcategory: \"form\",\n\tstatus: \"stable\",\n\tdependencies: [\"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"label.tsx\"],\n\ta11y: \"Set htmlFor to the id of the control it labels. Clicking the label moves focus to that control, including composite widgets that are not native inputs.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/log-viewer/meta.ts\nconst meta = defineMeta({\n\tname: \"log-viewer\",\n\ttitle: \"Log Viewer\",\n\tdescription: \"A streaming console with filtering, level facets and follow mode.\",\n\tcategory: \"data\",\n\tstatus: \"stable\",\n\tdependencies: [\"@tanstack/react-virtual\"],\n\tregistryDependencies: [],\n\tfiles: [\"log-stream.ts\", \"log-viewer.tsx\"],\n\ta11y: \"role=\\\"log\\\" implies aria-live=\\\"polite\\\", which is right for a few events and unusable for a console — a screen reader would read every line of a build and nothing else would be audible. Announcing is off by default and opt-in. Virtualization is the harder trade: most rows are not in the DOM, so assistive technology cannot reach them, which is why the component takes an onDownload escape rather than pretending the virtual window is the whole log. Levels are written in text as well as coloured, matches use mark elements rather than a background colour, and an invalid pattern is announced instead of silently showing an empty log that reads as \\\"nothing matched\\\".\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/meter/meta.ts\nconst meta = defineMeta({\n\tname: \"meter\",\n\ttitle: \"Meter\",\n\tdescription: \"A measurement against a capacity — quota, seats, spend — segmented by category.\",\n\tcategory: \"feedback\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [],\n\tfiles: [\"meter.tsx\"],\n\ta11y: \"Uses role=\\\"meter\\\", not role=\\\"progressbar\\\": a meter reports a level with no expectation of reaching the end, and screen readers phrase the two differently. The bar is one meter and the segments inside it are decoration — making each its own widget would put several unlabelled meters in the tab order to describe one quantity. aria-valuetext carries the unit and the capacity, because a bare \\\"4\\\" says nothing about 4 of what. Per-segment detail lives in MeterLegend as text, where it can be read.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/metric-delta/meta.ts\nconst meta = defineMeta({\n\tname: \"metric-delta\",\n\ttitle: \"Metric Delta\",\n\tdescription: \"A headline number with a change indicator that knows which direction is good.\",\n\tcategory: \"data\",\n\tstatus: \"stable\",\n\tdependencies: [\"class-variance-authority\"],\n\tregistryDependencies: [],\n\tfiles: [\"metric-delta.tsx\"],\n\ta11y: \"The meaning is never carried by colour and an arrow alone, which fails WCAG 1.4.1 — the direction and the comparison are always stated in text. The tile reads as one sentence rather than three fragments: the visible number and delta are aria-hidden and a single screen-reader description carries value, direction, comparison and, where given, sample size. A zero baseline is announced as having no percentage rather than as an infinite one.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/pagination/meta.ts\nconst meta = defineMeta({\n\tname: \"pagination\",\n\ttitle: \"Pagination\",\n\tdescription: \"Navigation between pages of a list.\",\n\tcategory: \"navigation\",\n\tstatus: \"stable\",\n\tdependencies: [\"radix-ui\"],\n\tregistryDependencies: [\"button\"],\n\tfiles: [\"pagination.tsx\"],\n\ta11y: \"A named nav landmark. The current page carries aria-current=\\\"page\\\" — styling it differently conveys nothing on its own. Links by default, since a page of results is a place worth sharing; use asChild for your router's link, or render buttons when paging only changes client state.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/permission-matrix/meta.ts\nconst meta = defineMeta({\n\tname: \"permission-matrix\",\n\ttitle: \"Permission Matrix\",\n\tdescription: \"Roles across, permissions down, with inheritance, locked roles and one tab stop.\",\n\tcategory: \"data\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [\"checkbox\"],\n\tfiles: [\"permission-model.ts\", \"permission-matrix.tsx\"],\n\ta11y: \"A grid in the WAI-ARIA sense: role=\\\"grid\\\" with one tab stop, arrow keys between cells, Home and End along a row and Ctrl with them across the whole matrix — the right call for a matrix that is operated, where it was the wrong one for a diff that is read. Every checkbox is named by both coordinates, \\\"Delete projects for Editor\\\", so a reader arriving by arrow key knows where they are without re-reading the headers. An inherited grant is a checked box that cannot be changed here, marked aria-disabled rather than disabled so it stays in the keyboard path, with the role it came from as its description. A locked role says in each cell's description that nothing can be changed. Group toggles are tri-state, and the column header counts each role's grants in text.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/popover/meta.ts\nconst meta = defineMeta({\n\tname: \"popover\",\n\ttitle: \"Popover\",\n\tdescription: \"Rich floating content anchored to a trigger.\",\n\tcategory: \"overlay\",\n\tstatus: \"stable\",\n\tdependencies: [\"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"popover.tsx\"],\n\ta11y: \"The content has role=\\\"dialog\\\" and therefore REQUIRES an accessible name — pass aria-label, or aria-labelledby pointing at a heading inside it. A development-only warning fires if neither is present. The trigger exposes aria-expanded and aria-controls; Escape closes and returns focus to it. Non-modal by default, so the rest of the page stays reachable; pass `modal` only when the content is a task the user must finish or abandon.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/progress/meta.ts\nconst meta = defineMeta({\n\tname: \"progress\",\n\ttitle: \"Progress\",\n\tdescription: \"Shows how far along a task is, or that one is running at all.\",\n\tcategory: \"feedback\",\n\tstatus: \"stable\",\n\tdependencies: [\"class-variance-authority\", \"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"progress.tsx\"],\n\ta11y: \"Exposed as role=\\\"progressbar\\\" with aria-valuenow, and give it a name with aria-label or aria-labelledby. Omitting `value` marks it indeterminate, which is announced differently from zero. Show the percentage in text as well — the bar alone is not readable at a glance for everyone.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/radio-group/meta.ts\nconst meta = defineMeta({\n\tname: \"radio-group\",\n\ttitle: \"Radio Group\",\n\tdescription: \"A set of mutually exclusive options.\",\n\tcategory: \"form\",\n\tstatus: \"stable\",\n\tdependencies: [\"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"radio-group.tsx\"],\n\ta11y: \"Arrow keys move between options and select as they go, and the group is a single tab stop — the standard radio model. Give the group an accessible name with aria-labelledby, and each item a Label tied by htmlFor/id.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/record-diff/meta.ts\nconst meta = defineMeta({\n\tname: \"record-diff\",\n\ttitle: \"Record Diff\",\n\tdescription: \"Field-level before and after, for audit entries, settings history and revisions.\",\n\tcategory: \"data\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [],\n\tfiles: [\"record-diff.tsx\"],\n\ta11y: \"A real table, not a grid of divs. Each field name is a th with scope=\\\"row\\\", so a value is announced with the field it belongs to rather than as a loose cell. The kind of change is never carried by row colour alone — every row states added, removed or changed in text for screen readers, satisfying WCAG 1.4.1. The unchanged-field toggle is a real button with aria-expanded. Redacted values never reach the DOM at all.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/secret-field/meta.ts\nconst meta = defineMeta({\n\tname: \"secret-field\",\n\ttitle: \"Secret Field\",\n\tdescription: \"An API key in its three states: shown once, hidden but revealable, and gone.\",\n\tcategory: \"form\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [\"button\", \"input\"],\n\tfiles: [\"secret-field.tsx\"],\n\ta11y: \"The value sits in a read-only input rather than a disabled one, so it can be focused, selected and read, and focusing a shown value selects all of it for copying by hand. The field's state — shown once, hidden, revealed, gone — is a sentence attached as its description, never a colour or an icon. Copying is announced through a status region that exists before the first copy, and failure is announced too, with what to do instead, because the clipboard can be refused. Every button carries the field's label in its name, so a settings page with several keys has several distinct Copy buttons. Regenerating is confirmed inline in a named group that states the consequence, since it revokes the current key.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/select/meta.ts\nconst meta = defineMeta({\n\tname: \"select\",\n\ttitle: \"Select\",\n\tdescription: \"Picks one value from a short list of options.\",\n\tcategory: \"form\",\n\tstatus: \"stable\",\n\tdependencies: [\"class-variance-authority\", \"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"select.tsx\"],\n\ta11y: \"Full listbox keyboard model: arrows move, typeahead jumps, Enter selects, Escape closes and restores focus. Give the trigger a name with aria-labelledby or a Label. Past about a dozen options prefer Combobox — scrolling a long listbox by keyboard is slow.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/separator/meta.ts\nconst meta = defineMeta({\n\tname: \"separator\",\n\ttitle: \"Separator\",\n\tdescription: \"A horizontal or vertical rule that divides content.\",\n\tcategory: \"layout\",\n\tstatus: \"stable\",\n\tdependencies: [\"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"separator.tsx\"],\n\ta11y: \"Decorative by default and hidden from assistive technology. Set decorative={false} to expose it as a semantic separator when it divides meaningfully distinct groups.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/session-expiry/meta.ts\nconst meta = defineMeta({\n\tname: \"session-expiry\",\n\ttitle: \"Session Expiry\",\n\tdescription: \"The idle-timeout warning WCAG 2.2.1 asks for: warned, extendable, and not dismissable by accident.\",\n\tcategory: \"feedback\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [\"button\", \"dialog\"],\n\tfiles: [\"session-expiry.tsx\"],\n\ta11y: \"An alert dialog, named by its heading and described by the sentence that says how long is left. Escape and the backdrop do nothing, because dismissing a session warning without choosing is choosing nothing; the two buttons are the way out, and focus opens on the safe one. The visible countdown is not live — a number every second for two minutes drowns the question — and a separate status region speaks four times: when the warning opens, at one minute, thirty seconds and ten, still saying a threshold a slow tick skipped over. The clock is read in an effect, so the server renders nothing rather than a countdown from the wrong instant. This satisfies the warn-and-extend half of WCAG 2.2.1 Timing Adjustable; the twenty-second minimum is the default window's business and the application's.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/sidebar/meta.ts\nconst meta = defineMeta({\n\tname: \"sidebar\",\n\ttitle: \"Sidebar\",\n\tdescription: \"The application's own navigation: a collapsible rail on a wide screen, an overlay on a narrow one.\",\n\tcategory: \"navigation\",\n\tstatus: \"stable\",\n\tdependencies: [\"radix-ui\"],\n\tregistryDependencies: [\"sheet\"],\n\tfiles: [\"sidebar.tsx\"],\n\ta11y: \"The navigation landmark must be named — a page has several, and three regions all called \\\"navigation\\\" is a list nobody can choose from. The active entry carries aria-current=\\\"page\\\" rather than only a background colour. On a narrow screen it is a Sheet, not a styled div: an overlay needs a focus trap and an Escape key, and without them the page behind stays reachable by Tab while the menu covers it. When the rail collapses, labels are visually hidden rather than removed — removing them leaves controls whose only content is an icon, which is how a collapsed sidebar becomes a column of links all announced as \\\"link\\\". The trigger says what pressing it will do, not what the state currently is. The overlay is mounted only on a narrow screen and has its own open state: a modal dialog that CSS hides is still modal, and mounting it always made every wide screen aria-hidden and unclickable whenever the rail was open.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/sheet/meta.ts\nconst meta = defineMeta({\n\tname: \"sheet\",\n\ttitle: \"Sheet\",\n\tdescription: \"A panel that enters from an edge of the viewport for secondary content.\",\n\tcategory: \"overlay\",\n\tstatus: \"stable\",\n\tdependencies: [\"class-variance-authority\", \"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"sheet.tsx\"],\n\ta11y: \"Modal, with the same focus trapping and restoration as Dialog. Always render a SheetTitle. For a side navigation sheet, put a nav landmark inside rather than relying on placement to convey the role.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/shortcut-recorder/meta.ts\nconst meta = defineMeta({\n\tname: \"shortcut-recorder\",\n\ttitle: \"Shortcut Recorder\",\n\tdescription: \"Press the keys you want: records a chord, platform-aware, and says when it clashes.\",\n\tcategory: \"form\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [],\n\tfiles: [\"shortcut-model.ts\", \"shortcut-recorder.tsx\"],\n\ta11y: \"The recorder is a button named by what the shortcut does and described by its value in words — Command Shift K — while the key caps on it are hidden from assistive technology, since ⌘⇧K read aloud is noise. While recording it is aria-pressed and its description says what to do; Tab always leaves and Escape always cancels, so it is never a keyboard trap. Every outcome is announced through a status region present from the start: recorded, refused with the reason, clashing with which command, cancelled, cleared. Symbols are shown on a Mac and words elsewhere, and the description uses the platform's own names for its keys.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/skeleton/meta.ts\nconst meta = defineMeta({\n\tname: \"skeleton\",\n\ttitle: \"Skeleton\",\n\tdescription: \"A shaped placeholder that holds layout while content loads.\",\n\tcategory: \"feedback\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [],\n\tfiles: [\"skeleton.tsx\"],\n\ta11y: \"Hidden from assistive technology. Put aria-busy on the container that owns the loading data so the state is announced once instead of once per placeholder.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/slider/meta.ts\nconst meta = defineMeta({\n\tname: \"slider\",\n\ttitle: \"Slider\",\n\tdescription: \"Selects a value, or a range, from a continuous span.\",\n\tcategory: \"form\",\n\tstatus: \"stable\",\n\tdependencies: [\"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"slider.tsx\"],\n\ta11y: \"Each thumb is a role=\\\"slider\\\" with arrow keys, Home/End and Page Up/Down. The name is forwarded onto the thumbs, since the root has no role — a range slider should name each thumb separately with thumbLabels. A development-only warning fires if a thumb would be unnamed. Pass aria-valuetext when the raw number is not meaningful on its own (a price, a duration). Show the current value on screen too — a slider is imprecise, so pair it with a numeric input when exactness matters.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/spinner/meta.ts\nconst meta = defineMeta({\n\tname: \"spinner\",\n\ttitle: \"Spinner\",\n\tdescription: \"An indeterminate loading indicator for buttons, panels and inline content.\",\n\tcategory: \"feedback\",\n\tstatus: \"stable\",\n\tdependencies: [\"class-variance-authority\"],\n\tregistryDependencies: [],\n\tfiles: [\"spinner.tsx\"],\n\ta11y: \"Renders aria-hidden by default so it does not announce inside controls that already expose a busy state. Pass `label` to announce it standalone via role=\\\"status\\\".\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/switch/meta.ts\nconst meta = defineMeta({\n\tname: \"switch\",\n\ttitle: \"Switch\",\n\tdescription: \"An immediate on/off toggle for settings that apply straight away.\",\n\tcategory: \"form\",\n\tstatus: \"stable\",\n\tdependencies: [\"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"switch.tsx\"],\n\ta11y: \"Exposed as role=\\\"switch\\\" and toggled with Space or Enter. Needs a visible label tied with htmlFor/id. Do not rely on colour alone to show state — position and the label carry it too.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/sync-status/meta.ts\nconst meta = defineMeta({\n\tname: \"sync-status\",\n\ttitle: \"Sync Status\",\n\tdescription: \"Offline, saving, saved or failed — with the count of changes being held.\",\n\tcategory: \"feedback\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [\"button\"],\n\tfiles: [\"sync-status.tsx\"],\n\ta11y: \"The word is the status and the coloured dot is decoration, hidden from assistive technology. The visible text is not a live region: every save flips it and a region on it would narrate the whole session. A separate region, present from the first render, announces transitions only — went offline with what will happen to the changes, came back with what is being saved, could not save, saved after a failure — and never the churn of saving itself. Announcing is on by default because going offline is the one thing a reader who is typing has to be told, and it can be turned off. The server render assumes online, since a page with no interface to report has no business saying offline.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/table/meta.ts\nconst meta = defineMeta({\n\tname: \"table\",\n\ttitle: \"Table\",\n\tdescription: \"Semantic table primitives for tabular data.\",\n\tcategory: \"data\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [],\n\tfiles: [\"table.tsx\"],\n\ta11y: \"A native table, so row and column position, header association and dimensions are all announced without ARIA. Give it a name with TableCaption or aria-label. The scrolling wrapper is focusable so an overflowing table can be scrolled by keyboard — without that, columns past the edge are unreachable. Use scope=\\\"row\\\" on th elements inside tbody.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/tabs/meta.ts\nconst meta = defineMeta({\n\tname: \"tabs\",\n\ttitle: \"Tabs\",\n\tdescription: \"Switches between panels of related content.\",\n\tcategory: \"navigation\",\n\tstatus: \"stable\",\n\tdependencies: [\"class-variance-authority\", \"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"tabs.tsx\"],\n\ta11y: \"Implements the ARIA tabs pattern: arrows move between tabs, Home/End jump to the ends, and only the active tab is in the tab sequence. Panels are focusable so keyboard users reach their content directly. Use activationMode=\\\"manual\\\" when showing a panel is expensive, so arrowing past it does not load it.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/tags-input/meta.ts\nconst meta = defineMeta({\n\tname: \"tags-input\",\n\ttitle: \"Tags Input\",\n\tdescription: \"A list of short values, where invalid entries stay visible instead of vanishing.\",\n\tcategory: \"form\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [],\n\tfiles: [\"tags-input.tsx\"],\n\ta11y: \"No WAI-ARIA pattern covers a token field, and the near misses misdescribe it — these are committed values, not options being chosen, so calling the container a listbox would promise navigation that does not exist. It is a labelled group holding a list, with a remove button per token carrying the tag in its accessible name. An invalid token's reason is inside the token, so it is announced with it rather than as a detached error. Additions, removals and refusals all reach a polite live region, because a refusal that looks like nothing happening is the failure this component exists to prevent. Remove buttons sit in the natural tab order rather than behind a roving tabindex: it costs a tab stop per token, and buys a pattern every assistive technology already understands.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/time-range-picker/meta.ts\nconst meta = defineMeta({\n\tname: \"time-range-picker\",\n\ttitle: \"Time Range Picker\",\n\tdescription: \"A time range whose value is an expression, so it stays relative across a reload.\",\n\tcategory: \"form\",\n\tstatus: \"stable\",\n\tdependencies: [\"react-day-picker\"],\n\tregistryDependencies: [\n\t\t\"button\",\n\t\t\"calendar\",\n\t\t\"input\",\n\t\t\"popover\"\n\t],\n\tfiles: [\"time-expression.ts\", \"time-range-picker.tsx\"],\n\ta11y: \"The trigger is named by the range it holds — \\\"Last 6 hours\\\" — and the window that resolves to is read after it, so the relative choice is not replaced by two timestamps. The popover carries role=\\\"dialog\\\" and is named. Presets are buttons rather than radios because choosing one both selects and dismisses, with aria-pressed carrying which matches the current expression. The expression field reports why an unparseable entry is invalid through one aria-describedby element that the preview and the error share, so a reader hears the error replace the preview rather than both at once; an invalid expression is never applied, because a chart silently re-scoping itself is worse than one that refuses.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/textarea/meta.ts\nconst meta = defineMeta({\n\tname: \"textarea\",\n\ttitle: \"Textarea\",\n\tdescription: \"A multi-line text field, with optional auto-resize and a character count that knows when to stay quiet.\",\n\tcategory: \"form\",\n\tstatus: \"stable\",\n\tdependencies: [\"class-variance-authority\"],\n\tregistryDependencies: [],\n\tfiles: [\"textarea.tsx\"],\n\ta11y: \"Pair with a Label via htmlFor/id. The error state is driven by aria-invalid, so assistive technology and styling stay in sync. The character count is described by the field rather than announced on every keystroke — a permanently live counter reads the remaining number between every letter typed, which is unusable — so it goes live only once the limit is close, and states the remainder in words rather than as a bare ratio that is read aloud as two unlabelled numbers. Horizontal resizing is off by default, because a field dragged wider than its container is a broken layout.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/toast/meta.ts\nconst meta = defineMeta({\n\tname: \"toast\",\n\ttitle: \"Toast\",\n\tdescription: \"Brief, non-blocking messages with an imperative API callable from anywhere.\",\n\tcategory: \"feedback\",\n\tstatus: \"stable\",\n\tdependencies: [\"class-variance-authority\", \"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"toast-store.ts\", \"toast.tsx\"],\n\ta11y: \"Toasts are announced through a live region: destructive and warning variants interrupt (foreground), the rest wait for a pause (background). Auto-dismiss timers pause on hover, focus and window blur, and F8 moves focus into the toast list from anywhere. An action must carry altText describing how to do the same thing without the toast, since it may be gone before a screen reader user reaches it.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/components/tooltip/meta.ts\nconst meta = defineMeta({\n\tname: \"tooltip\",\n\ttitle: \"Tooltip\",\n\tdescription: \"A short label revealed on hover or keyboard focus.\",\n\tcategory: \"overlay\",\n\tstatus: \"stable\",\n\tdependencies: [\"radix-ui\"],\n\tregistryDependencies: [],\n\tfiles: [\"tooltip.tsx\"],\n\ta11y: \"Opens on focus as well as hover, and Escape dismisses it. Never put essential or interactive content in a tooltip: it is unreachable on touch and vanishes on blur. For an icon-only button, prefer aria-label for the name and use the tooltip only to repeat it visually.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/blocks/admin-dashboard/meta.ts\nconst meta = defineMeta({\n\tname: \"admin-dashboard\",\n\tkind: \"block\",\n\ttitle: \"Admin dashboard\",\n\tdescription: \"An administration console: the shell every admin page shares — navigation, breadcrumb, account menu — and the overview that is its front page, with what needs attention first.\",\n\tcategory: \"layout\",\n\tstatus: \"stable\",\n\taccess: \"pro\",\n\tdependencies: [],\n\tregistryDependencies: [\n\t\t\"alert\",\n\t\t\"avatar\",\n\t\t\"badge\",\n\t\t\"breadcrumb\",\n\t\t\"button\",\n\t\t\"card\",\n\t\t\"dropdown-menu\",\n\t\t\"empty-state\",\n\t\t\"metric-delta\",\n\t\t\"sidebar\",\n\t\t\"table\"\n\t],\n\tfiles: [\"admin-dashboard.tsx\"],\n\ta11y: \"What needs attention comes first and is the only loud part of the page; it is not a live region, because the list is there on load and re-announcing it on every refresh would make the console unusable. The navigation is a landmark called Admin, the breadcrumb another, so neither is one more thing called 'navigation'. The current page carries aria-current, a count beside a nav item says what it counts, the account menu is named after its owner, and each Open button is named after its account. Every status is a word, with colour agreeing rather than replacing.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/blocks/admin-users/meta.ts\nconst meta = defineMeta({\n\tname: \"admin-users\",\n\tkind: \"block\",\n\ttitle: \"Admin — users\",\n\tdescription: \"A team administration table with filtering, sorting and per-row actions.\",\n\tcategory: \"data\",\n\tstatus: \"stable\",\n\tdependencies: [\"@tanstack/react-table\"],\n\tregistryDependencies: [\n\t\t\"avatar\",\n\t\t\"badge\",\n\t\t\"button\",\n\t\t\"data-table\",\n\t\t\"dropdown-menu\",\n\t\t\"empty-state\",\n\t\t\"input\",\n\t\t\"label\"\n\t],\n\tfiles: [\"admin-users.tsx\"],\n\ta11y: \"Filtering changes the results without the user asking, so the matching count is announced politely. The filter has a real label rather than only a placeholder, which disappears the moment anyone types. Each row's action button is named after its row — four identical \\\"Actions\\\" buttons say nothing about which row you are on.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/blocks/agent-console/meta.ts\nconst meta = defineMeta({\n\tname: \"agent-console\",\n\tkind: \"block\",\n\ttitle: \"Agent console\",\n\tdescription: \"One agent run, watched: the plan it is working from, the approval it is blocked on, and the ledger of what it has already done.\",\n\tcategory: \"ai\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [\n\t\t\"ai-action-ledger\",\n\t\t\"ai-agent-plan\",\n\t\t\"ai-agent-status\",\n\t\t\"ai-approval-request\",\n\t\t\"ai-token-usage\",\n\t\t\"button\",\n\t\t\"card\",\n\t\t\"empty-state\"\n\t],\n\tfiles: [\"agent-console.tsx\"],\n\ta11y: \"Whatever the run is blocked on is rendered first rather than below a scrolling plan, because it is the only part of the page waiting on a person. This is the one agent on the page, so its status announces its own transitions — a list of runs each doing that would be noise, which is why the underlying component makes it opt in. Every completed action states whether it can be undone, offset or not taken back at all, in words, since presenting all three behind one Undo is a lie discovered after the click.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/blocks/ai-chat/meta.ts\nconst meta = defineMeta({\n\tname: \"ai-chat\",\n\tkind: \"block\",\n\ttitle: \"AI Chat\",\n\tdescription: \"A complete chat surface: transcript, reasoning, tool calls, sources and composer.\",\n\tcategory: \"ai\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [\n\t\t\"ai-conversation\",\n\t\t\"ai-message\",\n\t\t\"ai-model-selector\",\n\t\t\"ai-prompt-input\",\n\t\t\"ai-reasoning\",\n\t\t\"ai-response\",\n\t\t\"ai-sources\",\n\t\t\"ai-token-usage\",\n\t\t\"ai-tool\",\n\t\t\"button\",\n\t\t\"empty-state\"\n\t],\n\tfiles: [\"ai-chat.tsx\"],\n\ta11y: \"Assembled from the AI components rather than reimplementing them, so their decisions still hold: the transcript is a list and not a live region, state is announced separately through ConversationStatus, and the composer will not send while an IME composition is active. Tool payloads are named per tool, so two open tool calls do not present two regions called \\\"Result\\\".\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/blocks/ai-dashboard/meta.ts\nconst meta = defineMeta({\n\tname: \"ai-dashboard\",\n\tkind: \"block\",\n\ttitle: \"AI dashboard\",\n\tdescription: \"What the AI features cost and whether they worked: tokens, spend, failure rate, a breakdown by model, and the runs still going.\",\n\tcategory: \"ai\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [\n\t\t\"ai-agent-status\",\n\t\t\"ai-token-usage\",\n\t\t\"card\",\n\t\t\"empty-state\",\n\t\t\"metric-delta\",\n\t\t\"table\"\n\t],\n\tfiles: [\"ai-dashboard.tsx\"],\n\ta11y: \"Spend and failure rate are declared lower-is-better, so a rising bill is not painted green — which is the mistake most usage dashboards make. The totals row is a real table footer rather than a last body row that looks like one, because inside the body it is announced as another model and there is no model called Total. Statuses in the run list do not announce their own changes: several runs each doing that turns a list into a stream of interruptions, and watching one run is the agent console's job.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/blocks/ai-workspace/meta.ts\nconst meta = defineMeta({\n\tname: \"ai-workspace\",\n\tkind: \"block\",\n\ttitle: \"AI workspace\",\n\tdescription: \"A whole AI application surface: conversations down one side, the active transcript with reasoning, tool calls and sources in the middle, and the context — window usage, attachments and a structured result — on the other.\",\n\tcategory: \"ai\",\n\tstatus: \"stable\",\n\taccess: \"pro\",\n\tdependencies: [],\n\tregistryDependencies: [\n\t\t\"ai-conversation\",\n\t\t\"ai-message\",\n\t\t\"ai-model-selector\",\n\t\t\"ai-prompt-input\",\n\t\t\"ai-reasoning\",\n\t\t\"ai-response\",\n\t\t\"ai-sources\",\n\t\t\"ai-structured-output\",\n\t\t\"ai-token-usage\",\n\t\t\"ai-tool\",\n\t\t\"button\",\n\t\t\"empty-state\",\n\t\t\"sidebar\"\n\t],\n\tfiles: [\"ai-workspace.tsx\"],\n\ta11y: \"Three landmarks, each named: the conversation list is a navigation called Conversations, the transcript is the main content, and the context is a complementary region called Context, so a screen reader user can jump between them and skip the one they do not want. The transcript is a list and never a live region; the response state is announced from a separate status line, so a streaming answer does not read itself aloud token by token. Each attachment's remove button is named after its file. On a narrow screen the conversation list becomes a sheet with a focus trap and an Escape key, not a div slid over content that stays reachable by Tab.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/blocks/analytics/meta.ts\nconst meta = defineMeta({\n\tname: \"analytics\",\n\tkind: \"block\",\n\ttitle: \"Analytics\",\n\tdescription: \"An analytics page: headline metrics against the previous period, a series over time, and the breakdown that made it up.\",\n\tcategory: \"data\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [\n\t\t\"button\",\n\t\t\"card\",\n\t\t\"metric-delta\",\n\t\t\"select\",\n\t\t\"table\"\n\t],\n\tfiles: [\"analytics.tsx\"],\n\ta11y: \"The bars are declared as a single image with a one-sentence summary — where the series started, where it ended, and where its extremes were — rather than as forty separately labelled elements, which reads as noise instead of a shape. The exact numbers live in a real table that is collapsed for everyone and revealed for everyone from a control on the page, rather than in a visually-hidden copy only screen readers can reach, because the hidden copy is the one that goes stale. The range selector is a select rather than a tab set: tabs promise panels, and a range selector has none — it changes the data behind the whole page, so styled-as-tabs it points every tab at a panel that does not exist.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/blocks/billing/meta.ts\nconst meta = defineMeta({\n\tname: \"billing\",\n\tkind: \"block\",\n\ttitle: \"Billing\",\n\tdescription: \"A billing page: the current plan, metered usage against its limits, the payment method and the invoice history.\",\n\tcategory: \"data\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [\n\t\t\"badge\",\n\t\t\"button\",\n\t\t\"card\",\n\t\t\"empty-state\",\n\t\t\"progress\",\n\t\t\"table\"\n\t],\n\tfiles: [\"billing.tsx\"],\n\ta11y: \"Every usage meter states where it stands in words — \\\"8 of 10 seats used, 2 left\\\", or how far over the limit it is — because a bar that turns red says nothing to a screen reader and nothing to anyone who cannot tell the colours apart; the bar itself is hidden from the accessibility tree so the same fact is not announced twice. Each invoice download is named after its invoice rather than being one of ten identical \\\"Download\\\" links, which is all a links list would show. A card's last four digits are spoken as digits instead of as a four-figure number. Dates carry a machine-readable time element.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/blocks/command-center/meta.ts\nconst meta = defineMeta({\n\tname: \"command-center\",\n\tkind: \"block\",\n\ttitle: \"Command center\",\n\tdescription: \"Operations at a glance: service health worst-first, open incidents by severity, capacity meters, a filterable log stream, and a command palette for every action an operator reaches for.\",\n\tcategory: \"data\",\n\tstatus: \"stable\",\n\taccess: \"pro\",\n\tdependencies: [],\n\tregistryDependencies: [\n\t\t\"alert\",\n\t\t\"badge\",\n\t\t\"button\",\n\t\t\"card\",\n\t\t\"command\",\n\t\t\"empty-state\",\n\t\t\"log-viewer\",\n\t\t\"meter\"\n\t],\n\tfiles: [\"command-center.tsx\"],\n\ta11y: \"The overall status is one sentence computed from the worst service, and it comes first — 'one service is down' rather than a wall of tiles to scan. It is not a live region: the page is refreshed by the application, and a status that re-announces on every poll is one nobody can work beside. Health and severity are words on every row, sorted on, with colour agreeing rather than replacing. ⌘K opens the palette but the Actions button is always visible, so the shortcut is an accelerator and not the only way in. New log lines are not read aloud unless asked.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/blocks/crm/meta.ts\nconst meta = defineMeta({\n\tname: \"crm\",\n\tkind: \"block\",\n\ttitle: \"CRM\",\n\tdescription: \"A sales pipeline: open value by stage, the deals in it with filtering and sorting, the win rate and cycle length, and the last few touches.\",\n\tcategory: \"data\",\n\tstatus: \"stable\",\n\taccess: \"pro\",\n\tdependencies: [\"@tanstack/react-table\"],\n\tregistryDependencies: [\n\t\t\"activity-feed\",\n\t\t\"avatar\",\n\t\t\"badge\",\n\t\t\"button\",\n\t\t\"card\",\n\t\t\"data-table\",\n\t\t\"empty-state\",\n\t\t\"input\",\n\t\t\"label\",\n\t\t\"meter\",\n\t\t\"metric-delta\",\n\t\t\"select\"\n\t],\n\tfiles: [\"crm.tsx\"],\n\ta11y: \"The pipeline is one bar split by stage, with the same figures listed beside it as numbers, so nobody reads a proportion off a coloured segment; the meter announces the total and its legend names every stage. Sales cycle is declared lower-is-better, so a slowing pipeline is not painted green. The deal filter has a real label and announces the matching count politely, and each Open button is named after its deal rather than being one of ten identical buttons.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/blocks/dashboard/meta.ts\nconst meta = defineMeta({\n\tname: \"dashboard\",\n\tkind: \"block\",\n\ttitle: \"Dashboard\",\n\tdescription: \"An overview page with headline metrics and a recent activity feed.\",\n\tcategory: \"data\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [\n\t\t\"activity-feed\",\n\t\t\"badge\",\n\t\t\"card\",\n\t\t\"skeleton\"\n\t],\n\tfiles: [\"dashboard.tsx\"],\n\ta11y: \"Each metric states its change in words — \\\"up 12.4%\\\" — rather than by a coloured arrow, which is unreadable to a screen reader and ambiguous to anyone who cannot distinguish the colours. Whether a rise is good is configurable, since churn going up is not. The metrics sit in a named region so they can be jumped to.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/blocks/forgot-password/meta.ts\nconst meta = defineMeta({\n\tname: \"forgot-password\",\n\tkind: \"block\",\n\ttitle: \"Forgot password\",\n\tdescription: \"A password reset request, with a confirmation that does not leak account existence.\",\n\tcategory: \"form\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [\n\t\t\"button\",\n\t\t\"card\",\n\t\t\"empty-state\",\n\t\t\"form\",\n\t\t\"input\"\n\t],\n\tfiles: [\"forgot-password.tsx\"],\n\ta11y: \"The confirmation replaces the form, so it is a polite live region — otherwise a screen reader user submits and hears nothing. The wording is deliberately neutral about whether the address exists: confirming it would turn this form into an account enumeration oracle.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/blocks/login/meta.ts\nconst meta = defineMeta({\n\tname: \"login\",\n\tkind: \"block\",\n\ttitle: \"Login\",\n\tdescription: \"A sign-in form with validation, social providers and a busy state.\",\n\tcategory: \"form\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [\n\t\t\"button\",\n\t\t\"card\",\n\t\t\"checkbox\",\n\t\t\"form\",\n\t\t\"input\",\n\t\t\"label\",\n\t\t\"separator\"\n\t],\n\tfiles: [\"login.tsx\"],\n\ta11y: \"Email and password fields carry the right type and autocomplete, so password managers and mobile keyboards behave. Field errors are tied to their inputs through the Form wiring; a server error is an assertive alert, because it arrived after the user acted and explains why nothing happened. The submit button reports its own busy state rather than going quiet.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/blocks/onboarding/meta.ts\nconst meta = defineMeta({\n\tname: \"onboarding\",\n\tkind: \"block\",\n\ttitle: \"Onboarding\",\n\tdescription: \"A setup checklist: what is done, which step is current, and what is blocked and why.\",\n\tcategory: \"feedback\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [\n\t\t\"badge\",\n\t\t\"button\",\n\t\t\"card\",\n\t\t\"progress\"\n\t],\n\tfiles: [\"onboarding.tsx\"],\n\ta11y: \"Every step states its state in a word — Done, In progress, Not started, Blocked — because a green tick announces nothing and means nothing to a reader who cannot tell the colours apart; the tick and the step number are decoration on top of that. Progress is given as a count rather than only as a bar, and the bar is hidden so the same fact is not announced twice. The current step carries aria-current, so it can be found rather than merely seen. Blocked is a distinct state from not-started and says why. Each step's action is named after its step, so six buttons are not six identical \\\"Start\\\" entries in a controls list.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/blocks/pricing/meta.ts\nconst meta = defineMeta({\n\tname: \"pricing\",\n\tkind: \"block\",\n\ttitle: \"Pricing\",\n\tdescription: \"A pricing section with plan cards and a monthly/yearly toggle.\",\n\tcategory: \"layout\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [\n\t\t\"badge\",\n\t\t\"button\",\n\t\t\"card\",\n\t\t\"label\",\n\t\t\"switch\"\n\t],\n\tfiles: [\"pricing.tsx\"],\n\ta11y: \"Switching the billing period rewrites every price on the page, so the change is announced politely rather than happening silently. Each plan's call to action names the plan — three buttons all reading \\\"Choose\\\" are indistinguishable out of context. Feature ticks are decorative; the feature text carries the meaning.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/blocks/settings/meta.ts\nconst meta = defineMeta({\n\tname: \"settings\",\n\tkind: \"block\",\n\ttitle: \"Settings\",\n\tdescription: \"A settings page with a profile form, immediate toggles and a danger zone.\",\n\tcategory: \"form\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [\n\t\t\"avatar\",\n\t\t\"button\",\n\t\t\"card\",\n\t\t\"dialog\",\n\t\t\"form\",\n\t\t\"input\",\n\t\t\"label\",\n\t\t\"separator\",\n\t\t\"switch\",\n\t\t\"tabs\"\n\t],\n\tfiles: [\"settings.tsx\"],\n\ta11y: \"Switches apply immediately and have no Save button — a switch that needs saving is a broken promise, so staged changes live in the form instead. The delete confirmation names what will be destroyed and requires typing the account's email, so the destructive button cannot be reached by muscle memory.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { defineMeta } from \"../../registry/schema.js\";\n//#region src/blocks/signup/meta.ts\nconst meta = defineMeta({\n\tname: \"signup\",\n\tkind: \"block\",\n\ttitle: \"Sign up\",\n\tdescription: \"An account creation form with a password strength hint and terms acceptance.\",\n\tcategory: \"form\",\n\tstatus: \"stable\",\n\tdependencies: [],\n\tregistryDependencies: [\n\t\t\"button\",\n\t\t\"card\",\n\t\t\"checkbox\",\n\t\t\"form\",\n\t\t\"input\",\n\t\t\"progress\"\n\t],\n\tfiles: [\"signup.tsx\"],\n\ta11y: \"The strength label is text and the bar beside it is aria-hidden, so the estimate is not announced twice. autoComplete=\\\"new-password\\\" tells password managers to offer a generated password rather than an existing one. Strength is a hint, never a gate: the form is validated on length alone.\"\n});\n//#endregion\nexport { meta };\n\n//# sourceMappingURL=meta.js.map","import { meta } from \"../blocks/admin-dashboard/meta.js\";\nimport { meta as meta$1 } from \"../blocks/admin-users/meta.js\";\nimport { meta as meta$2 } from \"../blocks/agent-console/meta.js\";\nimport { meta as meta$3 } from \"../blocks/ai-chat/meta.js\";\nimport { meta as meta$4 } from \"../blocks/ai-dashboard/meta.js\";\nimport { meta as meta$5 } from \"../blocks/ai-workspace/meta.js\";\nimport { meta as meta$6 } from \"../blocks/analytics/meta.js\";\nimport { meta as meta$7 } from \"../blocks/billing/meta.js\";\nimport { meta as meta$8 } from \"../blocks/command-center/meta.js\";\nimport { meta as meta$9 } from \"../blocks/crm/meta.js\";\nimport { meta as meta$10 } from \"../blocks/dashboard/meta.js\";\nimport { meta as meta$11 } from \"../blocks/forgot-password/meta.js\";\nimport { meta as meta$12 } from \"../blocks/login/meta.js\";\nimport { meta as meta$13 } from \"../blocks/onboarding/meta.js\";\nimport { meta as meta$14 } from \"../blocks/pricing/meta.js\";\nimport { meta as meta$15 } from \"../blocks/settings/meta.js\";\nimport { meta as meta$16 } from \"../blocks/signup/meta.js\";\n//#region src/registry/blocks.ts\n/**\n* Every block in the registry.\n*\n* Kept separate from `componentMetas` for the same reason blocks install into a\n* different directory: they are whole page sections, browsed and used\n* differently from the components they are assembled out of.\n*\n* `meta.test.ts` fails if a block directory exists that is missing from here.\n*/\nconst blockMetas = [\n\tmeta,\n\tmeta$1,\n\tmeta$2,\n\tmeta$3,\n\tmeta$4,\n\tmeta$5,\n\tmeta$6,\n\tmeta$7,\n\tmeta$8,\n\tmeta$9,\n\tmeta$10,\n\tmeta$11,\n\tmeta$12,\n\tmeta$13,\n\tmeta$14,\n\tmeta$15,\n\tmeta$16\n];\n//#endregion\nexport { blockMetas };\n\n//# sourceMappingURL=blocks.js.map","import { COMPONENT_CATEGORIES, COMPONENT_STATUSES } from \"./schema.js\";\nimport { meta } from \"../components/accordion/meta.js\";\nimport { meta as meta$1 } from \"../components/activity-feed/meta.js\";\nimport { meta as meta$2 } from \"../components/ai-action-ledger/meta.js\";\nimport { meta as meta$3 } from \"../components/ai-agent-plan/meta.js\";\nimport { meta as meta$4 } from \"../components/ai-agent-status/meta.js\";\nimport { meta as meta$5 } from \"../components/ai-approval-request/meta.js\";\nimport { meta as meta$6 } from \"../components/ai-conversation/meta.js\";\nimport { meta as meta$7 } from \"../components/ai-disclosure/meta.js\";\nimport { meta as meta$8 } from \"../components/ai-extraction-review/meta.js\";\nimport { meta as meta$9 } from \"../components/ai-inline-completion/meta.js\";\nimport { meta as meta$10 } from \"../components/ai-message/meta.js\";\nimport { meta as meta$11 } from \"../components/ai-model-selector/meta.js\";\nimport { meta as meta$12 } from \"../components/ai-prompt-input/meta.js\";\nimport { meta as meta$13 } from \"../components/ai-reasoning/meta.js\";\nimport { meta as meta$14 } from \"../components/ai-response/meta.js\";\nimport { meta as meta$15 } from \"../components/ai-sources/meta.js\";\nimport { meta as meta$16 } from \"../components/ai-structured-output/meta.js\";\nimport { meta as meta$17 } from \"../components/ai-suggested-value/meta.js\";\nimport { meta as meta$18 } from \"../components/ai-token-usage/meta.js\";\nimport { meta as meta$19 } from \"../components/ai-tool/meta.js\";\nimport { meta as meta$20 } from \"../components/alert/meta.js\";\nimport { meta as meta$21 } from \"../components/avatar/meta.js\";\nimport { meta as meta$22 } from \"../components/badge/meta.js\";\nimport { meta as meta$23 } from \"../components/breadcrumb/meta.js\";\nimport { meta as meta$24 } from \"../components/button/meta.js\";\nimport { meta as meta$25 } from \"../components/calendar/meta.js\";\nimport { meta as meta$26 } from \"../components/card/meta.js\";\nimport { meta as meta$27 } from \"../components/checkbox/meta.js\";\nimport { meta as meta$28 } from \"../components/code-block/meta.js\";\nimport { meta as meta$29 } from \"../components/collapsible/meta.js\";\nimport { meta as meta$30 } from \"../components/combobox/meta.js\";\nimport { meta as meta$31 } from \"../components/command/meta.js\";\nimport { meta as meta$32 } from \"../components/confirm-typed/meta.js\";\nimport { meta as meta$33 } from \"../components/cron-editor/meta.js\";\nimport { meta as meta$34 } from \"../components/data-table/meta.js\";\nimport { meta as meta$35 } from \"../components/date-picker/meta.js\";\nimport { meta as meta$36 } from \"../components/direction/meta.js\";\nimport { meta as meta$37 } from \"../components/dialog/meta.js\";\nimport { meta as meta$38 } from \"../components/diff-viewer/meta.js\";\nimport { meta as meta$39 } from \"../components/dns-record/meta.js\";\nimport { meta as meta$40 } from \"../components/drawer/meta.js\";\nimport { meta as meta$41 } from \"../components/dropdown-menu/meta.js\";\nimport { meta as meta$42 } from \"../components/empty-state/meta.js\";\nimport { meta as meta$43 } from \"../components/file-upload/meta.js\";\nimport { meta as meta$44 } from \"../components/form/meta.js\";\nimport { meta as meta$45 } from \"../components/input/meta.js\";\nimport { meta as meta$46 } from \"../components/label/meta.js\";\nimport { meta as meta$47 } from \"../components/log-viewer/meta.js\";\nimport { meta as meta$48 } from \"../components/meter/meta.js\";\nimport { meta as meta$49 } from \"../components/metric-delta/meta.js\";\nimport { meta as meta$50 } from \"../components/pagination/meta.js\";\nimport { meta as meta$51 } from \"../components/permission-matrix/meta.js\";\nimport { meta as meta$52 } from \"../components/popover/meta.js\";\nimport { meta as meta$53 } from \"../components/progress/meta.js\";\nimport { meta as meta$54 } from \"../components/radio-group/meta.js\";\nimport { meta as meta$55 } from \"../components/record-diff/meta.js\";\nimport { meta as meta$56 } from \"../components/secret-field/meta.js\";\nimport { meta as meta$57 } from \"../components/select/meta.js\";\nimport { meta as meta$58 } from \"../components/separator/meta.js\";\nimport { meta as meta$59 } from \"../components/session-expiry/meta.js\";\nimport { meta as meta$60 } from \"../components/sidebar/meta.js\";\nimport { meta as meta$61 } from \"../components/sheet/meta.js\";\nimport { meta as meta$62 } from \"../components/shortcut-recorder/meta.js\";\nimport { meta as meta$63 } from \"../components/skeleton/meta.js\";\nimport { meta as meta$64 } from \"../components/slider/meta.js\";\nimport { meta as meta$65 } from \"../components/spinner/meta.js\";\nimport { meta as meta$66 } from \"../components/switch/meta.js\";\nimport { meta as meta$67 } from \"../components/sync-status/meta.js\";\nimport { meta as meta$68 } from \"../components/table/meta.js\";\nimport { meta as meta$69 } from \"../components/tabs/meta.js\";\nimport { meta as meta$70 } from \"../components/tags-input/meta.js\";\nimport { meta as meta$71 } from \"../components/time-range-picker/meta.js\";\nimport { meta as meta$72 } from \"../components/textarea/meta.js\";\nimport { meta as meta$73 } from \"../components/toast/meta.js\";\nimport { meta as meta$74 } from \"../components/tooltip/meta.js\";\nimport { blockMetas } from \"./blocks.js\";\n//#region src/registry/components.ts\n/**\n* Every component in the registry.\n*\n* An explicit list rather than a glob: the registry build runs in plain Node,\n* where bundler-only globbing is unavailable, and a static list is also what\n* lets the bundle tree-shake. `meta.test.ts` fails if a component directory\n* exists that is missing from here, so it cannot silently fall out of date.\n*\n* Identifiers carry a `Meta` suffix because component names include reserved\n* words — `switch` cannot be a binding name.\n*/\nconst componentMetas = [\n\tmeta,\n\tmeta$1,\n\tmeta$2,\n\tmeta$3,\n\tmeta$4,\n\tmeta$5,\n\tmeta$6,\n\tmeta$7,\n\tmeta$8,\n\tmeta$9,\n\tmeta$10,\n\tmeta$11,\n\tmeta$12,\n\tmeta$13,\n\tmeta$14,\n\tmeta$15,\n\tmeta$16,\n\tmeta$17,\n\tmeta$18,\n\tmeta$19,\n\tmeta$20,\n\tmeta$21,\n\tmeta$22,\n\tmeta$23,\n\tmeta$24,\n\tmeta$25,\n\tmeta$26,\n\tmeta$27,\n\tmeta$28,\n\tmeta$29,\n\tmeta$30,\n\tmeta$31,\n\tmeta$32,\n\tmeta$33,\n\tmeta$34,\n\tmeta$35,\n\tmeta$37,\n\tmeta$36,\n\tmeta$38,\n\tmeta$39,\n\tmeta$40,\n\tmeta$41,\n\tmeta$42,\n\tmeta$43,\n\tmeta$44,\n\tmeta$45,\n\tmeta$46,\n\tmeta$47,\n\tmeta$48,\n\tmeta$49,\n\tmeta$50,\n\tmeta$51,\n\tmeta$52,\n\tmeta$53,\n\tmeta$54,\n\tmeta$55,\n\tmeta$56,\n\tmeta$57,\n\tmeta$58,\n\tmeta$59,\n\tmeta$61,\n\tmeta$60,\n\tmeta$62,\n\tmeta$63,\n\tmeta$64,\n\tmeta$65,\n\tmeta$66,\n\tmeta$67,\n\tmeta$68,\n\tmeta$69,\n\tmeta$70,\n\tmeta$71,\n\tmeta$72,\n\tmeta$73,\n\tmeta$74\n];\n//#endregion\nexport { COMPONENT_CATEGORIES, COMPONENT_STATUSES, blockMetas, componentMetas };\n\n//# sourceMappingURL=components.js.map","import { readFileSync, mkdirSync, writeFileSync, rmSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath, pathToFileURL } from \"node:url\";\n\nimport { blockMetas, componentMetas, type ComponentMeta } from \"@dowel-ui/react/registry\";\n\nimport { hashContent } from \"./hash\";\nimport {\n REGISTRY_VERSION,\n registryIndexSchema,\n registryItemSchema,\n type RegistryFile,\n type RegistryIndexEntry,\n type RegistryItem,\n} from \"./schema\";\n\n/**\n * Emits the public registry.\n *\n * Everything the CLI installs originates here, from the same source files the\n * library itself builds and tests. There is no second copy of a component to\n * drift out of sync.\n */\n\nconst here = dirname(fileURLToPath(import.meta.url));\nconst uiSrc = join(here, \"..\", \"..\", \"ui\", \"src\");\nconst themesSrc = join(here, \"..\", \"..\", \"themes\", \"src\");\nconst uiPackageJson = JSON.parse(\n readFileSync(join(here, \"..\", \"..\", \"ui\", \"package.json\"), \"utf8\"),\n) as { name: string; version: string };\n\nfunction read(path: string): string {\n return readFileSync(path, \"utf8\");\n}\n\n/**\n * Turns a meta into a registry item.\n *\n * Components and blocks differ only in where their source lives and where it is\n * installed, so one function covers both rather than two that drift.\n */\nfunction buildSourceItem(meta: ComponentMeta): RegistryItem {\n const isBlock = meta.kind === \"block\";\n const sourceDir = join(uiSrc, isBlock ? \"blocks\" : \"components\", meta.name);\n const group = isBlock ? \"blocks\" : \"ui\";\n const fileType = isBlock ? \"registry:block\" : \"registry:ui\";\n\n const files: RegistryFile[] = meta.files.map((file) => {\n const content = read(join(sourceDir, file));\n return {\n path: `${group}/${file}`,\n type: fileType,\n content,\n hash: hashContent(content),\n };\n });\n\n return registryItemSchema.parse({\n $schema: \"./schema/registry-item.json\",\n registryVersion: REGISTRY_VERSION,\n name: meta.name,\n type: fileType,\n title: meta.title,\n description: meta.description,\n category: meta.category,\n status: meta.status,\n dependencies: meta.dependencies,\n registryDependencies: meta.registryDependencies,\n files,\n a11y: meta.a11y,\n access: meta.access ?? \"free\",\n });\n}\n\n/**\n * The utilities every component imports.\n *\n * Written by `init` rather than by `add`, because a project needs them before\n * the first component and every component assumes they are present.\n */\nfunction buildUtilsItem(): RegistryItem {\n const files: RegistryFile[] = ([\"utils.ts\", \"styles.ts\"] as const).map((file) => {\n const content = read(join(uiSrc, \"lib\", file));\n return {\n path: `lib/${file}`,\n type: \"registry:lib\",\n content,\n hash: hashContent(content),\n };\n });\n\n return registryItemSchema.parse({\n registryVersion: REGISTRY_VERSION,\n name: \"utils\",\n type: \"registry:lib\",\n title: \"Utilities\",\n description:\n \"The cn() class merger and the shared interaction-state fragments every component uses.\",\n category: \"foundation\",\n status: \"stable\",\n dependencies: [\"clsx\", \"tailwind-merge\"],\n registryDependencies: [],\n files,\n });\n}\n\n/**\n * The design tokens, as CSS to append to the project stylesheet.\n *\n * Appended rather than imported from a package: a consumer who cannot edit the\n * tokens does not really own their design system, which is the whole premise.\n */\nfunction buildThemeItem(): RegistryItem {\n const content = [\n \"/* Design tokens. Safe to edit — this is your copy. */\",\n read(join(themesSrc, \"tokens.css\")),\n read(join(themesSrc, \"base.css\")),\n ].join(\"\\n\\n\");\n\n return registryItemSchema.parse({\n registryVersion: REGISTRY_VERSION,\n name: \"theme\",\n type: \"registry:theme\",\n title: \"Theme\",\n description:\n \"Design tokens: colour, radius, typography, elevation and motion, in light and dark.\",\n category: \"foundation\",\n status: \"stable\",\n dependencies: [],\n registryDependencies: [],\n files: [\n {\n path: \"theme.css\",\n type: \"registry:style\",\n content,\n hash: hashContent(content),\n },\n ],\n });\n}\n\nexport function buildRegistry(): RegistryItem[] {\n return [\n buildUtilsItem(),\n buildThemeItem(),\n ...componentMetas.map(buildSourceItem),\n ...blockMetas.map(buildSourceItem),\n ];\n}\n\n/** Items whose source anyone may fetch. */\nexport function freeItems(items: RegistryItem[]): RegistryItem[] {\n return items.filter((item) => item.access !== \"pro\");\n}\n\n/** Items whose source requires a licence. */\nexport function proItems(items: RegistryItem[]): RegistryItem[] {\n return items.filter((item) => item.access === \"pro\");\n}\n\nexport function buildIndex(items: RegistryItem[]) {\n const entries: RegistryIndexEntry[] = items.map((item) => ({\n name: item.name,\n type: item.type,\n title: item.title,\n description: item.description,\n category: item.category,\n status: item.status,\n dependencies: item.dependencies,\n registryDependencies: item.registryDependencies,\n access: item.access,\n fileCount: item.files.length,\n }));\n\n return registryIndexSchema.parse({\n $schema: \"./schema/registry-index.json\",\n registryVersion: REGISTRY_VERSION,\n // The package version, not a timestamp: the same source must always produce\n // byte-identical output, or every build shows as a change.\n generatedFrom: `${uiPackageJson.name}@${uiPackageJson.version}`,\n items: entries,\n });\n}\n\nexport interface WriteResult {\n items: number;\n files: number;\n /** Items whose body was withheld from the public directory. */\n licensed: number;\n}\n\n/**\n * Writes the public registry.\n *\n * The index lists everything, including licensed items — that is the catalogue,\n * and an item nobody can see is an item nobody buys. What it does *not* write is\n * a licensed item's body: those files never touch the directory a CDN serves,\n * because a paywall that can be stepped around by fetching the JSON directly is\n * not a paywall. Their bodies go to `writeLicensedModule` instead, behind a\n * request the server can refuse.\n */\nexport function writeRegistry(outDir: string): WriteResult {\n const items = buildRegistry();\n const index = buildIndex(items);\n const free = freeItems(items);\n\n rmSync(outDir, { recursive: true, force: true });\n mkdirSync(outDir, { recursive: true });\n\n writeFileSync(join(outDir, \"index.json\"), `${JSON.stringify(index, null, 2)}\\n`);\n for (const item of free) {\n writeFileSync(join(outDir, `${item.name}.json`), `${JSON.stringify(item, null, 2)}\\n`);\n }\n\n return {\n items: items.length,\n files: free.reduce((total, item) => total + item.files.length, 0),\n licensed: items.length - free.length,\n };\n}\n\n/**\n * Writes the licensed item bodies as a TypeScript module.\n *\n * A module rather than a directory of JSON, because the server that serves\n * these runs on a platform that traces imports to decide what to deploy. A file\n * read at runtime from a path the bundler never saw is a file that is not there\n * in production — and the failure appears only once someone with a valid\n * licence tries to install something.\n */\nexport function writeLicensedModule(outFile: string): number {\n const licensed = proItems(buildRegistry());\n const byName = Object.fromEntries(licensed.map((item) => [item.name, item]));\n\n mkdirSync(dirname(outFile), { recursive: true });\n writeFileSync(\n outFile,\n `// Generated by @dowel-ui/registry. Do not edit.\n//\n// The bodies of licensed registry items. Imported by the route that serves them\n// so the platform's dependency tracing includes them in the deployment; they are\n// deliberately absent from the public registry directory.\nimport type { RegistryItem } from \"@dowel-ui/registry\";\n\nexport const licensedItems: Record<string, RegistryItem> = ${JSON.stringify(byName, null, 2)};\n`,\n );\n\n return licensed.length;\n}\n\n// Run directly: `tsx src/build.ts [--out <dir>]`\nconst invokedDirectly =\n process.argv[1] !== undefined && import.meta.url === pathToFileURL(process.argv[1]).href;\n\nif (invokedDirectly) {\n const outIndex = process.argv.indexOf(\"--out\");\n const outDir =\n outIndex === -1\n ? join(here, \"..\", \"r\")\n : (process.argv[outIndex + 1] ?? join(here, \"..\", \"r\"));\n\n const result = writeRegistry(outDir);\n console.log(\n `Registry written to ${outDir}: ${String(result.items)} items, ${String(result.files)} files` +\n (result.licensed > 0 ? `, ${String(result.licensed)} licensed item(s) withheld.` : \".\"),\n );\n}\n"],"mappings":"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GACA;GACA;GACA;GACA;GACA;EACD;EACA,OAAO,CAAC,qBAAqB;EAC7B,MAAM;CACP,CiBECiB;ChB1BY,WAAW;EACvB,MAAM;EACN,MAAM;EACN,OAAO;EACP,aAAa;EACb,UAAU;EACV,QAAQ;EACR,cAAc,CAAC,uBAAuB;EACtC,sBAAsB;GACrB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACD;EACA,OAAO,CAAC,iBAAiB;EACzB,MAAM;CACP,CgBOCC;Cf3BY,WAAW;EACvB,MAAM;EACN,MAAM;EACN,OAAO;EACP,aAAa;EACb,UAAU;EACV,QAAQ;EACR,cAAc,CAAC;EACf,sBAAsB;GACrB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACD;EACA,OAAO,CAAC,mBAAmB;EAC3B,MAAM;CACP,CeQCC;Cd5BY,WAAW;EACvB,MAAM;EACN,MAAM;EACN,OAAO;EACP,aAAa;EACb,UAAU;EACV,QAAQ;EACR,cAAc,CAAC;EACf,sBAAsB;GACrB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACD;EACA,OAAO,CAAC,aAAa;EACrB,MAAM;CACP,CcMCC;Cb7BY,WAAW;EACvB,MAAM;EACN,MAAM;EACN,OAAO;EACP,aAAa;EACb,UAAU;EACV,QAAQ;EACR,cAAc,CAAC;EACf,sBAAsB;GACrB;GACA;GACA;GACA;GACA;GACA;EACD;EACA,OAAO,CAAC,kBAAkB;EAC1B,MAAM;CACP,CaYCC;CZ9BY,WAAW;EACvB,MAAM;EACN,MAAM;EACN,OAAO;EACP,aAAa;EACb,UAAU;EACV,QAAQ;EACR,QAAQ;EACR,cAAc,CAAC;EACf,sBAAsB;GACrB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACD;EACA,OAAO,CAAC,kBAAkB;EAC1B,MAAM;CACP,CYKCC;CX/BY,WAAW;EACvB,MAAM;EACN,MAAM;EACN,OAAO;EACP,aAAa;EACb,UAAU;EACV,QAAQ;EACR,cAAc,CAAC;EACf,sBAAsB;GACrB;GACA;GACA;GACA;GACA;EACD;EACA,OAAO,CAAC,eAAe;EACvB,MAAM;CACP,CWeCC;CVhCY,WAAW;EACvB,MAAM;EACN,MAAM;EACN,OAAO;EACP,aAAa;EACb,UAAU;EACV,QAAQ;EACR,cAAc,CAAC;EACf,sBAAsB;GACrB;GACA;GACA;GACA;GACA;GACA;EACD;EACA,OAAO,CAAC,aAAa;EACrB,MAAM;CACP,CUeCC;CTjCY,WAAW;EACvB,MAAM;EACN,MAAM;EACN,OAAO;EACP,aAAa;EACb,UAAU;EACV,QAAQ;EACR,QAAQ;EACR,cAAc,CAAC;EACf,sBAAsB;GACrB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACD;EACA,OAAO,CAAC,oBAAoB;EAC5B,MAAM;CACP,CSaC;CRlCY,WAAW;EACvB,MAAM;EACN,MAAM;EACN,OAAO;EACP,aAAa;EACb,UAAU;EACV,QAAQ;EACR,QAAQ;EACR,cAAc,CAAC,uBAAuB;EACtC,sBAAsB;GACrB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACD;EACA,OAAO,CAAC,SAAS;EACjB,MAAM;CACP,CQUCC;CPnCY,WAAW;EACvB,MAAM;EACN,MAAM;EACN,OAAO;EACP,aAAa;EACb,UAAU;EACV,QAAQ;EACR,cAAc,CAAC;EACf,sBAAsB;GACrB;GACA;GACA;GACA;EACD;EACA,OAAO,CAAC,eAAe;EACvB,MAAM;CACP,COoBCC;CNpCY,WAAW;EACvB,MAAM;EACN,MAAM;EACN,OAAO;EACP,aAAa;EACb,UAAU;EACV,QAAQ;EACR,cAAc,CAAC;EACf,sBAAsB;GACrB;GACA;GACA;GACA;GACA;EACD;EACA,OAAO,CAAC,qBAAqB;EAC7B,MAAM;CACP,CMoBCC;CLrCY,WAAW;EACvB,MAAM;EACN,MAAM;EACN,OAAO;EACP,aAAa;EACb,UAAU;EACV,QAAQ;EACR,cAAc,CAAC;EACf,sBAAsB;GACrB;GACA;GACA;GACA;GACA;GACA;GACA;EACD;EACA,OAAO,CAAC,WAAW;EACnB,MAAM;CACP,CKmBCC;CJtCY,WAAW;EACvB,MAAM;EACN,MAAM;EACN,OAAO;EACP,aAAa;EACb,UAAU;EACV,QAAQ;EACR,cAAc,CAAC;EACf,sBAAsB;GACrB;GACA;GACA;GACA;EACD;EACA,OAAO,CAAC,gBAAgB;EACxB,MAAM;CACP,CIuBCC;CHvCY,WAAW;EACvB,MAAM;EACN,MAAM;EACN,OAAO;EACP,aAAa;EACb,UAAU;EACV,QAAQ;EACR,cAAc,CAAC;EACf,sBAAsB;GACrB;GACA;GACA;GACA;GACA;EACD;EACA,OAAO,CAAC,aAAa;EACrB,MAAM;CACP,CGuBCC;CFxCY,WAAW;EACvB,MAAM;EACN,MAAM;EACN,OAAO;EACP,aAAa;EACb,UAAU;EACV,QAAQ;EACR,cAAc,CAAC;EACf,sBAAsB;GACrB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACD;EACA,OAAO,CAAC,cAAc;EACtB,MAAM;CACP,CEmBCC;CDzCY,WAAW;EACvB,MAAM;EACN,MAAM;EACN,OAAO;EACP,aAAa;EACb,UAAU;EACV,QAAQ;EACR,cAAc,CAAC;EACf,sBAAsB;GACrB;GACA;GACA;GACA;GACA;GACA;EACD;EACA,OAAO,CAAC,YAAY;EACpB,MAAM;CACP,CCwBCC;AACD;;;;;;;;;;;;;;AC4CA,MAAM,iBAAiB;CACtBC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;CACAC;AACD;;;;;;;;;;AC7IA,MAAM,OA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"}